有谁能够成功使用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();
}

最佳答案

我正在寻找与您相同的东西,但是我已经找到了答案的一部分。
在尝试使用“loadPCMFromByteArray”功能之前,我使用的是as3wavsound lib,它使用了一个名为“sazameki”的音频处理库。最后一个库为您提供了将8位或16位代码转换为Numbers vector 的方法。您只需要获取该 vector 并将其写入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();

希望对您有所帮助。

关于flash - 如何使用loadPCMFromByteArray?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8293004/

10-17 03:02