iOS应用:麦克风语音识别时如何让后台音频持续播放?
解决iOS语音识别时后台音频被暂停的问题
你的问题核心在于音频会话类别设置错误:使用.record类别时,系统会默认独占音频输入通道,直接暂停后台播放的音频,哪怕去掉.duckOthers也无法改变这个行为。而Shazam这类应用能同时播放和录音,是因为它们用了支持双向音频的会话类别。
具体修改步骤:
- 替换音频会话类别:把
.record改成.playAndRecord,这个类别允许应用同时进行音频输入和输出,并且支持与其他音频应用共存。 - 设置正确的选项:添加
.mixWithOthers选项,明确告知系统允许后台音频继续播放;如果需要降低后台音频音量可以保留.duckOthers,不需要则直接移除。 - 保持会话激活逻辑:保留
.notifyOthersOnDeactivation选项,确保退出应用时通知其他音频应用恢复正常状态。
修改后的核心代码片段:
在startRecording方法的do块中,替换原来的音频会话设置代码:
do { audioSession = AVAudioSession.sharedInstance() // 改用支持同时录音和播放的会话类别 try audioSession.setCategory(.playAndRecord, mode: .spokenAudio, options: [.mixWithOthers, .duckOthers]) try audioSession.setActive(true, options: .notifyOthersOnDeactivation) try audioEngine.start() } catch { handleError(withMessage: error.localizedDescription) }
额外注意事项:
- 确保
Info.plist中已添加必要权限描述:NSMicrophoneUsageDescription:麦克风权限使用说明NSSpeechRecognitionUsageDescription:语音识别权限使用说明
- 测试时先启动后台音频播放(如音乐APP),再打开你的应用进行语音识别,验证后台音频是否持续播放。
内容的提问来源于stack exchange,提问作者David Hopkins
相关产品推荐
相关产品推荐

