Android самый быстрый способ декодировать данные MP3 в PCM

В моем приложении мне нужно декодировать mp3-файл в буфер PCM. это много данных, поэтому я уменьшаю частоту до 22050 Гц, когда читаю и декодирую.

на данный момент я использую javazoom jlayer decoder http://www.javazoom.net/javalayer/javalayer.html

он работает, но медленно, 30 секунд, чтобы декодировать 3-минутную песню в режиме запуска, стареет в режиме отладки. на моей машине с Windows, используя libmpg, я могу сделать это примерно за 1 секунду.

Есть ли способ, который кто-то знает наверняка, быстрее? я не хочу тратить время на реализацию другого метода, если он не значительно быстрее. Благодарю.

Кстати, в моем приложении мне нужно все это загрузить в буфер PCM в памяти, поэтому меня не интересуют вещи, которые просто воспроизводят mp3-файлы.

2 ответа

JLayer - это преобразование оригинального кода Fraunhoffer mp3 C. К сожалению, человек, который его преобразовал, разбросал по всему коду широкий диапазон ненужных буферных копий, потому что он, вероятно, не очень хорошо понимал, что происходит (не проблема, такие вещи случаются). Тем не менее, в результате получается очень медленный mp3-декодер. В конце концов мы начали удалять все ненужные буферные копии и добавили точный поиск в источник JLayer. Репозиторий и демонстрацию того, как его использовать, можно найти по адресу http://bpmdj.yellowcouch.org/credits.html, раздел JLayer1.0.1. Результат примерно в 2,5 раза быстрее оригинала.

Это момент, когда вы идете Native в Android!

-используйте NDK и найдите быструю библиотеку c / C++ (они примерно в 20 раз быстрее, чем jlayer, например, 9min sogn за 18 секунд)

Есть несколько библиотек, которые могут быть полезны:

http://www.mpg123.de/

www underbit.com/products/mad/

www oracle.com/technetwork/java/javase/download-137625.html (не уверен, что этот поддерживает MP3toPCM)

lame.sourceforge.net/about.php (у этого есть Android-проект с открытым исходным кодом на github, который, я надеюсь, будет очень полезен для вас! https://github.com/intervigilium/liblame)

Другие вопросы по тегам