Короткая версия: Что лучший способ состоял в том, чтобы закодировать данные в MP3 (и идеально в AAC/Ogg/WMA) в массив Java или ByteBuffer, которым я могу затем управлять?
Я соединяю программу, которая имеет звуковые файлы замедления и ускорения как одну из его функций. Это хорошо работает для файлов WAV, которые являются заголовком плюс точные двоичные данные, который должен быть отправлен динамику, и теперь я должен реализовать его для MP3 (идеально, это также поддерживало бы AAC, Ogg и WMA, но так как это - менее популярные форматы, это не требуется). Android не выставляет интерфейс для декодирования MP3, не играя его, таким образом, я должен создать тот интерфейс.
Три опции представляют себя, хотя я открыт для других:
1) Запишите мой собственный декодер. У меня уже есть функциональный детектор кадра, который я надеялся использовать для опции (3), и теперь должен только должен быть реализовать таблицы декодирования Huffman.
2) Используйте JLayer или эквивалентную библиотеку Java, для обработки декодирования. Я не совсем ясен на том, что разветвления лицензии здесь.
3) Соединитесь с libmedia library/MediaPlayerService. Это - то, что делает SoundPool, и объем использования того сервиса заставляет меня полагать что, в то время как это официально нестабильно, что реализация не идет никуда. Это означает писать код JNI для соединения с сервисом, но я нахожу, что это - глубокая кроличья нора. В поверхности я испытываю затруднения из-за SP <> шаблон.
Я сделал это с libmad и NDK. JLayer - это способ замедлить, а медиа-фреймворк - движущаяся цель. Вы можете найти информацию и исходный код по адресу http://apistudios.com/hosted/marzec/badlogic/wordpress/?p=231