如何在AS3中产生正弦波而不需要点击



我已经开始使用声音来合成音频,我不知道为什么我在声音中得到那些嘈杂的点击声音?

My loops is:

for(i in 0...2048)
{
var phase:Float = position / 44100.0 * Math.PI * 2;
position+=1;
sample = Math.sin(phase * v);   // where v varies between 200 to 400
event.data.writeFloat(sample); // left
event.data.writeFloat(sample); // right
}

任何想法?

编辑

我需要做的是在循环内插入频率:

var phaserad:Float= 2*Math.PI/44100;
var delta:Float = current_v - new_v;
var p:Int= 2048;
for(i in 0...2048)
{
p--;
v = new_v + delta * (p / 2048); // v will interpolate from current_v to new_v
position += v * phaserad;
sample = Math.sin(position);    
event.data.writeFloat(sample); // left
event.data.writeFloat(sample); // right
}
current_v = new_v;

但是,我什么也听不见,我试了另一种方法:

var delta:Float = current_v - new_v;
var p:Int= 2048;
for(i in 0...2048)
{
var phase:Float = position / 44100.0 * Math.PI * 2;
position+=1;
p--;
v = new_v + delta * (p / 2048); // v will interpolate from current_v to new_v
sample = Math.sin(phase * v);   // where v varies between 200 to 400
event.data.writeFloat(sample); // left
event.data.writeFloat(sample); // right
}

但是,频率会继续上升,它不会停止在预期的new_v

您的波发电机设置正确,但保存position的方法要求您的v保持不变,position保持不变。考虑到您对v的描述,您可以在播放过程中以某种方式更改它,但是更改v会导致正弦形式的中断。因此,不是从头开始重新计算position,您应该根据v累积相位并添加电流移位以接收不间断波形。

const phaserad:Number=2*Math.PI/44100;
for(var i:int=0;i<2048;i++)
{
    position+=v*phaserad; // requires this var to be "Number" type
    sample = Math.sin(position);   // where v varies between 200 to 400
    event.data.writeFloat(sample); // left
    event.data.writeFloat(sample); // right
}

如果你想要一个连续的正弦波,你的相位需要从0 -> 360 -> 0 -> 360度等等

相关内容

  • 没有找到相关文章

最新更新