選擇一個Category
AVAudioSessionCategoryAmbient或kAudioSessionCategory_AmbientSound——用于非以語音為主的應用齐苛,使用這個category的應用會隨著靜音鍵和屏幕關閉而靜音干毅。并且不會中止其它應用播放聲音燕雁,可以和其它自帶應用如iPod切端,safari等同時播放聲音挤庇。
AVAudioSessionCategorySoloAmbient或kAudioSessionCategory_SoloAmbientSound——類似于AVAudioSessionCategoryAmbient不同之處在于它會中止其它應用播放聲音。 這個category為默認category旁仿。
AVAudioSessionCategoryPlayback或kAudioSessionCategory_MediaPlayback——用于以語音為主的應用藕夫,使用這個category的應用不會隨著靜音鍵和屏幕關閉而靜音。
AVAudioSessionCategoryRecord或kAudioSessionCategory_RecordAudio———用于需要錄音的應用枯冈,設置該category后毅贮,除了來電鈴聲,鬧鐘或日歷提醒之外的其它系統(tǒng)聲音都不會被播放尘奏。
AVAudioSessionCategoryPlayAndRecord或kAudioSessionCategory_PlayAndRecord——用于既需要播放聲音又需要錄音的應用滩褥,語音聊天應用(如微信)應該使用這個category。
AVAudioSessionCategoryAudioProcessing或kAudioSessionCategory_AudioProcessing————當需要進行離線語音處理時使用這個category罪既,這里我也不太明白離線語音處理是什么概念铸题,希望有知道的可以解釋下。
注意:并不是一個應用只能使用一個category琢感,程序應該根據(jù)實際需要來切換設置不同的category丢间,舉個例子,錄音的時候驹针,需要設置為AVAudioSessionCategoryRecord烘挫,當錄音結(jié)束時,應根據(jù)程序需要更改category為AVAudioSessionCategoryAmbient柬甥,AVAudioSessionCategorySoloAmbient或AVAudioSessionCategoryPlayback中的一種饮六。
設置Category
NSError?*setCategoryError?=?nil;
BOOLsuccess?=?[[AVAudioSession?sharedInstance]
setCategory:?AVAudioSessionCategoryAmbient
error:?&setCategoryError];
if(!success)?{/*?handle?the?error?in?setCategoryError?*/}
NSError *setCategoryError = nil;
BOOL success = [[AVAudioSession sharedInstance]
setCategory: AVAudioSessionCategoryAmbient
error: &setCategoryError];
if (!success) { /* handle the error in setCategoryError */ }
切換到揚聲器
按照蘋果官方文檔的說法,只有在category設置為AVAudioSessionCategoryPlayAndRecord時才能從揚聲器播放聲音苛蒲,這一點我還未證實卤橄。
總之,按照官方文檔的說法臂外,先設置category為AVAudioSessionCategoryPlayAndRecord窟扑,然后通過重寫audio route屬性來重定向音頻。
audio route屬性有以下兩個漏健,一個是默認的聽筒嚎货,另一個則是揚聲器。
enum{
kAudioSessionOverrideAudioRoute_None????=?0,
kAudioSessionOverrideAudioRoute_Speaker?='spkr'
};
enum {
kAudioSessionOverrideAudioRoute_None? ? = 0,
kAudioSessionOverrideAudioRoute_Speaker = 'spkr'
};
Override audio route的方法有如下兩種:
UInt32?audioRouteOverride?=?kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty?(
kAudioSessionProperty_OverrideAudioRoute
sizeof(audioRouteOverride),
&audioRouteOverride
);
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (
kAudioSessionProperty_OverrideAudioRoute
sizeof (audioRouteOverride),
&audioRouteOverride
);
UInt32?doChangeDefaultRoute?=?1;
AudioSessionSetProperty?(
kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,
sizeof(doChangeDefaultRoute),
&doChangeDefaultRoute
);
UInt32 doChangeDefaultRoute = 1;
AudioSessionSetProperty (
kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,
sizeof (doChangeDefaultRoute),
&doChangeDefaultRoute
);
這兩種方法區(qū)別在于:
使用kAudioSessionProperty_OverrideAudioRoute時蔫浆,當發(fā)生任何中斷如插拔耳機時殖属,audio route就會重置回聽筒,你必須再設置一次瓦盛。
使用kAudioSessionProperty_OverrideCategoryDefaultToSpeaker則除非你更改category洗显,否則會一直生效外潜。
轉(zhuǎn)自http://blog.csdn.net/xy5811/article/details/8563137
在獲得一個AVAudioSession類的實例后,你就能通過調(diào)用音頻會話對象的setCategory:error:實例方法挠唆,來從IOS應用可用的不同類別中作出選擇橡卤。下面列出了可供使用的音頻會話類別:
AVAudioSessionCategorySoloAmbient
這個類別非常像AVAudioSessionCategoryAmbient類別,除了會停止其他程序的音頻回放损搬,比如iPod程序。當設備被設置為靜音模式柜与,你的音頻回放將會停止巧勤。
AVAudioSessionCategoryRecord
這會停止其他應用的聲音(比如iPod)并讓你的應用也不能初始化音頻回放(比如AVAudioPlayer)。在這種模式下弄匕,你只能進行錄音颅悉。使用這個類別,調(diào)用AVAudioPlayer的prepareToPlay會返回YES迁匠,但是調(diào)用play方法將返回NO剩瓶。主UI界面會照常工作。這時城丧,即使你的設備屏幕被用戶鎖定了延曙,應用的錄音仍會繼續(xù)。
AVAudioSessionCategoryPlayback
這個類別會靜止其他應用的音頻回放(比如iPod應用的音頻回放)亡哄。你可以使用AVAudioPlayer的prepareToPlay和play方法枝缔,在你的應用中播放聲音。主UI界面會照常工作蚊惯。這時愿卸,即使屏幕被鎖定或者設備為靜音模式,音頻回放都會繼續(xù)截型。
AVAudioSessionCategoryPlayAndRecord
這個類別允許你的應用中同時進行聲音的播放和錄制趴荸。當你的聲音錄制或播放開始后,其他應用的聲音播放將會停止宦焦。主UI界面會照常工作发钝。這時,即使屏幕被鎖定或者設備為靜音模式赶诊,音頻回放和錄制都會繼續(xù)笼平。
AVAudioSessionCategoryAudioProcessing
這個類別用于應用中進行音頻處理的情形,而不是音頻回放或錄制舔痪。設置了這種模式寓调,你在應用中就不能播放和錄制任何聲音。調(diào)用AVAPlayer的prepareToPlay和play方法都將返回NO锄码。其他應用的音頻回放夺英,比如iPod晌涕,也會在此模式下停止。
AVAudioSessionCategoryAmbient
這個類別不會停止其他應用的聲音痛悯,相反余黎,它允許你的音頻播放于其他應用的聲音之上,比如iPod载萌。你的應用的主UI縣城會工作正常惧财。調(diào)用AVAPlayer的prepareToPlay和play方法都將返回YES。當用戶鎖屏時扭仁,你的應用將停止所有正在回放的音頻垮衷。僅當你的應用是唯一播放該音頻文件的應用時,靜音模式將停止你程序的音頻回放乖坠。如果正當iPod播放一手歌時搀突,你開始播放音頻,將設備設為靜音模式并不能停止你的音頻回放熊泵。