2010-04-18 207 views
4

我已經編寫了一個使用AVAudioPlayer播放音頻的應用程序。如何在iPhone應用程序中的揚聲器和耳機之間切換

,我實現了切換音頻揚聲器功能:

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; 
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);  
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); 

但是當我嘗試使用這個切換回耳機:

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; 
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);  
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None; 
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); 

它仍然通過路由演講者。

我找不到任何其他指導音頻的方式。任何人都可以提出我做錯了什麼?

回答

4

根據Apple's documentation,只有在使用kAudioSessionCategory_PlayAndRecord類別時,音頻會話路由覆蓋纔可用。

你可以嘗試改變類別kAudioSessionCategory_PlayAndRecord和使用kAudioSessionProperty_OverrideCategoryDefaultToSpeaker屬性關鍵音頻路由到揚聲器。

0

像洛朗說,嘗試使用PlayAndRecord像這樣:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride); 

它使用AVAudioSessionCategoryPlayAndRecord是非常重要或者路由將無法進入揚聲器。一旦爲音頻會話設置了覆蓋路由,您可以使用AVAudioPlayer實例並向揚聲器發送一些輸出。

希望能像其他人一樣爲我工作。關於此的文檔很分散,但Skype應用程序證明這是可能的。堅持,我的朋友們! :)

一些蘋果文檔的位置:http://developer.apple.com/library/ios/#documentation/AudioToolbox/Reference/AudioSessionServicesReference/Reference/reference.html

執行頁面上的搜索kAudioSessionProperty_OverrideAudioRoute

相關問題