我一直在搜索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?
答案 0 :(得分:0)
你是正确的,44kHz是默认值。但是,您可以在Flash Professional中更改此设置(我有CS5)。
在您的资料库中,右键单击要更改采样率的声音文件。在“选项”选项卡上,将“压缩”从“默认”更改为另一种格式(mp3没有采样率选项,但其他格式选项。)您可以在此处更改采样率。单击“确定”保存。
至于代码内方法,我不知道是否有办法。如果其他人知道如何在代码中执行此操作,请发布。