AVAudioSession配置

语音session配置Category

AVAudioSessionCategoryAmbient
用于非以语音为主的应用,使用这个category的应用会随着静音键和屏幕关闭而静音。
并且不会中止其它应用播放声音,可以和其它自带应用如iPod,safari等同时播放声音。
注意:该Category无法在后台播放声音
AVAudioSessionCategorySoloAmbient
类似于AVAudioSessionCategoryAmbient不同之处在于它会中止其它应用播放声音。
这个category为默认category。
该Category无法在后台播放声音
AVAudioSessionCategoryPlayback
用于以语音为主的应用,使用这个category的应用不会随着静音键和屏幕关闭而静音。
可在后台播放声音
AVAudioSessionCategoryRecord
用于需要录音的应用,设置该category后,除了来电铃声,闹钟或日历提醒之外的其它系统声音都不会被播放。
该Category只提供单纯录音功能。
AVAudioSessionCategoryPlayAndRecord
用于既需要播放声音又需要录音的应用,语音聊天应用(如微信)应该使用这个category。
该Category提供录音和播放功能。
如果你的应用需要用到iPhone上的听筒,该category是你唯一的选择,在该Category下声音的默认出口为听筒(在没有外接设备的情况下)。
注意:并不是一个应用只能使用一个category,程序应该根据实际需要来切换设置不同的category。
举个例子,录音的时候,需要设置为AVAudioSessionCategoryRecord,
当录音结束时,应根据程序需要更改category为AVAudioSessionCategoryAmbient,
AVAudioSessionCategorySoloAmbient或AVAudioSessionCategoryPlayback中的一种。
会话类型 说明 是否要求输入 是否要求输出 是否遵从静音键
AVAudioSessionCategoryAmbient 混音播放,可以与其他音频应用同时播放
AVAudioSessionCategorySoloAmbient 独占播放
AVAudioSessionCategoryPlayback 后台播放,也是独占的
AVAudioSessionCategoryRecord 录音模式,用于录音时使用
AVAudioSessionCategoryPlayAndRecord 播放和录音,此时可以录音也可以播放
AVAudioSessionCategoryAudioProcessing 硬件解码音频,此时不能播放和录制
AVAudioSessionCategoryMultiRoute 多种输入输出,例如可以耳机、USB设备同时播放
配置激活AVAudioSession
- (void)configAudioSession {
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    //设置为播放和录音状态,以便可以在录制完之后播放录音
    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
    [audioSession setActive:YES error:nil];
}
Deactivate AVAudioSession
AVAudioSession *audioSession = [AVAudioSession sharedInstance];  
[audioSession setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&error];  

Audio Route的选择

当你的iPhone接有多个外接音频设备时(耳塞,蓝牙耳机等),AudioSession将遵循last-in wins的原则来选择外接设备,即声音将被导向最后接入的设备。

当没有接入任何音频设备时,一般情况下声音会默认从扬声器出来,但有一个例外的情况:在PlayAndRecord这个category下,听筒会成为默认的输出设备。如果你想要改变这个行为,可以提供MPVolumeView来让用户切换到扬声器,也可通过overrideOutputAudioPort方法来programmingly切换到扬声器,也可以修改category option为AVAudioSessionCategoryOptionDefaultToSpeaker。


PlayandRecord下切换到扬声器

除了让用户手动选择,你也可以通过以下两种方法在程序里进行切换
  1. 修改Category的默认行为:
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:&error];  
  1. OverrideOutputAudioPort
[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error];  

你可能感兴趣的:(AVAudioSession配置)