いま僕が作りたいと考えているオーディオ・アプリケーションについて、ざっと要件をあげてみると次のようになります。
- クロス・プラットフォームであること*1
- リアルタイムでエフェクトがかけられること
- エフェクトがかけられなくても構いませんが、そうするとあらかじめエフェクトをかけた音ファイルを用意しておかないといけないので、ディスク容量をかなり食うことになります。
- キー入力やタイマー処理があること
- 似た使い勝手でグラフィックスも扱えるとうれしい
- RDBMSに記録を残したい
まずクロス・プラットフォームであることが第1の要件なのでCore Audioは使えません。また、キー入力やタイマー処理もできるものと言うと、ゲーム向けに作られたもののほうが有利。先日のエントリーで挙げたライブラリのうちから選んでみると、SDLとLWGJL(LWGJLにはOpenALのラッパーが含まれている)が候補に残りました。
このところClojureが楽しいので、Clojureと連携できるJavaで使えるもののほうが魅力的です。Javaとより相性の良さそうなLWGJLを試してみることにしました。チュートリアルを読んだ限りでは、JavaSoundを使うよりかなり少ないコード量でいろいろできるようです。
一方、SDLの魅力は多くの言語へのバインディングが用意されていること。CやJavaは当たり前で、ErlangやOCamlまでSDLを呼び出せる。これはスゴイ。
*1:「クロス・プラットフォームで作る」というのは「機能的にはネイティブにかなわない」ということでもあるので、プラットフォーム限定したほうが良い場合も多いです。今回は“狭く深く”ではなく“広く浅く”使えることを目指したいのでクロス・プラットフォームです。