【问题标题】:AVAudioPlayer play issue with two sounds as echoAVAudioPlayer 播放问题,两种声音作为回声
【发布时间】:2021-06-06 09:43:58
【问题描述】:

我有一个单独的视图控制器,其中包含一些音频消息(带有 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];
}

我第一次打开这个视图控制器并单击要播放的消息时,它播放得很好。

然后我关闭一个视图控制器。

然后我再次打开它并单击相同的音频消息。会发生什么就像创建了两个单独的 AVAudioPlayer - 其中一个立即开始播放音频,另一个延迟一秒(听起来第一条消息带有回声。

最有趣的是,当我关闭视图控制器时,一条消息停止播放,另一条消息继续在后台播放,即使在关闭视图控制器时,我调用 [audioPlayer stop]

谁能帮帮我,好吗?

【问题讨论】:

    标签: ios avaudioplayer


    【解决方案1】:

    我找到了解决方案。

    问题在于,当我打电话给-(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 会被调用两次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多