2016-07-26 6 views
3

Ich versuche, einen einfachen Tuner oder eine einfache App zu bauen, die einen Ton aufzeichnet und dann die Frequenz des Tons zurücksendet. Dies könnte verwendet werden, um herauszufinden, welche Note der Klang ist (wie bei einem Gitarrenstimmgerät), aber ich versuche hauptsächlich, einfach einen Ton aufzunehmen und die App die Frequenz des Klangs zurücksenden zu lassen. Könnte mir da jemand in die richtige Richtung weisen? Ich habe ein paar Sachen über FFT oder andere Dinge gelesen, aber ich bin ein bisschen wie ein Noob. Ich habe über Google nachgeschaut, konnte aber nicht viel darüber finden, aber jemand redet über eine App, die er gemacht hat, und über einen Code, von dem ich keine Ahnung habe, was er machen soll.Versuch, einen einfachen Tuner zu bauen

Okay, gerade jetzt habe ich etwas gesucht, das helfen könnte: http://audiokit.io/. Dies könnte die einfache Lösung sein, aber wieder nicht sicher, ob dies die meisten Menschen tun würden.

So habe ich Audiokit importiert bekommen. Das Problem ist, dass ich den Code nicht dazu bringen kann, nur die Frequenz anzuzeigen, wenn ein Sound erzeugt wird. Hier ist der Code

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. 
    } 


} 
+0

Kurze Version: Nehmen Sie den realen Teil der fft Ihrer Probe, dann finden Sie die maximale Magnitude bin. Das entspricht der dominierenden Frequenz. – Feldur

+0

danke für den Kommentar. Könntest du mir bei einer Lösung mit audiokit.io helfen? es scheint ziemlich einfach, aber mein Code funktioniert nicht aus irgendeinem Grund. – bearsworth

+0

Sie sollten den Code veröffentlichen, der nicht funktioniert, wenn Sie möchten, dass jemand bei der Korrektur hilft. – FredericP

Antwort

1

Okay, also habe ich es herausgefunden ... Ich habe viele Dinge als Teil des Kits vermisst. Der Grund ist, dass ich von der audio.io-Website diesen Anweisungen gefolgt bin, aber es gibt eine Menge anderer Dinge, die in dem Beispiel enthalten sind, wenn Sie das eigentliche Audio-Kit herunterladen. Hier ist mein Code, um die einfache Frequenz zu machen. Es klappt!!!!

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. 
    } 


}