読者です 読者をやめる 読者になる 読者になる

サウンドプログラミングの入門用言語

ここ数年間、音のプログラミングを教えるための言語として、Octaveを採用しています。Octaveの良いところは

  • 無料
  • OctaveForgeのライブラリによってWAVファイル読み込みが簡単
  • 対話型
  • 行列計算に強い
    • 音響の世界では、たとえば5.1ch→2chへのダウンミックスに「マトリクス」を使いますが、その考え方がそのままOctaveでも使えます
    • 卒業研究で主観評価実験を行うときには統計処理が必要になることがありますが、行列計算ができれば統計処理もすんなり

などがあります。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を使いたいというのもいるし、などとも考えます。ほとんどの学生は初めてプログラミングをするので、最初から「こういうもんだ」と教えてしまっても付いてきてくれそうな気はしています。

*1:できるはず、ですが、もしかしたらwavplayは実装されていないかもしれません。僕の講義では波形レベルでの確認ができるように、wavread→音の加工→wavwrite→Audacityで確認という手順をとっています。