Open Sound Control
概要
OpenSound Control、略して OSC は、アプリケーション間の通信プロトコルで、主に音楽関連のデータをやり取りすることを目的に設計されている。 OSC のドキュメントによればその主な特徴は以下の通り。
- 制約がなく、動的な、URL 形式の名前付け
- 数値やシンボルの伝達
- 一つのメッセージを複数のターゲットに送信するためのパターンマッチング言語
- 高解像度な時刻タグ
- メッセージを同時に伝えるためのバンドル機構
- サーバーの機能とその説明をいつでも聞き出せるクエリ機構
その設計上、音関連には限らず幅広い用途に転用できるため、現在では非常に多くのアプリケーションが OSC をサポートしている。 自分でプログラムを書くにしても、ソケット通信をイチから書くのはとても手間だしアプリケーション間で整合させるのも面倒だが、 OSC を使うとそのあたりの手間が激減するので大変重宝する。 メディア系のアプリケーション間通信では事実上の標準プロトコルになりつつあると言ってもいい。 機械をまたぐ通信も UDP や TCP を使って行えるため、以前では MIDI を使っていたような場面でも OSC が使われるようになってきた。
プロトコルの特徴
OSC アドレス
OSC ではサーバー側は設定可能な機能のすべてに固有の「アドレス」を割り振り、 クライアントから送る OSC メッセージはそのアドレスを宛先として指定する。 OSC の特徴は、このアドレスが URL のような形式を持ち、アプリケーション製作者で自由に決めることができるところにある。 例えばメッセージを送る先のアプリケーションが発振器の機能 "oscillator" を持ち、 各発振器はパラメタとして "frequency"(周波数)・"amplitude"(振幅) が設定できるとしよう。 すると、oscillator の周波数を設定するためのアドレスは
/oscillator/frequency
となる。このアドレスにメッセージを送る方法は使用するアプリケーションによって異なるが、ここでは
/oscillator/frequency 44100
と記すことにする。同様に振幅を変えたければ、
/oscillator/amplitude 0.8
などと書ける。
この例のように、OSC を受け付けるアプリケーションは持っている機能が階層化されていることが前提となっている。 この構造はアプリケーションを書く側で自由に決めてよい。慣れないとどのようなアドレスを設定すればいいのかとまどうが、 OSC で推奨されているのはオブジェクト指向的に
/オブジェクト/オブジェクト/…/メソッド
というようにすることだ。これを別の言葉で言い換えれば、
/部品/部品/…/パラメタ
とも考えることができる。
OSC データ
OSC のデータは、データの型を示す "Type Tag String" と、データの値そのものからなる。 詳細は OpenSound Control Specification で定義されているが、 これは OSC を自分で実装しようとするのでない限り、熟読する必要はないだろう。 アプリケーションからの使い方はそれぞれのアプリケーションのドキュメントを参照した方がよい。
OSC でサポートされる型は標準では
- 実数
- 単精度実数
- 文字列
- blob(バイナリ列)
であるが、さらなる拡張としては、
- 倍精度実数
- MIDIデータ
- RGBA色データ
などが提案されているが、これらは使用するアプリケーションによっては実装されているとは限らないので、使用には注意する必要がある。
OSC をサポートするアプリケーション
オープンソースソフトウェアに限らず、OSC をサポートするアプリケーションは音楽ソフトを始めとして多い。 開発元がサポートしていなくとも、拡張プラグインとして配布されているものも多く見付かる。 有名どころでは、
- Max/MSP
- Pure Data
- SuperCollider
- REAKTOR
- Macromedia Flash (flosc 経由)
などがある。この種のソフトウェアを主に使う人々との共同作業をする上で、OSC は便利に使えるだろう。
通信経路について
主な OSC 実装では、UDP を使って OSC メッセージを送受信するものが多い。そのため、Ethernet や無線LAN を経由して通信できる。 UDP である以上、メッセージの到着が保証されないとか、データサイズの大きさに制限があるといった点に注意を要する。 実装によっては TCP や UNIX パイプなどを通信経路として使うことができる。サーバー/クライアントとも自分で設計するのであれば、 UDP 以外の実装も検討するとよい。
関連
- liblo - OSC を C 言語から使うためのライブラリ
- oscP5 - Processing 用 OSC ライブラリ