使用Flash播放实时套接字流的PCM原始数据

时间:2011-11-18 12:14:10

标签: flash sockets pcm actionscript-3

我一直在搜索Flash播放RAW PCM音频数据的能力,因为我有RAW PCM音频作为ByteArray,我只是想闪光灯是否能真正播放它,有些文章说是,有些没有请注意,RAW PCM音频来自实时套接字流

到目前为止,我尝试过制作一个空的Sound对象,然后调用它的play方法,然后处理它的SampleDataEvent.SAMPLE_DATA事件并从那里传递字节,下面是一些代码片段:

sound = new Sound();
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, sampleDataHandler);
.... 
pa.readBytes(soundBA, soundBA.length); 
if (soundBA.bytesAvailable >= (8192 * 4))
{
    sound.play(); 
}
....
private function sampleDataHandler(event:SampleDataEvent):void {

    var i:int;
    for (i = 0; i < 8192 && soundBA.bytesAvailable > 0; i++) 
    { 
        var sample:Number = soundBA.readFloat(); 
        event.data.writeFloat(sample); 
        event.data.writeFloat(sample); 
    }
}

通过这样做,我能够在一定的时间间隔内听到静音(几乎所有的噪音),因为你可以看到我有这个检查soundBA.bytesAvailable >= (8192 * 4)所以只有在我有足够的时候才能触发播放方法数据。

所以现在我的问题是,这听起来(我听到的噪音)意味着Flash能够播放PCM音频吗?或者只是意味着它无法播放它,所以只能听到噪音?

=====编辑======

我刚刚发现我正在处理的音频每个样本有16位,因此我通过执行soundBA.bytesAvailable >= (8192 * 2 * channels)调整了一些代码,并且我确保将范围-1的值传递给我的event.data.writeFloat(sample)电话+1,但声音仍然是沙哑的

有没有办法设置Flash声音对象的采样率(Hz)?或者它总是认为你使用的是44100Hz?

1 个答案:

答案 0 :(得分:0)

你是正确的,44kHz是默认值。但是,您可以在Flash Professional中更改此设置(我有CS5)。

在您的资料库中,右键单击要更改采样率的声音文件。在“选项”选项卡上,将“压缩”从“默认”更改为另一种格式(mp3没有采样率选项,但其他格式选项。)您可以在此处更改采样率。单击“确定”保存。

至于代码内方法,我不知道是否有办法。如果其他人知道如何在代码中执行此操作,请发布。