我正在尝试将Sound对象的byteArray转换为具有浮点数的数组。Sound对象可以正常播放&完全播放,但我从它获得的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());
}
这就是我得到的:
最上面的两个通道是原始Sound对象。下面两个是浮点数组数据。我把它们对齐了,这样你就可以看到开头被剪掉了,显然长度是不正确的。
谢谢你的回复。
1条答案
按热度按时间lyfkaqu11#
好的,有两个问题:
1.我正在导入的mp3文件不知何故损坏了,导致开始被切断
1.我定义的提取长度不正确,要找出完整的声音长度请使用
Var number TotalSamples:number=int(s.long*44.1);//假设采样率为44.1 kHz
然后:
S.Extract(Bytes,numTotalSamples,0);