用于镶边效果的 Java 正弦振荡器
Posted
技术标签:
【中文标题】用于镶边效果的 Java 正弦振荡器【英文标题】:Java Sine Oscillator for a Flanger effect 【发布时间】:2012-02-26 18:00:29 【问题描述】:对于课程作业,我需要创建一个正弦振荡器来改变播放声音回声的延迟时间(镶边)。这个振荡器需要有一个可调节的频率。
函数返回的值应该在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】:正弦振荡器的一般表达式为:
y(t) = sin(2*pi*f*t)
其中f
是以Hz 为单位的频率,t
是以秒为单位的时间。
【讨论】:
感谢 Oli,您能看看我在更新中发布的功能吗?我需要一些能够在我应用其他效果时连续产生振荡器值的东西,但我认为这并不能完全做到……您是否只需检查每次更新时经过的时间即可获得t
?以上是关于用于镶边效果的 Java 正弦振荡器的主要内容,如果未能解决你的问题,请参考以下文章