以下是Adobe Live Docs SampleDataEvent
课程的摘录。它演示了如何通过将样本推入ByteArray
来创建可听到的正弦波。我挂断的部分是为什么你需要将相同的值推入writeFloat()
方法两次?
var mySound:Sound = new Sound();
function sineWaveGenerator(event:SampleDataEvent):void
{
for ( var c:int=0; c<8192; c++ ) {
event.data.writeFloat( Math.sin((Number(c+event.position)/Math.PI/2))*0.25 );
event.data.writeFloat( Math.sin((Number(c+event.position)/Math.PI/2))*0.25 );
}
}
mySound.addEventListener(SampleDataEvent.SAMPLE_DATA,sineWaveGenerator);
mySound.play();
作为测试,我删除了对writeFloat()的一个调用,并将缓冲区增加到16384个样本(当前的两倍)。这创造了一个可听见的差距,并点击了音频,但没有让我了解为什么。也许你可以......
再次感谢:)
答案 0 :(得分:1)
需要两次写入,因为它是立体声。每个通道都有一个样本。在这种情况下,写入的值是相同的,但是如果您想将声音100%平移到一侧,例如,您可以使用第一个(或第二个)writeFloat写入值,并将0传递给另一个调用