
概要 📖 – トリガー駆動と畳み込みで多重コピーを生成
Copy CHOPは、第 1 入力のトリガー位置や畳み込みレベルに応じて第 2 入力を繰り返しコピーし、複数の応答を合成する CHOPです。Triggered Copy と Convolve の 2 モードを切替え、Stamp 機能で各コピーに個別パラメータを伝播できます。
主な用途 🎯
- トリガーに応じた第 2 入力の繰り返しコピー(Triggered Copy モード)
- 畳み込み演算による信号応答合成(Convolve モード)
- サウンドエフェクトのヒット時インパルス応答合成(リバーブ・エコー風処理)
- パーティクル・トリガーアニメーションの発射制御
- Stamp 機能を用いた各コピーへの個別パラメータ伝播
データフロー 🔄
入力 1: トリガー信号
↓
入力 2: コピー元 CHOP
↓
Copy CHOP (Triggered Copy / Convolve)
↓
Stamp による個別パラメータ伝播
↓
Remainder 処理 (Discard / Extend / Mix)
↓
出力: 多重コピー結果
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Copy Page 📋
Copy Method .method 🔁
コピーの実行方式を切替えるメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Triggered Copy | .trigger |
第 1 入力のチャンネルが Trigger Threshold を上向きに横切るたびに第 2 入力をコピー、重なるコピーは加算合成 |
| Convolve | .convolve |
第 1 入力の各サンプルごとに第 2 入力をその時間位置へシフトしてサンプル値でスケーリングし、出力に加算(畳み込み演算) |
Output Method .output 📤
出力チャンネルの構成方式
| 項目 | 内部名 | 説明 |
|---|---|---|
| One Channel per Template Channel | .match |
出力チャンネルは第 1 入力のチャンネルと第 2 入力の対応チャンネルを組み合わせたもの(チャンネル数は第 1 入力相当) |
| One Channel per Copy Channel | .accum |
出力チャンネルは第 2 入力のチャンネルそれぞれで、第 1 入力の全チャンネルから発生したトリガーで蓄積される |
Trigger Threshold .threshold 📈
Trigger Threshold .threshold 📈
– Triggered Copy モードでコピーを発火させる閾値
– 第 1 入力のチャンネル値がこの値を上向きに横切った瞬間にトリガー成立
Remainder .remainder ✂️
コピー範囲が出力長を超えた場合の余り処理方式
| 項目 | 内部名 | 説明 |
|---|---|---|
| Discard Remainder | .crop |
出力範囲を超えた部分を破棄 |
| Make Output Longer | .extend |
余りに合わせて出力長を拡張 |
| Mix Remainder with Beginning | .mix |
余りを出力先頭にラップして加算合成 |
Keep Non-Scoped Channels .keep 🧷
Keep Non-Scoped Channels .keep 🧷
– オン: Scope 外のチャンネルもそのまま出力にコピーする
– オフ: Scope 外のチャンネルは出力から削除される
Stamp Page 🏷️
Stamp Inputs .stamp 🏷️
Stamp Inputs .stamp 🏷️
– オン: 各トリガーコピーごとに第 2 入力を再クックする
– コピーごとに fetchStamp(key, default) で参照可能なパラメータが更新される
Copy Sequence .copy 🔢
Copy .copy 🔢
– スタンプとして利用できる値のシーケンス
– 各コピーごとに参照する key/value ペアの数を決定する
Param .copy0param 🔑
– コピーごとに再計算されるパラメータの key 名
– 第 2 入力ネットワーク内の任意 CHOP から fetchStamp(key, default) で参照される
Value .copy0value 💲
– 上記 key に紐づくスタンプの値
– CHOP Members や Methods を式で記述してコピーごとに変化させられる
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 (kick) → Copy CHOP (Convolve) ← Audio File In CHOP (IR) → Audio Device Out CHOP
ドラムのキック音をトリガーに、別 CHOP で用意したインパルス応答を畳み込み合成して残響を付加する応用。
- 第 1 入力にキック音などのインパルス系オーディオ信号を接続
- 第 2 入力にインパルス応答(IR)の波形 CHOP を接続
- Copy Method を「Convolve」に設定
- Output を Audio Device Out CHOP に渡して残響処理された音を再生
Example 2: Stamp で個別変化するパーティクル発射 ✨
Trigger CHOP → Copy CHOP (Triggered, Stamp) ← Pattern CHOP → Particle SOP
トリガーごとに fetchStamp('seed', 0) で異なる乱数を取得し、パーティクルの初速や色をコピーごとに変化させる。
- 第 1 入力にトリガー CHOP を接続し、Trigger Threshold で発火タイミングを設定
- 第 2 入力に Pattern CHOP などのテンプレート波形を接続
- Stamp Inputs をオン、Param に
seed、Value にtdu.rand(me.copyIndex)等を設定 - テンプレート側の CHOP で
op('copy1').fetchStamp('seed', 0)を参照しコピーごとに変化させる
Example 3: ビート同期で UI アニメーション波形を多重発火 🎼
Beat CHOP → Copy CHOP (Triggered) ← Animation COMP → Null CHOP → UI parameter
BPM クロックを第 1 入力にして、UI ハイライト用のアニメーション波形を拍ごとに多重コピーする。
- Beat CHOP の出力を Trigger Threshold 判定可能な波形に整形
- 第 2 入力に短いアニメーションエンベロープ CHOP を接続
- Copy Method を「Triggered Copy」、Remainder を「Mix Remainder with Beginning」に設定
- 出力を UI 要素のパラメータに Export してビート同期ハイライトを実現
関連オペレータ 🔗
類似機能OP 🔍
- Replicator COMP — コピー対象が COMP(ノードグラフ)、Copy CHOP は CHOP チャンネル波形のコピーに特化
- Trail CHOP — 時間履歴を残す処理、Copy CHOP は波形を時間軸に沿って繰り返し配置する点で異なる
- Pattern CHOP — テンプレート波形を生成する側、Copy CHOP の第 2 入力ソースとして併用
組み合わせ推奨OP 🔄
- Trigger CHOP — Trigger CHOP の出力を第 1 入力にして、エンベロープ波形を多重発火
- Beat CHOP — BPM クロックをトリガー源にしてビート同期コピー
- Audio Device In CHOP — オーディオ信号を畳み込み入力にしてリバーブ・エコー風処理
- Math CHOP — Copy 後段で値域変換やゲイン調整を行う
- Filter CHOP — 畳み込み出力を後段でスムージング
前処理・後処理CHOP 🎯
- 前処理: Trigger CHOP、Beat CHOP、Audio Device In CHOP、Pattern CHOP
- 後処理: Math CHOP、Filter CHOP、Audio Device Out CHOP、Null CHOP
Info CHOP情報 📊
Copy 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: Triggered Copy モードで何もコピーされない
✅ Solution:
- 第 1 入力の信号が Trigger Threshold を上向きに横切っているかを Analyze CHOP や時間プロットで確認
- Trigger Threshold の値が信号レンジ内に収まっているか調整
- 前段に Math CHOP を入れて信号を 0〜1 等の正規化レンジに整える
❌ Problem: Convolve の出力が想定外に大きく/小さくなる
✅ Solution:
- Convolve では第 2 入力の総和(積分値)×第 1 入力の値が出力ゲインを決めるため、第 2 入力波形を正規化する
- 後段に Math CHOP の Multiply で出力ゲインを補正
- Sample Rate Match の設定が想定通りか(リサンプル動作で振幅が変わる場合あり)を確認
❌ Problem: Stamp 値がコピーごとに更新されない
✅ Solution:
- Stamp Inputs パラメータがオンになっているかを確認(オフだと第 2 入力は 1 度しかクックされない)
- 第 2 入力ネットワーク内の参照側 CHOP で
fetchStamp(key, default)の key 名が一致しているか確認 - Value 式が定数になっていないか(
tdu.randやme.copyIndex等の毎コピー変動式を使用)
❌ Problem: Remainder 設定で出力長が予想と違う
✅ Solution:
- 「Discard Remainder」だと余りが切り捨てられるため、長い応答が必要なら「Make Output Longer」を選択
- 「Mix Remainder with Beginning」は循環ループ風になるため UI 用エンベロープでは意図と異なる場合あり
- 後段で Resample CHOP を使い意図的に出力長を整える
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

