当连接耳机时,如何强制音频从iPhone扬声器中传出?

shy*_*shy 2 iphone cocoa-touch core-audio

我正在尝试为我的某个iPhone应用添加扬声器功能.我已经创建了录制功能,但是当我播放录制的音频时,它只播放到手机耳机.

我需要的是即使连接了耳机,也要在扬声器上播放录制的文件.我怎样才能重新路由音频来做到这一点?

mak*_*dad 7

您需要使用覆盖默认音频属性AudioSessionSetProperty.看看这样的东西强制所有音频都去扬声器(请注意,如果插入耳机,甚至会发生这种情况).

OSStatus err = 0;
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
err = AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute,sizeof(audioRouteOverride),&audioRouteOverride);
Run Code Online (Sandbox Code Playgroud)

要检测耳机,试试这个(这是从另一个SO帖子中复制/粘贴代码,所以请注意,但它适用于我):

/**
 * Tells us if the headset is plugged in
 */
- (BOOL) headsetIsPluggedIn
{
  BOOL returnVal = NO;

  UInt32 routeSize = sizeof(CFStringRef);
  CFStringRef route = NULL;
  OSStatus error = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &routeSize, &route);
  if (!error && (route != NULL) && ([(NSString*)route rangeOfString:@"Head"].location != NSNotFound))
  {
    CFRelease(route);
    returnVal = YES;
  }
  return returnVal;
}
Run Code Online (Sandbox Code Playgroud)

编辑:评论中有一些关于CFRelease是否合适的讨论.任何铁杆核心基金会专家都在关注吗?