IOS上AudioSession设置, 切换扬声器和听筒详解
2015-08-25 10:12
218 查看
选择一个Category
这个category为默认category。
注意:并不是一个应用只能使用一个category,程序应该根据实际需要来切换设置不同的category,举个例子,录音的时候,需要设置为AVAudioSessionCategoryRecord,当录音结束时,应根据程序需要更改category为AVAudioSessionCategoryAmbient,AVAudioSessionCategorySoloAmbient或AVAudioSessionCategoryPlayback中的一种。
设置Category
切换到扬声器
按照苹果官方文档的说法,只有在category设置为AVAudioSessionCategoryPlayAndRecord时才能从扬声器播放声音,这一点我还未证实。
总之,按照官方文档的说法,先设置category为AVAudioSessionCategoryPlayAndRecord,然后通过重写audio route属性来重定向音频。
audio route属性有以下两个,一个是默认的听筒,另一个则是扬声器。
Override audio route的方法有如下两种:
这两种方法区别在于:
使用kAudioSessionProperty_OverrideAudioRoute时,当发生任何中断如插拔耳机时,audio route就会重置回听筒,你必须再设置一次。
使用kAudioSessionProperty_OverrideCategoryDefaultToSpeaker则除非你更改category,否则会一直生效。
AVAudioSessionCategoryAmbient或
kAudioSessionCategory_AmbientSound——用于非以语音为主的应用,使用这个category的应用会随着静音键和屏幕关闭而静音。并且不会中止其它应用播放声音,可以和其它自带应用如iPod,safari等同时播放声音。
AVAudioSessionCategorySoloAmbient或
kAudioSessionCategory_SoloAmbientSound——类似于AVAudioSessionCategoryAmbient 不同之处在于它会中止其它应用播放声音。
这个category为默认category。
AVAudioSessionCategoryPlayback或
kAudioSessionCategory_MediaPlayback——用于以语音为主的应用,使用这个category的应用不会随着静音键和屏幕关闭而静音。
AVAudioSessionCategoryRecord或
kAudioSessionCategory_RecordAudio———用于需要录音的应用,设置该category后,除了来电铃声,闹钟或日历提醒之外的其它系统声音都不会被播放。
AVAudioSessionCategoryPlayAndRecord或
kAudioSessionCategory_PlayAndRecord——用于既需要播放声音又需要录音的应用,语音聊天应用(如微信)应该使用这个category。
AVAudioSessionCategoryAudioProcessing或
kAudioSessionCategory_AudioProcessing————当需要进行离线语音处理时使用这个category,这里我也不太明白离线语音处理是什么概念,希望有知道的可以解释下。
注意:并不是一个应用只能使用一个category,程序应该根据实际需要来切换设置不同的category,举个例子,录音的时候,需要设置为AVAudioSessionCategoryRecord,当录音结束时,应根据程序需要更改category为AVAudioSessionCategoryAmbient,AVAudioSessionCategorySoloAmbient或AVAudioSessionCategoryPlayback中的一种。
设置Category
<span style="margin: 0px; padding: 0px;">NSError *setCategoryError = nil; BOOL success = [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryAmbient error: &setCategoryError]; if (!success) { /* handle the error in setCategoryError */ }</span>
切换到扬声器
按照苹果官方文档的说法,只有在category设置为AVAudioSessionCategoryPlayAndRecord时才能从扬声器播放声音,这一点我还未证实。
总之,按照官方文档的说法,先设置category为AVAudioSessionCategoryPlayAndRecord,然后通过重写audio route属性来重定向音频。
audio route属性有以下两个,一个是默认的听筒,另一个则是扬声器。
enum { kAudioSessionOverrideAudioRoute_None = 0, kAudioSessionOverrideAudioRoute_Speaker = 'spkr' };
Override audio route的方法有如下两种:
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; AudioSessionSetProperty ( kAudioSessionProperty_OverrideAudioRoute sizeof (audioRouteOverride), &audioRouteOverride );
UInt32 doChangeDefaultRoute = 1; AudioSessionSetProperty ( kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof (doChangeDefaultRoute), &doChangeDefaultRoute );
这两种方法区别在于:
使用kAudioSessionProperty_OverrideAudioRoute时,当发生任何中断如插拔耳机时,audio route就会重置回听筒,你必须再设置一次。
使用kAudioSessionProperty_OverrideCategoryDefaultToSpeaker则除非你更改category,否则会一直生效。
相关文章推荐
- iOS 音频播放时听筒及扬声器切换
- ios项目中的常见文件。“工程名-Info.plist”文件、“工程名-Prefix.pch”文件
- Quartz2d从易到难全解析---图片截屏
- iOS页面间传值小结
- iOS设备中WiFi、蓝牙和飞行模式的开启与关闭(私有API)
- ios开发技巧(一)
- IOSAutolayout
- IOS开发—CALayer介绍
- iOS开发必看的博客汇总
- 在iOS平台使用ffmpeg解码h264视频流(转)
- TextField 设置大全
- iOS 万能跳转界面方法 (runtime)
- iOS开发-常用第三方开源框架介绍
- iOS多线程-01-pthread与NSTread
- iOS工程适配64-bit经验分享
- iOS NSURLSession 封装下载类
- iOS当该装置是水平屏,frame和bounds分别
- iOS开发中(null)与<null>的判断
- iOS中Block全面分析
- iOS kvc