主要解決錄音時候不能讓當前app內(nèi)音外放

選擇一個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播放一手歌時搀突,你開始播放音頻,將設備設為靜音模式并不能停止你的音頻回放熊泵。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末仰迁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子顽分,更是在濱河造成了極大的恐慌徐许,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卒蘸,死亡現(xiàn)場離奇詭異绊寻,居然都是意外死亡,警方通過查閱死者的電腦和手機悬秉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門澄步,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人和泌,你說我怎么就攤上這事村缸。” “怎么了武氓?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵梯皿,是天一觀的道長。 經(jīng)常有香客問我县恕,道長东羹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任忠烛,我火速辦了婚禮属提,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己冤议,他們只是感情好斟薇,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著恕酸,像睡著了一般堪滨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蕊温,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天袱箱,我揣著相機與錄音,去河邊找鬼义矛。 笑死犯眠,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的症革。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鸯旁,長吁一口氣:“原來是場噩夢啊……” “哼噪矛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起铺罢,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤艇挨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后韭赘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缩滨,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年泉瞻,在試婚紗的時候發(fā)現(xiàn)自己被綠了脉漏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡袖牙,死狀恐怖侧巨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鞭达,我是刑警寧澤司忱,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站畴蹭,受9級特大地震影響坦仍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叨襟,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一繁扎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧糊闽,春花似錦锻离、人聲如沸铺峭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卫键。三九已至,卻和暖如春虱朵,著一層夾襖步出監(jiān)牢的瞬間莉炉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工碴犬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留絮宁,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓服协,卻偏偏與公主長得像绍昂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子偿荷,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容