
概要 📖 – 入力チャンネルの履歴を時間ウィンドウで保持・表示
Trail CHOPは、入力チャンネルの過去の値を時間ウィンドウで保持し、現在フレームから遡る履歴波形として出力する CHOPです。Window Length で保持する区間長を指定し、Capture モードで連続記録/離散イベント記録を切り替え、Resample で出力長を整形できます。センサーログ・モーション解析・履歴ベース演算の基盤として機能します。
主な用途 🎯
- 入力チャンネルの過去の値を時間軸でスクロール表示するヒストリーバッファ
- センサー値・解析値の時系列ログを一定区間保持して波形として可視化
- 連続キャプチャ(Time Slice)と離散キャプチャ(Only When Input Cooks)の使い分け
- Grow Length により可変長のレコーディングを実現
- Resample による出力長・サンプルレート変換で後段処理に揃える
データフロー 🔄
入力: 任意の CHOP チャンネル
↓
Active / Capture モード判定(Time Slice or Only When Input Cooks)
↓
Window Length / Grow Length による履歴バッファ蓄積
↓
Resample / Rate による出力長・サンプルレート整形
↓
Reset / Reset Pulse によるクリア
↓
出力: 時間軸を持つ履歴チャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Trail Page 📜
記録制御 🎬
Active .active 🟢
– オンの間、Trail CHOP は入力の記録を継続
– オフにすると履歴は凍結され、現状のバッファ内容をそのまま保持
Grow Length .growlength 📏
– オンの間、タイムラインが進むほど Trail CHOP の記録長が伸び続ける
– 任意の長さで記録を残したいときに使用(Window Length は無視され、開始時点からの累積記録になる)
Window Length .wlength 🪟
– 履歴として保持する区間の長さ(Window Length Unit で指定した単位)
– 4 秒に設定すると、現在フレームから遡って 4 秒分の入力チャンネル値が表示される
Window Length Unit .wlengthunit 📐
Window Length パラメータの単位を選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Samples | .samples |
サンプル数で指定(CHOP 固有のサンプル単位) |
| Frames | .frames |
フレーム数で指定(タイムライン基準) |
| Seconds | .seconds |
秒数で指定(最も直感的な時間単位) |
Capture .capture 🎥
値をキャプチャするタイミングを選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Time Slice | .timeslice |
毎クックごとに入力のスライディングウィンドウをキャプチャ。連続的なログ取りに有効 |
| Only When Input Cooks | .inputcooks |
入力がクックされたときだけキャプチャ。長い停止区間で区切られた離散イベントの記録に有効 |
出力リサンプル 🔄
Resample .resample 🔁
– オンにすると下の samples パラメータで指定した長さに出力をリサンプル
– 出力長を後段の処理に合わせたいときに使用
Resample (samples) .samples 🔢
– リサンプル後の出力サンプル数
– 上の Resample トグルがオンのときのみ有効
Rate .setrate ⚡
– オンにすると下の rate パラメータで指定したサンプルレートに変換
– グローバルフレームレート($FPS)と異なるサンプルレートが必要な場合に使用
Sample Rate .rate 📡
– 出力に使うサンプルレート(samples/sec)
– 上の Rate トグルがオンのときのみ有効。グローバル $FPS を上書きする
リセット 🔁
Reset .reset 🔻
– オンの間、チャンネル値を 0 にリセット保持
– トグルを戻すまで履歴はクリアされた状態が続く
Reset Pulse .resetpulse ⚡
– パルスでチャンネル値を瞬時に 0 にリセット
– 履歴を即座に消去して新しい記録を開始したいときに使用
Common Page 🔧
Time Slice .timeslice ⏱️
Time Slice モードの強制設定:
- オン: チャンネルを「タイムスライス」モードに強制
- タイムスライス: 前回のクックフレームから現在のクックフレームまでの時間
Scope .scope 🎯
影響を受けるチャンネルの絞り込み:
- Scope 文字列: 影響を受けるチャンネルを指定する文字列
- パターンマッチング:
*や[1-10]等のパターンが使用可能
Sample Rate Match .srselect ⚡
複数の入力 CHOP のサンプルレートが異なる場合の処理方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| Resample At First Input’s Rate | .first |
最初の入力のレートで他をリサンプル |
| Resample At Maximum Rate | .max |
最高サンプルレートでリサンプル |
| Resample At Minimum Rate | .min |
最低サンプルレートでリサンプル |
| Error If Rates Differ | .err |
レート不一致でエラー |
Export Method .exportmethod 📤
CHOP チャンネルをパラメータに接続する方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| DAT Table by Index | .datindex |
DAT テーブルのインデックスでチャンネルとパラメータを対応付け |
| DAT Table by Name | .datname |
DAT テーブルの行名でチャンネルとパラメータを対応付け |
| Channel Name is Path:Parameter | .autoname |
チャンネル名を `path:parameter` 形式で記述し直接対応付け |
Export Root .autoexportroot 🌳
Channel Name is Path:Parameter モード時のパス基点:
- Export Root パス:
autonameモードでチャンネル名のパス部分を相対化する基点 OP のパス
Export Table .exporttable 📋
DAT Table エクスポート方式での参照 DAT:
- Export Table DAT:
datindex/datnameモード時に参照する DAT のパス
Rename from .commonrenamefrom 🔤
リネーム対象チャンネルのパターン:
- Rename from パターン: リネーム対象とするチャンネル名のパターンマッチング文字列
Rename to .commonrenameto 🔁
リネーム後の置換パターン:
- Rename to パターン: Rename from にマッチしたチャンネルの新しい名前パターン (デフォルトはリネームなし)
実践アイデア 💡
Example 1: センサー値の時系列ログ可視化 📈
Audio Device In CHOP / Serial DAT 等 → Trail CHOP (Window Length: 5 sec) → CHOP to TOP → 表示
- 入力センサー値の CHOP を Trail CHOP に接続
- Window Length を「5」、Window Length Unit を「Seconds」に設定(直近 5 秒分の波形を表示)
- Capture を「Time Slice」にして毎クックごとに連続記録
- 後段に CHOP to TOP を置いて画面表示すると、リアルタイムオシロスコープのような波形が得られる
Example 2: 離散イベントログ(ボタン押下履歴) 🔘
Button (Panel CHOP) → Trail CHOP (Capture: Only When Input Cooks) → 履歴表示
- ボタン状態を出力する Panel CHOP を Trail CHOP に接続
- Capture を「Only When Input Cooks」に設定(入力がクックされたときのみ記録)
- Window Length を「200」Samples 程度に設定し、直近 200 イベント分の押下履歴を保持
- 長い停止区間があってもイベントだけがバッファに残るため、ログ調査やデバッグに有効
Example 3: モーションキャプチャの可変長レコーディング 🎞️
Kinect / OSC In CHOP → Trail CHOP (Grow Length: On) → Reset Pulse でクリア
- モーションデータを出力する CHOP を Trail CHOP に接続
- Grow Length をオンにして、タイムラインが進むほど記録が伸び続けるよう設定
- 録音開始時に Reset Pulse でバッファをクリア
- 任意のタイミングで Active をオフにして記録を停止 → 後段で再生・解析に使用
Example 4: リサンプル出力で後段スペクトル解析 🌊
Math CHOP → Trail CHOP (Resample: 256 samples) → Audio Spectrum CHOP
- 解析対象の CHOP を Trail CHOP に接続
- Resample をオンにして出力サンプル数を「256」(2 のべき乗)に固定
- Window Length は解析窓に合わせて設定(例: 1 秒)
- 後段の Audio Spectrum CHOP で固定長の FFT 入力として活用
関連オペレータ 🔗
類似機能OP 🔍
- Hold CHOP — 履歴ではなく特定タイミングの値を保持(Trail は時系列、Hold は瞬時値)
- Delay CHOP — 入力を一定時間遅延させて出力(Trail は履歴蓄積、Delay は遅延ライン)
- Lag CHOP — 入力に慣性応答を加えて滑らかに追従(履歴蓄積ではなく一次系応答)
組み合わせ推奨OP 🔄
- CHOP to TOP — Trail の履歴波形を画像化してリアルタイムオシロスコープ表示に活用
- Audio Spectrum CHOP — Trail で固定長サンプルにリサンプル → FFT 解析の前処理
- Math CHOP — Trail 出力の値域変換・スケーリング
- Filter CHOP — Trail 後段でノイズ除去・スムージング
- Analyze CHOP — Trail で蓄積した履歴に対して RMS / ピーク等の統計値を算出
前処理・後処理CHOP 🎯
- 前処理: Math CHOP、Filter CHOP、Constant CHOP、Audio Device In CHOP
- 後処理: Analyze CHOP、Filter CHOP、Resample CHOP、Audio Spectrum CHOP
Info CHOP情報 📊
Trail CHOP は Info CHOP による詳細情報取得に対応しています。
CHOP固有情報 🎚️
start: CHOPインターバルの開始(サンプル単位)length: CHOPのサンプル数sample_rate: フレーム毎秒のサンプルレートnum_channels: CHOPのチャンネル数time_slice: タイムスライス有効時は1、無効時は0export_sernum: Export接続の更新回数
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間(ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 警告数errors: エラー数
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 履歴が記録されない・空のままになる
✅ Solution:
- Active がオンになっているか確認(オフだと記録されない)
- 入力 CHOP が実際にクックされているか確認(Only When Input Cooks モードでは入力クックがないと記録されない)
- Reset がオンのままになっていないか確認(オンの間は値が 0 に固定される)
❌ Problem: Window Length を変えても波形の長さが変わらない
✅ Solution:
- Window Length Unit が想定と異なる単位(Samples / Frames / Seconds)になっていないか確認
- Grow Length がオンになっていないか確認(オンだと Window Length は無視され累積記録になる)
- 後段で Resample CHOP 等が長さを再変換していないか確認
❌ Problem: リサンプル出力でサンプルレートが期待と違う
✅ Solution:
- Rate トグルをオンにして Sample Rate を明示指定する
- オフのままだとグローバルフレームレート
$FPSが使用される - Resample(出力サンプル数)と Rate(サンプルレート)は独立に動作するため、両方の設定を確認
❌ Problem: 履歴のリセットが効かない・不安定
✅ Solution:
- Reset(トグル)と Reset Pulse(パルス)の挙動の違いに注意。トグルはオンの間 0 を保持、パルスは瞬時のクリア
- Capture モードが「Only When Input Cooks」のときは入力クックが起きるまでリセット後の記録が始まらない
- プロジェクト全体のクックレートが極端に低い場合、Reset Pulse が次フレームまで反映されないことがある
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

