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

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

OSC In DAT の OSC メッセージ受信機能を示す図

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

概要 📖 – OSC メッセージの受信とテーブル化

OSC In DATは、OSC プロトコルでネットワーク受信したメッセージをテーブル化し、コールバックで Python に渡す DATです。プロトコルは UDP / Multicast / UDT の 3 種類に対応し、メッセージはアドレス・引数・タイムスタンプを列に展開できます。

主な用途 🎯

  • 外部アプリ / モバイル / コントローラからの OSC メッセージを受信
  • アドレスパターン (例: /synth/freq) で受信メッセージを絞り込み
  • Callbacks DAT でメッセージ受信ごとに Python アクションを実行
  • テーブル形式で履歴を保持し、後段の OP に逐次配信
  • OSC バンドルを行・列に展開し、タイムスタンプを保持

データフロー 🔄

入力: ネットワーク上の OSC メッセージ (UDP / Multicast / UDT)

アドレス / 型タグ解析

出力: テーブル DAT (1 行 = 1 メッセージ) + Callbacks 起動

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Connect Page 📋

接続有効化とネットワーク基本設定 🌐

Active .active
– On 時、指定ポートで OSC メッセージを受信
– Off 時は受信せず、ポートに届いたデータは破棄される

Network Address .address 🌐
– Multi-cast プロトコル時は受信するマルチキャストアドレス
– UDT プロトコル時はサーバの IP アドレス

Port .port 🔌
– OSC In がメッセージを受け取る UDP ポート番号

Local Address .localaddress 🏠
– 受信に使う NIC の IP アドレスを指定 (複数 NIC 環境での選択用)
– 空欄なら全 NIC で受信

Shared Connection .shared 🤝
– 同じプロトコル / ポートを使う他の DAT と接続を共有

Protocol .protocol 📡

使用するネットワークプロトコルを選択するメニュー

項目 内部名 説明
Messaging (UDP) .msging 通常の UDP ユニキャスト (デフォルト・最頻出)
Multi-Cast Messaging (UDP) .multicastmsging マルチキャストグループへの送受信
Reliable Messaging (UDT Library) .reliablemsging UDT ライブラリによる順序保証つき配送

アドレススコープとメッセージ整形 🎯

OSC Address Scope .addscope 🔍
– 受信するメッセージのアドレスパターンを絞り込む文字列
– 例: ^*accel* で iPhone / iOS の accelerometer メッセージを除外

Include Type Tag .typetag 🏷️
– On 時、メッセージに OSC 型タグ (i / f / s 等) を列として含める
– 受信側で型判定が必要なときに有効

Split Bundle into Messages .splitbundle 📦
– On 時、OSC バンドル内の各メッセージを別行に展開
– バンドル全体を 1 行に集約したい場合は Off

Split Message into Columns .splitmessage 📊
– On 時、OSC アドレスと各引数を個別の列として展開
– Off 時は 1 つの message 列にまとめて格納

Bundle Timestamp Column .bundletimestamp ⏱️
– On 時、各バンドルのタイムスタンプ値を列として追加


Received Messages Page 📁

コールバックと出力制御 🐍

Callbacks DAT .callbacks 📜
– メッセージ受信ごとに 1 回呼ばれる Python コールバックを保持する DAT を指定
– 利用可能 API は oscinDAT_Class を参照

Execute from .executeloc 📍
– コールバックスクリプトが実行される場所 (コンテキスト) を指定するメニュー

From Operator .fromop 🎯
Execute fromSpecified Operator のとき、スクリプト実行コンテキスト OP を指定

Clamp Output .clamp 📏
– 既定では DAT は 100 メッセージで打ち切られる
– On にすると Maximum Lines まで保持 (= 履歴を増やせる、unlimited 設定も可能)

Maximum Lines .maxlines 🔢
– 保持する最大メッセージ数
– 上限を超えると古いメッセージから削除される

Clear Output .clear 🧹
– パルスでヘッダ以外の全行を削除
– Python では op('oscin1').par.clear.pulse() で実行可

Bytes Column .bytes 📦
– On 時、メッセージの生バイト列を列として追加


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: iPad TouchOSC からスライダー値を受信してパラメータ制御 📱

iPad TouchOSC → OSC In DAT → OSC In CHOP → Math CHOP → 対象 OP
  1. OSC In DAT の Port を TouchOSC アプリ側と同じ番号に設定 (例: 7000)
  2. Active を On、Protocol を Messaging (UDP)
  3. アドレスごとの履歴を DAT で確認しつつ、リアルタイム数値は OSC In CHOP 側で受け取り後段に渡す
  4. Math CHOP で値域を 0〜1 に正規化して対象 OP のパラメータへ Export

Example 2: Callbacks DAT でアドレスごとに Python アクション分岐 🐍

OSC In DAT → Callbacks DAT (onReceiveOSC) → 各種アクション
  1. Callbacks DAT に Text DAT を指定し onReceiveOSC(dat, rowIndex, message, bytes, timeStamp, address, args, peer) を実装
  2. コールバック内で address による分岐 (例: '/scene/next' なら次シーン、'/audio/volume' なら音量変更)
  3. args (引数リスト) を Python で float / int / str にキャストして使用
  4. 重い処理は別 thread か run('...', delayFrames=1) でメインスレッドに後追い

Example 3: アドレススコープでメッセージを絞り込み、不要分を除外 🎯

OSC 送信元 (多数) → OSC In DAT (OSC Address Scope) → 必要メッセージのみ
  1. 送信側が多数のアドレスを送ってきても DAT 行が膨らみすぎないよう絞り込みを設定
  2. OSC Address Scope に ^*accel* (= accel を含むアドレスを除外) のようなパターンを指定
  3. Maximum Lines + Clamp Output で履歴上限を設定し、メモリ消費を抑える
  4. 残ったメッセージだけが行として蓄積される

関連オペレータ 🔗

類似機能OP 🔍

  • OSC In CHOP — OSC メッセージを CHOP チャンネル値として受信 (DAT 行ではなくチャンネルが欲しい場合)
  • OSC Out DAT — 逆方向: TouchDesigner から OSC を送信
  • UDP In DAT — OSC ではない生 UDP メッセージを受信

組み合わせ推奨OP 🔄

  • OSC In CHOP — DAT で履歴 / コールバック + CHOP で数値リアルタイム制御の併用が定番
  • Select DAT — 受信履歴から特定 address の行だけ抽出
  • DAT to CHOP — テーブル化された引数列を CHOP チャンネルに変換
  • Script CHOP — Callbacks DAT 経由で Script CHOP に値を書き込んで保持
  • MIDI In CHOP — MIDI と OSC を並列に受け取りたい場合の併用

前処理・後処理DAT 🎯


Info DAT情報 📊

OSC In DAT は Info DAT による詳細情報取得に対応しています。

DAT 固有情報 📄

  • num_rows: 受信した OSC メッセージの行数
  • num_cols: DAT の列数 (Split Message into Columns / Bytes Column 等で変動)
  • type: DAT の型 (table / text)
  • is_table: テーブル形式の場合 1、テキスト形式の場合 0

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間 (ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数 (ポート占有 / バインド失敗時にカウント)

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

よくある問題と解決策 🔧

❌ Problem: メッセージが届かない / DAT に何も表示されない
✅ Solution:

  • Active が On になっているか確認
  • Port が送信側と一致しているか確認 (アプリ側の送信ポート設定も確認)
  • Windows ファイアウォール / OS の受信制限で UDP がブロックされていないか確認

❌ Problem: 複数 NIC 環境で意図しない NIC で受信される / 受信できない
✅ Solution:

  • Local Address に明示的に受信したい NIC の IP アドレスを指定
  • Shared Connection を Off にして他 DAT との接続共有を一時切断
  • Wireshark 等で実際にパケットがどの NIC に届いているか確認

❌ Problem: DAT 履歴がすぐ満杯になり、新しいメッセージが流れていく
✅ Solution:

  • Clamp Output を On にして Maximum Lines を増やす (unlimited も可能)
  • OSC Address Scope で不要なメッセージを除外して受信頻度自体を下げる
  • 履歴が不要なら Callbacks DAT で即座に処理してから Clear Output で履歴を破棄

❌ Problem: Callbacks DAT のコールバックで処理が重く、フレーム落ちする
✅ Solution:

  • コールバック内ではメインスレッドの重い処理を避ける
  • run('...', delayFrames=1) で遅延実行に逃がす
  • 受信頻度自体を OSC Address Scope で絞る

参考資料 📚

公式リソース 📖

コミュニティ 💬

この記事は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をコピーしました