Android MediaPlayer вызывает зависание игры с AudioHardware воспроизведение ПКМ переходит в режим ожидания

Это сложный вопрос :/

Я делаю музыкальную игру для Android в стиле Audiosurf. Все работает отлично, за исключением нескольких секунд до окончания песни (которая воспроизводится с помощью обычного MediaPlayer), музыка сразу останавливается, и вся игра (включая пользовательский интерфейс) зависает на несколько секунд.

Каждый раз, когда это происходит, я вижу ошибку «Воспроизведение AudioHardware pcm переходит в режим ожидания» в logcat.

Поиск в Google привел меня к выводу, что

  • это может быть проблема, связанная с HTC Hero (не может быть воспроизведена на эмуляторе или других устройствах)
  • это сообщение обычно регистрируется, когда поток http недостаточно быстр для MediaPlayer
  • Аудио в Android вообще отстой

Поскольку я уже декодирую mp3 с помощью NDK + libmpg123 для анализа звука, я мог бы просто воспроизвести звук сам (используя очень уродливый интерфейс между кодом NDK C и AudioTrack в Java).

Есть ли исправление / обходной путь для этой ошибки, или мне действительно стоит пойти по этому пути? (У меня осталось мало времени, чтобы завершить этот проект)

Ценю каждый намек!


person Anselm Eickhoff    schedule 27.11.2010    source источник
comment
Текущий обходной путь: затухание песни за 3 секунды до ее окончания и остановка.   -  person Anselm Eickhoff    schedule 28.11.2010


Ответы (1)


Возможно, вы останавливаете музыку, когда все это буферизуют в своем коде C. Поскольку AudioTrack имеет задержку, вам может потребоваться больше времени для его завершения.

Однако мне нужно больше подробностей о вашем коде, чтобы помочь.

person Matthew Willis    schedule 13.03.2011
comment
Думаю, я неправильно понял твой вопрос. Если это происходит только на определенном устройстве, мой ответ, вероятно, не поможет. - person Matthew Willis; 14.03.2011
comment
да, это действительно зависит от устройства - теперь я использую обходной путь (затухание песни за 3 секунды до конца) - person Anselm Eickhoff; 18.03.2011