IOS上AudioSession设置, 切换扬声器和听筒详解

news/2024/11/26 14:06:19/

选择一个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,AVAudioSessionCategorySoloAmbientAVAudioSessionCategoryPlayback中的一种。

设置Category

 

<span style="margin: 0px; padding: 0px;">NSError *setCategoryError = nil;BOOL success = [[AVAudioSession sharedInstance]setCategory: AVAudioSessionCategoryAmbienterror: &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_OverrideAudioRoutesizeof (audioRouteOverride),&audioRouteOverride);

 

UInt32 doChangeDefaultRoute = 1;AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,sizeof (doChangeDefaultRoute),&doChangeDefaultRoute);

 

 

这两种方法区别在于:

使用kAudioSessionProperty_OverrideAudioRoute时,当发生任何中断如插拔耳机时,audio route就会重置回听筒,你必须再设置一次。

使用kAudioSessionProperty_OverrideCategoryDefaultToSpeaker则除非你更改category,否则会一直生效。


http://www.ppmy.cn/news/228041.html

相关文章

C#版系统自检,支持网络、摄像头、麦克风、扬声器、蓝牙检测

使用WinForm开发&#xff0c;平台为.Net4.0&#xff0c;耗时两天 可修改配置文件&#xff0c;选择需要检测的项目 这个是项目文档&#xff1a; ######################### ### 系统自检软件 ### #########################一、使用步骤&#xff1a; 1.将软件AutoCheck.…

android 关闭声音代码,Android中打开扬声器关闭麦克风的代码实现.docx

//获取音频服务 AudioMa nager audioMa nager (AudioMa nager) this.getSystemService(Co ntext.AUDIO_SERVICE); //设置声音模式 audioMa nager.setMode(AudioMa nager.STREAM_MUSIC); //关闭麦克风 audioMa nager.setMicroph on eMute(false); //打开扬声器 audioMa nager.s…

java galaxy_如何使用Galaxy S8在两个扬声器上同时播放蓝牙音频

java galaxy It’s not secret that Bluetooth 5.0 is pretty awesome, and as a results the Galaxy S8 can do some pretty neat stuff that other phones just can’t do. Playing Bluetooth audio on two connected devices at once is one of those features—it’s calle…

android 断开蓝牙连接,如何在android中连接和断开扬声器蓝牙

我尝试在android中连接speakerBluetooth(我使用UE BOOM Speaker)&#xff0c;该设备已配对&#xff0c;然后我将此设备连接到我的Android手机&#xff0c;通过蓝牙播放音乐 . 但我失败了&#xff0c;这段代码可以连接&#xff0c;但不能在mySpeaker中播放 . 我用的是android 4.…

Android 话筒、听筒、扬声器

话筒是输入&#xff08;麦克风&#xff09;&#xff0c;听筒、扬声器是输出&#xff08;喇叭&#xff09; 听筒/扬声器&#xff1a; 听筒是用来听对方传送过来的声音&#xff0c;手机放的MP3和开机铃声是从喇叭发出的。听筒模式,就是手机上一般听电话的内置小耳机,声音较小。…

linux电脑外放没声音,告诉你Ubuntu扬声器无声的解决方法及命令

首次安装选择的是Ubuntu,界面美观,实用性也很强,省去了配置的时间。但安装后马上就出现问题:插上耳机有声音,但扬声器怎么也不出声。一阵折腾后,终于找到解决方案(Ubuntu实测有效): 0、首先确定不是你声音调得太小(面板上的声音选项,不放心可以考虑alsamixer一下),或者…

深度linux没有声音,deepin扬声器/耳机没有声音解决方案

昨天准备在deepin系统下看视频学习一下Linux,结果登入deepin系统后发现不论是外放还是插耳机竟然都没有声音,这种情况以前也出现过,只不过没有在意,后来就自己又好了,今天这次可真是让我决定要找到原因所在了 在网上搜了半天后,尝试了各种方法依旧么有解决问题??? 无奈…

win10扬声器红叉_win10系统右下角小喇叭红叉显示扬声器耳机或者耳机已拔出的图文技巧...

有关win10系统右下角小喇叭红叉显示扬声器耳机或者耳机已拔出的操作方法想必大家有所耳闻。但是能够对win10系统右下角小喇叭红叉显示扬声器耳机或者耳机已拔出进行实际操作的人却不多。其实解决win10系统右下角小喇叭红叉显示扬声器耳机或者耳机已拔出的问题也不是难事&#x…