
概要 📖 – 信号の遅延と時間シフト
Delay CHOPは、入力チャンネルを指定時間だけ遅延させ、過去のサンプル値を時間シフトして出力する CHOPです。Delay Unit で秒・フレーム・サンプル単位を切替でき、Reset / Reset Pulse でバッファを瞬時にクリアできます。
主な用途 🎯
- 入力チャンネルを指定時間だけ遅延させて時間シフトさせる
- リアルタイム入力に対するエコー・反響表現の生成
- 複数センサー間のタイミング差を補正するアライメント
- 音声・映像同期のためのオフセット調整
- アニメーションの追従効果(追従・余韻・残響)の演出
データフロー 🔄
入力: チャンネルデータ
↓
Delay バッファに蓄積
↓
指定時間(Delay Unit に基づく単位)だけ過去のサンプルを取り出し
↓
出力: 遅延されたチャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Delay Page 📋
Delay .delay ⏳
入力チャンネルに適用する遅延量。Delay Unit メニューで指定した単位(秒・フレーム・サンプル)に従う。
Delay .delay ⏳
– 入力チャンネルに対する遅延量
– Delay Unit で指定した単位で値を入力
– チャンネルごとに異なる遅延を与えたい場合は me.chanIndex を式に使用
– 表で個別に遅延量を指定したい場合は op('delaysTable')[me.chanIndex,0] のように Table DAT を参照
Delay Unit .delayunit 📏
Delay パラメータの単位を選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Samples | .samples |
サンプル単位で遅延量を指定 |
| Frames | .frames |
フレーム単位で遅延量を指定 |
| Seconds | .seconds |
秒単位で遅延量を指定(最も直感的な時間単位) |
Reset .reset ♻️
遅延キャッシュをクリアし、遅延処理をバイパスするトグル:
- Reset トグル: オン: 遅延処理をバイパスし、内部に蓄積されている過去サンプルのキャッシュを全消去する。オフに戻すと再びバッファ蓄積が始まる
Reset Pulse .resetpulse ⚡
押下した瞬間に遅延キャッシュをクリアするパルスボタン:
- Reset Pulse ボタン: 押下した瞬間に遅延キャッシュをインスタント・クリア。Reset トグルとは異なり、押した瞬間 1 回限りの動作で連続バイパスは行わない
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 → Delay CHOP (0.2s) → Geometry tx/ty
- Mouse In CHOP でカーソル座標を取得
- Delay CHOP の Delay Unit を「Seconds」、Delay を 0.2 に設定
- 出力をフォロワーオブジェクトの tx/ty パラメータに Export
- メインカーソルから 0.2 秒遅れて追従するエコー的な動きが得られる
Example 2: 複数センサーのタイミング補正 📡
Sensor A (早い) → Delay CHOP → Math CHOP (合成) ← Sensor B (遅い)
- Sensor A と Sensor B のサンプル間に既知のタイミングずれがある状況を想定
- 早く届くチャンネルに Delay CHOP を挟み、ずれ量だけ遅延させる
- 後段の Math CHOP / Logic CHOP で 2 系統を時間軸を揃えて合成
- センサー間の物理的レイテンシ差を補正したアライメント信号を生成
Example 3: リアルタイム音声のディレイ・エコー 🎵
Audio Device In CHOP → Delay CHOP → Math CHOP (Mix) → Audio Device Out CHOP
- Audio Device In CHOP でマイク入力を取得
- Delay CHOP の Delay Unit を「Seconds」、Delay を 0.3 に設定
- 原音と遅延音を Math CHOP で 50:50 の比率でミックス
- Audio Device Out CHOP に送ることでエコー効果が得られる
関連オペレータ 🔗
類似機能OP 🔍
- Lag CHOP — 目標値への追従に時間をかけるスムージング型の遅延(バッファコピーではなく補間ベース)
- Filter CHOP — 時間方向の平滑化を行うフィルタリング系(鋭い時間シフトではなく緩やかな遅延)
組み合わせ推奨OP 🔄
- Math CHOP — 原音・原信号と遅延信号をミックスしてエコー・残響効果を作る
- Filter CHOP — Delay 出力を後段で平滑化してより滑らかな残響を演出
- Trail CHOP — Delay 前後の信号の時間履歴を可視化して遅延量を確認
- Trigger CHOP — Reset Pulse へ Trigger 出力を接続して条件付きで遅延キャッシュをクリア
- Audio Device In CHOP — オーディオ入力に Delay を適用してリアルタイム・エコーを構築
前処理・後処理CHOP 🎯
- 前処理: Filter CHOP、Math CHOP、Resample CHOP、Audio Device In CHOP
- 後処理: Math CHOP、Filter CHOP、Logic CHOP、Trail CHOP
Info CHOP情報 📊
Delay 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:
- Delay Unit が想定単位(Seconds / Frames / Samples)になっているか確認
- Delay 値を変えた直後はバッファに古いサンプルが残るため、Reset Pulse でキャッシュをクリア
- Time Slice 設定が下流の期待と一致しているか確認
❌ Problem: 遅延キャッシュが古いまま残っている
✅ Solution:
- Reset トグルをオンにして遅延処理をバイパスし、キャッシュを空にしてからオフへ戻す
- Reset Pulse ボタンを押下して瞬時にキャッシュをクリア
- 上流に Filter CHOP 等を入れている場合、上流側の遅延も合算されるためトポロジを再確認
❌ Problem: チャンネルごとに異なる遅延を与えられない
✅ Solution:
- Delay パラメータの式欄に
me.chanIndexを含めるとチャンネル毎に遅延量を計算できる - Table DAT を用意し
op('delaysTable')[me.chanIndex,0]で行ごとの遅延量を参照 - 後段の Math CHOP でチャンネル毎にスケールし結果を整える
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

