我正在尝试将声音对象的 byteArray 转换为带有 float 的数组。声音对象可以很好地全长播放,但是我从中获得的 float 组被切断(但听起来是正确的),所以我在转换中一定做错了什么:
var s:Sound = mySound;
s.play(); // plays fine
var bytes:ByteArray = new ByteArray();
bytes.endian = Endian.LITTLE_ENDIAN;
s.extract(bytes, s.bytesTotal, 0);
var leftChannel:Array = new Array();
var rightChannel:Array = new Array();
bytes.position = 0;
while (bytes.bytesAvailable)
{
leftChannel.push(bytes.readFloat());
rightChannel.push(bytes.readFloat());
}
这就是我得到的:
顶部的两个 channel 是原始声音对象。 下面两个是 float 组数据。我将它们对齐,这样您就可以看到开头被切断,并且显然长度不正确。
感谢您的回答...
最佳答案
好吧,有两个问题:
- 我导入的 mp3 文件因某种原因损坏,导致开头部分被切断
- 我定义的提取长度不正确,要查找完整的声音长度,请使用
var numTotalSamples:Number = int(s.length * 44.1); //assuming 44.1kHz sample rate
然后:
s.extract(bytes, numTotalSamples, 0);
关于arrays - 原始声音 byteArray 到 float Array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2380849/