У меня была такая же проблема с замедлением. Чтобы решить эту проблему, я сначала играю и приостанавливаю звук при первой загрузке на уровне громкости 0 - это работает лучше, чем prepareToPlay, что, по-видимому, приводит к замедлению:
player.volume = 0.0;
[player play];
[player pause];
player.volume = 1.0;
Когда приходит время воспроизвести звук, я просто [игрок играет] ;. Затем в каждом цикле обновления я перебираю все свои активные звуки и ловлю те, которые вот-вот заканчиваются, и перематывает их вместо того, чтобы дать им истечь - это позволяет избежать накладных расходов и замедления запуска звука с нуля. Пример здесь останавливает звуки на 1/15 секунды от конца звука:
for ({each player in active sounds})
{
if ((player.duration - player.currentTime) <= (1.0/15.0))
{
[player pause];
player.currentTime = 0.0;
}
}
Теперь он готов к следующей игре. Кажется, работает нормально!
Обновление: Оказывается, я все еще получал некоторые паузы при первом воспроизведении звука. Я думаю, что игра с нулевой громкостью на самом деле ничего не делала, но я изменил ее, чтобы играть с громкостью 0,0001, а затем сделать паузу - это неслышно, но, похоже, выполняет работу по подготовке звука.