对于课程练习,我需要创建一个正弦振荡器来改变播放声音回声(镶边)的延迟时间。该振荡器需要具有可调频率。
函数返回的值应该在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);
}
}
这看起来是对的吗?
答案 0 :(得分:1)
正弦振荡器的一般表达式是:
y(t) = sin(2*pi*f*t)
其中f
是以Hz为单位的频率,t
是以秒为单位的时间。