一、什么是音频掌柜即AVAudioSession。
我的理解:它是专门用来管理音频资源的,是一个跨进程的单例,只能被当前激活该单例的进程占用。
二、使用场景:
录音、播放音乐、耳机插拔、闹铃响,别的app激活。。。都需要管理该单例,详细介绍可以看下这篇文章写得还是很详细的 iOS音频掌柜-- AVAudioSession - 简书
三、注意点:
1、手机麦克风边录制边播放,无额外的蓝牙协议。(插耳机只用A2DP协议的也同样适用)
该情况需要设置的分类为AVAudioSessionCategoryPlayAndRecord,会打断正在播放音乐的别的app。那么如何混进音乐呢?设置AVAudioSessionCategoryOptionMixWithOthers,仍然没有作用,我测试了下面三个场景,这三个场景都设置了AVAudioSessionCategoryOptionMixWithOthers。
1.1、先用别的app播放音乐,再录制。
这种场景下会先打断别的app音乐播放,无法混进音乐。
1.2、先录制,再用别的app播放音乐。
这种情况下由于自身app设置了允许混音所以可以混进别的音乐,如果不设置AVAudioSessionCategoryOptionMixWithOthers,仍然混不进音乐。
1.3、自己app边录制边播放。
这种情况下可以混进别的音乐。
注意:设置AVAudioSessionCategoryPlayAndRecord同时播放音乐和录音的时候,播放的音量特别小,会把扬声器关闭。你需要重新设置扬声器,代码如下:
AVAudioSession *session = [AVAudioSession sharedInstance]; [sessionoverrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error];
2、经过MFI认证的蓝牙录制
该情况下只需要设置分类为AVAudioSessionCategoryPlayback和AVAudioSessionCategoryOptionMixWithOthers,就不会打断别的app里面的音乐播放。如果当前app要播放音乐,还要录音,那么这时候需要打断别的app里面的音乐播放,这样就不需要设置AVAudioSessionCategoryOptionMixWithOthers,只设置AVAudioSessionCategoryPlayback。