我已经开始使用声音来合成音频,我不知道为什么我会在声音中听到那些嘈杂的咔嗒声?
我的循环是:
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
答案 0 :(得分:0)
如果你想要一个连续的正弦波,你的相位需要从0 - >; 360 - > 0 - > 360度等。
答案 1 :(得分:0)
您的wave生成器设置正确,但保存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
}