AVAudioSession音频会话(类别选择/音频输出切换)

简介
音频会话是一个Singleton对象,您可以使用它来设置应用程序的音频上下文环境,并向系统表达您的应用程序音频行为的意图。
使用此类可以:

  • 启用或停用应用程式的音讯工作阶段
  • 设置音频会话类别和模式,以便与系统通信如何在您的应用程序中使用音频
  • 配置音频设置,如采样率,I / O缓冲区持续时间和通道数
    处理音频输出更改
  • 响应重要的音频事件,例如更改底层Media Services守护程序的可用性

AVAudioSession使用

AVAudioSession类由AVFoundation框架引入。每个iOS应用都有一个音频会话。这个会话可以被AVAudioSession类的sharedInstance类方法访问。在获得一个AVAudioSession类的实例后,就能通过音频会话单例对象的setCategory:error:方法,来设置iOS应用音频会话类别模式。通过overrideOutputAudioPort:error:方法设置音频会话的overrideOutputAudioPort属性, 或者通过setCategory:withOptions:error:方法来设置音频会话的Audio Route.

NSError *sessionError = nil;
AVAudioSession *audioSession=[AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];

if(sessionError){
    NSLog(@"Error creating session: %@", [sessionError description]);
}else{
    [audioSession setActive:YES error:nil];
}

AVAudioSessionCategory(会话类别的选择)

文章上面说过, 通过音频会话单例对象的setCategory:error:方法,来设置iOS应用语音会话类别和模式。

AVAudioSessionCategoryAmbient 或 kAudioSessionCategory_AmbientSound

用于非以语音为主的应用,使用这个category的应用会随着静音键和屏幕关闭而静音。并且不会中止其它应用播放声音,可以和其它自带应用如iPod,safari等同时播放声音。注意:该Category无法在后台播放声音

AVAudioSessionCategorySoloAmbient 或 kAudioSessionCategory_SoloAmbientSound

类似于AVAudioSessionCategoryAmbient 不同之处在于它会中止其它应用播放声音。 这个category为默认category。该Category无法在后台播放声音

AVAudioSessionCategoryPlayback 或 kAudioSessionCategory_MediaPlayback

用于以语音为主的应用,使用这个category的应用不会随着静音键和屏幕关闭而静音。可在后台播放声音.

AVAudioSessionCategoryRecord 或 kAudioSessionCategory_RecordAudio

用于需要录音的应用,设置该category后,除了来电铃声,闹钟或日历提醒之外的其它系统声音都不会被播放。该Category只提供单纯录音功能。

AVAudioSessionCategoryPlayAndRecord 或 kAudioSessionCategory_PlayAndRecord

用于既需要播放声音又需要录音的应用,语音聊天应用(如微信)应该使用这个category。该Category提供录音和播放功能。如果你的应用需要用到iPhone上的听筒,该category是你唯一的选择,在该Category下声音的默认出口为听筒或者耳机。

AVAudioSessionCategoryAudioProcessing 或 kAudioSessionCategory_AudioProcessing

在不播放或录制音频时使用音频硬件编解码器或信号处理器的类别。例如,在执行离线音频格式转换时。此类别禁用播放(音频输出)和禁用录音(音频输入)。当您的应用处于后台时,音频处理通常不会继续。 但是,当您的应用移至后台时,您可以请求更多时间来完成处理。

注意

并不是一个应用只能使用一个category,程序应该根据实际需要来切换设置不同的category,举个例子,录音的时候,需要设置为AVAudioSessionCategoryRecord,当录音结束时,应根据程序需要更改category为AVAudioSessionCategoryAmbient,AVAudioSessionCategorySoloAmbient或AVAudioSessionCategoryPlayback中的一种。

AudioSession Route 选择

当你的iPhone接有多个外接音频接收设备时(耳机,蓝牙音箱等),AudioSession将遵循last-in wins的原则来选择外接设备,即声音将被导向最后接入的设备。
当没有接入任何音频设备时,一般情况下声音会默认从扬声器出来,但有一个例外的情况:在PlayAndRecord这个category下,听筒会成为默认的音频输出设备。如果你想要改变这个行为,可以提供MPVolumeView来让用户切换到扬声器,也可通过overrideOutputAudioPort方法来programmingly切换到扬声器,也可以修改category option为AVAudioSessionCategoryOptionDefaultToSpeaker。
所以, 他应用在扬声器,听筒,耳机,蓝牙音箱之间的切换。

通过AVAudioSessionPortOverride选择音频输出

通过overrideOutputAudioPort:error:方法和下面两个枚举来设置音频会话的overrideOutputAudioPort属性。

[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:error];

1
AVAudioSessionPortOverrideNone

不要覆盖输出音频端口。使用此选项将音频输出设备返回到当前音频类别的默认状态。

AVAudioSessionPortOverrideSpeaker

覆盖当前输入和输出,并将音频输出设备到内置扬声器和麦克风。仅适用于AVAudioSessionCategoryPlayAndRecord类别。

通过AVAudioSessionCategoryOptions选择音频输出设备

会话的类别和模式一起定义应用程序如何使用音频。通常,在激活会话之前设置类别和模式。您还可以在会话处于活动状态时设置类别或模式,但这会导致立即更改音频输出设备。

[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:&error];
1
AVAudioSessionCategoryOptions 枚举值:

//Eligible Input
AVAudioSessionPortUSBAudio
AVAudioSessionPortHeadsetMic
AVAudioSessionPortBuiltInMic

//Eligible Output
AVAudioSessionPortUSBAudio
AVAudioSessionPortLineOut
AVAudioSessionPortHeadphones
AVAudioSessionPortHDMI
AVAudioSessionPortBuiltInSpeaker
overrideOutputAudioPort:设置和AVAudioSessionPortOverride设置的对比

共同点

AVAudioSessionPortOverrideSpeaker和AVAudioSessionCategoryOptionDefaultToSpeaker的使用仅适用于AVAudioSessionCategoryPlayAndRecord类别。

区别

通过调用overrideOutputAudioPort:设置AVAudioSessionPortOverride比使用类别选项AVAudioSessionCategoryOptionDefaultToSpeaker更加短暂。

调用overrideOutputAudioPort:并将AVAudioSessionPortOverride设置为AVAudioSessionPortOverrideSpeaker是临时覆盖要向扬声器播放的输出的一种方法。任何音频输出改变或中断将导致音频被路由回到其正常输出设备,遵循最后入胜的规则。

相反,AVAudioSessionCategoryOptionDefaultToSpeaker修改AVAudioSessionCategoryPlayAndRecord类别的路由行为,使得如果没有使用诸如耳机的其他附件,则音频将总是路由到扬声器而不是接收器。

举个例子, 方法1, 设置之后,如果此时插入耳机,在拔掉。播放的声音会从听筒输出,而不是回到扬声器。
方法2, 设置之后,始终输出到扬声器,而不是其他接收器,如果没有耳机。(简要的说,就是如果有个蓝牙音箱,哪怕接上都不会有声音输出到蓝牙音响,插上耳机,则会有声音输出到耳机。)


作者:DCSnail-蜗牛
来源:CSDN
原文:https://blog.csdn.net/wangyanchang21/article/details/52925031

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容

  • 未来将属于思维独特、与众不同的人。重视右脑技能:设计感、故事感、交响力、共情力、娱乐感、意义感。 大脑卫星云图:人...
    叫我失心疯阅读 132评论 0 0
  • 所有QQ号可用@这个QQ代替 多条指令用|间隔,如踢人指令:T|踢|去死 以下为代管可用指令: 清屏 说明:发送设...
    凌风行者阅读 237评论 0 0
  • 这个问题以前我一直是做得不错的,因为对于他们的请求,我是有求必应的,不管是干什么,当然,作为刚入职的菜鸟,...
    公子小白的甜心阅读 195评论 0 0
  • QQ-music 使用原生 JS 实现 QQ 音乐 项目模块: (1) 推荐页面(2) 热门列表(3) 搜索歌曲(...
    YQY_苑阅读 1,103评论 0 0