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

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

CHOP Execute DAT の CHOP イベント駆動 Python 実行を示す図

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

概要 📖 – CHOP チャンネル値の変化に応じて Python を実行

CHOP Execute DATは、CHOP チャンネル値の変化を契機に Python コールバックを実行する DATです。コールバックは値変化 (onValueChange) / オフ→オン (onOffToOn) / オン→オフ (onOnToOff) / While On (whileOn) / While Off (whileOff) 等が用意されています。

主な用途 🎯

  • CHOP チャンネル値の変化イベントを Python コールバック (onValueChange) で受け取る
  • オフ→オン (onOffToOn) / オン→オフ (onOnToOff) のエッジ検出
  • センサー入力 / OSC / MIDI の値変化を契機にアクションを実行
  • state machine の遷移を CHOP の各チャンネル値の閾値で駆動
  • ボタン / トグル UI の状態変化からネットワーク操作を実行

データフロー 🔄

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

値変化イベント検出

Python コールバック (onValueChange / onOffToOn / onOnToOff 等) 実行

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

CHOP Execute Page 📋

監視対象 CHOP とコールバック種別 🎯

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

CHOP .chop 🎚️
– 監視対象の CHOP を指定 (パス入力 / ドラッグ&ドロップ可)

Channels .channels 🔤
– 監視するチャンネル名のパターン
* で全チャンネル / ch[1-4] 等のパターン指定可能

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

Off to On .offon 🟢
– On 時、チャンネル値が 0 から非 0 に変化したタイミングで onOffToOn(channel, sampleIndex, val, prev) を呼び出す

While On .whileon ⏸️
– On 時、チャンネル値が非 0 の間 whileOn(...) を毎クック呼び出す

On to Off .onoff 🔴
– On 時、チャンネル値が非 0 から 0 に変化したタイミングで onOnToOff(...) を呼び出す

While Off .whileoff ⏹️
– On 時、チャンネル値が 0 の間 whileOff(...) を毎クック呼び出す

Value Change .valuechange 🔄
– On 時、チャンネル値が前回サンプルから変化したときに onValueChange(channel, sampleIndex, val, prev) を呼び出す


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: ボタン押下イベントで通知メッセージを発火 🔔

Button COMP → CHOP Execute DAT (onOffToOn) → 通知ロジック
  1. Button COMP の state CHOP (= 0/1 のチャンネル) を監視対象に指定
  2. Off to On を On にして onOffToOn(channel, sampleIndex, val, prev) を有効化
  3. コールバック内で op('notify_op').par.trigger.pulse() 等のアクションを記述
  4. ボタンを押すたびに 1 回だけ通知ロジックが実行される (連打ガード不要)

Example 2: センサー値が閾値を超えたら別 OP のパラメータを切り替え 🎚️

Audio In CHOP → Logic CHOP (threshold) → CHOP Execute DAT (onOffToOn / onOnToOff)
  1. 音声入力を Logic CHOP で閾値判定して 0/1 に変換
  2. CHOP Execute DAT で Off→On / On→Off を両方有効化
  3. onOffToOn で派手な視覚エフェクト ON、onOnToOff で OFF へ戻すアクションを記述
  4. ヒステリシスが必要なら Logic CHOP の Hyst パラメータでチャタリング抑制

Example 3: MIDI ノートイベントから音色 / シーン切替 🎹

MIDI In CHOP → CHOP Execute DAT (onValueChange) → Switch TOP / Constant CHOP
  1. MIDI In CHOP の note チャンネルを Channels パラメータに指定
  2. Value Change を On にして onValueChange(channel, sampleIndex, val, prev) を有効化
  3. コールバック内で val (ノート番号 / Velocity) に応じて分岐し、Switch TOP の index を更新
  4. シーン切替 / 音色変更 / 照明変化を MIDI イベント駆動で連動

関連オペレータ 🔗

類似機能OP 🔍

組み合わせ推奨OP 🔄

  • Logic CHOP — 閾値判定で 0/1 化してエッジ検出に渡す
  • Trigger CHOP — コールバック内から ADSR エンベロープを起動
  • Constant CHOP — コールバックから値を書き戻して状態保持
  • MIDI In CHOP — MIDI イベントを CHOP 値化して監視
  • OSC In DAT — OSC メッセージは DAT 行イベントなので DAT Execute と組み合わせる

前処理・後処理DAT 🎯


Info DAT情報 📊

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

DAT 固有情報 📄

  • num_rows: 保持されているコールバックスクリプトの行数
  • num_cols: DAT の列数 (通常 1)
  • type: DAT の型 (table / text)
  • is_table: テーブル形式の場合 1、テキスト形式の場合 0

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数 (≒ コールバック発火回数の目安)
  • cook_time: 最後のクック時間 (ミリ秒) — コールバック実行時間の指標
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数 (コールバック内例外発生時にカウント)

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

よくある問題と解決策 🔧

❌ Problem: 値が変化してもコールバックが呼ばれない
✅ Solution:

  • Active パラメータが On になっているか確認
  • CHOP パラメータに監視対象 CHOP のパスが正しく設定されているか確認
  • Channels パターンが実際のチャンネル名にマッチしているか (例: ch1 単数指定で ch[1-4] をカバーできない)

❌ Problem: onOffToOn / onOnToOff がチャタリング (連発) する
✅ Solution:

  • 前段に Logic CHOP の Hysteresis (Hyst) パラメータでチャタリング抑制
  • 前段に Filter CHOP で値を平滑化 (1-frame Boxcar 等)
  • Threshold を確実に超える振幅まで持ち上げてから Logic CHOP に通す

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

  • コールバック内を try / except Exception as e: で囲んで例外を吸収
  • Textport / Console でスタックトレースを確認
  • コールバック内で重い処理 (ファイル I/O など) は別 thread / Web Client DAT のコールバックへ逃がす

参考資料 📚

公式リソース 📖

コミュニティ 💬

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