MATLABとMax/MSPのコミュニケーション

科学計算用数値計算プログラミング環境とでもいうべき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のインストールの仕方について簡単にまとめておいたので参考にしていただきたい。

478983090X.01. Aa240 Sclzzzzzzz V57087907
ディジタル・サウンド処理入門
音のプログラミングとMATLAB(OctaveScilab)における実際

7 Comments

Join the discussion and tell us your opinion.

nao
November 26, 2006 at 3:06 pm

追記 – おもいっきり嘘を書いてました! MEXファイルをOctave上でコンパイルする仕組みがあるみたいです。ごめんなさい。詳しくわかったら、また書きます。

nao
November 26, 2006 at 5:51 pm

OSC for MATLABのインストール時に同時にインストールする必要があるlibloだが、バージョンに注意する必要がある。ホームページ上にv0.9とあるのは実際には0.09の誤りで、0.23が最新のようだ。ややこしいいいい….

ann
December 10, 2006 at 8:12 am

初めまして、octaveのインストールについて、参考させていただきました。
ありがとうございます。
インストールはできたのですが、sound関数というのはmacでは使えないのでしょうか?

nao
December 13, 2006 at 8:28 pm

こんにちは。参考になったようでなによりです。

mac上でのsound関数についてですが、Octave Forgeの以下の説明によると
http://octave.sourceforge.net/index/f/sound.html

Mac上では、そのままでは動かないものの、簡単なスクリプトを書くことで実装できるとあります。Mac上のターミナルからサウンドを再生するコマンドラインアプリがあれば、それを使うようにスクリプトを書くと良いようです。コマンドラインで再生するアプリを探してみたいと思ってます。分かったらまたblogに書きますね。

nao
December 15, 2006 at 5:56 am

sound関数を使ってみました

http://www.sonasphere.com/blog/?p=40

かつて音楽と呼ばれたもの » Blog Archive » Mac上でOctaveのsound()を使う
December 16, 2006 at 8:48 am

[…] MaxとMATLABのコミュニケーションについて書いた記事のコメントで質問された、Mac上のOctaveでsound関数(オーディオの再生)を使う方法について。 […]

たんぶらに張り付けていた音楽関連のリンクを移管 « /ekskleiv/のトビチ
December 29, 2007 at 9:45 am

[…] かつて音楽と呼ばれたもの » Blog Archive » MATLABとMax/MSPã®ã‚³ãƒŸãƒ¥ãƒ‹ã‚±ãƒ¼ã‚·ãƒ§ã… […]

Leave a reply