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
相关产品推荐
相关产品推荐

