OSC通信#

VCIはOSCプロトコルを用いてネットワークを経由した通信を行うことができます。

OSCとは#

OSC(OpenSound Control)は、音楽や映像、メディアアートなどの分野で広く使われている通信プロトコルです。
OSCを用いることで、外部アプリケーションからのVCIの制御や、VCIからの外部アプリケーションへの情報の送信が可能になります。

諸注意#

  • この機能はPC版でのみ利用できます。

  • 通信にはUDPを使用しています。

  • 127.0.0.1(localhost)以外の端末と通信するにはファイアウォール等の設定が必要です。

  • VCI で送受信できる OSC メッセージのサイズは約 4000 byte までに制限されています。

セットアップ#

  • OSCを有効にするには、VirtualCastアプリの タイトル画面 > 詳細設定VCI タブ内から OSC 送信機能OSC 受信機能 をオンにします。

  • 通信に特定のポートを使用したい場合は、タイトル画面 > 詳細設定VCI タブ内から OSCメッセージ受信ポートOSCメッセージ送信ポート から設定します。

    • 受信ポートのデフォルト値は 19100 です。

    • 送信ポートのデフォルト値は 18100 です。

  • 送信先IPアドレスを指定したい場合は、 タイトル画面 > 詳細設定VCI タブ内から OSCメッセージの送信先のIPv4アドレス から設定します。

    • デフォルト値は 127.0.0.1 です。

OSCの送受信#

VCIスクリプトでは ExportOsc クラスでOSCの送信や受信を行うことができます。
以下はVCIスクリプトでOSCの送信や受信を行うサンプルコードです。

---------
-- 送信
---------

-- /test/sendint32 ,i 1234 という OSC Message を送信
vci.osc.SendInt32("/test/sendint32", 1234)

-- /test/sendfloat32 ,f 1.234 という OSC Message を送信
vci.osc.SendFloat32("/test/sendfloat32", 1.234)

-- /test/sendstring ,b こんにちわ! という OSC Message を送信
vci.osc.SendUtf8String("/test/sendstring", "こんにちわ!")

---------
-- 受信
---------

function echo(content)
  print(content)
end

-- /test/echo に ASCII 文字列を一つ含む OSC Message が送られてきた時に、 echo 関数を呼び出す
vci.osc.RegisterMethod("/test/echo", echo, {ExportOscType.String})

function show_point(x, y)
  print(x..", "..y)
end

-- /test/showPoint に float32 を二つ含む OSC Message が送られてきた時に、 show_point 関数を呼び出す
vci.osc.RegisterMethod("/test/showPoint", show_point, {ExportOscType.Float32, ExportOscType.Float32})

参考

VirtualCastのOSCデモページでは、より具体的な実装例を紹介しています。
OSC [VirtualCast]

受信 OSC アドレス#

ExportOsc.RegisterMethod() では受信する OSC アドレスを登録できます。 OSC アドレスは / から始まる文字列で、階層構造を持つことができます。 基本的にはどのような OSC アドレスも登録できますが、以下の注意が必要です。

システム予約アドレスは使用できない#

以下の文字列で始まるアドレスはシステムで予約されているため、登録することができません。

  • /vc/

  • /virtualcast/

  • /virtual-cast/

他の VCI と名前が被らないように注意する#

OSC アドレスは、VCI 制作者全体で共有するアドレス空間になります。 ゆえに他制作者の VCI の OSC アドレスと被らないように注意する必要があります。

したがって、次のような OSC アドレスの命名規則を推奨します。

/制作者名/VCI名/機能1

たとえば Example さんが作成する Test という VCI では、次のような OSC アドレスを使用するとよいでしょう。

  • /Example/Test/Color

  • /Example/Test/Direction