iOS端使用AudioKit录音时如何关闭AGC自动增益控制?
解决AudioKit NodeRecorder获取原始麦克风数据(关闭AGC/均衡)的方案
系统层面禁用自动音频处理
直接配置AVAudioSession为measurement模式,这个模式会彻底关闭系统自带的AGC、自动均衡、噪声抑制等所有语音处理功能,是获取原始数据的核心步骤:import AVFoundation import AudioKit do { let session = AVAudioSession.sharedInstance() try session.setCategory(.playAndRecord, mode: .measurement, options: [.allowBluetooth]) try session.setActive(true) } catch { print("AudioSession配置出错: \(error.localizedDescription)") }让NodeRecorder直接使用原始输入节点
NodeRecorder默认会用AudioKit的混音节点作为输入,我们需要手动指定它使用系统原始的AVAudioInputNode,绕开中间的混音处理:// 先启动AudioKit引擎(如果未启动) do { try AudioKit.start() } catch { print("AudioKit启动失败: \(error.localizedDescription)") } // 创建输出文件(按需指定路径和格式) let documentsDir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] let outputFile = documentsDir.appendingPathComponent("raw_recording.wav") // 初始化Recorder,传入原始输入节点 let rawInputNode = AudioKit.engine.inputNode let recorder = try NodeRecorder(node: rawInputNode, file: outputFile)清理冗余处理
如果之前给输入节点加过EQ或其他效果器,要彻底移除,避免残留处理:// 移除输入节点上所有已存在的Tap(包括之前的效果器或Recorder Tap) rawInputNode.removeTap(onBus: 0) // 重新开始录制 try recorder.record()验证效果
录制一段包含低语、正常说话、大喊的音频,查看波形:原始数据的波形幅度会随音量变化明显,低语波形细小,大喊波形接近满幅,不会出现AGC导致的波形被拉平的情况。
内容的提问来源于stack exchange,提问作者ipodishima
相关产品推荐
相关产品推荐

