Декодирование аудиоданных в формате MP3 (и т. Д.) На Android без воспроизведения - PullRequest
12 голосов
/ 25 февраля 2010

Короткая версия: Каков наилучший способ получить данные, закодированные в MP3 (и в идеале в AAC / Ogg / WMA) в массив Java или ByteBuffer, который я могу затем манипулировать?

Я собираю программу, которая замедляет и ускоряет звуковые файлы как одна из его особенностей. Это прекрасно работает для файлов WAV, которые представляют собой заголовок плюс точные двоичные данные, которые необходимо отправить динамик, и теперь мне нужно реализовать его для MP3 (в идеале, это также будет поддерживать AAC, Ogg и WMA, но так как они менее популярны Форматы это не обязательно). Android не выставляет интерфейс декодировать MP3 без воспроизведения, поэтому мне нужно создать это интерфейс.

Три варианта присутствуют, хотя я открыт для других:

1) Написать свой собственный декодер. У меня уже есть функциональный детектор кадров что я надеялся использовать для варианта (3), и теперь нужно только реализовать таблицы декодирования Хаффмана.

2) Используйте JLayer или эквивалентную библиотеку Java для обработки декодирования. Мне не совсем понятно, какие последствия для лицензии здесь.

3) Подключиться к библиотеке libmedia / MediaPlayerService. Это то, что SoundPool делает, и количество использования этого сервиса заставляет меня верить что в то время как это официально нестабильно, эта реализация не идет в любом месте. Это означает написание кода JNI для подключения к службе, но Я обнаружил, что это глубокая кроличья нора. На поверхности я возникли проблемы с шаблоном sp <>.

Ответы [ 2 ]

1 голос
/ 19 сентября 2012

Я не пробовал, но mp3transform - это LGPL.

1 голос
/ 28 февраля 2010

Я сделал это с libmad и NDK. JLayer - это способ замедления, а медиа-среда - движущаяся цель. Вы можете найти информацию и исходный код на http://apistudios.com/hosted/marzec/badlogic/wordpress/?p=231

...