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

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

Copy CHOP のコピー機能を示す図

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

概要 📖 – トリガー駆動と畳み込みで多重コピーを生成

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)

出力: 多重コピー結果

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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. 第 1 入力にキック音などのインパルス系オーディオ信号を接続
  2. 第 2 入力にインパルス応答(IR)の波形 CHOP を接続
  3. Copy Method を「Convolve」に設定
  4. Output を Audio Device Out CHOP に渡して残響処理された音を再生

Example 2: Stamp で個別変化するパーティクル発射 ✨

Trigger CHOP → Copy CHOP (Triggered, Stamp) ← Pattern CHOP → Particle SOP

トリガーごとに fetchStamp('seed', 0) で異なる乱数を取得し、パーティクルの初速や色をコピーごとに変化させる。

  1. 第 1 入力にトリガー CHOP を接続し、Trigger Threshold で発火タイミングを設定
  2. 第 2 入力に Pattern CHOP などのテンプレート波形を接続
  3. Stamp Inputs をオン、Param に seed、Value に tdu.rand(me.copyIndex) 等を設定
  4. テンプレート側の CHOP で op('copy1').fetchStamp('seed', 0) を参照しコピーごとに変化させる

Example 3: ビート同期で UI アニメーション波形を多重発火 🎼

Beat CHOP → Copy CHOP (Triggered) ← Animation COMP → Null CHOP → UI parameter

BPM クロックを第 1 入力にして、UI ハイライト用のアニメーション波形を拍ごとに多重コピーする。

  1. Beat CHOP の出力を Trigger Threshold 判定可能な波形に整形
  2. 第 2 入力に短いアニメーションエンベロープ CHOP を接続
  3. Copy Method を「Triggered Copy」、Remainder を「Mix Remainder with Beginning」に設定
  4. 出力を 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 🎯


Info CHOP情報 📊

Copy 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: 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.randme.copyIndex 等の毎コピー変動式を使用)

❌ Problem: Remainder 設定で出力長が予想と違う
✅ Solution:

  • 「Discard Remainder」だと余りが切り捨てられるため、長い応答が必要なら「Make Output Longer」を選択
  • 「Mix Remainder with Beginning」は循環ループ風になるため UI 用エンベロープでは意図と異なる場合あり
  • 後段で Resample CHOP を使い意図的に出力長を整える

参考資料 📚

その他 🔗

公式リソース 📖

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