今回からは、楽器アプリを取り上げてみる。iPhoneをギターやピアノといった楽器にするアプリケーションは、App Storeの売り上げでも人気を博しており、iPhoneアプリの代表格とも言えるだろう。この連載としては、楽器アプリの作り方を通して、iPhoneのオーディオテクノロジーを概観する事が目的となる。
iPhoneのオーディオフレームワーク
アプリの制作にとりかかる前に、iPhoneが持つオーディオフレームワークを紹介しよう。図示すると、次のようになると思う。
iPhoneのオーディオテクノロジーは、Core Audioと総称される。その中でも重要なのは、Mac OS Xに由来するオーディオフレームワークであるAudio ToolboxとAudio Unitだ。この2つのフレームワークに、多くの機能が備わっている。その一部を書き出すと、
- オーディオファイルの再生、一時停止、ループ
- オーディオの録音
- 様々なオーディオフォーマットの読み込み
- オーディオのエフェクト処理
- 警告音やバイブレーションの再生(バイブレーションはiPod touchでは不可)
などがある。オーディオ関連の処理で必要なものは、ここにそろっている。
OpenALは、標準化されたオーディオAPIである。OpenGLのオーディオ版と考えてもいい。OpenALは様々なプラットフォームで実装されているので、その使い方に慣れている方は、ここから始めるといいだろう。その成り立ちから、ゲームアプリケーションでよく使われているようだ。3次元空間での音源位置指定や、ドップラー効果といった、ゲームで便利そうな機能を備えているのも特徴だ。
AVFoundationは、オーディオプレイヤーを簡単に作るために用意されたフレームワークだ。オーディオファイルの再生、一時停止、シーク、ボリューム設定、再生時間の取得、などを簡単に行える。これにユーザインタフェースを被せれば、自分のアプリケーションで簡単にオーディオプレイヤーを実現できる。他のフレームワークと比べると、高レベルに位置するものになる。
楽器アプリのためのライブラリ
このようなフレームワークがあることをふまえて、楽器アプリを作成する事を考えてみよう。楽器アプリに求められる要件は、次のようなものである。
- オーディオファイルの再生。ユーザが画面上に表示された楽器の一部をタップすると、用意されたオーディオファイルを再生する。
- 複数オーディオの同時再生。ユーザが同時に二カ所以上タップした場合は、その数だけオーディオを再生する。
- オーディオのループ再生。管楽器のように任意の長さの音を演奏できる楽器では、ループ再生する事が必要だろう。
このような条件を考えると、Core Audioの中から楽器アプリ実現に適したライブラリとして、次のものが考えられる。
System Sound Service
Audio Toolboxに含まれるサービスである。30秒以下のシステム警告音を鳴らすのに使われる。打楽器のようなものに対しては、十分な機能と言えるだろう。オーディオライブラリの中でも、最も少ない手順でオーディオファイルを再生する事ができるのも魅力である。
Audio Queue Service
こちらもAudio Toolboxに含まれるサービスである。オーディオデータのためのバッファを作成して、そこにデータを追加していく事で再生を行う。再生データを任意に変更する事ができるので、好きな箇所でループを再生を行うなど、自由度の高いオーディオ処理が可能となる。また、自分で波形を作成して鳴らすという、シンセサイザーのようなこともできる。機能が高い反面、取り扱い方は複雑になる。
OpenAL
OpenALはもともとゲームのために用意されたAPIなので、自由度の高い再生ができる。OpenGLとの相性もいいので、画面の表示と同期させたいときには適切だろう。また、パフォーマンスの点でも有利な事が多い。
これらのライブラリを使って、楽器アプリを作成してみよう。
最後に、一つ重要な点を注意しておく。iPhoneは様々なオーディオフォーマットに対応しているが、ハードウェアの制限としてMP3とAACは、一度に一つのファイルしか再生する事ができない。おそらく、フォーマットのデコードをハードウェアで処理しているためであろう。楽器アプリのように複数オーディオ再生が必要な場合は、AIFFやWAVといったフォーマットで音源を用意しておこう。