2013-04-01 39 views
4

在我的應用程序中,我需要將mp3文件解碼爲pcm緩衝區。這是很多的數據,所以我下載到單聲道22050Hz,因爲我讀取和解碼它。android解碼mp3到pcm數據的最快方法

在我使用javazoom jlayer解碼器http://www.javazoom.net/javalayer/javalayer.html

它的工作,但它的速度慢,30secs解碼在運行模式下,在調試模式下千古3分鐘的歌曲的時刻。在我的Windows機器上使用libmpg我可以在1秒鐘左右。

有沒有更快的方式,任何人都知道肯定會更快?如果速度不快,我不想浪費時間實施其他方法。謝謝。

順便說一句,在我的應用程序中,我需要將所有內容下載到內存中的pcm緩衝區,所以我對僅播放mp3文件的事情不感興趣。

回答

0

這是你在android上去Native的時刻!

次使用NDK,並找到一個快速C/C++庫(它們就像20倍比jlayer快,在18秒9分鐘例如鬆恩)

,尤其是圓形的一些庫,可以是有用的:

http://www.mpg123.de/

WWW underbit.com/products/mad/

WWW oracle.com/technetwork/java/javase/download-137625.html(不知道這是否一個支持MP3toPCM)

lame.sourceforge.net/about.php(這個在github上有一個android opensource項目,我希望對你來說非常有用! https://github.com/intervigilium/liblame

0

JLayer是原Fraunhoffer mp3 C代碼的轉換。可悲的是,轉換它的人在整個代碼中散佈了大量不必要的緩衝區副本,因爲他可能不太瞭解發生了什麼(而不是問題,這些事情發生了)。然而,結果是一個非常慢的mp3解碼器。最終我們開始刪除所有不必要的緩衝區副本,並向JLayer源添加精確的可搜索性。有關如何使用它的存儲庫和演示可在http://bpmdj.yellowcouch.org/credits.html的JLayer1.0.1部分找到。結果比原來快大約2.5倍。

+0

演示很糟糕。我只需要將MP3解碼爲PCM。 – NateS