2014-01-09 54 views
1

我正在一個項目中工作,我需要將一些mp3樣本混合到一個ogg文件中作爲輸出。使用AS3將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

找到了答案大約在提取方法是如何工作的,以及如何音頻數據被存儲在閃存這篇大文章: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類的長度屬性返回以毫秒爲單位的長度,所以我們把它轉換成秒,然後乘以採樣率,這始終是在閃光燈44.1。