iphone - 连接耳机时如何强制从 iPhone 扬声器发出音频?

标签 iphone cocoa-touch core-audio

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

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

最佳答案

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

OSStatus err = 0;
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
err = AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute,sizeof(audioRouteOverride),&audioRouteOverride);

要检测耳机,请尝试以下操作(这实际上是从另一篇 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;
}

编辑:评论中有一些关于 CFRelease 是否合适的讨论。有铁杆核心基金会专家愿意参与进来吗?

关于iphone - 连接耳机时如何强制从 iPhone 扬声器发出音频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5036399/

相关文章:

iphone - 音频文件不使用 iphone sdk 播放

ios - setContentOffset 到 scrollView 中的 UIImage loaction

iphone - 让 UITableViewController 在旋转时刷新其 tableview 的最佳方法是什么?

iphone - UIBarButtonItem 偏移量?

iphone - 使用 NSArray *sort* 方法后,我负责释放返回的数组吗

objective-c - Admobs 有时会在不同位置出现两次

ios - 在 iOS 上,可以在不在 drawRect 中完成的情况下绘制某些东西吗?

objective-c - 如何在没有时间延迟的情况下从一种音乐序列更改为另一种音乐序列

multithreading - 使用 "rude big hammer"方法并行化 MacOS/CoreAudio 实时音频回调是否实用?

ios - 是否可以列出当前应用程序中的所有 RemoteIO 音频单元?