You need to enable JavaScript to run this app. iOS应用使用AVAudioRecorder启动录音时出现开头点击杂音问题求助
优惠活动
大模型
产品
解决方案
定价
更多

iOS应用使用AVAudioRecorder启动录音时出现开头点击杂音问题求助

杂音产生核心原因及修复方案

1. 音频会话配置顺序错误

你当前代码先初始化AVAudioRecorder,再配置AVAudioSession的类别,顺序完全颠倒。音频会话的全局配置必须在创建录音实例前完成,否则录音实例初始化时读取的是旧的会话参数,启动录音时参数发生突变会产生硬件冲击杂音。

2. 缺少预准备录音流程

直接调用record()会让系统同时完成硬件初始化、缓冲区创建、录音启动三个步骤,瞬时的硬件唤醒操作很容易产生咔哒声,提前调用prepareToRecord()可以预加载所有资源,避免启动时的冲击。

3. 音频会话激活时机不合理

你没有手动激活音频会话,依赖系统启动录音时自动激活,会话激活瞬间的音频路由切换也会产生杂音,建议提前手动激活会话。


修正后代码示例

// 第一步:先配置并激活音频会话
let audioSession = AVAudioSession.sharedInstance()
do {
    // 可根据实际需求调整options,不需要混音的话也可以不加,.allowBluetooth是可选,看是否需要支持蓝牙录音
    try audioSession.setCategory(.playAndRecord, mode: .default, options: [.mixWithOthers])
    try audioSession.setActive(true)
} catch {
    print("音频会话配置失败: \(error)")
}

// 第二步:定义录音参数,初始化录音器
private var recorderSettings: [String: Any] {
    [
        AVFormatIDKey: NSNumber(value: kAudioFormatMPEG4AAC),
        AVSampleRateKey: 44100.0,
        AVNumberOfChannelsKey: 1,
        AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
    ]
}

do {
    audioRecorder = try AVAudioRecorder(url: fileUrl, settings: recorderSettings)
    // 第三步:预准备录音
    audioRecorder?.prepareToRecord()
    audioRecorder?.isMeteringEnabled = true
    // 第四步:启动录音
    audioRecorder?.record()
} catch {
    print("录音器初始化失败: \(error)")
}

// 后续的计量定时器逻辑保持不变即可
meteringTimer = Timer.scheduledTimer(withTimeInterval: 0.05, repeats: true, block: { (timer) in
    self.audioRecorder?.updateMeters()
    self.soundSamples[self.currentSample] = self.audioRecorder?.averagePower(forChannel: 0) ?? 0
    self.currentSample = (self.currentSample + 1) % self.numberOfSamples
})

额外优化建议

  • 如果你的场景不需要边录音边播放音频,直接将音频会话类别改为.record,减少音频路由切换的开销,能进一步降低杂音出现概率
  • 如果仍有杂音,可检查按钮点击时是否有系统自带的点击音效被录入,可临时禁用按钮的交互音效再验证
  • 停止录音时,先调用audioRecorder?.stop(),再延迟100ms左右调用audioSession.setActive(false),避免停止时也出现杂音

内容的提问来源于stack exchange,提问作者Peter Warbo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 13:54:05