如何在ActionScript中拆分音频文件

时间:2014-10-26 12:03:06

标签: actionscript-3 flash audio actionscript mp3

我想将一个mp3文件分成几个部分,例如在ActionScript中从0:30到0:45以及从0:45到1:00。

我发现最接近的是this short snippet from documentation。我找不到任何可以帮助我的文章或图书馆。甚至可以实现吗?

提前感谢任何提示。

我想要的例子:mp3cut

1 个答案:

答案 0 :(得分:2)

我自己没有这样做过,但是按照这个过程我会采取的方式:

  1. 加载MP3文件
  2. 解码MP3文件
  3. 提取您需要的位
  4. 对提取的数据进行编码
  5. 以下所有内容都被视为未经测试的伪代码。

    步骤1:加载MP3文件

    我假设您已经有办法将压缩的MP3文件加载到内存中。如果没有,可以找到有关此步骤的大量信息。

    第2步:解码MP3文件

    Sound类公开方法loadCompressedDataFromByteArraydocs),它将压缩的MP3文件作为ByteArray并将其解码为原始声音数据。

    示例:

    var mySound:Sound = new Sound();
    mySound.loadCompressedDataFromByteArray(myMP3Data, myMP3Data.length);
    

    步骤3:提取部分声音

    使用extractdocs)方法(如问题中的链接所述),您可以从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,但可能还有其他图书馆更适合您的任务。