Мой вывод об использовании файлов ресурсов .WAV с LG Optimus F3 под управлением Jellybean 4.1.2 заключается в том, что его библиотеке MediaPlayer не удается декодировать:
- Файлы с битрейтом более 256 Кбит / с и
- Файлы с длительностью менее 0,075 секунд
Симптом в logcat в любом случае:
V/SoundPool﹕ load: fd=49, offset=123932, length=536, priority=1
V/SoundPool﹕ create sampleID=3, fd=50, offset=536, length=123932
V/SoundPool﹕ doLoad: loading sample sampleID=3
V/SoundPool﹕ Start decode
V/MediaPlayer﹕ decode(50, 123932, 536)
V/SoundPool﹕ close(50)
E/SoundPool﹕ Unable to load sample: (null)
Скореечем генерация фатального исключения, вышеупомянутая ошибка заставляет SoundPool позже пытаться использовать эти «нулевые» звуки, что, в свою очередь, может привести к блокировке телефона и / или потере кадров. Снижение битрейта и использование эффекта Audacity «добавить тишину» для увеличения времени моих звуковых файлов решило эту проблему.
В отличие от приведенного выше симптома,успешная загрузка SoundPool выглядит в logcat следующим образом:
V/SoundPool﹕ load: fd=55, offset=765700, length=3534, priority=1
V/SoundPool﹕ create sampleID=7, fd=56, offset=3534, length=765700
V/SoundPool﹕ doLoad: loading sample sampleID=7
V/SoundPool﹕ Start decode
V/MediaPlayer﹕ decode(56, 765700, 3534)
V/SoundPool﹕ close(56)
V/SoundPool﹕ pointer = 0x5f464000, size = 6976, sampleRate = 8000, numChannels = 2
Если вы загружаете несколько звуков (что и является целью SoundPool), запишите значения sampleID
, так как они сообщают, какой звуковой файл не удалось загрузить,первый загружен был sampleID=1
и так далее.Это помогло мне отличить «плохие» от «хороших» .WAV файлов.
Обратите внимание, что у меня не была эта проблема на нескольких других платформах от LG и Samsung под управлениемAndroid Kitkat, который успешно загружает битрейт и короткие звуковые файлы.