1

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

我的循环是:

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

4

2 回答 2

0

您的波形发生器设置正确,但保存的方法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
}
于 2014-07-04T05:26:39.943 回答
0

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

于 2014-07-03T19:41:17.593 回答