4

我编写了一个使用 AVAudioPlayer 播放音频的应用程序。

我已经实现了一个将音频切换到扬声器的功能:

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

2 回答 2

4

根据Apple 的文档,音频会话路由覆盖仅在使用kAudioSessionCategory_PlayAndRecord类别时可用。

您可以尝试将类别更改为kAudioSessionCategory_PlayAndRecord并使用kAudioSessionProperty_OverrideCategoryDefaultToSpeaker属性键将音频路由到扬声器。

于 2010-06-11T18:47:17.097 回答
0

就像 Laurent 所说,尝试像这样使用 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

于 2013-05-28T02:47:34.150 回答