2014-10-09 3 views
1

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

Звук играет хорошо. Мне просто нужно знать, когда он заканчивает игру.

.h

@interface soundController : UIViewController <AVAudioPlayerDelegate> { 

    AVAudioPlayer *audioPlayer; 

} 

- (IBAction) soundButtonClicked; 
- (void) soundDidStop:(NSNotification *)notification; 

.m

- (IBAction) soundButtonClicked { 

    NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/my_sound.mp3", [[NSBundle mainBundle] resourcePath]]]; 
    NSError *error; 
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 
    audioPlayer.numberOfLoops = 0; 


    [[NSNotificationCenter defaultCenter] addObserver:self 
          selector:@selector(soundDidStop:) 
          name:AVPlayerItemDidPlayToEndTimeNotification 
          object:audioPlayer]; 
    [audioPlayer play]; 

} 


- (void) soundDidStop:(NSNotification *)notification { 

    UIAlertView *alert = [[UIAlertView alloc] 
          initWithTitle:@"" 
          message:@"sound stopped" 
          delegate:nil 
          cancelButtonTitle:@"OK" 
          otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 


} 

Любое понимание очень ценится. Благодаря!

ответ

1

AVPlayerItemDidPlayToEndTimeNotification` - это уведомление, доступное AVPlayerItem, которое не является тем, что вы используете в своем коде.

Вы используете AVAudioPlayer, совершенно другой объект с совершенно другим интерфейсом.

И в вашем случае вы можете использовать протокол AVAudioPlayerDelegate. Метод делегата, который вы хотите поймать, - audioPlayerDidFinishPlaying:successfully:.

+0

Эй, спасибо за быстрый ответ. Я попробовал это, но получил предупреждение «AVAudioPlayer» может не отвечать на «currentItem». Я все равно попытался запустить, если это сработает, но, к сожалению, сейчас я получаю SIGABRT. : \ –

+0

Ahhh, я просто понял, что вы используете AVAudioPlayer, а не AVPlayer, с которой действительно работают уведомления. Но даже лучше, с AVAudioPlayer, у вас есть делегированные методы, которые вы можете использовать. –

+0

Спасибо! Это сделал трюк! Я предполагаю, что это очевидно, что я понятия не имею, что я делаю. : P Ты спасатель жизни! –

Смежные вопросы