有没有人能够在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();
}
答案 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();