从Sound.extract()获取的数据播放声音

时间:2011-08-01 19:03:51

标签: flash actionscript-3

我正在尝试使用找到的here技术播放声音(通过使用extract()从原始采集的原始声音数据采样来播放声音),区别在于mp3声音嵌入在swf,没有外部装载。这是我的代码:

var soundBytes:ByteArray = new ByteArray();
var mp3sound:Sound = Sound(new Sound1_design());  // this is the embedded sound
mp3sound.extract(soundBytes, int.MAX_VALUE);

soundBytes.position = 0;

var rawSound:Sound = new Sound();
rawSound.addEventListener(SampleDataEvent.SAMPLE_DATA, playbackSampleHandler);
rawSound.play();

function playbackSampleHandler(event:SampleDataEvent):void
{
     for (var i:int = 0; i < 8192 && soundBytes.bytesAvailable > 0; i++) 
     {
        var left:Number = soundBytes.readFloat();
        var right:Number = soundBytes.readFloat();
        event.data.writeFloat(left);
        event.data.writeFloat(right);
     }
}

这在某种程度上起作用,除了产生的声音失真(它有一种金属环)。我做错了什么?

1 个答案:

答案 0 :(得分:1)

我尝试通过mxmlc和Flash CS5进行编译,它运行良好。我在[Embed(source="..")]中使用128kbps和320kbps mp3测试了它。

可能还有一些影响声音输出的其他设置,但很难说。您在SWF中使用的帧速率是否很低?也许某些Flash Player设置很奇怪,就像Lotus在评论中提到的那样。