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