arrays - swift iOS - 无法从 tracker.Frequency Audiokit 输出创建数组

标签 arrays swift audiokit

我在我的应用程序中使用 AudioKit 麦克风分析来检测声音频率。一切工作正常,但是,我想捕获前几个(可能是 20 到 30 个)频率并将其存储在数组中。我可以使用 print(tracker.Frequency) 打印频率。我正在尝试在空数组上使用 insert 来存储

这是我的 View Controller 中的代码

@objc func updateUI() {
    if tracker.amplitude > 0.01 {
        frequencyLbl.text = String(format: "%0.1f", tracker.frequency)

        var frequency = Float(tracker.frequency)


        while frequency > Float(noteFrequencies[noteFrequencies.count - 1]) {
            frequency /= 2.0

        }
        while frequency < Float(noteFrequencies[0]) {
            frequency *= 2.0
        }
        // This is not working. I need an array like [23.111, 234.555, 345.65.. etc]
        var dynamicFrequency: [Float] = [frequency]
        for f in dynamicFrequency {
           dynamicFrequency.insert(f, at: 0)
        }
        print(dynamicFrequency)


        var minDistance: Float = 10_000.0
        var index = 0

        for i in 0..<noteFrequencies.count {
            let distance = fabsf(Float(noteFrequencies[i]) - frequency)
            if distance < minDistance {
                index = i
                minDistance = distance
            }
        }
        let octave = Int(log2f(Float(tracker.frequency) / frequency))
        noteNameLbl.text = "\(noteNamesWithSharps[index])\(octave)"
        noteNameFlatsLbl.text = "\(noteNamesWithFlats[index])\(octave)"



    }
    amplitudeLbl.text = String(format: "%0.2f", tracker.amplitude)

}

输出显示如下

AKMicrophone.swift:init():45:Mixer inputs 8
Audio Kit Started
[27.1829815, 27.1829815]
[16.7672386, 16.7672386]
[32.2606049, 32.2606049]
[31.2773647, 31.2773647]
[31.2035122, 31.2035122]
[31.5194035, 31.5194035]
[32.4384956, 32.4384956]
[25.3139915, 25.3139915]
[28.1445961, 28.1445961]

但是,我期望输出为

    [27.1829815,16.7672386,32.2606049,31.2773647,31.2035122,31.5194035,32.43849 56,25.3139915,28.1445961]

我做错了什么?

最佳答案

看起来您经常调用updateUI()。这就是 dynamicFrequency 被打印多次的原因。 要获得所需的输出,您需要在 updateUI() 之外声明 dynamicFrequency 并在它具有 20 个频率左右时打印其内容:

var dynamicFrequency: [Float] = [frequency]
@objc func updateUI() {
    //...
    for f in dynamicFrequency {
        dynamicFrequency.insert(f, at: 0)
    }
    if dynamicFrequency.count == 20 {
        print(dynamicFrequency)
        //The following line would be optional 
        //if you'd like to empty the dynamicFrequency 
        //once you print its contents
        dynamicFrequency.removeAll()
    }
    //...
}

关于arrays - swift iOS - 无法从 tracker.Frequency Audiokit 输出创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51920095/

相关文章:

数组的 Javascript/AJAX JSON 编码 - 收到数据后如何使用?

javascript - 如何访问数组中子数组最后一个元素的字段?

ios - 如何在 Swift 的闭包中调用 super

swift - 下载并保存 PFFile (UIImage) 以在 UIImageView 中显示 : SWIFT

AudioKit MIDI 事件 - 基本问题,发送到外部合成器,不确定处理

swift - Audiokit 奇怪的小频率振幅值

arrays - 给定区间内 2 个排序数组元素的差异

java - 存储静态对象列表的最有效方法是什么?

swift - 当网络连接不可用时,Realm 使用本地数据库而不是同步?