
概要 📖 – 信号包絡線の抽出と波形整形
Envelope CHOPは、入力チャンネルのピーク輪郭を一定の窓幅で追跡し、減衰補間で包絡線を生成する CHOPです。音声波形の音量カーブ抽出やセンサー信号のスムージング、振幅追従の動的可視化に用います。
主な用途 🎯
- 音声波形の音量包絡線(ボリュームエンベロープ)抽出
- ノイズの多い信号からピーク輪郭を取り出すスムージング処理
- オーディオリアクティブ演出のための振幅追従カーブ生成
- センサー信号の動的レンジ可視化(最大・最小エッジの抽出)
- 周期信号の RMS / Magnitude 包絡線によるエネルギー解析
データフロー 🔄
入力: 時系列チャンネル(音声・センサー等)
↓
Envelope Width 窓内でのピーク検出
↓
Type(Exponential Decay 等)に応じた減衰補間
↓
Bounds(Magnitude / Power / Min / Max)で値域選択
↓
Interpolate / Resample で整形
↓
出力: 包絡線チャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Envelope Page 📋
Type .method 🎛️
包絡線の計算方式を選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Exponential Decay | .exp |
各サンプルを直前サンプルと比較し、超えた場合は新しいピーク値を採用、下回った場合は前回ピークから現在値へ指数関数的に減衰。常にデータを上から包む(Pros)が、傾きが不連続でカーブにバンプが出る場合がある(Cons) |
| Maximum | .max |
Envelope Width 窓内の最大値(または Bounds 設定に応じた最大絶対値)をそのまま採用するシンプルな最大値追従方式 |
Envelope Bounds .bounds 📐
包絡線が追跡する値の対象(振幅・電力・上下エッジ)を選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Magnitude | .mag |
サンプルの絶対値を対象に追跡(音声波形の振幅エンベロープに最適) |
| Signal Power | .power |
サンプルの 2 乗(Power)を対象に追跡(RMS 風のエネルギー包絡線) |
| Maximum Values | .min |
正側ピーク(最大値)のみを追跡し、上側エッジ包絡線を取得 |
| Minimum Values | .max |
負側ピーク(最小値)のみを追跡し、下側エッジ包絡線を取得 |
Envelope Width パラメータ 📏
Envelope Width .width 📏
– 包絡線計算に用いる窓のサイズ
– 入力信号の特徴をどれだけ拾うかを決める。Envelope Width Unit で指定した単位(Samples / Frames / Seconds)で表現
Envelope Width Unit .widthunit 🧭
– Envelope Width パラメータの単位を選択
– 選択肢: Samples(サンプル数)/ Frames(フレーム数)/ Seconds(秒)
- Samples
- Frames
- Seconds
Interpolate .interp 📈
ピーク間の補間方式を選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| None | .none |
補間なし(ピーク値をそのまま保持し、階段状の出力) |
| Linear | .linear |
ピーク間を直線補間し、滑らかな包絡線を生成 |
| Cubic | .cubic |
三次補間でより自然な曲線(音響系の振幅エンベロープに推奨) |
Normalize / Resample パラメータ ⚙️
Normalize Power Envelope .norm ⚖️
– Envelope Width を変えても信号の総パワーを一定に保つ
– Bounds = Signal Power 使用時にゲイン補正として有効
Resample Envelope .resample 🔁
– オン時、生成した包絡線を下記 Sample Rate にリサンプル
– 出力サンプルレートを入力と切り離したいときに使用
Sample Rate .samplerate 🎚️
– Resample Envelope がオンのときに適用される目標サンプルレート(Hz)
– 入力よりも低い値にしてダウンサンプリング包絡線を得る用途で使う
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 → Envelope CHOP (Magnitude / Cubic) → Math CHOP → Light Intensity
- Audio Device In CHOP でマイクまたはライン入力を取得
- Envelope CHOP の Bounds を「Magnitude」、Type を「Exponential Decay」に設定
- Envelope Width を 50ms 程度に調整して滑らかな振幅追従カーブを得る
- 出力をライト強度パラメータに Export して音量に同期した照明演出を実現
Example 2: センサーノイズのスムージング包絡線 📊
Serial CHOP → Envelope CHOP (Maximum Values / Linear) → Filter CHOP → Output
- センサーから Serial CHOP で時系列データを取得
- Envelope CHOP の Bounds を「Maximum Values」に設定し上側ピーク輪郭を抽出
- Interpolate を「Linear」にしてピーク間を直線補間
- 後段の Filter CHOP で残った高周波ノイズを除去し安定した制御信号を生成
Example 3: RMS パワー包絡線によるエネルギー可視化 📈
Audio Spectrum CHOP → Envelope CHOP (Signal Power / Normalize ON) → Trail CHOP → Visual
- Audio Spectrum CHOP で周波数帯域ごとのパワーを取得
- Envelope CHOP の Bounds を「Signal Power」、Normalize Power Envelope をオンに
- 後段の Trail CHOP で時間履歴を可視化し帯域別エネルギーの動きを表示
関連オペレータ 🔗
類似機能OP 🔍
- Filter CHOP — ローパス系スムージングで似た平滑化結果が得られるが、ピーク輪郭追従ではない
- Lag CHOP — 上昇・下降の遅延を独立指定する追従系。Envelope のような窓内ピーク追跡はしない
- Analyze CHOP — 信号全体の統計値(RMS Power・最大・ピーク)を 1 サンプル長で出力する集約系
組み合わせ推奨OP 🔄
- Audio Spectrum CHOP — 周波数領域変換後のパワーに対して帯域別包絡線を生成
- Math CHOP — Envelope 出力を Range 変換で正規化・スケーリング
- Trigger CHOP — 包絡線ピークから ADSR エンベロープを起動
- Filter CHOP — Envelope 出力に追加スムージングをかけて段差を抑制
- Trail CHOP — 包絡線の時間履歴を波形として可視化
前処理・後処理CHOP 🎯
- 前処理: Audio Device In CHOP、Audio Spectrum CHOP、Math CHOP、Resample CHOP
- 後処理: Filter CHOP、Math CHOP、Trigger CHOP、Limit CHOP
Info CHOP情報 📊
Envelope 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:
- Type を「Exponential Decay」のまま Envelope Width を広めに調整して窓幅を増やす
- Interpolate を「Cubic」に変更して三次補間で滑らかに繋ぐ
- 後段に Filter CHOP を入れて残ったバンプを更に平滑化
❌ Problem: Envelope Width を変えると全体のレベルが変動する
✅ Solution:
- Bounds を「Signal Power」にしている場合、Normalize Power Envelope をオンにして総パワーを一定に保つ
- Bounds が Magnitude / Maximum / Minimum のときは Math CHOP の Range 変換でレベルを正規化
- Width Unit を Seconds 固定にして窓幅の物理時間を一定に保つ
❌ Problem: 出力サンプルレートを下げて軽くしたい
✅ Solution:
- Resample Envelope をオンにして Sample Rate に目標レートを指定
- 前段の入力レートを Resample CHOP で先にダウンサンプル
- Common Page の Sample Rate Match を「Resample At Minimum Rate」にして合流レートを最低側に統一
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

