ios - 在连接到 Focusrite 2i2 的 AKFrequencyTracker 上获得奇怪的频率读数

标签 ios macos audio audiokit

我在使用 AKFrequencyTracker 时遇到一个问题,当连接到音频接口(interface)时,我在弹奏连接的吉他时看到 47kHz 左右的错误高频读数。我不需要演奏任何东西,我可以看到高频。幅度似乎根据来自接口(interface)的输入跟踪到它应该是什么。
我也能够在麦克风输入操场上重现这一点。这是稍作修改的版本。

//: ## Tracking Microphone Input
//:
import AudioKitPlaygrounds
import AudioKit

// 0 is mic
// 1 is focusrite

let selectedInput = 1

if let inputs = AudioKit.inputDevices {
    print("\(inputs.count) inputs found")
    for input in inputs {
        print("\(input.name): \(input.description)")
    }
    print("Chosen Input: \(inputs[selectedInput].name): \(inputs[selectedInput].description)")
    try AudioKit.setInputDevice(inputs[selectedInput])
}

print("Sample Rate Before: \(AKSettings.sampleRate)")
let sampleRate = AudioKit.engine.inputNode.inputFormat(forBus: selectedInput).sampleRate
print("Changing Sample Rate to \(sampleRate)")
AKSettings.sampleRate = sampleRate

let mic = AKMicrophone()

let micCopy1 = AKBooster(mic)
let micCopy2 = AKBooster(mic)
let micCopy3 = AKBooster(mic)

let tracker = AKFrequencyTracker(micCopy2, hopSize: 4096, peakCount: 20)
let silence = AKBooster(tracker, gain: 0)

//: The frequency tracker passes its input to the output,
//: so we can insert into the signal chain at the bottom
AudioKit.output = silence
try AudioKit.start()

//: User Interface
import AudioKitUI

class LiveView: AKLiveViewController {

    var trackedAmplitudeSlider = AKSlider(property: "Tracked Amplitude", range: 0 ... 0.8) { _ in
        // Do nothing, just for display
    }
    var trackedFrequencySlider = AKSlider(property: "Tracked Frequency",
                                      range: 0 ... 2_400,
                                      format: "%0.3f Hz"
    ) { _ in
        // Do nothing, just for display
    }

    override func viewDidLoad() {

        addTitle("Tracking Microphone Input")
        addView(trackedAmplitudeSlider)
        addView(trackedFrequencySlider)

        AKPlaygroundLoop(every: 0.1) {
            self.trackedAmplitudeSlider.value = tracker.amplitude
            self.trackedFrequencySlider.value = tracker.frequency
            if tracker.amplitude > 0.01 {
                print("Frequency: \(tracker.frequency)\tAmplitude: \(tracker.amplitude)")
            }
        }


        let fftPlot = AKNodeFFTPlot(micCopy1, frame: CGRect(x: 0, y: 0, width: 500, height: 200))
        fftPlot.shouldFill = true
        fftPlot.shouldMirror = false
        fftPlot.shouldCenterYAxis = false
        fftPlot.color = AKColor.purple
        fftPlot.gain = 100
        addView(fftPlot)

        let rollingPlot = AKNodeOutputPlot(micCopy2, frame: CGRect(x: 0, y: 0, width: 440, height: 200))
        rollingPlot.plotType = .rolling
        rollingPlot.shouldFill = true
        rollingPlot.shouldMirror = true
        rollingPlot.color = AKColor.red
        rollingPlot.gain = 2
        addView(rollingPlot)

        let plot = AKNodeOutputPlot(micCopy3, frame: CGRect(x: 0, y: 0, width: 440, height: 200))
        plot.plotType = .buffer
        plot.shouldFill = true
        plot.shouldMirror = true
        plot.color = AKColor.blue
        plot.gain = 2
        addView(plot)

    }
}

import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
PlaygroundPage.current.liveView = LiveView()
播放单个 A 音符的输出如下所示。
2 inputs found
Built-in Microphone: <Device: Built-in Microphone (45)>
Scarlett 2i2 USB: <Device: Scarlett 2i2 USB (41)>
Chosen Input: Scarlett 2i2 USB: <Device: Scarlett 2i2 USB (41)>
Sample Rate Before: 44100.0
Changing Sample Rate to 48000.0
Frequency: 0.0  Amplitude: 0.0
Frequency: 0.0  Amplitude: 0.0
Frequency: 200.0    Amplitude: 0.0010132051538676023
Frequency: 200.0    Amplitude: 0.0009377096430398524
Frequency: 23873.810546875  Amplitude: 0.0011335075832903385
Frequency: 23960.720703125  Amplitude: 0.0020712288096547127
Frequency: 11976.5791015625 Amplitude: 0.0018204051302745938
Frequency: 23956.021484375  Amplitude: 0.001121549867093563
Frequency: 23812.46484375   Amplitude: 0.0011597403790801764
Frequency: 23812.46484375   Amplitude: 0.0010917051695287228
Frequency: 23812.46484375   Amplitude: 0.0010660385014489293
Frequency: 23812.46484375   Amplitude: 0.001134994556196034
Frequency: 23812.46484375   Amplitude: 0.001019841991364956
Frequency: 23812.46484375   Amplitude: 0.0009903700556606054
Frequency: 23812.46484375   Amplitude: 0.0009054119000211358
Frequency: 23812.46484375   Amplitude: 0.0009549797978252172
Frequency: 23812.46484375   Amplitude: 0.0009998299647122622
Frequency: 23812.46484375   Amplitude: 0.0009498257422819734
Frequency: 23812.46484375   Amplitude: 0.0009073034743778408
Frequency: 23812.46484375   Amplitude: 0.0009004760067909956
Frequency: 23812.46484375   Amplitude: 0.0009699893998913467
Frequency: 23812.46484375   Amplitude: 0.0010407709050923586
Frequency: 23812.46484375   Amplitude: 0.0010262386640533805
Frequency: 23812.46484375   Amplitude: 0.0009718178189359605
Frequency: 23812.46484375   Amplitude: 0.009978151880204678
Frequency: 47177.0234375    Amplitude: 0.003072592196986079
Frequency: 47127.61328125   Amplitude: 0.0013660960830748081
Frequency: 47735.60546875   Amplitude: 0.001907210098579526
Frequency: 46763.9609375    Amplitude: 0.0021022947039455175
Frequency: 47023.5390625    Amplitude: 0.0015598429599776864
Frequency: 47597.9140625    Amplitude: 0.0015960222808644176
Frequency: 47480.890625 Amplitude: 0.0016460377955809236
Frequency: 47610.85546875   Amplitude: 0.002251675818115473
Frequency: 23986.009765625  Amplitude: 0.0037994058802723885
Frequency: 47241.359375 Amplitude: 0.0015401218552142382
Frequency: 81.2586898803711 Amplitude: 0.0019702680874615908
Frequency: 47823.76171875   Amplitude: 0.0017958006355911493
Frequency: 47340.4140625    Amplitude: 0.2594001889228821
Frequency: 46485.42578125   Amplitude: 0.2443418949842453
Frequency: 439.1202697753906    Amplitude: 0.1977834701538086
Frequency: 438.7035827636719    Amplitude: 0.178997203707695
Frequency: 438.89056396484375   Amplitude: 0.14854535460472107
Frequency: 439.0594177246094    Amplitude: 0.13751377165317535
Frequency: 438.93438720703125   Amplitude: 0.11730749160051346
Frequency: 439.00408935546875   Amplitude: 0.1075168028473854
Frequency: 439.0429382324219    Amplitude: 0.09269371628761292
Frequency: 438.9091796875   Amplitude: 0.08598381280899048
Frequency: 439.02099609375  Amplitude: 0.08173725008964539
Frequency: 438.84759521484375   Amplitude: 0.07284277677536011
Frequency: 439.15087890625  Amplitude: 0.06797594577074051
Frequency: 438.9859619140625    Amplitude: 0.06045695021748543
Frequency: 439.0673828125   Amplitude: 0.05586790665984154
Frequency: 438.60552978515625   Amplitude: 0.051378797739744186
Frequency: 438.995361328125 Amplitude: 0.048340748995542526
Frequency: 438.2513732910156    Amplitude: 0.046707604080438614
Frequency: 438.7973327636719    Amplitude: 0.04262331500649452
Frequency: 46400.02734375   Amplitude: 0.03838739171624184
Frequency: 438.7486572265625    Amplitude: 0.03510402515530586
Frequency: 46454.44140625   Amplitude: 0.033189449459314346
Frequency: 438.2769470214844    Amplitude: 0.031524695456027985
Frequency: 438.5264587402344    Amplitude: 0.02920457161962986
Frequency: 46384.69140625   Amplitude: 0.026590649038553238
Frequency: 438.8437805175781    Amplitude: 0.022203370928764343
Frequency: 46476.07421875   Amplitude: 0.021149421110749245
Frequency: 438.9068603515625    Amplitude: 0.01986468769609928
Frequency: 46408.11328125   Amplitude: 0.011579773388803005
Frequency: 47087.5  Amplitude: 0.003355375723913312
Frequency: 438.4395751953125    Amplitude: 0.0027760120574384928
Frequency: 47169.25 Amplitude: 0.0029691671952605247
Frequency: 47137.53515625   Amplitude: 0.0037814872339367867
Frequency: 47239.609375 Amplitude: 0.0036421294789761305
Frequency: 47280.1875   Amplitude: 0.00348213710822165
Frequency: 47243.96484375   Amplitude: 0.00349710276350379
Frequency: 47200.53515625   Amplitude: 0.003506213193759322
Frequency: 47199.453125 Amplitude: 0.0034976035822182894
Frequency: 47144.86328125   Amplitude: 0.0033620402682572603
Frequency: 47194.66796875   Amplitude: 0.003223164239898324
Frequency: 47233.7734375    Amplitude: 0.0029081928078085184
Frequency: 47167.11328125   Amplitude: 0.002717009512707591
Frequency: 47226.33984375   Amplitude: 0.0026167919859290123
Frequency: 47141.22265625   Amplitude: 0.00268756877630949
Frequency: 47199.5546875    Amplitude: 0.0027781547978520393
Frequency: 47346.63671875   Amplitude: 0.0027468751650303602
Frequency: 47168.578125 Amplitude: 0.0026313727721571922
Frequency: 47183.4921875    Amplitude: 0.0024406039156019688
Frequency: 47240.8984375    Amplitude: 0.0022249151952564716
Frequency: 47455.91796875   Amplitude: 0.0021174440626055002
Frequency: 47284.98046875   Amplitude: 0.002093059942126274
Frequency: 47233.26953125   Amplitude: 0.002134564332664013
Frequency: 47414.72265625   Amplitude: 0.0021047494374215603
Frequency: 47152.109375 Amplitude: 0.002083567436784506
Frequency: 47366.0703125    Amplitude: 0.002048497786745429
您可以看到它以非常小的幅度的“噪声”开始,然后它检测到适当的频率 ~440 Hz,并具有适当的幅度,但也有很多 ~47 kHz 的“噪声”读数。
我还没有找到很多关于像这样使用 AudioKit 和音频接口(interface)的信息。我已经在 iMac、iOS 模拟器和 iPad Pro 上重现了这个问题。
不确定它是否为此增加了任何有值(value)的东西,但是当使用模拟器或 iPhone 或 iPad 仅使用 iMac 的内置麦克风进行类似测试时,它会按预期工作并始终提供有效的频率读数。
我真的不认为这是 2i2 接口(interface)的问题,因为我在使用 Tascam 的其他音频接口(interface)甚至 Fractal AxeFx 3 时也看到了同样的问题。
任何帮助是极大的赞赏。

最佳答案

我对 AudioKit 不是特别熟悉,但根据您的输出,采样率为 48kHz。您可以正确采样的最高频率是奈奎斯特频率 f/2。您读取的任何高于 24kHz 的值都没有意义。
在 f/2 (24kHz) 以上,您将开始看到别名。这些是您之前看到的值的镜像副本。它们没有任何实际意义。 FFT 生成它们是因为它的计算方式。
当您接近 20kHz 时,人类的听力会迅速下降。如果目标是人类听觉,那么记录高于该频率的频率就没有多大值(value)。这就是我们使用常见采样频率 44.1kHz 和 48kHz 的原因。它们的奈奎斯特频率为 22.05kHz(高于大多数人的范围)和 24kHz(除了人类最好的范围之外)。 16kHz 也很受欢迎,因为它的奈奎斯特频率 (8kHz) 舒适地保持了人类语音的范围和人类听觉最敏感的范围。
顺便说一句,我自己有一个 2i2。不错的小盒子,它允许采样高达 192kHz(96kHz 奈奎斯特),这超出了人类的听觉范围,没有理由与 IMO 进行最终混音。但我听说它可以作为混合的起点,以避免在周期早期丢失数据,即使您稍后将采样率降低到 44.1。我不知道这是真的还是只是营销,但只是当您看到远高于 48kHz 的数字时的注释。

关于ios - 在连接到 Focusrite 2i2 的 AKFrequencyTracker 上获得奇怪的频率读数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63541819/

相关文章:

iphone - 在 iPhone 上禁用静音模式?

ios - 将 UITableView 平移限制为 1 个手指

objective-c - 不能与前面的 'type-name' 声明说明符组合

javascript - Gulp 正在添加\r\n 而不是仅仅\n

objective-c - 是否可以在Windows计算机上编译Objective-C,但对于Mac

macos - 如何在 macOS 上的 BOOT 上启动 MariaDB(如 MySQL)?

java - 使用 opentok 在不同应用程序之间进行视频聊天

iphone - iPhone 上的音频指纹识别实现

ios - 0.1 以下的 UIProgressView 值无法正确显示

ios - 是否需要删除断点 ipa 文件才能在 Ad hoc/Development/app store ipa 文件上运行?