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