如何使用loadPCMFromByteArray?

时间:2011-11-28 08:09:25

标签: flash actionscript-3 audio pcm

有没有人能够在Flash 11中成功使用新的Sound方法loadPCMFromByteArray?每当我使用它时,我最终都会听到重复的滴答声。

还有一种方法可以设置该方法的深度(位)吗?似乎这个loadPCMFromByteArray只能理解32位PCM数据。

我找了一些例子,但我找不到工作的例子

这是我的示例代码,请注意我不断向soundBA(ByteArray对象)添加数据并在将其传递给loadPCMFromByteArray方法后清除它,我也只是被迫进行检查(8192 * 4) )因为loadPCMFromByeArray方法似乎只能理解32位音频样本,如何将其设置为读取8位和16位样本?:

if (soundBA.bytesAvailable >= (8192 * 4 * channels))
{ 
    soundPlayer.loadPCMFromByteArray(soundBA, soundBA.bytesAvailable / 4, "float", false, 22050);
    soundChannel = soundPlayer.play();
    soundBA.clear();
}

2 个答案:

答案 0 :(得分:1)

我正在寻找与你相同的东西,但我已经有了部分答案。 在尝试使用“loadPCMFromByteArray”函数之前,我使用as3wavsound lib,它使用名为“sazameki”的音频操作库。最后一个库为您提供了将8位或16位转码为数字向量的方法。您只需要使用该向量并将其写入带有以下内容的ByteArray:

var someByteArray:ByteArray = new ByteArray();
for (....){
  someByteArray.writeFloat(number);
}
然后给它“loadPCMFromByteArray”函数。你应该有一个错误,因为你在ByteArray上的位置不好。所以重置它。 你的最终代码应该是这样的:

var flexSound:Sound = new Sound();
var someByteArray:ByteArray = new ByteArray();
for (....){
    someByteArray.writeFloat(number);
}
someByteArray.position = 0;
flexSound.loadPCMFromByteArray(someByteArray, length);
flexSound.play();

我希望这可以帮到你。

答案 1 :(得分:0)

我无法使用loadPCMFromByteArray它给了我这个错误:

通过静态类型flash.media:Sound的引用调用可能未定义的方法loadPCMFromByteArray。

_output.position =0;
mySound.loadPCMFromByteArray(_output, _output.length);
channel = mySound.play();