0

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

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

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

并且通过让 Number1 在 -180 和 180 之间变化(在此处找到此解决方案:如何使用正弦/余弦波返回振荡数字

我怎样才能将频率合并到这个振荡器中?频率需要在 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);
    }
}

这看起来对吗?

4

1 回答 1

1

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

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

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

于 2012-02-26T18:02:22.267 回答