
概要 📖 – 信号解析と統計処理
Analyze CHOPは、入力されたチャンネルのすべての値を分析・計算・収束させ、単一の数値結果を出力する CHOPです。出力は 1 サンプル長で、最大値・平均・ピーク等の統計的特性を解析します。
主な用途 🎯
- チャンネルデータの統計的解析(最大・最小・平均値の取得)
- ピーク検出とそのインデックス取得
- 音声波形信号の解析(RMS Power、ピーク検出 等)
- データ駆動型制御システムでの閾値判定
- センサーデータの特徴量抽出
データフロー 🔄
入力: チャンネルデータ(複数サンプル)
↓
分析処理(Function 設定に応じた統計処理)
↓
出力: 1 サンプル長の解析結果
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Analyze Page 📋
Function .function 🎛️
チャンネルに適用する分析関数を決定するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Average | .average |
チャンネル全体の平均値を計算 |
| Maximum | .maximum |
チャンネル内の最大値を取得 |
| Minimum | .minimum |
チャンネル内の最小値を取得 |
| Index of Maximum | .maximumindex |
最大値のサンプルインデックス(0から開始) |
| Index of Minimum | .minimumindex |
最小値のサンプルインデックス(0から開始) |
| Sum | .sum |
全サンプル値の合計 |
| RMS Power | .rmspower |
RMS(実効値平方根)を計算 |
| Value of First Peak | .firstpeakvalue |
最初のピーク値 |
| Index of First Peak | .firstpeakindex |
最初のピークのインデックス |
| Value of Last Peak | .lastpeakvalue |
最後のピーク値 |
| Index of Last Peak | .lastpeakindex |
最後のピークのインデックス |
| Value of Highest Peak | .highestpeakvalue |
最高ピーク値 |
| Index of Highest Peak | .highestpeakindex |
最高ピークのインデックス※ |
| Value of Lowest Peak | .lowestpeakvalue |
最低ピーク値 |
| Index of Lowest Peak | .lowestpeakindex |
最低ピークのインデックス※ |
| Total Peaks | .totalpeaks |
チャンネル内の総ピーク数 |
| Duplicates | .duplicates |
重複値の解析(詳細は下記参照) |
※ 注意: 同じ値を持つ複数のピークがある場合、最後のピークサンプルのインデックスを返します。
ピーク関連パラメータ 📈
Allow Start Peaks .allowstart ✅
– 最初の2サンプルがv0, v1でv0 > v1の場合、最初のサンプルもピークとしてカウント
– デフォルト:オフ(最初のサンプルはピークとみなさない)
Allow End Peaks .allowend ✅
– 最後の2サンプルがvn, vmでvm > vnの場合、最後のサンプルもピークとしてカウント
– デフォルト:オフ(最後のサンプルはピークとみなさない)
No Peak Value .nopeakvalue 📈
– ピークが見つからない場合に出力する値(デフォルト:-1)
– Peak IndexやPeak Value関数でピークが検出されなかったことの判定に使用
Analyze Valleys vs Peaks .valleys 🔄
– オンにするとピークではなく谷(Valley)を解析対象に切り替え
– 切り替え時は以下の Valley 関数が有効になります:
- First Valley
- Highest Valley
- Lowest Valley
Duplicates機能詳細 🔍
duplicatesを選択すると、入力チャンネルごとに2つの追加チャンネルが作成されます:
- count: 特定の値の重複数
- index: その値が最初に現れたサンプルインデックス
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 → Analyze CHOP (RMS Power) → Export → Light Intensity
Audio Device In CHOP のリアルタイム音声入力に対し Analyze CHOP で RMS Power を算出し、その単一値を照明強度などの制御信号に流用する基本フロー。
- Audio Device In CHOPで音声入力を取得
- Analyze CHOPのFunctionを「RMS Power」に設定
- 出力をライトの強度パラメータにExport
- 音声の音量に応じてリアルタイムで照明が変化
Example 2: センサーデータのピーク検出 📊
Serial In DAT → Convert DAT → Analyze CHOP (Index of Highest Peak)
Serial In DAT で受け取ったセンサーストリームを Analyze CHOP の Index of Highest Peak モードに通し、極大値が発生したタイミングをトリガとして抽出する例。
- センサーから得られる連続データの中で最大値が発生したタイミングを検出
- ピークタイミングでイベントトリガーを実行
Example 3: ゲームスコア計算 🎮
Player Input → Math CHOPs → Analyze CHOP (Sum) → Score Display
プレイヤー入力を Math CHOP 群で前処理した後、Analyze CHOP の Sum モードで累積スコアを算出してリアルタイム表示に反映する用途。
- プレイヤーの入力値を累積してスコア計算
- リアルタイムでの得点表示システム
Example 4: データ品質チェック 🔄
Input Data → Analyze CHOP (Duplicates) → Logic → Alert System
入力データに含まれる重複値を Analyze CHOP の Duplicates モードで検出し、Logic CHOP と組み合わせて品質異常時のアラートに繋げるフロー。
- データストリーム内の重複値をモニタリング
- 重複が検出された場合のアラート生成
関連オペレータ 🔗
類似機能OP 🔍
- Info CHOP — CHOP自体のメタ情報取得
組み合わせ推奨OP 🔄
- Logic CHOP — 分析の min/max 値を if 条件として閾値判定
- Math CHOP — 分析結果を後段で正規化・スケーリング
- Trigger CHOP — 分析ピーク値から ADSR エンベロープを起動
- Audio Spectrum CHOP — 前段で周波数領域に変換してから Analyze に通す
- CHOP to TOP — 解析値を GPU シェーダ uniform に渡す
- CHOP to DAT — 解析値を CSV/Table 形式でロギング
- Trail CHOP — 解析値の時間履歴を可視化
- Filter CHOP — 前処理・後処理どちらでも有効
前処理・後処理CHOP 🎯
- 前処理: Filter CHOP、Resample CHOP、Math CHOP、Lag CHOP、Delete CHOP、Audio Spectrum CHOP
- 後処理: Math CHOP、Switch CHOP、Select CHOP、Limit CHOP、Hold CHOP、Constant CHOP
Info CHOP情報 📊
Analyze 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:
Allow Start Peaks/Allow End Peaksの設定を確認- データにノイズが多い場合は前処理でFilter CHOPを使用
No Peak Valueで期待値が設定されているか確認
❌ Problem: 期待した統計値が得られない
✅ Solution:
- 入力データの範囲を確認(Math CHOPでクランプ等)
- Sample Rate Match の設定を適切に選択
- Time Slice の設定がデータ特性に合っているか確認
❌ Problem: パフォーマンスが重い
✅ Solution:
- 不要なチャンネルは Scope で除外
- 上流でResample CHOPを使用してサンプル数を削減
- Duplicates 機能は必要な場合のみ使用
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

