Эта проблема обнаружена в нескольких других вопросах здесь на SO:
Медленный запуск для AVAudioPlayer при первом воспроизведении звука
Задержка вВоспроизведение звуков с использованием AVAudioPlayer
Я пытался реализовать предложенные исправления, но ни одно из них не решило мою проблему.Мое приложение предоставляет пользователю сетку объектов, к которым нужно прикоснуться, при прикосновении к объекту воспроизводится звук.Это прекрасно работает, за исключением того, что при первом касании задержка составляет ~ 2 секунды.
Чтобы обойти это, я инициализирую свой аудиоплеер с помощью фиктивного файла AIF:
- (void)viewDidLoad{
NSString *soundFile = [Card loadCardSoundPath:@"dummy"];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:
[NSURL fileURLWithPath:soundFile] error:nil];
self.audioPlayer = player;
[audioPlayer setDelegate:self];
[audioPlayer prepareToPlay];
// [audioPlayer play];
[player release];
...
[super viewDidLoad];
}
Затем, когдаПрикосновение к объекту я вызываю:
NSString *soundFile = [Card loadCardSoundPath:name];
if (soundFile != nil){
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:
[NSURL fileURLWithPath:soundFile] error:nil];
self.audioPlayer = player;
[self.audioPlayer setDelegate:self];
[self.audioPlayer prepareToPlay];
[self.audioPlayer play];
[player release];
}
Наблюдаемое мной поведение таково: я наблюдаю задержку звука при щелчке по первому объекту, если я создаю фиктивный аудиоплеер и вызываю prepareToPlay, но не играю.Однако, если я вызываю play на фиктивном аудиоплеере, тогда я не получаю задержку на начальном объекте, но загрузка просмотра задерживается на 2 секунды.
Есть ли способ обойти это?Должен ли я просто создать NSArray из AVAudioPlayers при загрузке и сказать им всем, что нужно подготовиться к игре, а затем просто вызвать play при нажатии на объект?