我在AVAudioPlayer类中遇到了一个奇怪的问题,有时不调用audioPlayerDidFinishPlaying:successfully:回调。开始回放的代码的简化版本如下,
self.player = [[[AVAudioPlayer alloc] initWithContentsOfURL:localFileAudioURL error:&error] autorelease];
self.player.delegate = self;
[player prepareToPlay];
[NSTimer scheduledTimerWithTimeInterval:0.016f target:self selector:@selector(updatePlaybackProgress) userInfo:nil repeats:YES];
[player play];有一个计时器,每16毫秒运行一次,以显示播放进度。每当音频播放结束,并且调用audioPlayerDidFinishPlaying:successfully:回调时,计时器就会失效。回调代码是,
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
[self.progressTimer invalidate];
self.progressTimer = nil;
}然而,偶尔(每20-30次回放一次),这个回调就不会被调用。我添加了断点和日志记录调用,以验证此回调方法是否被调用。
用于回放的numberOfLoops设置为0,因此不会重复。
这是一些额外的信息,如果有帮助的话。正在创建的重复计时器使用当前的播放进度更新UI。它的代码看起来像,
- (void)updatePlaybackProgress {
SoundCell *soundCell = [self soundCellForCurrentlyPlayingSound];
NSTimeInterval progress = player.currentTime / player.duration;
if (progress >= 0) {
soundCell.progress = progress;
}
}有时不调用完成回调,因此计时器不会失效,并且每隔16 ms调用一次。我将player.currentTime和progress的值记录在updatePlaybackProgress方法中,而且回放似乎是一次又一次的循环。currentTime的值从0.0不断增加到1.0,然后返回到0.0并重新开始。然而,音频只在第一次播放,而不是像currentTime所暗示的那样持续播放。
这个问题已经在持续时间为1秒到30秒的声音中发生。
我在这一点上没有任何想法,谷歌和苹果开发者论坛没有任何关系。
发布于 2012-02-08 07:07:40
响应声音播放完成-音频播放Decoding :成功:响应音频解码错误-audioPlayerDecodeErrorDidOccur:错误:处理音频中断- audioPlayerBeginInterruption:- audioPlayerEndInterruption:- audioPlayerEndInterruption:withFlags:
其中一个很可能在播放停止时被调用。您还可以注册NSNotifications以进行音频播放,在您实现的方法中,您只需将音频播放器与本地播放器进行比较,就可以知道这是您感兴趣的事情。
https://stackoverflow.com/questions/9188407
复制相似问题