2005年10月07日
NSSoundと戯れる
そろそろ、本格的に簡易オーディオプレーヤを作るべく、NSSoundクラスのドキュメントを読んだ。
何か、扱いが凄い簡単なんですけどー...。ファイルを与えてオブジェクトを作成し、あとは「play」「stop」と言った、見て字の如くな機能を備えたメソッドを呼んでやれば、その通りに動作してくれるようだ。
というわけで、早速実装実装。
ドキュメントにはサンプルコードが付いているので、それを切り貼りして、InterfaceBuilderでActionを設定してやるだけ。そして、出来たのがこれ。
最初は動かなかったが、試行錯誤を繰り返すうちに、無事動くようになった。かかった時間は1時間もないだろうか。ソースの行数にして、僅かに70行。たったそれっぽっちのプログラムで、オーディオプレーヤとして有するべき、基本的な機能は持ってしまっているという点が凄い。NSSound万歳である。
ドキュメントによれば、NSSoundは16bit/44.1k or 22.05k HzのAIFFやWAVEなどの、単純なファイル形式しかサポートしていないことになっている。が、しかし、実際にはMP3やAAC(m4a)も難なく読めてしまっている。Technical Q&A QA1335を読むと、v10.3以降では(?)QuickTimeやCoreAudioで再生できる形式ならば、再生できるようになったとか。
便利なNSSoundにも欠点はあって、それはストリーム再生ができないということ。つまりそれは、NSSoundで再生できないファイルは、どんなに足掻いても再生できないということだ。非対応のファイルは再生できなくても当然、と思うかもしれないが、ストリーム再生に対応していれば、様々なデコーダを用意しておいて、そのデコーダが吐き出すWAVEなりAIFFなりを流し込んでやれば、再生することができる。
ストリーム再生を行うとなると、CoreAudioかQuickTimeを使わざるを得なくなるわけで、そうすると一気に難易度が上がる。しかし、各種オーディオファイル(エミュの音源ファイルなんかも含む)の再生を考えると、避けては通れない道だ。まぁ、そのうち勉強しよう。