ios 音频处理开发(一)iOS AudioSession中的category配置问题

iOS AudioSessionCategory如何选择


1.kAudioSessionCategory_AmbientSound AVAudioSessionCategoryAmbient

使用这个category的应用会随着静音键和屏幕关闭而静音。并且不会中止其它应用播放声音,也不会被其他应用播放声音中止,可以和其它自带应用如iPod,safari等同时播放声音。注意:该Category无法在后台播放声音,即使应用开机了Background Modes audio,AirPlay and Picture in Picture模式

UInt32 sessionCategory = kAudioSessionCategory_AmbientSound;

AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,

                                 sizeof(sessionCategory),

                                 &sessionCategory);


2.kAudioSessionCategory_SoloAmbientSound AVAudioSessionCategorySoloAmbient

 使用这个category的应用会中止其他应用播放声音,并且会随着静音键和屏幕关闭而静音。该category就是AVAudioPlayer默认的category。注意:该Category无法在后台播放声音,即使应用开机了Background Modes audio,AirPlay and Picture in Picture模式

UInt32 sessionCategory = kAudioSessionCategory_SoloAmbientSound;

AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,

                                 sizeof(sessionCategory),

                                 &sessionCategory);


3.kAudioSessionCategory_MediaPlayback AVAudioSessionCategoryPlayback

使用这个category的应用,会中断其他应用播放声音,其他应用的播放也会中断它的声音播放,不会随着静音键和屏幕关闭而静音。注意:可以在后台播放声音,但是要主动去开启Background Modes Audio,Airplay and Picture in Picture模式

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;

AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,

                                 sizeof(sessionCategory),

                                 &sessionCategory);


4. kAudioSessionCategory_RecordAudio AVAudioSessionCategoryRecord

category用于需要录音的应用,设置该category后,除了来点铃声,闹钟或日历提醒之外的其他系统声音都不会被播放。这个category只提供单纯录音功能。注意,这个时候我发现,手机系统的音量增减都没有效果了。

UInt32 sessionCategory = kAudioSessionCategory_RecordAudio;

AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,

                                 sizeof(sessionCategory),

                                 &sessionCategory);


5. kAudioSessionCategory_PlayAndRecord AVAudioSessionCategoryPlayAndRecord 

category用于既需要播放声音又需要录音的应用。如果我们的应用需要用到iPhone上的听筒,那么这个category是我们唯一的选择,在该category下声音的默认出口为听筒(在没有外接设备的情况下)。当然如果我们想要使用这个category,但是又要声音从扬声器播放出来,那么我们可以去修改AudioSession的kAudioSessionProperty_OverrideAudioRoute属性为kAudioSessionOverrideAudioRoute_Speaker。但是如果不使用了这个category就不能让声音去听筒播放。再必要的需求时,必须去主动切换AudioSession的category。

默认情况下:

UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;

AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,

                                 sizeof(sessionCategory),

                                 &sessionCategory);

让声音从扬声器播放出来:

UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;

AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,

                                 sizeof(sessionCategory),

                                 &sessionCategory);

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;

AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride),

                                &audioRouteOverride);


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



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值