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

关于AudioKit无法捕获低于100Hz及高于20kHz频率的技术咨询

问题排查与解决办法

为啥会抓不到100Hz以下和20kHz以上的频率呢?主要是两个原因在起作用:

一、AKFrequencyTracker的默认限制

AKFrequencyTracker 本身是针对人耳常用的20Hz-20kHz频段优化的,它内部的算法默认会过滤掉超出这个范围的频率,而且默认的FFT参数(窗口大小、步长)对低频的分辨率不够,导致100Hz以下的信号很难被精准识别;高频则可能被默认的滤波逻辑直接截断了。

二、AudioKit默认音频配置的限制

虽然你的iPhone硬件能捕获20kHz以上的信号,但AudioKit默认用的是44.1kHz采样率(根据奈奎斯特定理,理论最高能抓22.05kHz,但实际默认配置里的低通滤波会进一步压缩上限),而且默认的音频会话模式可能带了降噪处理,也会影响极端频段的捕获。


接下来给你几个可行的解决办法:

1. 先提升AudioKit的采样率

把采样率调到48kHz,这样理论最高能捕获24kHz的信号,直接拓宽高频的覆盖范围:

// 一定要在初始化AudioKit之前设置!
AKSettings.sampleRate = 48000.0
AKSettings.audioInputEnabled = true

mic = AKMicrophone()
tracker = AKFrequencyTracker(mic)
silence = AKBooster(tracker, gain: 0)
AudioKit.output = silence
try? AudioKit.start()

2. 放弃AKFrequencyTracker,手动用FFT分析

如果AKFrequencyTracker的默认限制绕不开,直接用AKFFTTap自己处理FFT数据,完全掌控分析范围:

mic = AKMicrophone()
// 给麦克风加一个FFT监听
let fftTap = AKFFTTap(mic) { fftData in
    let sampleRate = AKSettings.sampleRate
    let binCount = fftData.count
    
    // 遍历每个频率bin,查找目标频段
    for binIndex in 0..<binCount {
        // 计算当前bin对应的频率
        let frequency = Double(binIndex) * sampleRate / Double(binCount * 2)
        // 获取该频率的信号强度
        let signalStrength = fftData[binIndex]
        
        // 检查是否是你要的低频(<100Hz)或高频(>20kHz),强度阈值可以自己调
        if (frequency < 100 && signalStrength > 0.1) || (frequency > 20000 && signalStrength > 0.1) {
            print("抓到目标频率:\(String(format: "%.1f", frequency))Hz,强度:\(signalStrength)")
        }
    }
}

silence = AKBooster(mic, gain: 0)
AKSettings.audioInputEnabled = true
AudioKit.output = silence
try? AudioKit.start()

这种方式能精准分析每个频率点,只要采样率够,就能覆盖你需要的频段。

3. 调整音频会话模式,关闭默认滤波

AudioKit默认的音频会话可能带了降噪或滤波,换成测量模式可以禁用这些处理,更适合精准测频:

import AVFoundation

// 在初始化AudioKit前配置音频会话
do {
    let session = AVAudioSession.sharedInstance()
    try session.setCategory(.playAndRecord, mode: .measurement, options: [.defaultToSpeaker])
    try session.setActive(true)
} catch {
    print("音频会话配置失败:\(error)")
}

最后给你个验证小建议:先用系统的AVAudioEngine写个简单的测试,确认硬件确实能捕获目标频段,再排查AudioKit的配置,这样能更快定位问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:20:40