AVAudioSession應用指南

來源:互聯網
上載者:User

標籤:後台   異常   ssi   war   -o   flags   details   values   自己   

轉coco-LG

audiosession負責調節你的app和ios系統裡的音頻行為.一旦載入了audiosession你可以獲得一個audiosession的單例.你可以配置這個audiosession來控制你的app的音頻行為.例如:

  • 當你的app播放聲音的時候,你是希望其他現正播放聲音的app靜音還是混合兩個app的聲音?
  • 你的app如何回應突發的打斷,例如這時候鬧鈴突然響了?
  • 你的app又該如何回應耳機口的拔插呢?

AuioSession的配置會影響你的app在運行中所有的音頻活動,除了利用System Sounds Services API控制的音頻.

你還可以利用AudioSession來檢測你所用硬體的參數,例如聲道和採樣率.

你還可以隨時啟用或者停止你的audioSession,當你的app播放聲音或者正在錄音的時候,你必須確保AudioSession處於啟用狀態.

系統也有權利隨時中斷你的audioSession,例如,當你來電話的時候.當然,AudioSession提供了api來讓你的app從這種中斷中恢複.

一、執行個體化

 

[objc] view plain copy 
  1. AVAudioSession *audioSession = [AVAudioSession sharedInstance];  

 

 

可以看出AVAudioSession是個單例對象。

 

二、類別設定

在獲得一個AVAudioSession類的執行個體後,你就能通過調用音頻會話對象的setCategory:error:執行個體方法,來從IOS應用可用的不同類別中作出選擇。類別分為一下幾種:

 

[objc] view plain copy 
  1. #pragma mark -- Values for the category property --  
  2.   
  3. /*  Use this category for background sounds such as rain, car engine noise, etc.   
  4.  Mixes with other music. */  
  5. AVF_EXPORT NSString *const AVAudioSessionCategoryAmbient;  
  6.       
  7. /*  Use this category for background sounds.  Other music will stop playing. */  
  8. AVF_EXPORT NSString *const AVAudioSessionCategorySoloAmbient;  
  9.   
  10. /* Use this category for music tracks.*/  
  11. AVF_EXPORT NSString *const AVAudioSessionCategoryPlayback;  
  12.   
  13. /*  Use this category when recording audio. */  
  14. AVF_EXPORT NSString *const AVAudioSessionCategoryRecord;  
  15.   
  16. /*  Use this category when recording and playing back audio. */  
  17. AVF_EXPORT NSString *const AVAudioSessionCategoryPlayAndRecord;  
  18.   
  19. /*  Use this category when using a hardware codec or signal processor while 
  20.  not playing or recording audio. */  
  21. AVF_EXPORT NSString *const AVAudioSessionCategoryAudioProcessing NS_DEPRECATED_IOS(3_0, 10_0) __TVOS_PROHIBITED __WATCHOS_PROHIBITED;  

 

 

1.AVAudioSessionCategoryAmbient

用於非以語音為主的應用,使用這個category的應用會隨著靜音鍵和螢幕關閉而靜音。並且不會中止其它應用播放聲音,可以和其它內建應用如iPod,safari等同時播放聲音。注意:該Category無法在背景播放聲音  2.AVAudioSessionCategorySoloAmbient 類似於AVAudioSessionCategoryAmbient不同之處在於它會中止其它應用播放聲音。 這個category為預設category。該Category無法在背景播放聲音  3.AVAudioSessionCategoryPlayback 用於以語音為主的應用,使用這個category的應用不會隨著靜音鍵和螢幕關閉而靜音。可在背景播放聲音  4.AVAudioSessionCategoryRecord 用於需要錄音的應用,設定該category後,除了來電鈴聲,鬧鐘或日曆提醒之外的其它系統聲音都不會被播放。該Category只提供單純錄音功能。 5. AVAudioSessionCategoryPlayAndRecord 用於既需要播放聲音又需要錄音的應用,語音交談應用(如)應該使用這個category。該Category提供錄音和播放功能。如果你的應用需要用到iPhone上的耳機,該category是你唯一的選擇,在該Category下聲音的預設出口為耳機(在沒有外接裝置的情況下)。  注意:並不是一個應用只能使用一個category,程式應該根據實際需要來切換設定不同的category,舉個例子,錄音的時候,需要設定為AVAudioSessionCategoryRecord,當錄音結束時,應根據程式需要更改category為AVAudioSessionCategoryAmbient,AVAudioSessionCategorySoloAmbient或AVAudioSessionCategoryPlayback中的一種。

 

三、恢複外部音樂

從上面的類別可以看出,在錄音或播音的的時候是會關閉外部現正播放的音頻。比如發語音的時候,現正播放的音樂會停止。但是錄完之後需要讓外部音效繼續播放。這個需要手動設定

 

[objc] view plain copy 
  1. [[AVAudioSession sharedInstance] setActive:NO  
  2.                  withFlags:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation  
  3.                      error:nil];  

這裡需要注意一個問題,如果在錄音或播音前本來就沒有外部音效播放,直接執行這一句會使cocos2d裡面的部分音效異常。所以,在開始錄音或播音之前先判斷一下是否有外部音效播放,然後用一個標誌位記錄,在錄音或播音完成之後對這個標誌位做判斷,如果有外部音效,則執行上邊的代碼去恢複外部音效。下面是判斷外部音效的代碼:

 

[objc] view plain copy 
  1. -(BOOL) isOtherAudioPlaying {  
  2.     UInt32 isPlaying = 0;  
  3.     UInt32 varSize = sizeof(isPlaying);  
  4.     AudioSessionGetProperty (kAudioSessionProperty_OtherAudioIsPlaying, &varSize, &isPlaying);  
  5.     return (isPlaying != 0);  
  6. }  

 

 

 

四、協調當前應用的背景音效

如果當我們遇到這樣一種情況:自己的應用有背景音樂,這時候需要錄音,錄完音還要恢複播放背景音樂。這個只需要再設定一次背景音樂的類別,一般背景音樂都是系統預設類別:

[objc] view plain copy 
  1. [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];  

 

 

五、注意點

1.如果在錄音或播音前本來就沒有外部音效播放,直接執行這一句會使cocos2d裡面的部分音效異常。所以,在開始錄音或播音之前先判斷一下是否有外部音效播放,然後用一個標誌位記錄,在錄音或播音完成之後對這個標誌位做判斷,如果有外部音效,則執行上邊的代碼去恢複外部音效;

2.有背景音樂的時候執行“恢複外部音樂”出現警告Deactivating an audio session that has running I/O

        具體講解請參考:http://blog.csdn.net/gang544043963/article/details/53323270

AVAudioSession應用指南

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.