2010-03-04 28 views
3

我试图将一个声音对象的byteArray转换为一个浮点数组。 Sound对象播放全长度回罚款&,但浮动阵列我从它那里得到被切断(但听起来正确的),所以我必须做一些错误的转换:原始声音字节数组浮点数组

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

顶部的两个通道的原始声音对象。 下面两个是float数组数据。我把它们对齐,这样你就可以看到开始被切断,显然长度不正确。

感谢您的任何答案...

回答

1

确定有两个问题:

  1. mp3文件我是进口在某种程度上损坏,导致一开始就被切断
  2. 长度我定义为提取物是不正确的,要找到完整的音长使用

VAR numTotalSamples:数= INT(S。长度* 44.1); //假设44.1kHz的采样率

然后:

s.extract(字节,numTotalSamples,0);

+0

使用此s.extract(bytes,numTotalSamples,0)提取声音时;在未能执行此方法的fms控制台上引发错误。 – 2012-05-24 03:54:14