我已经开始使用声音来合成音频,我不知道为什么我在声音中得到那些嘈杂的点击声音?
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度等等