对于课程练习,我需要创建一个正弦振荡器来改变回放声音回声(镶边)的延迟时间。该振荡器需要具有可调节的频率。
函数返回的值应该在 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);
}
}
这看起来对吗?