
概要 📖 – ジェスチャーの記録とループ再生
Gesture CHOPは、入力チャンネルの動きをジェスチャーとして記録し、シームレスループ再生する CHOPです。Beats per Cycle と Blend Time でループ境界を滑らかに整え、Step Output で値ジャンプも除去できます。
主な用途 🎯
- 入力チャンネルの動きをジェスチャーとして記録し再生する
- 記録したジェスチャーをシームレスにループ再生する(ブレンド処理付き)
- BPM ベースでサイクル長を整数倍に丸めて音楽と同期させる
- Step Output モードでループ境界の値ジャンプを除去する
- Reset 入力で任意のタイミングで再生位置をリセットする
データフロー 🔄
入力 1: 記録対象チャンネル
↓
入力 2: 記録トリガ
↓
入力 3: リセットトリガ
↓
Gesture CHOP(記録・ループ・ブレンド・Speed 制御)
↓
出力: ループ再生されたジェスチャー
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Gesture Page 🎬
Play Mode .playmode ▶️
ジェスチャー再生の動作モード
| 項目 | 内部名 | 説明 |
|---|---|---|
| Sequential | .sequential |
タイムライン位置に関係なくジェスチャーを連続再生。Reset / Reset Condition による制御が有効になる |
Fit to Nearest Cycle .fitmethod 🎯
オン時、記録ジェスチャーを Beats per Cycle の整数倍長に拡張・トリムする
Fit to Nearest Cycle .fitmethod 🎯
オンにすると、記録されたジェスチャーが Beats per Cycle の倍数長になるように自動で延長またはトリムされる
Beats per Cycle .numbeats 🥁
1 サイクルあたりの拍数
Beats per Cycle .numbeats 🥁
– 記録したアニメーションをループさせる際の拍数を指定
– 記録長が numbeats の倍数より長い場合は、その倍数長でループ
Step Output .step 📈
ループ境界の値ジャンプを段階加算で除去するモード
Step Output .step 📈
– オンにすると、ループのたびに開始値へジャンプせず、各イテレーションで上下に調整して連続化
– 例: 単純な 0→1 のランプジェスチャーは連続的に増加する直線になる
Step Reset .stepreset ↩️
再記録時の Step 値ゼロ化
Step Reset .stepreset ↩️
オンの状態でジェスチャーを再記録すると、累積していた Step 値がゼロにリセットされる
Blend Time .blend 🌊
ループ境界のブレンド領域長
Blend Time .blend 🌊
– 記録セグメントのうち、ブレンド領域として使用する長さ
– セグメント先頭と末尾をブレンドしてシームレスループを生成
Blend Time Unit .blendunit 📐
Blend Time の単位(フレーム / 秒 / サンプル等)
Interpolate Samples .interp 🔄
スケーリング時のサンプル補間
Interpolate Samples .interp 🔄
オン: スケーリングが発生した時に記録サンプルを補間して滑らかに再生。オフ: 最近接サンプルを選択(階段状の出力)
Speed .speed ⏩
再生速度のスケーリング
Speed .speed ⏩
セグメントの再生レートをスケーリングする倍率
Speed Unit .speedunit 📐
Speed の単位(倍率 / フレーム / 秒等)
Reset Condition .resetcondition 🔁
Reset 入力(3 つ目の入力)がチャンネルリセットを起動する条件
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off to On | .offtoon |
Reset 入力がオフからオンに変化した瞬間にリセット |
| While On | .on |
Reset 入力がオンの間リセット。オフになるまで値はリセット値で保持される |
| On to Off | .ontooff |
Reset 入力がオンからオフに変化した瞬間にリセット |
| While Off | .off |
Reset 入力がオフの間リセット。オンになるまで値はリセット値で保持される |
Reset .reset 🛑
Sequential Play Mode 時のリセットトグル
Reset .reset 🛑
オンの間、Sequential Play Mode のジェスチャーをリセット状態に保持する
Reset Pulse .resetpulse ⚡
ジェスチャーを 1 ショットでリセット
Reset Pulse .resetpulse ⚡
パルスボタン。押した瞬間にジェスチャーをリセットする
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 → Gesture CHOP (Sequential, Beats per Cycle=4) → Geometry COMP の transform
- Mouse In CHOP でマウス座標 tx, ty を取得
- Gesture CHOP の入力 1 に接続し、入力 2(記録トリガ)にボタンパルスを供給
- Beats per Cycle を 4 に、Blend Time を 0.5 秒に設定
- 記録停止後、ジェスチャーが 4 拍周期でシームレスループ再生される
Example 2: BPM 同期したライブパフォーマンスの繰り返しモーション 🎵
MIDI In CHOP → Gesture CHOP (Fit to Nearest Cycle=on) → Light intensity export
- MIDI コントローラのフェーダー値を MIDI In CHOP で取得
- Gesture CHOP に通し、Fit to Nearest Cycle をオンに設定
- 記録したフェーダー操作が自動で BPM の整数倍長に丸められループ
- Speed パラメータでライブ中にループ速度を変えてビート同期を維持
Example 3: Step Output で連続的に増加するパラメータ駆動 📈
LFO CHOP (0→1 ramp) → Gesture CHOP (Step Output=on) → 累積値出力
- LFO CHOP で 0→1 のランプ波形を生成し Gesture CHOP に記録
- Step Output をオンにすると、ループのたびに開始位置が累積される
- 出力は連続的に増加する直線になる(カウンタ的な振る舞い)
- オブジェクトの累積回転や進行率の制御に応用
関連オペレータ 🔗
類似機能OP 🔍
- Pattern CHOP — 数式ベースで波形を生成、記録ベースの再生ではない
- LFO CHOP — 周期波形を数式生成、記録機能はなし
- Speed CHOP — 再生速度の制御に特化、ジェスチャー記録機能はなし
組み合わせ推奨OP 🔄
- Filter CHOP — Gesture 出力の高周波ノイズをスムージング
- Math CHOP — Gesture 出力をスケーリング・正規化
- Trigger CHOP — 記録開始・停止のトリガを生成
- Timer CHOP — Gesture の再生位置や Reset と同期した時間管理
前処理・後処理CHOP 🎯
- 前処理: Mouse In CHOP、MIDI In CHOP、OSC In CHOP、Filter CHOP
- 後処理: Math CHOP、Lag CHOP、Speed CHOP、Null CHOP
Info CHOP情報 📊
Gesture 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:
- Blend Time を増やしてセグメント先頭と末尾のブレンド領域を拡大
- ランプ状の単調増加ジェスチャーは Step Output をオンにして累積化
- 後段に Filter CHOP を追加して境界を物理的にスムージング
❌ Problem: BPM とループが合わない
✅ Solution:
- Fit to Nearest Cycle をオンにして記録長を
numbeats倍に丸める - Beats per Cycle が想定の拍数(4 / 8 / 16 等)に設定されているか確認
- Speed パラメータで再生倍率を微調整して BPM に合わせる
❌ Problem: Reset が想定通りに発火しない
✅ Solution:
- Reset Condition が入力信号の変化方向(Off to On / On to Off 等)と一致しているか確認
- Sequential Play Mode 以外では Reset が効かないため Play Mode を確認
- 1 ショットリセットは Reset Pulse パルスボタンを使用
❌ Problem: 再生時のサンプルがカクカクする
✅ Solution:
- Interpolate Samples をオンにしてスケーリング時のサンプル補間を有効化
- Speed Unit がフレーム / 秒の意図通りになっているか確認
- 前段で Resample CHOP によりサンプルレートを上げてから記録
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

