用于镶边效果的 Java 正弦振荡器

Posted

技术标签:

【中文标题】用于镶边效果的 Java 正弦振荡器【英文标题】:Java Sine Oscillator for a Flanger effect 【发布时间】:2012-02-26 18:00:29 【问题描述】:

对于课程作业,我需要创建一个正弦振荡器来改变播放声音回声的延迟时间(镶边)。这个振荡器需要有一个可调节的频率。

函数返回的值应该在1到-1之间,这是我用这个函数实现的:

public void oscillateNumber()
    for (int i = 0; i < 200; i++)
            oscResult = Math.sin((Number1* Math.PI)/180.0);
        updateNumber();
    

通过让 Number1 在 -180 和 180 之间变化(在此处找到此解决方案:How to use a Sine / Cosine wave to return an oscillating number)

我怎样才能在这个振荡器中加入一个频率?频率需要在0到5Hz之间可调...

我对这种材料完全陌生,所以我没有完全掌握它的机制,我发现的另一个功能是

public void oscillateNumber3()
    for (int i = 0; i < 400; i++)
        oscResult = (float)Math.sin( angle ); 
        angle += (float)(2*Math.PI) * frequency / 44100f;
        java.lang.System.out.println(oscResult);
    

如果我将此值添加到延迟中,它会让我的效果更相似,但我不确定它实际上是否正确......

任何指向此的指针将不胜感激。

更新

好的,所以按照 Oli 的指示,我想出了这个函数,用于使用振荡器产生的数字连续调制延迟,但我不太确定循环:

public void oscillatorNumber(int frequency, int sampleRate)
    for (int t = 0; t < (sampleRate * frequency); t++)
        oscResult = (float)Math.sin( angle ); 
        angle += (float)(2*Math.PI) * 2 * (t / 44100); // sin(2*pi* f  *(t/Fs))
        java.lang.System.out.println(oscResult);
    

这看起来对吗?

【问题讨论】:

【参考方案1】:

正弦振荡器的一般表达式为:

y(t) = sin(2*pi*f*t)

其中f 是以Hz 为单位的频率,t 是以秒为单位的时间。

【讨论】:

感谢 Oli,您能看看我在更新中发布的功能吗?我需要一些能够在我应用其他效果时连续产生振荡器值的东西,但我认为这并不能完全做到……您是否只需检查每次更新时经过的时间即可获得t

以上是关于用于镶边效果的 Java 正弦振荡器的主要内容,如果未能解决你的问题,请参考以下文章

RC振荡电路

html 正弦振荡器

基本正弦波振荡器上的无毛刺频率变化

LM7805的另类的使用方法:构成一个正弦振荡器

javascript 在正弦路径之后的两点之间的振荡

高频电子线路实验手册(全套实验报告册)