
概要 📖 – 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等) 実行
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
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 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: ボタン押下イベントで通知メッセージを発火 🔔
Button COMP → CHOP Execute DAT (onOffToOn) → 通知ロジック
- Button COMP の
stateCHOP (= 0/1 のチャンネル) を監視対象に指定 Off to Onを On にしてonOffToOn(channel, sampleIndex, val, prev)を有効化- コールバック内で
op('notify_op').par.trigger.pulse()等のアクションを記述 - ボタンを押すたびに 1 回だけ通知ロジックが実行される (連打ガード不要)
Example 2: センサー値が閾値を超えたら別 OP のパラメータを切り替え 🎚️
Audio In CHOP → Logic CHOP (threshold) → CHOP Execute DAT (onOffToOn / onOnToOff)
- 音声入力を Logic CHOP で閾値判定して 0/1 に変換
- CHOP Execute DAT で Off→On / On→Off を両方有効化
onOffToOnで派手な視覚エフェクト ON、onOnToOffで OFF へ戻すアクションを記述- ヒステリシスが必要なら Logic CHOP の Hyst パラメータでチャタリング抑制
Example 3: MIDI ノートイベントから音色 / シーン切替 🎹
MIDI In CHOP → CHOP Execute DAT (onValueChange) → Switch TOP / Constant CHOP
- MIDI In CHOP の note チャンネルを Channels パラメータに指定
Value Changeを On にしてonValueChange(channel, sampleIndex, val, prev)を有効化- コールバック内で val (ノート番号 / Velocity) に応じて分岐し、Switch TOP の index を更新
- シーン切替 / 音色変更 / 照明変化を MIDI イベント駆動で連動
関連オペレータ 🔗
類似機能OP 🔍
- DAT Execute DAT — DAT (テーブル) の変化を監視する版
- Panel Execute DAT — UI パネルの状態変化を監視する版
- Parameter Execute DAT — 任意 OP のパラメータ変化を監視する版
組み合わせ推奨OP 🔄
- Logic CHOP — 閾値判定で 0/1 化してエッジ検出に渡す
- Trigger CHOP — コールバック内から ADSR エンベロープを起動
- Constant CHOP — コールバックから値を書き戻して状態保持
- MIDI In CHOP — MIDI イベントを CHOP 値化して監視
- OSC In DAT — OSC メッセージは DAT 行イベントなので DAT Execute と組み合わせる
前処理・後処理DAT 🎯
- 前処理: Text DAT、Table DAT
- 後処理: Script DAT、Text DAT、Null 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 のコールバックへ逃がす
参考資料 📚
公式リソース 📖
- TouchDesigner公式ドキュメント – CHOP Execute DAT
- DAT概要ページ
- chopexecuteDAT_Class(Python API 一覧)
- Python in TouchDesigner


