第二次播放文件时调用AVAudioPlayer audioPlayerDidFinishPlaying

时间:2012-12-29 08:52:13

标签: ios audio avaudioplayer

我正在使用AVAudioPlayer类来播放音频,但问题是当我播放音频时,当文件播放完毕后,我没有收到audioPlayerDidFinishPlaying中的回调,即使循环次数设置为1,文件也会再次启动

这是代码。

·H

@interface AudioController : NSObject <AVAudioPlayerDelegate>

-(void) playBigGameTheme{
-(void) playMusic:(NSString*) fileName isLooping: (BOOL) isLooping;
@end

的.m

@implementation AudioController{

    AVAudioPlayer *audioPlayer;
}

-(void) playMusic:(NSString*) fileName isLooping: (BOOL) isLooping{

    int loop = 1;
    if(isLooping){
        loop = -1;
    }

    [audioPlayer stop];
    NSURL* soundUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:fileName  ofType:@"mp3"]];
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:nil];
    audioPlayer.numberOfLoops = loop;
    [audioPlayer setDelegate:self];
    NSLog(@"===Number of loops : %d", audioPlayer.numberOfLoops);    
    [audioPlayer play];
}

- (void) audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    NSLog(@"HERE");
}

-(void) playBigGameTheme{
    [self playMusic:BGAME_MAIN_MUSIC_FILE_NAME isLooping:NO];
}
@end

当我拨打playBigGameTheme时,音频开始正常播放。但是当声音结束并且音频第二次结束时它会重新启动,然后只调用audioPlayerDidFinishPlaying方法。

我被困住了,不知道出了什么问题。

1 个答案:

答案 0 :(得分:3)

  

即使循环次数设置为1

这就是为什么。此属性的名称和行为有点违反直觉,但如果您已阅读文档,那么很明显它会设置重复次数的数量,而不是播放。来自docs

的引用
  

值0(默认值)表示播放一次声音。

因此将其设置为0(或者不设置它,零是默认值)并且它只播放音频文件一次:

audioPlayer.numberOfLoops = 0;