
概要 📖 – 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 メッセージ送出 + 送信履歴テーブル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
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 from が Specified Operator のときに参照される OP パス:
- From Operator パス:
From Operator(実行元 OP) —Execute fromがSpecified 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 Extension が Custom Extension のときに適用される拡張子:
- Custom Extension 文字列:
Edit/View Extensionがcustomのときに使用される任意のファイル拡張子
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 で組み立ててから送出します。
- OSC Out DAT の
ProtocolをMessaging (UDP)に設定 Network Addressに DAW が動くマシンの IP、Portに DAW の待ち受けポートを指定op('oscout1').sendOSC('/fx/reverb', [0.7])のように Python でアドレス + 引数を送信Include Type Tagを On にして受信側が引数型を正しく解釈できるようにするActiveが On であることを確認し、DAW 側で値が変化することを確認
Example 2: 複数台へ同時配信 📡
Animation CHOP → CHOP to DAT → OSC Out DAT (Multi-Cast) → 複数受信マシン
1 台のマスターマシンからアニメーション値をマルチキャストで送出し、同一ネットワーク上の複数の表示マシンが同じ値を同時に受信する分散同期のフロー。個別に宛先を指定せず 1 回の送信で全台へ届けます。
ProtocolをMulti-Cast Messaging (UDP)に設定Network Addressにマルチキャストアドレス (例:239.0.0.1) を指定- 各受信マシンの OSC In DAT を同じマルチキャストアドレス + ポートで待ち受けに設定
- 送信値を
sendOSCで送出し、全受信マシンで同期表示されることを確認
Example 3: UDT で確実送信 🛡️
Trigger 値 → Script DAT (sendOSC) → OSC Out DAT (Reliable) → 受信アプリ
シーン切替やキュー発火など「落としてはいけない」コマンドを UDT の信頼性メッセージで送り、UDP の取りこぼしリスクを避けて確実に受信側へ届けるフロー。到達保証が必要なイベント送信に向きます。
ProtocolをReliable Messaging (UDT Library)に設定- 受信側 OSC In DAT も同じ UDT プロトコルで待ち受けに設定
- 重要コマンドを
op('oscout1').sendOSC('/cue/go', [1])で送出 - 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 🎯
- 前処理: Table DAT、CHOP to DAT、Select DAT
- 後処理: DAT Execute DAT、Null 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 AddressとPortが受信側アプリの待ち受け設定と一致しているか確認- ファイアウォールが 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 にして余計な列を減らす
参考資料 📚
その他 🔗
- TouchDesigner Wiki — DAT 概要
- TouchDesigner Wiki — Category:DATs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

