我正在使用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方法。
我被困住了,不知道出了什么问题。
答案 0 :(得分:3)
即使循环次数设置为1
这就是为什么。此属性的名称和行为有点违反直觉,但如果您已阅读文档,那么很明显它会设置重复次数的数量,而不是播放。来自docs:
的引用值0(默认值)表示播放一次声音。
因此将其设置为0(或者不设置它,零是默认值)并且它只播放音频文件一次:
audioPlayer.numberOfLoops = 0;