我正在尝试构建一个简单的调谐器或一些记录声音的简单应用程序,然后发回声音的频率。这可以用来找到声音的音符(如在吉他调音器中),但我主要是想简单地录制声音并让应用程序发回声音的频率。有人能指出我正确的方向吗?我已经阅读了一些关于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.
}
}
答案 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.
}
}