2010-04-18 205 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

相关问题