-
-
AVAudioSession是一个单例,无需实例化即可直接使用。AVAudioSession在各种音频环境中起着非常重要的作用
针对不同的音频应用场景,需要设置不同的音频回话分类
AVAudioSession的类别
AvAudioSessionCategoryAmbient或kAudioSessioncategory_AmbientSound 用于非以语音为主的应用,使用这个category的应用会随着静音键和屏幕关闭而静音.并且不会中止其他应用的声音.可以和其他自带应用如iPod,safari等同时播放声音.
AVAudioSessionCategorySoloAmbeient或kAudioSessionCategory_SoloAmbientSound类似于AVAudioSessionCategoryAmbient不同之处在于它会中止其他应用的声音.
AVAudioSessionCategoryPlayback或kAudioSessionCategory_MediaPlayback 用于以语音为主的应用,这个category的应用不会随着静音键和屏幕关闭而静音.
AVAudioSessionCategoryRecord或kAudioSessionCategory_RecordAudio 用于录音的应用,设置category后,除了来电铃声,闹钟或日历提醒之外的其它系统声音都不会播放
kAudioSessionCategory_PlayAndRecord或AVAudioSessionCategoryPlayAndRecord用于既需要播放声音又需要录音的应用.语音聊天应用(如微信).
AVAudioSessionCategoryAudioProcessing或kAudioSessionCategory_AudioProcessing当需要进行离线语音处理时使用category.
注意:并不是一个应用只能使用一个category,程序应该根据实际需求来切换设置不同的category荣:录音的时候需要设置为AVAudioSessionCategoryRecord,当录音结束的时候应根据程序需要更改category为AVAudioSessionCategoryAmbient,AVAudioSessionCategorySoloAmbeient中的一种
设置category
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[audioSession setActive:YES error:nil];
设置音频播放为扬声器UInt32 audioRouteOverride = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,
sizeof (audioRouteOverride),
&audioRouteOverride);
-