Проблема Android 2.3 AudioTrack (время ожидания получения буфера истекло, привязан ли процессор?)

Я пишу приложение для потоковой передачи аудио, которое буферизует фрагменты файла AAC, декодирует эти фрагменты в массивы байтов PCM и записывает аудиоданные PCM в AudioTrack. Иногда я получаю следующую ошибку, когда пытаюсь перейти к другой песне, вызвать AudioTrack.pause() или AudioTrack.flush():

obtainbuffer timed out -- is cpu pegged?

А затем происходит то, что доля секунды звука продолжает воспроизводиться. Я попытался прочитать набор файлов AAC с SD-карты и получил тот же результат. Поведение, которое я ожидаю, заключается в том, что звук немедленно останавливается. кто-нибудь знает, почему это произошло? Интересно, это проблема с задержкой звука в Android 2.3.

редактировать: аудио AAC содержит заголовок ADTS. Заголовок + звуковая полезная нагрузка составляют то, что я называю ADTSFrame. Они подаются на декодер по одному кадру за раз. Результирующий массив байтов PCM, возвращаемый из уровня C в уровень Java, передается в Android AudioTrack API.

редактировать 2: Сегодня я получил свой Nexus 7 (Android 4.1 OS). Загрузил то же приложение на устройство. вообще не было таких проблем.


person Android Noob    schedule 06.09.2012    source источник


Ответы (1)


очень возможно о частоте дискретизации. одно из ваших устройств может поддерживать частоту дискретизации, которую вы использовали, а другое — нет. Пожалуйста, проверь это. У меня была такая же проблема, она была о частоте дискретизации. используйте 44,1 кГц (44100) и попробуйте еще раз, пожалуйста.

person guness    schedule 22.12.2012