Как отладить, почему звук не воспроизводится через AVAudioPlayer? - PullRequest
0 голосов
/ 27 ноября 2009

У меня есть простое приложение для iPhone с несколькими звуками, которые уже воспроизводятся. Однако, в частности, не будет. Блок кода, который я взломал:

NSString *soundPath2 = [[NSBundle mainBundle] pathForResource:@"gameover" ofType:@"wav"];
NSURL *soundFileURL2 = [NSURL fileURLWithPath:soundPath2];
NSError *err;
AVAudioPlayer *sound2 = [[[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL2 error:&err] autorelease];
NSLog(@"Error: %@", [err description]);
NSLog(@"Duration: %f ", [sound2 duration]);
BOOL b = [sound2 play];
NSLog(@"Play Bool: %d", b);

Консоль показывает, что ошибка равна нулю, логическое значение возвращает true, и даже продолжительность правильная! Тем не менее, игра ничего не делает. Если я переключаю «gameover» на другой звук (простой звуковой сигнал), все в порядке.

Хотя было бы замечательно заставить его играть, я также пытаюсь понять, какие условия ошибки и т. Д. Я могу проверить, чтобы 1) знать, что это не удалось, и 2) почему.

Звук вопрос доступен на http://wdr1.com/gameover.wav.

1 Ответ

4 голосов
/ 27 ноября 2009

Проблема в том, что вы не должны автоматически выпускать AVAudioPlayer. Метод воспроизведения происходит асинхронно, и если игрок автоматически освобождается, то ничто не удерживает его, и он просто умрет.

Вы должны освободить свой аудиоплеер, когда проигрыватель закончит воспроизведение в делегате:

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)audioPlayer successfully:(BOOL)flag
...