我正在尝试将声音对象的byteArray转换为带浮点数的数组。声音对象播放精细&在全长,但我从它得到的浮点数被切断(但听起来是正确的),所以我必须在转换中做错了什么:
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());
}
这就是我得到的:
alt text http://i48.tinypic.com/17wmls.jpg
前两个通道是原始声音对象。 较低的两个是浮点阵数据。我将它们对齐,这样你就可以看到开头被切断,显然长度不正确。
感谢您的回答...
答案 0 :(得分:1)
var numTotalSamples:Number = int(s.length * 44.1); //假设采样率为44.1kHz
然后:
s.extract(bytes,numTotalSamples,0);