Чрезвычайно медленное декодирование OGG на Galaxy Nexus

Я столкнулся с действительно странной проблемой на моем Galaxy Nexus. То, что я пытаюсь сделать, это загрузить 48 образцов OGG в SoundPool в начале моей службы (музыкальное приложение). Файлы по 11-15к каждый. Загрузка кода проста:

for (String note : sm) { // 48 iterations
    int soundId = soundPool.load(getResources().getAssets().openFd(note), 1);
    loadedSoundsMap.put(note, soundId);
}

Я измерил, что на моем Nexus One 2.3.6 я загружаюсь за 1-2 секунды. Но на новом Galaxy Nexus 4.0.2 он загружается за 9 секунд!

Я действительно сомневаюсь, что файловый ввод-вывод занимает так много времени, чтобы прочитать всего 1 МБ, поэтому я думаю, что что-то не так в реализации декомпрессора.

Кто-нибудь может подсказать, в чем может быть причина такой медленной работы?

P. S. Мп3 дает примерно такую ​​же картину.


person EvilDuck    schedule 12.02.2012    source источник


Ответы (2)


Проблема заключается в реализации SoundPool. Звуковое оборудование работает с несжатыми данными - PCM, поэтому, поскольку SoundPool сохраняет загруженными все звуки, оно распаковывает файлы OGG или MP3 в WAV. Чтобы улучшить UX, вы можете запустить поток, который декодирует файлы OGG в WAV при запуске приложения. При запуске плеера, если звук конвертируется - используйте файл WAV, иначе OGG. Вот ссылка на хороший декодер OGG: libvorbis-libogg-android. Имейте в виду, что декодер OGG декодирует в необработанный PCM, поэтому вам нужно добавить заголовок WAV.

На Android L также есть проблема с AwesomePlayer, когда загрузка любого файла в SoundPool занимает очень много времени. Переключение на NuPlayer в настройках разработчика помогает, но это должно быть каким-то образом исправлено командой Android.

person Taras    schedule 27.11.2014

Может ли это быть связано с этим: Galaxy Nexus - неправильный процессор ABI выбирается во время установки

и эта ошибка: http://code.google.com/p/android/issues/detail?id=25321

person Lee    schedule 12.02.2012
comment
с другой стороны, насколько я знаю, у каждого телефона есть встроенные библиотеки, скомпилированные специально для его процессора, потому что, очевидно, вы знаете, на каком устройстве они будут работать, в отличие от APK. - person EvilDuck; 14.02.2012