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

iOS中AVAudioRecorder设置1Hz采样率无效,如何实现无辨识度录音?

iOS低采样率录音问题解答

你遇到的问题核心在于MPEG4AAC编码格式不支持1Hz、16Hz这类极低采样率。iOS系统里的AAC编码器有最低采样率限制,通常最低只能到8kHz——哪怕你在设置里填了更低的数值,系统会自动把采样率调整到编码器支持的最低值,所以录出来的音频还是清晰可辨。

如果你的需求只是估算噪音水平,完全没必要执着于低采样率录音,有更高效的方案:

  • 直接用AVAudioEngine实时获取音频输入的电平数据,计算噪音分贝,全程不用保存音频文件,性能更优。
  • 要是一定要录制音频,可改用支持极低采样率的kAudioFormatLinearPCM格式,但这种格式生成的文件体积会很大,其实对噪音估算来说完全没必要。

给你一个用AVAudioEngine监测噪音水平的代码示例:

import AVFoundation

class NoiseLevelMonitor: NSObject {
    private let audioEngine = AVAudioEngine()
    
    func startMonitoring() {
        let inputNode = audioEngine.inputNode
        let inputFormat = inputNode.inputFormat(forBus: 0)
        
        inputNode.installTap(onBus: 0, bufferSize: 1024, format: inputFormat) { buffer, _ in
            // 提取音频数据
            let channelData = buffer.floatChannelData![0]
            let dataArray = Array(UnsafeBufferPointer(start: channelData, count: Int(buffer.frameLength)))
            
            // 计算均方根值转分贝(噪音水平)
            let rms = sqrt(dataArray.map { $0 * $0 }.reduce(0, +) / Float(buffer.frameLength))
            let decibels = 20 * log10(rms)
            
            print("当前噪音分贝值: \(decibels)")
        }
        
        do {
            try audioEngine.start()
        } catch {
            print("音频引擎启动失败: \(error.localizedDescription)")
        }
    }
    
    func stopMonitoring() {
        audioEngine.stop()
        audioEngine.inputNode.removeTap(onBus: 0)
    }
}

使用时只需调用startMonitoring()就能实时获取噪音水平,不需要录制任何音频文件,完全匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:20:28