用于Flanger效果的Java正弦振荡器

时间:2012-02-26 18:00:29

标签: java audio signals wave sin

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

函数返回的值应该在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 个答案:

答案 0 :(得分:1)

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

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

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