День добрый. Столкнулись с одной проблемой при разработке игры.
Изначально игра разрабатывалась под 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 не увидел.