iPhoneで音を出したくなった

もちろん、プログラムの中でのはなし。

どうもいくつか音を出す方法があるようだが、一番簡単なのは
iPhone Core Audioに含まれる、
Audio Toolboxフレームワークに含まれる、
System Sound Servicesというフレームを使うのが簡単なのだそうだ。

なんとなく、ワン!といわせたかったので、
X-CodeでView-Basedなアプリケーションを作って、プログラムに-(IBAction)sayWan;というメソッドを宣言し、その実装でAudioServicesPlaySystemSoundというAPIを使って音を鳴らす。ただしこのAPIのパラメータはSystemSoundIDなるものを要求するので、事前にAudioServicesCreaetSystemSoundIDというAPIを使う方法があるようだ。
で、Interface Builderでボタンを配置してからそのボタンと先ほど作ったsayWanというメソッドをつないでおけば、ボタンを押すだけでワン!と言うようになる。
もっともその前にワン!という音声ファイルを用意しないといけないのだけれど。

#ちなみにこのIBActionはInterface Builderのために定義されているマクロで、これを型として記載した関数はInterface Builderで定義したオブジェクトの動作を受け取るための関数ということになる。


早速ビルドしてそワン!いうことになっているボタンを押してあげると、きちんと声が聞こえてきた。
調子にのって連打してみると、、、
どうもこの音の鳴らし方では同時にひとつの音までしか鳴らすことが出来ないようだ。
ボタンを押すたびに前に再生した音が終了してまた頭から音声が流れ始めるので。


というわけで、System Sound Servicesを使っては自分の求める複数音声同時再生が実現できないようなので、他のフレームワークおよびサービスを探索することにした。


、、、と思ったが、それ以前に一部のコーデックについては解析処理をハードで実行しているがために、一度に1ファイルしか再生できないらしい。
まずはコーデックを変更してやってみよう。


で。さきほどのファイルを無圧縮のwavに変換してみたところ(VLCを使用)、なんと無事複数ファイル同時に音声がなるじゃないですか。
コーデックが悪かったんですねー