我正在尝试向我的一个 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/