Краткая версия. Каков наилучший способ получить данные, закодированные в MP3 (и, в идеале, в AAC/Ogg/WMA) в массив Java или ByteBuffer, после чего я могу манипулировать?
Я собираю программу, которая замедляется и ускоряется звуковые файлы в качестве одной из его функций. Это отлично работает для файлов WAV, которые представляют собой заголовок плюс точные двоичные данные, которые необходимо отправить в динамик, и теперь мне нужно реализовать его для MP3 (в идеале это также будет поддерживать AAC, Ogg и WMA, но поскольку они менее популярны форматов это не требуется). Android не предоставляет интерфейс для декодирования MP3 без его воспроизведения, поэтому мне нужно создать интерфейс.
Три варианта присутствуют, хотя я открыт для других:
1) Напишите мой собственный декодер. У меня уже есть функциональный детектор кадра что я надеялся использовать для варианта (3), и теперь нужно только реализовать таблицы декодирования Хаффмана.
2) Используйте JLayer или эквивалентную библиотеку Java для обработки декодирования. Я не совсем понимаю, что последствия лицензии здесь.
3) Подключитесь к библиотеке libmedia/MediaPlayerService. Это то, что SoundPool делает, и количество использования этой услуги заставляет меня поверить что, хотя он официально нестабилен, эта реализация не идет в любом месте. Это означает запись кода JNI для подключения к службе, но Я нахожу, что это глубокое отверстие кролика. На поверхности, я возникают проблемы с шаблоном sp < > .