如何在iPhone应用程序中的扬声器和耳机之间切换
问题描述:
我已经编写了一个使用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);
它仍然通过路由演讲者。
我找不到任何其他指导音频的方式。任何人都可以提出我做错了什么?
答
根据Apple's documentation,只有在使用kAudioSessionCategory_PlayAndRecord
类别时,音频会话路由覆盖才可用。
你可以尝试改变类别kAudioSessionCategory_PlayAndRecord
和使用kAudioSessionProperty_OverrideCategoryDefaultToSpeaker
属性关键音频路由到扬声器。
答
像洛朗说,尝试使用PlayAndRecord像这样:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride);
它使用AVAudioSessionCategoryPlayAndRecord
是非常重要或者路由将无法进入扬声器。一旦为音频会话设置了覆盖路由,您可以使用AVAudioPlayer
实例并向扬声器发送一些输出。
希望能像其他人一样为我工作。关于此的文档很分散,但Skype应用程序证明这是可能的。坚持,我的朋友们! :)
执行页面上的搜索kAudioSessionProperty_OverrideAudioRoute