ここ数年間、音のプログラミングを教えるための言語として、Octaveを採用しています。Octaveの良いところは
- 無料
- OctaveForgeのライブラリによってWAVファイル読み込みが簡単
- 多くのディストリビューションには最初からライブラリが含まれていて、起動時にパスが通っている
- 対話型
- 行列計算に強い
などがあります。Matlabは有料ですが、さらに優れたライブラリ群が用意されていますし、多くの音響研究にMatlabを用いられている実績もあります。
ただ、インタラクティブなソフトが書けるほうが学生の興味もわきやすいので、非リアルタイムのプログラムしか書けないことは大きな弱点です。そこで、PureDataやProcessingなどの言語で現在行っている講義内容が置き換えられるかを、時折試しては挫折しています。この挫折の理由の主要因は、実際に音響プログラミングの本筋に入る前に必要な前提知識が多すぎることにあります。
たとえば以下の、音を読み込んで再生するプログラムを考えてみましょう。Octaveでは起動後にいきなり
[x,fs] = wavread("music.wav"); wavplay(x, fs);
とすれば音の再生ができます*1。
一方、Processing(とMinim)を用いた場合は
import ddf.minim.*; Minim minim; AudioPlayer in; void setup() { minim = new Minim(this); in = minim.loadFile("music.mp3"); in.play(); } void draw() { } void stop() { in.close(); minim.stop(); super.stop(); }
のようになります。「おまじない」としてライブラリのインポートやクラス・インスタンスの宣言、メモリの解放などが必要になっています。これらのおまじないがなぜ必要なのかを説明するだけで講義を1回か2回使ってしまうのがもったいないと感じます。
ただ、JavaをベースにしているProcessingを勉強しておけば、将来的にオブジェクト指向プログラミングをやろうと思ったときにも良いかなぁ、IT系に就職する学生もちらほらいるし、Arduinoを使いたいというのもいるし、などとも考えます。ほとんどの学生は初めてプログラミングをするので、最初から「こういうもんだ」と教えてしまっても付いてきてくれそうな気はしています。