nativlog

NativeInstruments製品とテクノとデジタルの日々

OpenSound Control with Reaktor(Part2)

2005-03-03 00:15:52 | digital music
OSC解説第2回目です。

前回は対応アプリの紹介だけで終わってしまいましたが、少しずつOSCの中身に触れていきたいと思います。
あまり深く掘り下げるつもりはないので、期待せずに読んで頂ければと。

まず、OSCが対応するネットワークの説明です。OSCはOSIモデルでいうところのトランスポート層をデータ(例えばMIDIのCCやnoteの様な情報)がOSCパケットというデジタルデータの形でネットワーク中を流れます。
プロトコル自体はTCP/UDPどちらにも対応しているようなのでデータを厳密に送りたい場合はフロー制御や再送制御のあるTCPで通信、とにかくがんがんストリーミングしたいぜ!といった場合はUDPで通信という風に実装上で選択できそうです。

OSCのドキュメントによるとプロトコルとしては以下の様なネットワーク構成を想定しているようです。

・LAN内の各ホスト同士による通信
・LAN内のマシンのPeer to Peer(一対一)による通信
・WANによる通信(主にインターネット)
・スタンドアロンのホスト内通信

で、OSCではネットワーク上を流れる情報の単位を「OSCパケット」と呼んでいます。
OSCパケット自体はTCP/IPネットワーク上をサーバ・クライアントモデルでデータが送受信されますから、OSCを走らせるマシンはIPアドレス(ホスト)とポート番号(アプリケーション)で一意に特定しておく必要があるでしょう。

ReaktorのOSC設定項目でもIPアドレスを指定する欄があります。自ホストの設定はWindowsの場合は「ローカルエリア接続のプロパティ」の「インターネットプロトコル(TCP/IP)」で設定した情報が自動的に登録されます。ネットワーク設定に関しては実装依存になりますから、DHCPで自動的にホストを割り振るような使い方もできるはずです。
相手先ホストの指定は同じサブネット内の場合は「scan」ボタンを押すと探してくれます。WANによる通信、いわゆるインターネット上で通信したい場合は、通信相手のIPアドレスとポート番号を指定する必要があります。

さてOSCパケットの中身についてですが、OSCパケットは必ず8bytesの4の倍数の単位のバイナリの形でネットワーク上を流れます。パケットのヘッダー(最初のbytes)には必ずはっきりと識別できる「OSC Message」か「OSC Bundle」のどちらかのタイプのメッセージが付きます。

「OSC Message」は”/”スラッシュからはじまる「OSC Address Pattern」というメッセージからできています。MIDI的な情報はその後ろに続く「OSC Type Tag String」の引数で設定します。

「OSC Type Tag String」は例えばiであれば整数演算を、fであれば浮動少数演算といった意味になります。MIDI的なメッセージとしては以下にいくつか挙げておきましょう

--------------------
t OSCタイムタグ
c アスキーテキスト
r RGB表記によるカラー表記(32bit表記)
m 4バイトのMIDIメッセージ:port id, status byte, data1, data2の形式)
--------------------

というような感じのコントロールメッセージが「OSC Message」になります。

もう一方の「OSC Bundle」メッセージですが、こちらは "#bundle"というOSC文字列に続く「OSC Time Tag」から構成されるメッセージです。Time tagに関しては
http://www.cnmat.berkeley.edu/OpenSoundControl/OSC-spec.html#timetags
こちらに詳細がありますが、要は同期関係を司るパラメータのようです。


かなり長文になってしまいました、ちょっとblogでお伝えするような内容じゃナイヨウな気がしてきました。まだまだ続きそうですが、今回はこの辺で終わりにしておきます。

次回は実践編に進んでみたいですが、なにぶんネットワークと相応の機材が必要ですので時間が空いたら更新していきたいと思います。


*1 ちなみにOSCはオープンソースですので以下からソースをダウンロードできます。
http://www.cnmat.berkeley.edu/OpenSoundControl/src/libOSC/
ライセンスに関する記述がみあたりませんがバークレーなのでそれはもうオープンなのでしょう。

*2 OSC documentを見ながら適当に書いていますのでどこか間違えがあれば御指摘いただければ幸いです。


--
technodon