iOS音频开发相关(四)小结

该博客主要围绕iOS音频展开,介绍了音频播放的代理方法,如录音完成、播放完成的调用方法;还提及播放器操作,可接着上次播放时间播放;阐述了耳机插入拔出的通知处理,以及音频自动播放、切换到后台的通知等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、代理方法

AVAudioRecorder录音完成: stop或者超过最大时间限制 会调用下面的方法

- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag;

但是 AVAudioPlayer 播放完成 会调用下面的方法: stop不会调用下面的方法

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag;

播放器操作 AVAudioPlayer

stop 之后 再次调用 play,会继续接着上传的播放时间播放,为了重新开始播放需要设置currentTime0

耳机插入拔出的通知

// 耳机拔出,插入通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioSessionRouteChange:)   name:AVAudioSessionRouteChangeNotification object:nil];

通知处理

#pragma mark - AVAudioSessionRouteChangeNotification
- (void)audioSessionRouteChange:(NSNotification *)noti {
    NSDictionary *interuptionDict = noti.userInfo;
    NSInteger routeChangeReason = [[interuptionDict valueForKey:AVAudioSessionRouteChangeReasonKey] integerValue];
    NSString *description = [interuptionDict valueForKey:AVAudioSessionRouteChangePreviousRouteKey];
    NSLog(@"%ld -- %@", routeChangeReason, description);
    switch (routeChangeReason) {
        case AVAudioSessionRouteChangeReasonNewDeviceAvailable:
        {
            NSLog(@"耳机插入");
        }
            break;
        case AVAudioSessionRouteChangeReasonOldDeviceUnavailable:
        {
            NSLog(@"耳机拔出,暂停播放操作");
            [self pauseAudioPlay];
        }
            break;
        case AVAudioSessionRouteChangeReasonCategoryChange:
        {
            // called at start - also when other audio wants to play
            NSLog(@"AVAudioSessionRouteChangeReasonCategoryChange");
        }
            break;
    }
}

音频播放:

切换到后台会自动暂停音乐播放,再次进入前台,音频会自动播放

切换到后台的通知有:

- `UIApplicationWillResignActiveNotification`:将要进入后台
- `UIApplicationDidEnterBackgroundNotification`: 已经进入后台
  • pause方法在UIApplicationWillResignActiveNotification中调用才会起作用,UIApplicationDidEnterBackgroundNotification调用不起作用
  • stop方法在UIApplicationWillResignActiveNotificationUIApplicationDidEnterBackgroundNotification都会起作用

上拉画出控制面板,app走的是UIApplicationWillResignActiveNotification方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值