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

该函数返回的值应该在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之间调整...

我对这种 Material 完全陌生,因此我并不完全掌握这种 Material 的原理,我发现的另一个功能是
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);
    }
}

这看起来正确吗?

最佳答案

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

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

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

关于java - Java Sine振荡器产生镶边效果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9455602/

10-08 20:46