对于类(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/