AVAudioPlayer прерывается с перебоями - PullRequest
2 голосов
/ 09 января 2012

У меня есть приложение, которое интенсивно использует аудио. Я использую AVAudioPlayers, чтобы упростить задачу.

Время от времени я замечал сбои при использовании плееров, обычно когда я звоню [player play]. Трассировка стека выглядит примерно так:

EXC_BAD_ACCESS
#0  0x32d531e6 in memmove$VARIANT$CortexA8 ()
#1  0x351056dc in Cached_DataSource::ReadFromHeaderCache ()
#2  0x351052a4 in Cached_DataSource::ReadBytes ()
#3  0x350ba47c in AudioFileObject::ReadBytes ()
#4  0x35104562 in AudioFileObject::ReadPacketDataVBR ()
#5  0x35102c70 in AudioFileObject::ReadPacketData ()
#6  0x351020b2 in AudioFileReadPacketData ()
#7  0x36bad1b8 in AudioPlayerAQOutputCallbackCore ()
#8  0x36bad7a4 in prepareToPlayQueue ()
#9  0x36bad954 in playQueue ()
#10 0x36bac27e in -[AVAudioPlayer play] ()

У меня установлены точки останова при каждом вызове dealloc, поэтому я знаю, что не случайно освобождаю игрока, делегата или подобное.

Игроки иногда останавливаются до того, как они воспроизводят свой полный звук, поэтому я всегда делаю вызов [player setCurrentTime: 0] перед игрой. Я не уверен, может ли это вызвать негативные побочные эффекты.

Очевидно, аудио-очередь пытается получить доступ к недопустимой памяти, но судя по тому, что память живет в коде файлового кэша, находится далеко внизу, поэтому я не вижу, как что-то, что я делаю, повлияет на это. Все файлы, которые я играю, включены в основной комплект как ресурсы.

Я создал репродукцию, которая надежно воспроизводит ее в симуляторе 4.1 и на моем устройстве 5.0.1. Это может занять некоторое время и сотни вызовов setCurrentTime, воспроизвести и остановить до его сбоя.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...