原始声音byte数组到浮点数组

2admgd59  于 2022-09-21  发布在  Apache
关注(0)|答案(1)|浏览(165)

我正在尝试将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对象。下面两个是浮点数组数据。我把它们对齐了,这样你就可以看到开头被剪掉了,显然长度是不正确的。

谢谢你的回复。

lyfkaqu1

lyfkaqu11#

好的,有两个问题:

1.我正在导入的mp3文件不知何故损坏了,导致开始被切断
1.我定义的提取长度不正确,要找出完整的声音长度请使用
Var number TotalSamples:number=int(s.long*44.1);//假设采样率为44.1 kHz

然后:

S.Extract(Bytes,numTotalSamples,0);

相关问题