android fastest way to decode mp3 to pcm data

大城市里の小女人 提交于 2020-01-02 06:50:07

问题


in my app i need to decode an mp3 file into a pcm buffer. that's a lot of data so i downsample it to mono 22050Hz as i read and decode it.

at the moment i'm using javazoom jlayer decoder http://www.javazoom.net/javalayer/javalayer.html

its working but its slow, 30secs to decode a 3min song in run mode, ages in debug mode. on my windows machine using libmpg i can do that in about 1 second.

is there a faster way that anyone knows for sure is faster? i don't want to waste time implementing another method if its not significantly faster. thanks.

by the way, in my app, i need the whole thing downloaded to a pcm buffer in memory so i'm not interested in things that simply play mp3 files.


回答1:


This is the moment when you go Native in android!

-use NDK and find a fast c/c++ library (they are like 20x faster than jlayer, for example 9min sogn in 18sec)

-here are some libs that can be usefull:

http://www.mpg123.de/

www underbit.com/products/mad/

www oracle.com/technetwork/java/javase/download-137625.html (not sure does this one supports MP3toPCM)

lame.sourceforge.net/about.php (this one has an android opensource project on github that i hope is going to be very usefull to you! https://github.com/intervigilium/liblame)




回答2:


JLayer is a conversion of the original Fraunhoffer mp3 C code. Sadly the person that converted it, has scattered a wide range of needless buffer copies throughout the code because he probably didn't understand very well what was happening (not a problem, those things happen). Yet, the result is a very slow mp3 decoder. Eventually we started to remove all needless buffer copies and added exact seekability to the JLayer source. The repository and a demo on how to use it can be found at http://bpmdj.yellowcouch.org/credits.html, section JLayer1.0.1. The result is about 2.5 times faster than the original.



来源:https://stackoverflow.com/questions/15741701/android-fastest-way-to-decode-mp3-to-pcm-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!