~~NOTOC~~
====== ExportOsc(外部との OSC 通信) ======
このページは過去の情報となります。\\
新しいスクリプトリファレンスは**[[https://developer.virtualcast.jp/vci-docs/api/|こちら]]**になります。
**[[vci/overview/osc|Open Sound Control プロトコル(OSC)]]**を用いて外部アプリケーションとのメッセージングを行うクラスです。
* OSC 機能を利用する場合、''タイトル画面>詳細設定''の ''VCI'' タブ内から **OSC 送信機能、OSC 受信機能** を有効化してください。
* OSC Message の送信/受信先は、''タイトル画面>詳細設定''の ''VCI'' タブ内の **OSCメッセージ受信ポート、OSCメッセージ送信ポート** から設定できます。
* 受信ポートのデフォルト値は ''19100'' です。
* 送信ポートのデフォルト値は ''18100'' です。
* OSC Message の送信は、 ''localhost'' 内でのみ行えます。
* OSC Message を設定なしで受信できるのは、 ''localhost'' 内のみです。
* **バーチャルキャスト v2.3.6a** 以降で動作します。
* 現在、この API は**PC版でのみ動作します**。
* この API を使ったサンプルは[[vci/sample/oscapi/top|こちらのページ]]にあります。
===== メンバ変数・関数一覧 =====
^ vci.osc ^^
^ 名前 ^ 説明 ^
| [[vci/script/reference/exportosc#types ]] | 送受信できるOSC Argumentの型の列挙子を表すクラスを返す |
| [[vci/script/reference/exportosc#IsSendEnabled ]] | 呼び出し元のVCIインスタンスのOSC Message送信機能の有効フラグを取得 |
| [[vci/script/reference/exportosc#IsReceiveEnabled]] | 呼び出し元のVCIインスタンスのOSC Message受信機能の有効フラグを取得 |
| [[vci/script/reference/exportosc#SendAsciiString]] | ASCII文字列をOSC Messageとして送信 |
| [[vci/script/reference/exportosc#SendInt32 ]] | 32ビット整数をOSC Messageとして送信 |
| [[vci/script/reference/exportosc#SendFloat32 ]] | 32ビット浮動小数をOSC Messageとして送信 |
| [[vci/script/reference/exportosc#SendUtf8String ]] | UTF-8文字列を表すバイト列をOSC Messageとして送信 |
| [[vci/script/reference/exportosc#SendMessage ]] | 引数無しのOSC Messageを送信 |
| [[vci/script/reference/exportosc#SendMessage ]] | 複数個かつ任意の組み合わせのOSC Argumentを持つOSC Messageを送信 |
| [[vci/script/reference/exportosc#RegisterMethod]] | 指定のOSC Addressに送られてきたOSC Messageを受信したときに呼びだされる関数を登録する |
| [[vci/script/reference/exportosc#UnregisterMethod]] | 指定のOSC Addressに登録されている関数の登録を解除する |
===== types =====
vci.osc.types** ExportOscType**\\
=== 説明 ===
* 送受信できる OSC Argument の型の列挙子を表すクラスを返します。\\
* [[vci:script:reference:exportosc#SendMessage(複数引数を含むメッセージの送信)|vci.osc.SendMessage]] や [[vci:script:reference:exportosc#RegisterMethod|vci.osc.RegisterMethod]] で送受信する OSC Argument を指定する際に利用します。
^列挙子一覧^^
^types.String| ASCII 文字列|
^types.Int32| 32bit 整数|
^types.Float32| 32bit 浮動小数|
^types.BlobAsUtf8| UTF-8 文字列を表すバイト列|
===== IsSendEnabled =====
vci.osc.IsSendEnabled **fun(): bool**\\
=== 説明 ===
* 呼び出し元の VCI インスタンスの OSC Message 送信機能の有効フラグを取得します。\\
* OSC Message 送信が有効であるかは、VCクライアントの OSC 送信設定によって決定されます。
* disabled の場合、すべての VCI インスタンスにおいて false が返されます。
* enabled の場合、すべての VCI インスタンスにおいて true が返されます。
* creator-only の場合、自身が生成した VCI インスタンスのみ true が返り、それ以外は false が返されます。
=== サンプル ===
local isEnabled = vci.osc.IsSendEnabled()
print(isEnabled)
===== IsReceiveEnabled =====
vci.osc.IsReceiveEnabled()**: bool**\\
=== 説明 ===
* 呼び出し元の VCI インスタンスの OSC Message 受信機能の有効フラグを取得します。\\
* OSC Message 受信が有効であるかは、VCクライアントの OSC 送信設定によって決定されます。
* disabled の場合、すべての VCI インスタンスにおいて false が返されます。
* enabled の場合、すべての VCI インスタンスにおいて true が返されます。
* creator-only の場合、自身が生成した VCI インスタンスのみ true が返り、それ以外は false が返されます。
=== サンプル ===
local isEnabled = vci.osc.IsReceiveEnabled()
print(isEnabled)
===== SendAsciiString =====
vci.osc.SendAsciiString **fun(address: string, argument: string)**\\
=== 引数 ===
^address| OSC Message の送信先の OSC Address|
^argument| OSC Argument として送信する string|
=== 説明 ===
* ''argument'' をASCII文字列に変換し、''address'' に OSC Message として送信します。
* こちらの関数では**英字文字列のみ送信することができます。**日本語文字列を送信したい場合、[[vci:script:reference:exportosc#SendUtf8String|vci.osc.SendUtf8String]] を利用してください。
* ''address'' が null の場合、または不正なフォーマットの OSC Address であった場合、送信に失敗します。この時、VCI コンソールにエラーメッセージが表示されます。
* ''argument'' が null の場合、送信に失敗します。この際、VCI コンソールにエラーメッセージが表示されます。
vci.osc.SendAsciiString("/test/sendstring", "hello")
===== SendInt32 =====
vci.osc.SendInt32 **fun(address: string, argument: number)**\\
=== 引数 ===
^address| OSC Message の送信先の OSC Address|
^argument| OSC Argument として送信する number|
=== 説明 ===
* ''argument'' を 32bit 整数に変換し、''address'' に OSC Message として送信します。
* ''address'' が null の場合、または不正なフォーマットの OSC Address であった場合、送信に失敗します。この時、VCI コンソールにエラーメッセージが表示されます。
vci.osc.SendInt32("/test/sendint", 100)
===== SendFloat32 =====
vci.osc.SendFloat32 **fun(address: string, argument: number)**\\
=== 引数 ===
^address| OSC Message の送信先の OSC Address|
^argument| OSC Argument として送信する number|
=== 説明 ===
* ''argument'' を 32bit 浮動小数に変換し、''address'' に OSC Message として送信します。
* ''address'' が null の場合、または不正なフォーマットの OSC Address であった場合、送信に失敗します。この時、VCI コンソールにエラーメッセージが表示されます。
vci.osc.SendFloat32("/test/sendfloat", 3.14)
===== SendUtf8String =====
vci.osc.SendUtf8String **fun(address: string, argument: string)**\\
=== 引数 ===
^address| OSC Message の送信先の OSC Address|
^argument| OSC Argument として送信する string|
=== 説明 ===
* ''argument'' を UTF-8 としてエンコードしたバイト列に変換し、''address'' に OSC Message として送信します。
* ''address'' が null の場合、または不正なフォーマットの OSC Address であった場合、送信に失敗します。この時、VCI コンソールにエラーメッセージが表示されます。
* ''argument'' が null の場合、送信に失敗します。この際、VCI コンソールにエラーメッセージが表示されます。
vci.osc.SendUtf8String("/test/sendutf8", "こんにちわ")
===== SendMessage(引数無しメッセージの送信) =====
vci.osc.SendMessage **fun(address: string)**\\
=== 引数 ===
^address| OSC Message の送信先の OSC Address|
=== 説明 ===
* ''address'' に引数無しの OSC Message を送信します。
* ''address'' が null の場合、または不正なフォーマットの OSC Address であった場合、送信に失敗します。この時、VCI コンソールにエラーメッセージが表示されます。
vci.osc.SendMessage("/test/sendmessage")
===== SendMessage(複数引数を含むメッセージの送信) =====
vci.osc.SendMessage **fun(address: string, arguments: Table)**\\
=== 引数 ===
^address| OSC Message の送信先の OSC Address|
^arguments| 送信する OSC Argument の型と値を列挙したテーブル|
''arguments'' テーブルは、以下のフォーマットで記述します。
-- {
-- {(OSC Argumentの型), (OSC Argumentの値)}
-- ..., 送信するOSC Argumentの個数分繰り返す
-- }
-- 例:String, Int32, Float32, BlobAsUtf8をOSC Messageとして送信する
arguments =
{
{vci.osc.types.String, "hello"},
{vci.osc.types.Int32, 10},
{vci.osc.types.Float32, 3.14},
{vci.osc.types.BlobAsUtf8, "こんにちわ"},
}
=== 説明 ===
* ''arguments''テーブルで指定した複数の OSC Argumentを一つの OSC Message として''address''に送信します。
* ''address'' が null の場合、または不正なフォーマットの OSC Address であった場合、送信に失敗します。この時、VCI コンソールにエラーメッセージが表示されます。
vci.osc.SendMessage("/test/sendMultiple",
{
{vci.osc.types.String, "hello"},
{vci.osc.types.Int32, 10},
{vci.osc.types.Float32, 3.14},
{vci.osc.types.BlobAsUtf8, "こんにちわ"}
})
===== RegisterMethod =====
vci.osc.RegisterMethod **fun(address: string, callback: function, argumentTypes: Table)**\\
=== 引数 ===
^address| OSC Message の受信を待ち受ける OSC Address|
^callback| OSC Message を受信したときに実行されるコールバック|
^argumentTypes| 受信する OSC Message に含まれる OSC Argument の型を順番に列挙したテーブル|
''argumentTypes'' テーブルは、以下のフォーマットで記述します。
-- {
-- (OSC Argumentの型),
-- ..., 受信する OSC Message の OSC Argument の個数分繰り返す
-- }
-- 例:String, Int32, Float32, BlobAsUtf8を受信する場合
argumentTypes =
{
vci.osc.types.String,
vci.osc.types.Int32,
vci.osc.types.Float32,
vci.osc.types.BlobAsUtf8,
}
=== 説明 ===
* ''arguments''に OSC Message が送られてきたときに呼びだされる関数を登録します。
* ''address'' が null の場合、または不正なフォーマットの OSC Address であった場合、登録に失敗します。この時、VCI コンソールにエラーメッセージが表示されます。
* VC クライアント側で予約済みの一部 OSC Address に対して関数の登録を試みた場合、登録に失敗します。この時、VCI コンソールにエラーメッセージが表示されます。
* 同一の OSC Address に対して、同じ VCI インスタンスから一つのみ関数を登録できます。
* 別 VCI インスタンスからの登録であった場合、重複は許容されます。
* 同じ OSC Address に複数の関数が重複して登録されている場合、その OSC Address に OSC Message が到達したときに登録されているすべての関数が実行されます。
-- ASCII string を一個受信する
function echo(content)
print(content)
end
vci.osc.RegisterMethod("/test/echo", echo, {vci.osc.types.String})
-- float を二個受信する
function show_point(x, y)
print(x..", "..y)
end
vci.osc.RegisterMethod("/test/showPoint", show_point, {vci.osc.types.Float32, vci.osc.types.Float32})
===== UnregisterMethod =====
vci.osc.UnregisterMethod **fun(address: string)**\\
=== 引数 ===
^address|登録解除したい関数が登録されている OSC Address|
=== 説明 ===
* [[vci/script/reference/exportosc#RegisterMethod]]で''address''に登録した関数の登録を解除します。
* ''address'' が null の場合、または不正なフォーマットの OSC Address であった場合、登録解除に失敗します。この時、VCI コンソールにエラーメッセージが表示されます。
-- ASCII string を一個受信する
function echo(content)
print(content)
end
vci.osc.RegisterMethod("/test/echo", echo, {vci.osc.types.String})
-- VCI が Use されたとき、関数 echo の "/test/echo" への登録を解除する
function onUse(item)
vci.osc.UnregisterMethod("/test/echo")
end