Я не могу на всю жизнь понять, почему я не могу определить, когда мой звук будет играть. Я могу заставить его работать на видео без проблем. Я искал последние два часа, и ни одно из решений, с которыми я столкнулся, похоже, работает.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];
}
Любое понимание очень ценится. Благодаря!
Эй, спасибо за быстрый ответ. Я попробовал это, но получил предупреждение «AVAudioPlayer» может не отвечать на «currentItem». Я все равно попытался запустить, если это сработает, но, к сожалению, сейчас я получаю SIGABRT. : \ –
Ahhh, я просто понял, что вы используете AVAudioPlayer, а не AVPlayer, с которой действительно работают уведомления. Но даже лучше, с AVAudioPlayer, у вас есть делегированные методы, которые вы можете использовать. –
Спасибо! Это сделал трюк! Я предполагаю, что это очевидно, что я понятия не имею, что я делаю. : P Ты спасатель жизни! –