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

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

Trail CHOP の履歴記録機能を示す図

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

概要 📖 – 入力チャンネルの履歴を時間ウィンドウで保持・表示

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 によるクリア

出力: 時間軸を持つ履歴チャンネル

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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 → 表示
  1. 入力センサー値の CHOP を Trail CHOP に接続
  2. Window Length を「5」、Window Length Unit を「Seconds」に設定(直近 5 秒分の波形を表示)
  3. Capture を「Time Slice」にして毎クックごとに連続記録
  4. 後段に CHOP to TOP を置いて画面表示すると、リアルタイムオシロスコープのような波形が得られる

Example 2: 離散イベントログ(ボタン押下履歴) 🔘

Button (Panel CHOP) → Trail CHOP (Capture: Only When Input Cooks) → 履歴表示
  1. ボタン状態を出力する Panel CHOP を Trail CHOP に接続
  2. Capture を「Only When Input Cooks」に設定(入力がクックされたときのみ記録)
  3. Window Length を「200」Samples 程度に設定し、直近 200 イベント分の押下履歴を保持
  4. 長い停止区間があってもイベントだけがバッファに残るため、ログ調査やデバッグに有効

Example 3: モーションキャプチャの可変長レコーディング 🎞️

Kinect / OSC In CHOP → Trail CHOP (Grow Length: On) → Reset Pulse でクリア
  1. モーションデータを出力する CHOP を Trail CHOP に接続
  2. Grow Length をオンにして、タイムラインが進むほど記録が伸び続けるよう設定
  3. 録音開始時に Reset Pulse でバッファをクリア
  4. 任意のタイミングで Active をオフにして記録を停止 → 後段で再生・解析に使用

Example 4: リサンプル出力で後段スペクトル解析 🌊

Math CHOP → Trail CHOP (Resample: 256 samples) → Audio Spectrum CHOP
  1. 解析対象の CHOP を Trail CHOP に接続
  2. Resample をオンにして出力サンプル数を「256」(2 のべき乗)に固定
  3. Window Length は解析窓に合わせて設定(例: 1 秒)
  4. 後段の 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 🎯


Info CHOP情報 📊

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

CHOP固有情報 🎚️

  • start: CHOPインターバルの開始(サンプル単位)
  • length: CHOPのサンプル数
  • sample_rate: フレーム毎秒のサンプルレート
  • num_channels: CHOPのチャンネル数
  • time_slice: タイムスライス有効時は1、無効時は0
  • export_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 が次フレームまで反映されないことがある

参考資料 📚

その他 🔗

公式リソース 📖

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