我自己没有这样做,但我会按照这个过程进行:
- 加载 MP3 文件
- 解码 MP3 文件
- 提取您需要的位
- 对提取的数据进行编码
以下所有内容均被视为未经测试的伪代码。
第 1 步:加载 MP3 文件
我假设您已经有办法将压缩的 MP3 文件加载到内存中。如果没有,可以找到有关此步骤的大量信息。
第 2 步:解码 MP3 文件
Sound 类公开了 loadCompressedDataFromByteArray (docs) 方法,该方法将压缩的 MP3 文件作为 ByteArray 并将其解码为原始声音数据。
例子:
var mySound:Sound = new Sound();
mySound.loadCompressedDataFromByteArray(myMP3Data, myMP3Data.length);
第 3 步:提取一部分声音
使用extract (docs) 方法(如您问题中的链接中所述),您可以从Sound 对象中提取原始声音数据。您传入要填充数据的ByteArray 对象,指定您希望“剪切”的位置以及要提取的剪辑的长度。
使用每秒 44100 个样本(左 + 右通道)存储数据,下面的计算基于此。我可能对此有误,所以如果它没有按预期工作,请进一步查看。
例子:
var sampleFrequency:int = 44100;
var startTimeInSeconds:Number = 30.0;
var lengthInSeconds:Number = 15.0;
// Calculate the position to start the clip (in samples)
var startPosition:Number = Math.round(startTimeInSeconds * sampleFrequency);
// Calculate the number of samples to extract
var samplesLength:Number = Math.round(lengthInSeconds * sampleFrequency);
var extractedBytes:ByteArray = new ByteArray();
mySound.extract(extractedBytes, samplesLength, startPosition);
第 4 步:将提取的声音编码回 MP3
现在您已将声音数据作为 ByteArray,有几种方法可以将其编码回 MP3 格式。 This previous StackOverflow answer 提到了 this library,但可能还有其他库更适合您的任务。