试图建立一个简单的调谐器

时间:2016-07-26 01:53:51

标签: 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.
    }


}

1 个答案:

答案 0 :(得分:1)

好的,所以我想出来了......作为套件的一部分,我错过了很多东西。原因是我从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.
    }


}