以下是 Adobe Live Docs SampleDataEvent
的片段类(class)。它演示了如何通过将样本插入 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 个样本(当前的两倍)。这造成了一个可听见的间隙并点击了音频,但并没有让我明白为什么。也许你可以...
再次感谢 :)
最佳答案
它需要两次写入,因为它是立体声的。每个 channel 取一个样本。在这种情况下,写入的值是相同的,但是如果您想将声音 100% 平移到一侧,例如,您可以使用第一个(或第二个)writeFloat 写入值,并将 0 传递给另一个称呼。
关于flash - SampleDataEvent.data.writeFloat() - 为什么调用它两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2970140/