
概要 📖 – 閾値検出とエンベロープ生成
Trigger CHOPは、入力チャンネルが閾値を越えた瞬間に Attack / Decay / Sustain / Release から成るエンベロープ波形を発火する CHOPです。Trigger / Release の双方向閾値、ADSR の各段階・形状指定、Multi Trigger モードを組み合わせて、ボタン押下の瞬時応答からシンセサイザ風の音量包絡線まで 1 オペレータで生成できます。
主な用途 🎯
- 入力チャンネルが閾値を越えた瞬間にエンベロープ波形を発火
- Attack / Peak / Decay / Sustain / Release から成る ADSR 形状の生成
- Re-Trigger Delay と Min Trigger Length によるチャタリング抑制とトリガー安定化
- Multi Trigger モード(Ignore / Add / Restart)による重複発火時の振る舞い制御
- Attack / Decay / Release の各 Shape(Linear / Ease In / Ease Out / Ease in Ease out)でエンベロープのカーブ整形
データフロー 🔄
入力: チャンネル値
↓
Trigger Threshold 超過判定(Increasing / Decreasing)
↓
Re-Trigger Delay / Min Trigger Length
↓
Delay → Attack(peak まで上昇)
↓
Peak Length 保持
↓
Decay(sustain まで下降)
↓
Sustain(入力 release まで保持)
↓
Release(ゼロまで下降)
↓
出力: エンベロープ波形
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Trigger Page 🎯
閾値パラメータ 📏
Release = Trigger Threshold .threshold 🔗
– オン: Trigger Threshold を Release Threshold としても兼用(単一閾値モード)
– オフ: Trigger / Release を別々の値で設定可能(ヒステリシス付き判定)
Trigger Threshold .threshup ⬆️
– エンベロープ発火の基準となるチャンネル値
– この値を超えると trigger イベントが発生
Release Threshold .threshdown ⬇️
– チャンネル値がこの値を下回ると release イベントが発生
– Release = Trigger Threshold がオフのときのみ有効
Re-Trigger Delay .retrigger ⏳
– 一度 trigger が発生してから次の trigger を受け付けるまでの待機時間
– チャタリング(連続誤発火)を抑制するためのデバウンス用途に有効
Re-Trigger Delay Unit .retriggerunit ⏲️
– Re-Trigger Delay の単位(Frames / Seconds / Samples)
Min Trigger Length .mintrigger 📐
– trigger が active 状態を維持する最小時間
– 短いパルス入力でも一定時間以上のエンベロープを保証したいときに使用
Min Trigger Length Unit .mintriggerunit ⏲️
– Min Trigger Length の単位(Frames / Seconds / Samples)
Trigger On .triggeron 🎚️
閾値通過のどちらの方向で trigger を発火させるかを決定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Increasing Values | .increase |
チャンネル値が上昇しながら閾値を越えるときに trigger(release は逆方向) |
| Decreasing Values | .decrease |
チャンネル値が下降しながら閾値を越えるときに trigger(release は逆方向) |
Multi Trigger .multitrigger 🔁
複数のエンベロープを発火させたときに、それらの値をどう合成するかを決定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Ignore During Attack | .ignore |
Attack 中の新規 trigger は無視(最初のエンベロープを完走させる) |
| Add | .add |
発火中のエンベロープに新規エンベロープを加算合成 |
| Restart Envelope | .restart |
新規 trigger でエンベロープを最初から再生し直す |
Multi Trigger 補助 🧮
Clamp at Peak Level .clamppeak 🚧
– Multi Trigger = Add のときに合成値が Peak Level を超えないようクランプ
– 加算の発散を抑え一定の最大振幅に収める
Update Once per Cycle .updateonce 🔂
– エンベロープの 1 サイクルにつき 1 回だけ値を更新(パラメータ変動の反映を 1 周期単位に揃える)
Complete Envelope .complete ✅
– オン: trigger ポイントごとに完結したエンベロープを出力(release で打ち切られない)
– オフ: release ポイントでエンベロープを途中終了させる
Remainder .remainder 📦
区間末尾でエンベロープが未完了の場合の残りサンプルの処理方法を決定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Discard Remainder | .crop |
残りサンプルを破棄。出力区間 = 入力区間 |
| Make Output Longer | .extend |
エンベロープが完了していない場合、出力を延長 |
| Mix Remainder with Beginning | .mix |
残りを区間先頭のサンプルに加算してミックス |
手動制御パラメータ 🎛️
Trigger .trigger ⚡
– 入力に関係なくエンベロープを即座に発火(手動 trigger ボタン)
Release .release 🛑
– 入力に関係なくエンベロープを即座に release(手動 release ボタン)
Reset .reset ⏸️
– On の間エンベロープをリセットし、出力を入力にマッチさせる
Reset Pulse .resetpulse ♻️
– クリックするとエンベロープを即座にリセット(パルス動作)
Attack Page 📈
Attack 時間パラメータ ⏱️
Delay Length .delay ⏳
– trigger ポイントからエンベロープ開始までの遅延時間
Delay Length Unit .delayunit ⏲️
– Delay Length の単位(Frames / Seconds / Samples)
Attack Length .attack 📈
– ゼロから Peak Level まで上昇するのにかける時間
Attack Length Unit .attackunit ⏲️
– Attack Length の単位(Frames / Seconds / Samples)
Attack Shape .ashape 📈
Attack ランプ(上昇区間)の形状を決定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Linear | .linear |
直線的に上昇 |
| Ease In | .easein |
緩やかに開始し終端で加速 |
| Ease Out | .easeout |
急速に開始し終端で減速 |
| Ease in Ease out | .halfcos |
両端で滑らかな S 字カーブ(cos ベース) |
Peak パラメータ 📏
Peak Level .peak 🏔️
– Attack フェーズで到達する最大値
Peak Length .peaklen ⏸️
– Peak Level に到達した後、Decay フェーズに入るまで保持する時間
Peak Length Unit .peaklenunit ⏲️
– Peak Length の単位(Frames / Seconds / Samples)
Sustain Page 📉
Decay 時間パラメータ ⏱️
Decay Length .decay 📉
– Peak Level から Sustain Level まで下降するのにかける時間
Decay Length Unit .decayunit ⏲️
– Decay Length の単位(Frames / Seconds / Samples)
Decay Shape .dshape 📉
Decay ランプ(Peak から Sustain への下降区間)の形状を決定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Linear | .linear |
直線的に下降 |
| Ease In | .easein |
緩やかに開始し終端で加速 |
| Ease Out | .easeout |
急速に開始し終端で減速 |
| Ease in Ease out | .halfcos |
両端で滑らかな S 字カーブ(cos ベース) |
Sustain / Release パラメータ 📏
Sustain Level .sustain 📊
– Decay 後に保持されるレベル
– 入力が release ポイント(閾値下回り)に達するまで維持
Min Sustain Length .minsustain 📐
– sustain の最小時間
– 0 のときは入力 hold 時間と一致、値を指定すると最低限その時間 sustain を保証
Min Sustain Length Unit .minsustainunit ⏲️
– Min Sustain Length の単位(Frames / Seconds / Samples)
Release Length .release 📉
– Sustain Level からゼロまで下降するのにかける時間
Release Length Unit .releaseunit ⏲️
– Release Length の単位(Frames / Seconds / Samples)
Release Shape .rshape 📉
Release ランプ(Sustain からゼロへの下降区間)の形状を決定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Linear | .linear |
直線的に下降 |
| Ease In | .easein |
緩やかに開始し終端で加速 |
| Ease Out | .easeout |
急速に開始し終端で減速 |
| Ease in Ease out | .halfcos |
両端で滑らかな S 字カーブ(cos ベース) |
Chan Page 📁
出力チャンネル設定 🎚️
Channel Name .channame 🏷️
– 出力チャンネルの名前
Specify Rate .specifyrate ⚙️
– オンにすると Sample Rate パラメータで出力サンプルレートを指定可能
Enable Remap Length .enableremaplength 🔄
– オンにすると、エンベロープ全体の長さを Remap Length で指定した時間に再マッピング
– hold 中の sustain は再マッピング対象外(Delay / Attack / Peak / Release のみ再マッピング)
Remap Length .remaplength 📐
– エンベロープ全体の再マッピング後の長さ
Remap Length Unit .remaplengthunit ⏲️
– Remap Length の単位(Frames / Seconds / Samples)
Sample Rate .rate 🎵
– 出力のサンプルレート(Specify Rate がオンのときのみ有効)
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: ボタン押下によるフェードインアニメーション 🎬
Mouse In CHOP → Trigger CHOP (ADSR) → 透明度パラメータ
- Mouse In CHOP で左ボタン信号を取得
- Trigger CHOP の Trigger Threshold を 0.5 に設定
- Attack Length を 0.3 秒、Sustain Level を 1.0、Release Length を 0.5 秒に設定
- 出力チャンネルをオブジェクトの透明度パラメータに Export してフェードイン・フェードアウトを生成
Example 2: 音声ピーク検出からエンベロープを発火させ照明を演出 💡
Audio Device In CHOP → Analyze CHOP (RMS Power) → Trigger CHOP → Light Intensity
- Audio Device In CHOP でマイク音を取得
- Analyze CHOP の Function を「RMS Power」に設定して音量レベルを 1 サンプル化
- Trigger CHOP の Trigger Threshold を環境ノイズより高い値に設定
- Attack Shape を「Ease Out」、Release Length を 0.8 秒に設定して音量ピークに反応する滑らかな照明エンベロープを生成
Example 3: Multi Trigger Add モードによる音量ピーク累積 🎚️
LFO CHOP → Trigger CHOP (Multi Trigger = Add, Clamp at Peak Level = On) → 出力
- LFO CHOP で周期的なパルス信号を生成
- Trigger CHOP の Multi Trigger を「Add」、Clamp at Peak Level をオンに設定
- Attack / Release を短めに設定して連続発火時に重なり合うエンベロープを加算
- Peak Level でクランプされた累積エンベロープが出力され、ビジュアル強度の山積み演出に使用
関連オペレータ 🔗
類似機能OP 🔍
- Count CHOP — 閾値超過のカウントに特化(エンベロープではなく整数カウンタ)
- Logic CHOP — 閾値判定と論理演算(AND / OR)に特化、エンベロープ波形は生成しない
組み合わせ推奨OP 🔄
- Analyze CHOP — 音声 RMS Power / ピーク値を抽出して Trigger の入力にする
- Math CHOP — Trigger 出力エンベロープをスケーリング・オフセット
- Filter CHOP — 前段で入力信号を平滑化してチャタリングを抑制
- Lookup CHOP — Trigger 出力を 0〜1 範囲のインデックスとしてテーブル参照
- LFO CHOP — 周期パルスを Trigger に与えてリズミックなエンベロープを生成
前処理・後処理CHOP 🎯
Info CHOP情報 📊
Trigger 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: 1 回の入力でエンベロープが複数回発火してしまう(チャタリング)
✅ Solution:
- Re-Trigger Delay を 0.05〜0.2 秒程度に設定して連続発火を抑制
- Release = Trigger Threshold をオフにして、Trigger / Release に異なる閾値を設定(ヒステリシス付き判定)
- 前段に Filter CHOP を入れて入力波形を平滑化
❌ Problem: エンベロープが途中で切れて Release 段階まで到達しない
✅ Solution:
- Complete Envelope をオンにして trigger ポイントごとに完結したエンベロープを出力させる
- Min Trigger Length を指定して短いパルス入力でも一定時間以上の trigger active を保証
- Remainder を「Make Output Longer」に設定して区間末尾でエンベロープが未完了でも出力を延長
❌ Problem: 複数 trigger が重なったときの振る舞いが意図と違う
✅ Solution:
- Multi Trigger を用途に合わせて切替(Ignore During Attack / Add / Restart Envelope)
- Multi Trigger = Add で発散しすぎる場合は Clamp at Peak Level をオンにして合成値を Peak Level でクランプ
- 後段の Math CHOP で Multiply / Range 変換して最終的な振幅を調整
❌ Problem: Attack / Decay / Release の時間を変えてもエンベロープの形が変わらない
✅ Solution:
- 各 Length パラメータの Unit(Frames / Seconds / Samples)が想定どおりか確認
- Enable Remap Length がオンになっていると Delay / Attack / Peak / Release が Remap Length に再マッピングされて個別 Length が無視される
- Specify Rate がオンで出力サンプルレートが低すぎると短い Attack / Decay が表現できない、Sample Rate を上げる
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

