ios 音頻處理開發(一)iOS AudioSession中的category配置問題

來源:互聯網
上載者:User

iOS AudioSession的Category如何選擇


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,當錄音結束時,應根據程式需要更改category為AVAudioSessionCategoryAmbient,AVAudioSessionCategorySoloAmbient或AVAudioSessionCategoryPlayback中的一種。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.