使用AS3将MP3数据转换为OGG

时间:2014-01-09 17:49:39

标签: actionscript-3 flash

我正在一个项目中工作,我需要将一些mp3样本混合在一个ogg文件中作为输出。

有点像这个网站的作用:http://naturesoundsfor.me/

在研究时我偶然发现了这个图书馆,这似乎符合我的要求: http://labs.byhook.com/2011/02/22/ogg-vorbis-encoder-decoder-for-flash/

但是,当我编码一个2分钟的mp3文件时,它变成了一个2秒的ogg文件。这是我的代码:

var bytes:ByteArray = new ByteArray();
_sound.extract(bytes, _sound.length); // the sound is fully loaded from mp3 file

_oggManager.addEventListener(OggManagerEvent.ENCODE_COMPLETE, onEncodeComplete);

private function onEncodeComplete(e:OggManagerEvent):void 
{
    _oggManager.removeEventListener(OggManagerEvent.ENCODE_COMPLETE, onEncodeComplete);

    var fileRef:FileReference = new FileReference();
    fileRef.save(_oggManager.encodedBytes, "newFile.ogg");
}

但输出结果只是音频的一部分。我对声音编码和解码并不熟悉,因此必须有一些我遗漏或不理解的东西。

1 个答案:

答案 0 :(得分:1)

在这篇伟大的文章中找到答案,该文章介绍了提取方法的工作原理以及音频数据如何存储在Flash中:http://www.marinbezhanov.com/web-development/14/actionscript-3-sound-extract-demystified-or-how-to-draw-a-waveform-in-flash/

代码的修复程序位于提取部分。必须是这样的:

_sound.extract(bytes, (_sound.length / 1000) * 44100);

Sound类的length属性以毫秒为单位返回长度,因此我们将其转换为秒,然后乘以采样率,闪存中的采样率始终为44.1khz。