iOS模拟器运行Deepgram实时转写项目时AVAudioEngine格式验证崩溃问题
iOS模拟器运行Deepgram实时转写项目时AVAudioEngine格式验证崩溃问题
我帮你分析下这个崩溃的原因,以及对应的解决办法:
崩溃根源解析
这个IsFormatSampleRateAndChannelCountValid(format)错误,本质是AVAudioEngine在处理音频节点连接时,发现采样率或声道数的格式不合法。大概率是因为你代码里的音频格式设置和iOS模拟器的默认音频输入格式不匹配,或者节点之间的连接格式没有对齐导致的。
具体修复步骤
1. 强制统一音频会话格式
首先要把音频会话的格式和你传给Deepgram的参数(采样率48000、单声道)统一起来,避免模拟器用了不兼容的默认格式。修改音频会话的设置代码:
do { let session = AVAudioSession.sharedInstance() try session.setCategory(.record, mode: .default, options: []) // 强制设置采样率和声道数,和Deepgram请求参数对齐 try session.setPreferredSampleRate(48000) try session.setPreferredInputNumberOfChannels(1) try session.activate() try audioEngine.start() } catch { print("音频引擎启动失败:\(error.localizedDescription)") }
2. 修正音频节点的格式处理
你代码里的转换器节点converterNode的tap设置用了节点默认的输出格式,这可能和我们需要的linear16格式不匹配。要明确指定tap的格式为目标格式,同时简化多余的节点逻辑:
private func startAnalyzingAudio() { let inputNode = audioEngine.inputNode // 明确指定和Deepgram匹配的输出格式 guard let outputFormat = AVAudioFormat(commonFormat: .pcmFormatInt16, sampleRate: 48000, channels: 1, interleaved: true) else { print("无法创建目标音频格式") return } let converterNode = AVAudioMixerNode() audioEngine.attach(converterNode) // 给转换器节点添加tap时,直接使用我们需要的输出格式 converterNode.installTap(onBus: 0, bufferSize: 1024, format: outputFormat) { [weak self] buffer, time in guard let data = self?.toNSData(buffer: buffer) else { return } self?.socket.write(data: data) } // 连接输入节点到转换器节点,使用输入节点的原始格式做转换 audioEngine.connect(inputNode, to: converterNode, format: inputNode.inputFormat(forBus: 0)) do { let session = AVAudioSession.sharedInstance() try session.setCategory(.record, mode: .default, options: []) try session.setPreferredSampleRate(48000) try session.setPreferredInputNumberOfChannels(1) try session.activate() try audioEngine.prepare() try audioEngine.start() } catch { print("音频引擎启动失败:\(error.localizedDescription)") } }
3. 确认麦克风权限配置
别忘了在项目的Info.plist里添加麦克风权限申请,否则音频会话无法激活:
添加NSMicrophoneUsageDescription键,值填类似“需要访问麦克风进行实时音频转写”的描述。
额外提示
iOS模拟器的音频输入模拟和真机有差异,默认采样率可能不是48000,所以强制设置会话参数是关键。修改代码后记得Clean Build Folder再重新运行,避免旧缓存影响结果。
内容来源于stack exchange
相关产品推荐
相关产品推荐

