You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 17:42:11