Suvitruf
@Suvitruf
Java/node.js/game-dev

Декодирование mp3 в PCM на Android?

День добрый. Столкнулись с одной проблемой при разработке игры.


Изначально игра разрабатывалась под iOS, поэтому движок игровой на C++, для звуков OpenAL. Под iOS не было проблем с декодированием музыки. Под Android всё посложнее…


Сразу отмечу:

1) Нет, нельзя перевести mp3 в wav, так как будет занимать много места.

2) Нет, не получится играть звуки посредством Java, вызывая методы из C++, так как будут задержки и т.д.


Как известно, в 16 версии API появился MediaCodec. Можно его использовать для новых устройств, но нам нужна поддержка и более старых (3.0+).


Пробовал использовать JLayer. Но декодирование наших файлов звуковых занимает 30-50 секунд, что абсолютно неприемлемо.


Есть ещё Libmad и mpg123. Они возможно будут побыстрее.

Ещё, насколько я знаю, OpenSL поддерживает декодирование mp3 с 4.0.

Так что, два вопроса:

1) Если кто-то работал с этими библиотеками, может подскажите, какую лучше выбрать/какая быстрее?

2) Все C++ либы работают с FILE хэндлером, а, как известно, все ресурсы из assets запакованы в .apk, так что прочитать их можно только, используя AAssetManager. Что с этими можно поделать? В случае с .ogg Vorbis позволяет самому методы для чтения файла определить, поэтому проблем с AAssetManager не было. Похожего в Libmad и mpg123 не увидел.
  • Вопрос задан
  • 3752 просмотра
Пригласить эксперта
Ответы на вопрос 1
может быть это Ваш случай: stackoverflow.com/questions/10770979/is-it-possible-to-get-a-byte-buffer-directly-from-an-audio-asset-in-opensl-es-f/18863797#18863797

У меня у самого OpenSL прекрасно играет mp3, но там есть проблемы с задержками, которые в моем случае не критичны.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы