【问题标题】:How does audioPlayerDidFinishPlaying know which file is finished?audioPlayerDidFinishPlaying 如何知道完成了哪个文件?
【发布时间】:2011-03-17 17:49:28
【问题描述】:

我正在使用 AVAudioPlayer 播放 15 个音频文件。音频文件需要以 5 个为一组播放,每组包含三个文件。一组中的三个文件不会更改。套牌的播放顺序可能会改变。

我尝试使用带有 isPlaying 的 while 循环,如下所示:

while ([backgroundSound isPlaying]) {
    NSLog(@"First while loop");
}
backgroundSoundPath = [[NSBundle mainBundle] pathForResource:@"Set0File1" ofType:@"mp3"]; // *Music filename* 
backgroundSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:backgroundSoundPath] error:nil];
[backgroundSound prepareToPlay];
[backgroundSound play];
while ([backgroundSound isPlaying]) {
    NSLog(@"Second while loop");
}
backgroundSoundPath = [[NSBundle mainBundle] pathForResource:@"Set0File2" ofType:@"mp3"]; // *Music filename* 
backgroundSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:backgroundSoundPath] error:nil];
[backgroundSound prepareToPlay];
[backgroundSound play];
while ([backgroundSound isPlaying]) {
    NSLog(@"Third while loop");
} 

我现在意识到这是错误的副作用,即整个 UI 在文件播放期间被锁定。

我知道我应该使用:

  • (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)播放成功:(BOOL)flag

但我不知道 audioPlayerDidFinishPlaying 应该如何确切知道哪个文件已完成播放。

我认为它可能类似于 - (void)animationDidStop,您可以在其中使用 valueForKeyPath 来确定播放完毕的文件。

是否必须手动跟踪?

任何能指引我正确方向的建议将不胜感激。

谢谢。

【问题讨论】:

    标签: iphone objective-c ios avaudioplayer


    【解决方案1】:

    当 AVAudioPlayer 调用 audioPlayerDidFinishPlaying 方法时,它会将自身作为参数提供。因此,您应该检查 URL 以确定刚刚播放完的文件。

    -(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
    {
         if ([player.url isEqual:url1])
         {
             // file which is in url1 stopped playing
         }
         else if ([player.url isEqual:url2])
         {
             // file which is in url2 stopped playing
         }
    }
    

    【讨论】:

    • 效果很好。我看过其他提到 url,但认为它与文件名和路径无关而忽略了它。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 2013-01-11
    • 2012-07-24
    • 1970-01-01
    相关资源
    最近更新 更多