目次
Open Sound Control
OpenSoundControl (OSC) は、シンセサイザーやコンピューターなどアプリケーションとデバイス間でリアルタイム メッセージ通信のプロトコルとして、カリフォルニアバークレー校の”Center for New Music & Audio Technologies (CNMAT)” で開発されました。当初の開発目的からOSCはMIDIの代替えと捉えられます。しかし通信にIPネットワークを使うこの特徴はメディアサーバー制御や照明制御などにも非常に効果的なもので、今ではショーコントロール分野で広く活用されるプロトコルとなっています。OSC 仕様 1.0 は 2002 年に公開され、2009 年の仕様 1.1 アップデートでは、新しい機能とデータ型のサポートが追加されています。
OSC概要
OSCの通信にはIPネットワークを使い、OSCパケットの伝送については主にUDPが利用されます。OSCパケットは、OSCメッセージ(OSC アドレス パターン、それに続く OSC タイプ タグ文字列)とその後に続く 0 個以上の OSC Arguments という値で構成されます。
OSC パケットを送信するアプリケーションはすべて OSC クライアントです。 OSC パケットを受信するアプリケーションはすべて OSC サーバーとなり、すべての OSC サーバーは一連の OSC メソッドを持ちます。OSC メソッドは、OSC サーバーが受信する OSC メッセージの宛先であり、 OSC アドレス空間と呼ばれるツリー構造に配置されます。 このツリーを構成するのが OSC メソッドです。それぞれのメソッドにOSCアドレスが定義されます。
OSC フォーマット
OSCのデータフォーマットの構造は、/スラッシュで区切ったテキストで階層構造を持つアドレス定義します。これをOSCアドレス空間といい、受信側でも同様のアドレスを記載することで送り手のデータを受信できます。OSCはUDPのポート番号とこのOSCアドレス定義を使ってそれに続くデータを正しく受け渡しします。
アドレスメソッドの記載は必ず / (スラッシュ)から開始し、階層をつける場合はスラッシュを入れて次のテキストを入れます。
例 /ModuloPlayer/cue/go
このアドレスに続くデータはいくつかの形式があり、これらはタグ文字でそれを識別します。
データ形式
- 32ビット整数(Integer 32)
- 32ビット実数(Float 32)
- テキスト (OSC string )
OSC送信の例
OSCプロトコルを実装した製品などは、OSCのデータ形式をわざわざ定義しなくとも、リストの中から選択するだけで、必要な設定は完了し、設定はほぼターゲットデバイスのIP, ポート番号とアドレスだけで完了します。右の例はModuloKineticのTaskにおけるOSC出力を選択するメニューですが、整数、実数、テキストなどをメニューから選択するのみになっています。ここではメッセージ+整数(バリアブル)を選択し、相手先のデバイスに変化する数値を送ります。
ModuloKineticから送った変数をModuloPlayerで受信した例が右にある画面の例です。連続的に変化する数値を受け取るにあたり、送信元のKineticで定義したアドレスと同じアドレスを指定することで、受信欄に数値が表示されています。実際には、/kinetic/variablesに続く数値が0〜255に連続変化しています。
メッセージによるトリガー
次の例ではModuloKineticのタスクから任意の文字列を送り、照明コントローラーのシーンを実行する例です。この例では/LPC/Sのアドレスに続くGo1というキーワードで照明シーンを実行しています。
受信する側の照明コントローラー、この例ではPharosのLPCを使っていますが、送信元と同じアドレス/LPC/S/Go1を入力条件に記載し、それによって再生するシーンの指定を行なっています。OSCをサポートする製品の場合、こうしたシーントリガーにおいては、送信元でターゲットIPとポート番号、そしてアドレスを指定するだけで、驚くほど簡単にデータの受け渡しができます。