【swift】【使ってみた】AudioKit 3.1.3
こんにちは。ミライスタートVB(A)erの石井です。
最初は、全部のライブラリを自作で全て作る!
くらいの意気込みでいたのですが、飽きてきm
効率良くアプリを開発を作成するためには妥協を辞さないという
考えにシフトしてきました。
そこで、【備忘】シリーズに引き続き、
【使ってみた】シリーズも掲載していこうと思います。
まずは、AudioKitというものを使ってみました。
github.com
(とりあえず、CocoaPodsはインストールされている前提で記載します。)
1.xcodeの「File」→「New」→「Project」を選択し、プロジェクトを作成する。
ここでは、AudioKitSampleとして作成します。
2.プロジェクト作成ディレクトリで、pod installを実行します。
用意するPodfileファイルの中身は、以下の通りです。
target 'AudioKitSample' do
pod 'AudioKit'
end
3.生成されたAudioKitSample.xcworkspaceをオープンする。
4.Main.storyboardの最初に表示されるViewControllerに以下を施します。
+ ViewControllerにAudioKitをインポート
+ ViewにViewを貼り付け、貼り付けたViewをEZAudioPlotに変更
+ 貼り付けたEZAudioPlotをViewControllerにaudioInputPlotという名前で関連づける
以上の操作を行ったのが以下のショットとなります
5.4で追加した行を踏まえて、ViewControllerを以下のように編集
(サンプルとほぼ同じですが、ラベルに関する処理は排除してます。)
import UIKit import AudioKit class ViewController: UIViewController { @IBOutlet weak var audioInputPlot: EZAudioPlot! var mic: AKMicrophone! var tracker: AKFrequencyTracker! var silence: AKBooster! var plot:AKNodeOutputPlot! let noteFrequencies = [16.35,17.32,18.35,19.45,20.6,21.83,23.12,24.5,25.96,27.5,29.14,30.87] let noteNamesWithSharps = ["C", "C♯","D","D♯","E","F","F♯","G","G♯","A","A♯","B"] let noteNamesWithFlats = ["C", "D♭","D","E♭","E","F","G♭","G","A♭","A","B♭","B"] override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. 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() setupPlot() NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: #selector(ViewController.updateUI), userInfo: nil, repeats: true) } func setupPlot() { plot = AKNodeOutputPlot(mic, frame: audioInputPlot.bounds) plot.plotType = .Rolling plot.shouldFill = true plot.shouldMirror = true plot.color = UIColor.blueColor() audioInputPlot.addSubview(plot) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func updateUI() { if tracker.amplitude > 0.1 { var frequency = Float(tracker.frequency) while (frequency > Float(noteFrequencies[noteFrequencies.count-1])) { frequency = frequency / 2.0 } while (frequency < Float(noteFrequencies[0])) { frequency = frequency * 2.0 } var minDistance: Float = 10000.0 for i in 0..<noteFrequencies.count { let distance = fabsf(Float(noteFrequencies[i]) - frequency) if (distance < minDistance){ minDistance = distance } } }else{ plot.color = UIColor.blueColor() } } }
実行するとこんな感じ。
とりあえず、これを時間がある時に弄ってみようと思います。
また何か試したら書いてみます。