raw sound byteArray to float Array

时间:2010-03-04 16:20:45

标签: flex actionscript audio bytearray

我正在尝试将声音对象的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

前两个通道是原始声音对象。 较低的两个是浮点阵数据。我将它们对齐,这样你就可以看到开头被切断,显然长度不正确。

感谢您的回答...

1 个答案:

答案 0 :(得分:1)

好吧有两个问题:

  1. 我导入的mp3文件有点腐败,导致开始被切断
  2. 我定义为提取的长度不正确,找到完整的声音长度使用
  3.   

    var numTotalSamples:Number = int(s.length * 44.1); //假设采样率为44.1kHz

    然后:

      

    s.extract(bytes,numTotalSamples,0);