尝试构建一个简单的调谐器

bea*_*rth 5 ios swift swift2

我正在尝试构建一个简单的调谐器或一些简单的应用程序来记录声音然后发回声音的频率。这可用于查找声音是什么音符(如在吉他调音器中),但我主要是希望简单地录制声音并让应用程序发回声音的频率。有人能指出我正确的方向吗?我读过一些关于 FFT 或其他东西的东西,但我有点菜鸟。我查看了谷歌,但无法找到太多关于此的信息,但有人谈论他们制作的应用程序和一些我不知道该怎么做的代码。

好的,刚才我正在查找可能有帮助的内容:http : //audiokit.io/。这可能是简单的解决方案,但再次不确定这是否是大多数人会做的。

所以我设法导入了audiokit。问题是我似乎无法让代码工作来仅在发出声音时显示频率。这是代码

import UIKit
import AudioKit

class ViewController: UIViewController {

    @IBOutlet weak var frequencyLabel: UILabel!

   let mic = AKMicrophone()


    override func viewDidAppear(animated: Bool) {



    }
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib

        let tracker = AKFrequencyTracker.init(mic, minimumFrequency: 200, maximumFrequency: 2000)
        var silence = AKBooster(tracker, gain: 0)
        AudioKit.output = silence
        AudioKit.start()


        if tracker.amplitude > 0.1 {
            frequencyLabel.text = String(format: "%0.1f", tracker.frequency)
        }


    }




    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}
Run Code Online (Sandbox Code Playgroud)

bea*_*rth 2

好吧,我想通了……作为套件的一部分,我遗漏了很多东西。原因是,我在audio.io网站上遵循了这些说明,但当您下载实际的音频套件时,示例中还包含大量其他内容。这是我制作简单频率的代码。有用!!!!

import UIKit
import AudioKit

class ViewController: UIViewController {

    @IBOutlet weak var frequencyLabel: UILabel!

    var mic: AKMicrophone!
    var tracker: AKFrequencyTracker!
    var silence: AKBooster!

    override func viewDidLoad() {
        super.viewDidLoad()

        AKSettings.audioInputEnabled = true
        mic = AKMicrophone()
        tracker = AKFrequencyTracker.init(mic, minimumFrequency: 200, maximumFrequency: 2000)
        silence = AKBooster(tracker, gain: 0)


    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)

        AudioKit.output = silence
        AudioKit.start()
        NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: #selector(ViewController.updateUI), userInfo: nil, repeats: true)
    }

    func updateUI() {
        if tracker.amplitude > 0.1 {
            frequencyLabel.text = String(format: "%0.1f", tracker.frequency)
        }
    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}
Run Code Online (Sandbox Code Playgroud)