[Swift3]AudioKitを使ってピアノっぽいものを作ってみた

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る
ライブラリを表す画像

ライブラリのラの字も知らなかったほどのiPhoneアプリ開発初心者が、頑張ってライブラリを使ってみようというシリーズ。

今回は、その名の通りオーディオ周りのことがいろいろできそうな「AudioKit」を使ってみた。

導入方法(CocoaPods)

Podfileに以下の行を追加し、ターミナルでpod install。対応OSについて記載が見つからなかったが、とりあえず9以上ならOKなことはわかった。

※CocoaPodsの導入方法はこちら、CocoaPodsの使用方法はこちらの記事を参照。

ひとまず完成品から

まずは完成したソースを紹介して、それから1つずつ説明していこうと思う。

ストーリーボード上に「ドレミファソラシド」のボタンを計8個配置する。

ストーリーボード上に音階のボタンを配置

あとはViewController.swiftを以下のように編集。ストーリーボードに配置したボタンはそれぞれ「playDo()」〜「playDo2()」としてAction接続する。

ソースの説明

①鳴らす音ごとにAKOscillatorのインスタンスを作成する

音の種類ごとにAKOscillatorクラスのインスタンスを作成する。

今回は「ド」「レ」「ミ」「ファ」「ソ」「ラ」「シ」「高いド」の8種類の音を鳴らすため、8個のインスタンスを作成する。

②オシレーターごとの周波数をセット

作成したAKOscillatorインスタンスのfrequencyプロパティに、鳴らす音の周波数を指定する。数字が大きいほど高い音になる。

周波数についてはこちらのサイトを参照。

③オシレーターごとの音量をセット

同様に、amplitudeプロパティで鳴らす音の音量を指定する。

1.0がデフォルトのようだが、そのまま鳴らすと音量が大きいので今回は0.5に設定した。

④再生準備

AudioKit.outputに鳴らす音を指定して、AudioKit.start()で再生できる状態にする。が、普通に指定しようとすると1種類の音しか指定することができない。

そこで、AKMixerクラスのインスタンスにこれまで作ったAKOscillatorインスタンスを複数ぶち込み、それをAudioKit.outputに指定する。

⑤オシレーターを再生・停止する関数

AKOscillatorインスタンスに設定した音は、start()メソッドで再生開始、stop()メソッドで停止する。

鳴らす手順は音階のどの音でも同じなので、その処理を共通化する。(再生中なら停止、停止中なら再生する)

⑥ボタンごとに音を鳴らす処理を組み込む

ボタンごとに、⑤で作成したplaySound()関数を呼び出す処理を書いていく。

こんなものが出来ます

ボタンを押すと、ラベルに対応した音が鳴る。もう一度押すと音が止まる。複数の音を同時に鳴らすこともできる。

(音が出ます。注意)

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。