OSC Out DAT 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

OSC Out DAT の OSC メッセージ送信を示す図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – OSC でデータを送信

OSC Out DATは、OSC メッセージをネットワーク経由で外部アプリやデバイスへ送信する DATです。UDP・マルチキャスト・信頼性メッセージ (UDT) のプロトコル選択、引数の型タグ付与、バンドルの行分割、送信ごとに Python を発火させるコールバックまで備えており、OSC を介した外部連携の送信側基盤として使われます。

主な用途 🎯

  • OSC メッセージのネットワーク送信(TouchDesigner から外部アプリやデバイスへアドレス + 引数を送出)
  • プロトコル選択による送信方式の切替(UDP メッセージ / マルチキャスト UDP / 信頼性メッセージ UDT から選択)
  • ライブ演出・照明・音響機材との連携(OSC 対応の DAW・VJ ソフト・照明卓へパラメータを送信)
  • 複数マシン間のリアルタイム同期(OSC アドレスとポートを介した値の送受信で分散システムを構築)
  • 送信ログの記録とコールバック処理(送信メッセージをテーブル化し Callbacks DAT で Python 処理を発火)

データフロー 🔄

入力: 送信したい OSC アドレス + 引数(sendOSC / 行データ)

プロトコル・宛先解決(Protocol / Network Address / Port)

型タグ・バンドル整形(Include Type Tag / Split Bundle into Messages)

出力: ネットワークへ OSC メッセージ送出 + 送信履歴テーブル

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

Connect Page 📋

接続と宛先 🌐

Active .active
Active (送信の有効化) — On 時、ネットワークポートへ OSC メッセージを送信します。
Off 時は送信処理が停止し、ポートへ送ろうとしたデータは破棄されます。

Network Address .address 📡
Network Address (宛先アドレス) — UDP 送信時の送信先コンピュータのネットワークアドレスです。
foo.bar.com 等のホスト名や 100.123.45.78 のような IP アドレスを指定します。
マルチキャスト時は送信先のマルチキャストアドレスを指定します。localhost を指定すると同一マシン内へ送信します。

Port .port 🔌
Port (送信ポート) — 送信先のネットワークポート番号を指定します。受信側アプリが待ち受けているポートに合わせます。

Local Address .localaddress 📶
Local Address (送信元アドレス) — 送信に使う送信元 IP アドレスを指定します。
複数の NIC (ネットワークインターフェースカード) を持つシステムで、どのインターフェースから送るか選びたいときに有用です。

Shared Connection .shared 🔗
Shared Connection (接続の共有) — 同じネットワークプロトコルを使う他のネットワーク DAT と接続を共有します。

Protocol .protocol 🧭

Protocol (通信プロトコル) — 使用するネットワークプロトコルを選択します。

項目 内部名 説明
Messaging (UDP) .msging UDP によるメッセージ送信 (低遅延・到達保証なし、OSC で最も一般的)
Multi-Cast Messaging (UDP) .multicastmsging UDP マルチキャスト送信 (1 つの送信で複数の受信者へ同時配信)
Reliable Messaging (UDT Library) .reliablemsging UDT ライブラリによる信頼性メッセージ送信 (到達保証あり)

OSC Address Scope .addscope 🎯

送出対象のチャンネルをパターンで絞り込む設定:

  • OSC Address Scope パターン: OSC Address Scope (アドレス絞り込み) — 生成するチャンネルをパターンで限定します。例えば ^*accel* で iOS アプリ等から来る加速度センサーのチャンネルを除外します。パターン記法は Pattern Matching を参照します。

メッセージ整形 🧱

Include Type Tag .typetag 🏷️
Include Type Tag (型タグ付与) — 各メッセージに引数リストの型タグを含めます。
受信側アプリが引数の型 (整数・浮動小数・文字列など) を識別する必要がある場合に有用です。

Split Bundle into Messages .splitbundle 📦
Split Bundle into Messages (バンドルの行分割) — On 時、バンドル内の各メッセージをそれぞれ独立した行として扱います。

Split Message into Columns .splitmessage 📊
Split Message into Columns (列分割) — On 時、OSC アドレスと引数をそれぞれ独立した列に分けます。
Off 時はアドレスと引数がまとめて message 列に格納されます。

Bundle Timestamp Column .bundletimestamp ⏱️
Bundle Timestamp Column (タイムスタンプ列) — On 時、各バンドルのタイムスタンプ値を専用の列に含めます。


Received Messages Page 📨

Callbacks .callbacks 🐍

Callbacks DAT .callbacks 📜
Callbacks DAT (コールバック) — メッセージごとに 1 回スクリプトを実行する Callbacks DAT のパスを指定します。

実行スコープ .executeloc 📍

Execute from (実行場所) — スクリプトを実行する場所を決定するメニューです。

項目 内部名 説明
Current Node .current 現在の Node 位置からスクリプトを実行
Specified Operator .specified From Operator パラメータで指定した OP からスクリプトを実行
Parent of Callbacks DAT .callback Callbacks DAT の親 OP からスクリプトを実行 (sibling 参照が容易)

From Operator .fromop 🔗

Execute fromSpecified Operator のときに参照される OP パス:

  • From Operator パス: From Operator (実行元 OP) — Execute fromSpecified Operator のときに、状態変化がスクリプト実行のトリガーとなり、かつスクリプトの実行パスにもなる OP のパスです。

出力行数制御 📏

Clamp Output .clamp 🚧
Clamp Output (行数の上限制御) — DAT はデフォルトで 100 メッセージに制限されますが、これを On にすると任意値や無制限に変更できます。

Maximum Lines .maxlines 📐
Maximum Lines (最大行数) — 保持するメッセージ数の上限です。
上限を超えると古いメッセージから順に削除されます。

Clear Output .clear 🗑️
Clear Output (クリア) — パルスでヘッダ行以外の全行を削除します。
Python から呼ぶ場合: op('oscout1').par.clear.pulse()

Bytes Column .bytes 🔣
Bytes Column (バイト列の出力) — On 時、各メッセージの raw bytes を別カラムとして出力に追加します。
デバッグ用途や送信バイナリの確認に有用です。


Common Page 🔧

Language .language 📝

DAT が動作するスクリプト言語の決定方法

項目 内部名 説明
Input .input 入力 DAT のスクリプト言語を使用
Node .node この DAT 自身のスクリプト言語を使用

Edit/View Extension .extension 📄

外部エディタに公開するファイル拡張子の選択

項目 内部名 説明
dat .dat 汎用的なファイル拡張子 dat を使用
From Language .language DAT のスクリプト言語に応じた拡張子を自動選択
Custom Extension .custom Custom Extension で指定したカスタム拡張子を使用

Custom Extension .customext 🔤

Edit/View ExtensionCustom Extension のときに適用される拡張子:

  • Custom Extension 文字列: Edit/View Extensioncustom のときに使用される任意のファイル拡張子

Word Wrap .wordwrap 🔁

ノード表示でのワードラップ (折り返し) の有効化

項目 内部名 説明
Input .input 入力 DAT の Word Wrap 設定を継承
On .on Word Wrap を有効化 (ノード上の長い行を折り返し表示)
Off .off Word Wrap を無効化 (折り返さずそのまま表示)

実践アイデア 💡

Example 1: DAW へ OSC 送信 🎚️

Slider COMP → CHOP to DAT → Script DAT (sendOSC) → OSC Out DAT → 外部 DAW

パネル上のスライダー値を OSC Out DAT 経由で OSC 対応 DAW へ送り、TouchDesigner からエフェクトパラメータをリアルタイムにコントロールする送信フロー。アドレスと引数を Python で組み立ててから送出します。

  1. OSC Out DAT の ProtocolMessaging (UDP) に設定
  2. Network Address に DAW が動くマシンの IP、Port に DAW の待ち受けポートを指定
  3. op('oscout1').sendOSC('/fx/reverb', [0.7]) のように Python でアドレス + 引数を送信
  4. Include Type Tag を On にして受信側が引数型を正しく解釈できるようにする
  5. Active が On であることを確認し、DAW 側で値が変化することを確認

Example 2: 複数台へ同時配信 📡

Animation CHOP → CHOP to DAT → OSC Out DAT (Multi-Cast) → 複数受信マシン

1 台のマスターマシンからアニメーション値をマルチキャストで送出し、同一ネットワーク上の複数の表示マシンが同じ値を同時に受信する分散同期のフロー。個別に宛先を指定せず 1 回の送信で全台へ届けます。

  1. ProtocolMulti-Cast Messaging (UDP) に設定
  2. Network Address にマルチキャストアドレス (例: 239.0.0.1) を指定
  3. 各受信マシンの OSC In DAT を同じマルチキャストアドレス + ポートで待ち受けに設定
  4. 送信値を sendOSC で送出し、全受信マシンで同期表示されることを確認

Example 3: UDT で確実送信 🛡️

Trigger 値 → Script DAT (sendOSC) → OSC Out DAT (Reliable) → 受信アプリ

シーン切替やキュー発火など「落としてはいけない」コマンドを UDT の信頼性メッセージで送り、UDP の取りこぼしリスクを避けて確実に受信側へ届けるフロー。到達保証が必要なイベント送信に向きます。

  1. ProtocolReliable Messaging (UDT Library) に設定
  2. 受信側 OSC In DAT も同じ UDT プロトコルで待ち受けに設定
  3. 重要コマンドを op('oscout1').sendOSC('/cue/go', [1]) で送出
  4. DAT Execute DAT で送信履歴の行追加を捕捉し、送信ログを記録

関連オペレータ 🔗

類似機能OP 🔍

  • OSC In DAT — OSC の受信版。送信した OSC を別マシンや別 OP で受け取る対の DAT
  • UDP Out DAT — 汎用 UDP パケット送信版。OSC 以外の任意フォーマットを送る場合
  • WebSocket DAT — WebSocket でのメッセージ送受信版 (ブラウザ連携向き)

組み合わせ推奨OP 🔄

  • OSC Out CHOP — チャンネル値を OSC で送る CHOP 版。連続値の送信はこちらが手軽
  • OSC In DAT — 受信側に配置して送受信の往復を構成
  • DAT Execute DAT — 送信履歴の行追加をトリガーに Python を発火する定番ペア
  • CHOP to DAT — CHOP の値をテーブル化して送信内容の組み立てに使う
  • Table DAT — 送信するアドレス + 引数の組をテーブルで管理する用途

前処理・後処理DAT 🎯


Info DAT情報 📊

OSC Out DAT は Info DAT による詳細情報取得に対応しています (num_rows / num_cols / total_cooks / cook_time 等の共通 DAT Info チャンネルを参照可能)。

DAT 固有情報 📋

  • num_rows: DAT の行数
  • num_cols: DAT の列数
  • type: DAT の型 (table / text)
  • is_table: テーブル形式の場合 1、テキスト形式の場合 0

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間 (ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: OSC が相手に届かない・受信されない
✅ Solution:

  • Active パラメータが On になっているか確認
  • Network AddressPort が受信側アプリの待ち受け設定と一致しているか確認
  • ファイアウォールが UDP / 該当ポートをブロックしていないか確認 (受信側マシンの設定も含む)
  • 受信側と Protocol (UDP / マルチキャスト / UDT) を揃えているか確認

❌ Problem: 受信側が引数の型を正しく解釈できない
✅ Solution:

  • Include Type Tag を On にして引数の型タグを付与
  • 送信する引数の型 (整数・浮動小数・文字列) が受信側の想定と一致しているか確認
  • Split Message into Columns の設定が受信側のパース方法に合っているか見直す

❌ Problem: マルチキャストで一部のマシンに届かない
✅ Solution:

  • Network Address に正しいマルチキャストアドレス範囲 (224.0.0.0〜239.255.255.255) を指定しているか確認
  • 全マシンが同一サブネット / 同一スイッチに接続されているか確認 (ルータ越えはマルチキャスト転送設定が必要)
  • 複数 NIC がある場合は Local Address で送信元インターフェースを明示的に指定

❌ Problem: 送信履歴が無制限に増えてメモリを圧迫する
✅ Solution:

  • Clamp Output を On にし、Maximum Lines で適切な上限 (例: 200-1000) を設定
  • onTableChange 等のコールバック内で必要な情報を転記したあと op('oscout1').par.clear.pulse() で定期クリア
  • デバッグが済んだら Bytes Column を Off にして余計な列を減らす

参考資料 📚

その他 🔗

公式リソース 📖

関連記事 🔗

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました