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

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

DAT Execute DAT の DAT テーブル変化駆動 Python 実行を示す図

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

概要 📖 – DAT (テーブル) の変化に応じて Python を実行

DAT Execute DATは、DAT (テーブル) の内容変化を契機に Python コールバックを実行する DATです。現在のコールバック API は onTableChange(dat) 1 本に統合されています。Row / Column / Cell / Size の個別変化コールバックは Deprecated 扱いで、onTableChange 内から dat.numRows / dat.numCols 等で差分判定する方式が公式推奨です。

主な用途 🎯

  • テーブル全体の変化イベントを Python コールバック (onTableChange) で受け取る
  • OSC In DAT / Serial DAT / Web Client DAT の受信メッセージ (行追加) を契機にアクションを実行
  • Table DAT / Text DAT の編集をトリガーに別 OP のパラメータを更新
  • 外部ツールからの設定流し込み (CSV / JSON のリロード) を Python ロジックでハンドリング
  • state machine の遷移を DAT 行追加・セル更新で駆動

データフロー 🔄

入力: 監視対象 DAT (DAT パラメータで指定)

テーブル変化検出 (行追加 / セル更新 / サイズ変化等)

Python コールバック (onTableChange(dat)) 実行

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

DAT Execute Page 📋

監視対象 DAT と起動条件 🎯

Active .active
– On 時、DAT の変化を監視してコールバックを起動
– Off 時は完全に停止 (DAT が変わってもコールバックは呼ばれない)

DAT .dat 📋
– 監視対象の DAT を指定 (パス入力 / ドラッグ&ドロップ可)
– 指定した DAT が cook して内容が変化した瞬間にコールバックがトリガーされる

Edit.. .edit ✏️
– パルスでテキストエディタを開き、DAT 内の Python スクリプト本体を編集
– コールバック関数 (onTableChange 等) の本体はこの DAT のテキストに直接書かれる

実行スコープ (Tscript レガシー) .executeloc 📍

スクリプトを実行する OP の場所を決定するメニュー (Tscript 専用、現代の Python では無視可)

項目 内部名 説明
Current Node .current 現在の Node 位置からスクリプトを実行 (Tscript 専用)
This Node .here DAT の親 OP からスクリプトを実行 (sibling を簡単に参照可能)
Specified Operator .op From Operator パラメータで指定した OP からスクリプトを実行

From Operator (Tscript レガシー) .fromop 🔗

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

  • From Operator パス: Execute fromSpecified Operator のときスクリプト実行元として使う OP パス (Tscript 専用、Python では使用しない)

イベント種別 (コールバック有効化) 🔔

Table Change .tablechange 📊
– On 時、テーブルが前回 cook から何らかの形で変化したときに onTableChange(dat) を呼び出す
– 行・列・セル・サイズの変化を 1 本のコールバックでまとめて受け取る統合 API (現代の Python 推奨)

Row Change .rowchange ↔️
Deprecated。On 時、変化した各行ごとに onRowChange() を呼び出す (旧 API)
– 現在は onTableChange() 内で差分判定を行う方式に置き換え推奨

Column Change .colchange ↕️
Deprecated。On 時、変化した各列ごとに onColChange() を呼び出す (旧 API)
– 現在は onTableChange() 経由で統一推奨

Cell Change .cellchange 🔲
Deprecated。On 時、変化したセルごとに onCellChange() を呼び出す (旧 API)
– 現在は onTableChange() 経由で統一推奨

Size Change .sizechange 📐
Deprecated。On 時、テーブルサイズ変化ごとに onSizeChange() を呼び出す (旧 API)
– 現在は onTableChange() 内で dat.numRows / dat.numCols 比較に置き換え推奨

実行タイミング .execute ⏱️

コールバックをフレームのどのタイミングで実行するかの選択

項目 内部名 説明
Start of Frame .start フレーム開始時にコールバックを呼び出す。1 フレーム中に複数回変化したら都度呼ばれる (例: Multi Touch In DAT のイベント連発を全て捕捉したいとき)
End of Frame .end フレーム終了時に最大 1 回だけコールバックを呼び出す。同一行が複数回変化しても 1 フレームにつき 1 回のみ実行 (パフォーマンス重視・冪等処理向け)

File Page 📁

ファイル入出力 💾

File .file 📂
– ロードするファイルのパスとファイル名 (.txt / .dat 対応)

Sync to File .syncfile 🔁
– On 時、プロジェクト起動時にファイルを読み込み、以降はファイルと双方向同期
– DAT 側編集はファイルに書き戻され、ファイル変更も DAT に反映

Load on Start .loadonstart 🔄
– On 時、プロジェクト起動時に 1 回だけファイルから読み込む

Load File .loadonstartpulse
– パルスでファイルを即時再ロード

Write on Toe Save .write 💾
– On 時、.toe プロジェクト保存時に DAT の内容をファイルに書き出す

Write File .writepulse
– パルスで即時ファイルへ書き出し


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: OSC In DAT の受信メッセージから別 OP を駆動 📡

OSC In DAT → DAT Execute DAT (onTableChange) → Constant CHOP / Switch TOP
  1. OSC In DAT を配置し外部送信元から OSC メッセージを受信、行として蓄積
  2. DAT Execute DAT の DAT パラメータに OSC In DAT のパスを指定
  3. Table Change を On にして onTableChange(dat) 内で末尾行を読み出し、アドレスと値で分岐
  4. コールバック内で op('constant1').par.value0 = float(dat[-1, 2]) 等でパラメータに反映

Example 2: Serial DAT の受信行をパースしてセンサー値を抽出 🔌

Serial DAT (Arduino) → DAT Execute DAT (onTableChange) → Constant CHOP
  1. Serial DAT を Arduino 等のマイコンに接続し、行ごとにセンサー値を受信
  2. DAT Execute DAT で監視を有効化、onTableChange 内で dat[-1, 0].val から最新行のテキストを取得
  3. Python の split(',')json.loads でフィールド分解、float 化
  4. Constant CHOP の各 value に書き込んで CHOP ネットワークへ受け渡す
  5. Execute = End of Frame を選んでおくと 1 フレーム複数行受信時もコスト一定

Example 3: Table DAT の編集をトリガーに UI ラベルを更新 📝

Table DAT (設定値) → DAT Execute DAT (onTableChange) → Text TOP
  1. 設定値を Table DAT に保持し、運用中にユーザが GUI で書き換える
  2. DAT Execute DAT で Table DAT を監視、編集が走った瞬間にコールバック起動
  3. onTableChange(dat) 内で for r in range(dat.numRows): ... で全行をスキャン
  4. 対応する Text TOP の text パラメータに値を書き戻して UI を再描画

関連オペレータ 🔗

類似機能OP 🔍

  • CHOP Execute DAT — CHOP チャンネル値の変化を監視する版
  • Panel Execute DAT — UI パネルの状態変化を監視する版
  • Parameter Execute DAT — 任意 OP のパラメータ変化を監視する版
  • OP Execute DAT — OP の状態 (フラグ・接続・削除等) の変化を監視する版
  • Execute DAT — プロジェクトのライフサイクル (start / exit / pre-frame 等) を監視する版

組み合わせ推奨OP 🔄

  • OSC In DAT — OSC 受信メッセージは DAT 行イベントなので DAT Execute と組み合わせる定番
  • Serial DAT — シリアル経由のマイコン受信行を監視してパース
  • Web Client DAT — HTTP レスポンス受信を DAT 変化として捕捉
  • Table DAT — 設定テーブルの編集をトリガーに反映処理を実行
  • Script DAT — コールバック内で別の DAT を加工して結果を生成

前処理・後処理DAT 🎯


Info DAT情報 📊

DAT Execute 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: DAT が変化してもコールバックが呼ばれない
✅ Solution:

  • Active パラメータが On になっているか確認
  • DAT パラメータに監視対象の DAT パスが正しく設定されているか確認
  • Table Change が On になっているか確認 (旧 Row/Column/Cell/Size 系は Deprecated、現代は Table Change を使う)
  • 監視対象 DAT が実際に cook して内容が変わっているか (上流が止まっていないか) を確認

❌ Problem: 1 フレームに複数回コールバックが呼ばれて重い
✅ Solution:

  • Execute パラメータを End of Frame に切替えるとフレーム終了時に最大 1 回だけ実行される
  • onTableChange 内で差分判定を行い、必要なときだけ重い処理 (パース / I/O) を実行
  • 重い処理は Web Client DAT の async コールバックや別 thread に逃がす

❌ Problem: Python 例外で他のコールバックも止まる
✅ Solution:

  • コールバック内を try / except Exception as e: で囲んで例外を吸収
  • Textport / Console でスタックトレースを確認し例外箇所を特定
  • コールバック内で重い処理 (ファイル I/O など) は非同期化、UI スレッドをブロックしない設計に変更

❌ Problem: OSC In DAT 等で受信行が増え続けてメモリを圧迫する
✅ Solution:

  • 前段の OSC In DAT / Serial DAT で Max Lines / Clear Output 等を設定し履歴を制限
  • onTableChange 内で末尾行のみ参照 (dat[-1, ...]) し、過去行はクリア
  • 定期的に dat.clear(keepFirstRow=True) で履歴を切り詰めるロジックを追加

参考資料 📚

その他 🔗

公式リソース 📖

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