如何解决AVAudioPlayer 播放问题,有两种声音作为回声
我有一个单独的视图控制器,其中包含一些音频消息(带有 mp3 文件的 URL)。这是我用来开始播放消息的代码:
- (void)playAudioMsg
{
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategorySoloAmbient error: nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://blahblahblah.mp3"]];
NSData *data = [NSData dataWithContentsOfURL:URL];
audioPlayer = [[AVAudioPlayer alloc] initWithData:data error:nil];
audioPlayer.numberOfLoops = 0;
audioPlayer.delegate=self;
[audioPlayer play];
}
我第一次打开这个视图控制器并点击消息播放时,它播放得很好。
然后我关闭了一个视图控制器。
然后我再次打开它并单击相同的音频消息。发生的事情就像创建了两个独立的 AVAudioPlayers - 其中一个立即开始播放音频,另一个延迟一秒(听起来第一条消息播放带有回声。
最有趣的是,当我关闭视图控制器时,一条消息停止播放,另一条消息继续在后台播放,即使在关闭视图控制器时,我调用了 [audioPlayer stop]
。
有人可以帮我吗?
解决方法
我得到了解决方案。
问题来自这样一个事实,即当我调用 -(void) playAudioMsg {...}
时,我使用了这个:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playAudioMsg) name:@"playAudioMsg" object:nil];
... 在 - (void) viewDidLoad {...}
中声明。但是后来我完全忘记在离开 ViewController 时移除那个观察者:
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"playAudioMsg" object:nil];
}
在不移除观察者然后返回同一页面的情况下,它为同一个观察者设置了重复项,因此方法 playAudioMsg
被调用两次。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。