Cycling ’74 Max で、DoctorMX の OSC機能 から出てくるOSCを取り扱う方法について解説します。
DoctorMXのOSCは「OSC-Blob」
DoctorMXには流れ図に「OSC」の機能があって、任意のUDPポートにDMX信号と同等の内容をOSCで「送信」することができます。
しかし、このOSCメッセージをMax側で単に udpreceive しても、エラーになってしまいます。
この原因は、DoctorMXが出すOSCが、「OSC-Blob」という特殊なデータ型であるためです。OSC-Blobは、一度に大量の数値を送信するために用いられるデータ型で、DMXのように、一度に512chぶん、しかも何百回も繰り返し送信する必要がある場合などに適する型です。
なお、DoctorMXの「シリアル」機能で単発のOSCを送信した場合は、そのまま udpreceive で受信することができます。Qlab用の操作コマンドなど、単発的に命令を出せば良い場合などはこれで十分です。
ちなみに、PC卓「QLC+」から出てくるOSCも同様に、そのまま受信できることが知られています。(本来これもBlob的性質だと思うのですが、QLC+では単発のOSCをたくさん出すことで処理しています)
OSC-BlobをMaxで受信する
OSC-BlobをMaxで正常に取り扱うためには、以下2つの操作が必要です。
- udpreceive に「a」を付けて「フルパケットモード」にする
- CNMATのOSC関連外部オブジェクトをダウンロードして使えるようにする
まず1つ目ですが、[udpreceive ポート番号] に続けて何らかの文字 (aでなくても良いですが、仮にaとします) を付けると、「フルパケットモード」と言って、OSCの生データをそのまま出す状態になります。実はudpreceiveは、udpと言っておきながら、特定のOSCメッセージに特化した仕様になっているので、その制限を外してあげるわけです。
このままでは、「FullPacket 532140….」とデタラメな数字が動いているだけなので、これをOSCとして解釈できるようにしてあげます。ここで必要になるのが、CNMAT (カリフォルニア大学バークレー校の研究機関である、Center for New Music and Audio Technologies) が作っている一連のOSC関連オブジェクトです。
Maxのかなり初期から使用されているようで、外部オブジェクトですが公式のレファレンスに登場するなど、半分公式オブジェクトのような扱いになっています。
この中で「OpenSoundCountrol」というオブジェクトを udpreceive の下につなげてあげると、DoctorMXが出しているDMXと同じ内容が、Maxで扱える形で出てきます。
あとは、これを route なり、zl 関係のオブジェクトをうまく使うなどして、加工すれば、DMX操作に応じてMax側でアクションを起こすことができるでしょう。
……ところで、DoctorMXのOSC機能は、特にUSBインターフェイスボックスを接続していなくても制限なく使えてしまうんですよね。この話が分かる人はすでにDoctorMXを使いこなしているので問題ないと思いますが、くれぐれも悪用をなさらぬよう、良識を持って使いましょう。
おまけ: Max/MSPとは?
Cycling ’74 Max という、信号や数値をパッチコードで繋いでプログラミングをする、「ビジュアルプログラミング言語」のことです。Max/MSPというのは旧称ですが、Maxだけだと一般名詞すぎて伝わらないので、今でもこう呼んでいる人は多いです。
Maxは、インタラクティブなメディアアートの文脈で使用されてきたものであり、異種信号間の相互変換に非常に強いです。映像、音声、キーボード入力、MIDI、OSC、…あらゆる「信号」はMax上で取り扱って相互変換できると言って良いでしょう。
照明で使用するDMXやArt-Netは、標準では対応していませんが、有志が作った外部オブジェクトにより、DMX USB Pro、Art-Net等は一部対応しています。
つまり、映像や音声、その他入力に合わせて照明をインタラクティブに/自動的に動かすことも可能なプログラミング環境です。
興味を持った方は是非チャレンジしてみてください。
コメント
コメント一覧 (1件)
[…] ところで、1つ前の記事で解説した「DoctorMXからOSCをMaxに取り出す」方法と組み合わせると、おそらくDoctorMXのDMX出力をOpen DMX USBから現実世界に出せてしまうと思います。そこまでするマ […]