Iphone audioPlayerDidFinishPlaying如何知道哪个文件已完成?
我正在使用AVAudioPlayer播放15个音频文件。音频文件需要分5组播放,每组有三个文件。一个集合中的三个文件不会更改。播放布景的顺序可能会改变 我尝试使用while循环进行iPlaying,如下所示:Iphone audioPlayerDidFinishPlaying如何知道哪个文件已完成?,iphone,objective-c,ios,avaudioplayer,Iphone,Objective C,Ios,Avaudioplayer,我正在使用AVAudioPlayer播放15个音频文件。音频文件需要分5组播放,每组有三个文件。一个集合中的三个文件不会更改。播放布景的顺序可能会改变 我尝试使用while循环进行iPlaying,如下所示: while ([backgroundSound isPlaying]) { NSLog(@"First while loop"); } backgroundSoundPath = [[NSBundle mainBundle] pathForResource:@"Set0File1"
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都被锁定
我知道我应该使用:
voidAudioPlayerDifinishPlaying:AVAudioPlayer*玩家成功:BOOLflag
但我不知道AudioPlayerDifinishPlay是如何确切地知道哪个文件已经播放完毕的
-(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
}
}
我认为这可能像-voidanimationDidStop,您可以使用valueForKeyPath来确定哪个文件已播放完毕
是否必须手动跟踪
任何能为我指明正确方向的建议都将不胜感激
谢谢。当AVAudioPlayer调用AudioPlayerIDfinishPlay方法时,它将自身作为参数提供。因此,您应该检查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
}
}
当AVAudioPlayer调用AudioPlayerIDfinishPlay方法时,它将自身作为参数提供。因此,您应该检查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的提及,但忽略了它,认为它与文件名和路径无关。谢谢你的帮助,效果很好。我曾经看到过其他关于url的提及,但忽略了它,认为它与文件名和路径无关。谢谢你的帮助。