Подтвердить что ты не робот

Декодирование кодированных аудиоданных (MP3 и т.д.) На Android без воспроизведения

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

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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

Я не пробовал, но mp3transform является LGPL.