iOS 音頻 耳機與擴音器切換

來源:互聯網
上載者:User

標籤:

 iPhone上面有兩種播放外音的模式:耳機模式和話筒模式,耳機當然是打電話時用的,那個聲音當然很小了,

但是開放中,ios預設的就是這種模式,所以在播放外應的時候要加代碼重新設定下,如下:     AVAudioPlayer * audioPlayer1 = [[AVAudioPlayer alloc]initWithContentsOfURL:soundUrl error:nil];

    audioPlayer1.volume = 1.0;

    [audioPlayer1 prepareToPlay];

    UInt32 audioRoute = kAudioSessionOverrideAudioRoute_Speaker;

    AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRoute), &audioRoute);//這兩行代碼就是設定為話筒模式的

    [audioPlayer1 play];

 

在轉一個詳細的:http://blog.csdn.net/xy5811/article/details/8563137

 

選擇一個Category

AVAudioSessionCategoryAmbient 或 kAudioSessionCategory_AmbientSound——用於非以語音為主的應用,使用這個category的應用會隨著靜音鍵和螢幕關閉而靜音。並且不會中止其它應用播放聲音,可以和其它內建應用如iPod,safari等同時播放聲音。

AVAudioSessionCategorySoloAmbient 或 kAudioSessionCategory_SoloAmbientSound ——類似於AVAudioSessionCategoryAmbient 不同之處在於它會中止其它應用播放聲音。 這個category為預設category。

AVAudioSessionCategoryPlayback 或 kAudioSessionCategory_MediaPlayback——用於以語音為主的應用,使用這個category的應用不會隨著靜音鍵和螢幕關閉而靜音。

AVAudioSessionCategoryRecord 或  kAudioSessionCategory_RecordAudio———用於需要錄音的應用,設定該category後,除了來電鈴聲,鬧鐘或日曆提醒之外的其它系統聲音都不會被播放。

AVAudioSessionCategoryPlayAndRecord 或 kAudioSessionCategory_PlayAndRecord——用於既需要播放聲音又需要錄音的應用,語音交談應用(如)應該使用這個category。

AVAudioSessionCategoryAudioProcessing 或 kAudioSessionCategory_AudioProcessing————當需要進行離線語音處理時使用這個category,這裡我也不太明白離線語音處理是什麼概念,希望有知道的可以解釋下。

注意:並不是一個應用只能使用一個category,程式應該根據實際需要來切換設定不同的category,舉個例子,錄音的時候,需要設定為AVAudioSessionCategoryRecord,當錄音結束時,應根據程式需要更改category為AVAudioSessionCategoryAmbient,AVAudioSessionCategorySoloAmbient或AVAudioSessionCategoryPlayback中的一種。

設定Category

 

  1. <span style="font-size:14px;">NSError *setCategoryError = nil;  
  2.     BOOL success = [[AVAudioSession sharedInstance]  
  3.                     setCategory: AVAudioSessionCategoryAmbient  
  4.                     error: &setCategoryError];  
  5.       
  6.     if (!success) { /* handle the error in setCategoryError */ }</span>  

 

 

切換到擴音器

 

按照蘋果官方文檔的說法,只有在category設定為AVAudioSessionCategoryPlayAndRecord時才能從擴音器播放聲音,這一點我還未證實。

總之,按照官方文檔的說法,先設定category為AVAudioSessionCategoryPlayAndRecord,然後通過重寫audio route屬性來重新導向音頻。

audio route屬性有以下兩個,一個是預設的耳機,另一個則是擴音器。

 

  1. enum {    
  2.    kAudioSessionOverrideAudioRoute_None    = 0,  
  3.    kAudioSessionOverrideAudioRoute_Speaker = ‘spkr‘  
  4. };  
Override audio route的方法有如下兩種:

 

  1. UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;  
  2.       
  3.     AudioSessionSetProperty (  
  4.                              kAudioSessionProperty_OverrideAudioRoute  
  5.                              sizeof (audioRouteOverride),  
  6.                              &audioRouteOverride  
  7.                              );  

 

  1. UInt32 doChangeDefaultRoute = 1;  
  2.       
  3.     AudioSessionSetProperty (  
  4.                              kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,  
  5.                              sizeof (doChangeDefaultRoute),  
  6.                              &doChangeDefaultRoute  
  7.                              );  

 

這兩種方法區別在於:

使用kAudioSessionProperty_OverrideAudioRoute時,當發生任何中斷如插拔耳機時,audio route就會重設回耳機,你必須再設定一次。

使用kAudioSessionProperty_OverrideCategoryDefaultToSpeaker則除非你更改category,否則會一直生效。

iOS 音頻 耳機與擴音器切換

聯繫我們

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