MATLABとMax/MSPのコミュニケーション
2006 BLOG
科学計算用数値計算プログラミング環境とでもいうべきMATLABをDSPのエンジンとして、Cycling’74 Max/MSPからコントロールする方法についてまとめる。
最近になって、音楽の解析のために、科学計算用数値計算プログラミング環境とでもいうべきMATLABに手を出し始めた。MATrix LABoratoryというだけあって、行列/ベクトルの計算が非常に簡便にこなせるのには驚いた。例えば、ある信号の時系列データaとbの配列の各要素の足し算(二つの音声信号のミックスなど)がしたければ、a+bで済んでしまう。C言語でfor文でまわすのとは大きな違いである。解析結果も即座にグラフ表示ができる上にインタラクティブなGUIアプリケーションも簡単に作れてしまう。さすがにデファクトスタンダーdなだけあって、信号解析用のシステムとして優れているなぁ、と変に感心してしまった。(DSPな人たちにとっては当たり前のことなんでしょうが… )
ただし、私がMATLABを使う目的は解析そのものにあるわけではなく、解析した結果を楽曲制作に生かすようなシステムを作ることにある。そのためには、科学計算用に作られたMATLABよりも音楽用のMax/MSPの方が当然使い勝手がよい。そこでMATLABを解析用にバックグラウンドで動くエンジンとして用いた上で、インタラクティブな部分は従来通りMax/MSPで作ってはどうかと… そういう手抜きなことを考えている。
MATLABとMax/MSPのコミュニケーションの方法について調べてみたので、備忘録もかねて以下にまとめておく。
1. matlabcommunication エクスターナル
そのままズバリMATLABをMax上からコントロールするためのMaxエクスターナルオブジェクト。僕の環境では、MATLABのバージョンを7.0から最新の7.3にアップデートして初めて動作した。Maxをターミナルから起動しないといけない点と、オブジェクトを読み込むたびにMATLABのエンジンを起動するので時間がかってしまうのが難点だが、簡単なスクリプトを実行するには、非常に便利。helpファイルには、MATLAB-Max/MSP間でバッファーの中身をやり取りするメッセージが紹介されているが、実際にはオブジェクトの方で受け付けてくれないのが残念である。また動作に不可解な点も見られる。次のOSCの仕組みを使った方が自由度は高いか。
2. Open Sound Control for MATLAB
Andy Schmederさんの Open Sound Control(OSC)をMATLAB上で利用するためのコンポーネント。CやFortranで書いたコードをMATLABのスクリプト上から呼び出せるような方にコンパイルするMEXという仕組みを利用している。MATLAB上にサーバ or クライアントを作って、Max/MSPのOSC用のオブジェクトからアクセスし、必要なデータをやりとりするという形になる。現時点では、このやり方が一番実用的という印象。
(追記: ファイルをダウンロードして解答するとexampleという使い方の例のファイルが入っている。これがクセ物で、昔のバージョン用のサンプルらしく関数の名前が間違えているため、動かない。要注意!)
3. エクスターナル自作
MATLAB Compilerを持っていれば、MATLABのコードをCやC++から呼び出せるライブラリにコンパイルすることができる。まだ試してはいないが、Maxオブジェクトとコンパイルしたライブラリとをリンクすることができれば、MATLABのコードをMaxオブジェクトとしてまとめることができるはずである。ただし、このライブラリを利用するにはMCRというMATLABのRuntime (MATLAB本体と同等の200MB以上のファイルサイズ)をインストールし、適切なファイルパスを設定する必要がある。また、エクスターナルの起動時にMATLABそのものを起動させることになり、オブジェクトの読み込みにかなりの時間がかかってしまう。これらを考え合わせると、エクスターナルとしてつくったとしても、Web上での配布等は難しいのではないだろうか。
上のOSC MEXとmatlabcommunicationを作った人たちと同時にiChatで話す機会があったのだが、そのときに「地球上でMaxとMATLABの通信に興味がある人間のうちの半分くらいがここにいるね」という冗談が出たのだが、個人的にはもっと増えてもいいのではないかと思っている。DSPの実験環境としてMATLABほど包括的かつ実戦的なものは少ない。インタラクティブ性に富んだMax/MSPと組み合わせて使いこなせるようになれば、楽曲制作やインスタレーション制作の強力な味方になってくれるはずである。
残念ながら、MATLABはかなり高価なソフトウェアであって、大学や企業の研究所にいるではないかぎりはおいそれと購入するわけにはいかないかもしれない。そういう意味でも、MATLABの機能をほぼ忠実に移植したOpen SourceのOctaveに注目している。MATALBのスクリプトは問題なく実行できるようだが、僕の知る限りにおいては、MEXやMATLAB Compilerのような、MATLAB/Octaveの世界と外のC, C++の世界をつなぐ仕組みがまだOctaveにはないようだ。OctaveにMEXのような仕組みが導入されれば、すぐにでもOctave用のOSCコンポーネントを作るつもりである。
番外だが、信号処理の入門としてこの本を強くお勧めする。フィルタなどの基本から、音声認識/合成などまで実際のMATLAB/Octaveのコードを試しながら勉強することができる。Octaveを使う場合、Mac (特にIntel Mac)へのOctaveのインストールの仕方について簡単にまとめておいたので参考にしていただきたい。
Featured Articles