
概要 📖 – チャンネル長の伸縮とリサンプリング
Stretch CHOPは、入力チャンネルの長さを指定区間にリサンプルして伸縮する CHOPです。Start / End / Length Scale で新しい区間を決定し、Interpolation 方式を選んで滑らかにサンプリングし直します。
主な用途 🎯
- チャンネル長を任意のサンプル数に伸縮(リサンプリング)
- アニメーションカーブの再生時間調整(倍速・スロー再生)
- 音声・モーションデータの時間スケーリング
- Start / End 位置の指定によるトリミング兼伸縮
- 逆再生(Reverse Interval)によるカーブの巻き戻し演出
データフロー 🔄
入力: 任意長チャンネル
↓
Start / End / Length Scale で新区間を決定
↓
Interpolation 方式でリサンプル
↓
Constant Area / Reverse Interval で後処理
↓
出力: 伸縮後のチャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Stretch Page 📋
Interpolation .interp 📈
リサンプル時に使用する補間方式
| 項目 | 内部名 | 説明 |
|---|---|---|
| No Interpolation | .nointerp |
最も近いサンプルの値をそのまま使用(離散的、ステップ状) |
| Linear | .linear |
サンプル間を線形補間。区間が短縮される場合は近傍サンプルを平均化 |
| Cubic | .cubic |
三次補間で滑らかなカーブを生成(急峻な変化を持つチャンネルには非推奨) |
| Repeat Samples | .repeat |
新しい長さが元の整数倍のときに均等な間隔を保つ補間 |
Constant Area .constarea 📐
チャンネル積分値を一定に保つ設定:
- Constant Area: オンにすると、チャンネルの値をスケーリングしてチャンネル下の面積(積分値)を一定に保つ
Unit Values .relative 📏
Start / End パラメータの解釈方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| Absolute | .abs |
値そのものを新しい start / end 位置として使用 |
| Relative to Start/End | .rel |
値を元の start / end 位置からのシフト量として解釈 |
Start / End .startend 🎯
Start .start ▶️
– CHOP の新しい開始位置(Unit Values の設定で絶対値 / 相対値が切替)
– Start Unit (startunit) でサンプル / フレーム / 秒の単位を選択
End .end ⏹️
– CHOP の新しい終了位置
– End Unit (endunit) でサンプル / フレーム / 秒の単位を選択
Length Scale .scale 🔁
– Start / End 区間決定後にチャンネル長を倍率でスケール
– 2 倍・0.5 倍など整数倍 / 分数倍の伸縮に便利
Reverse Interval .reverse 🔄
– オンにするとチャンネルを反転し逆再生する
– アニメーションの巻き戻し演出やループ末尾の自然な戻りに使用
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: アニメーションカーブの倍速再生 ⏩
Animation COMP → Stretch CHOP (Length Scale = 0.5) → Out CHOP
- Animation COMP で 240 サンプルのカーブを用意
- Stretch CHOP の Length Scale を 0.5 に設定
- 出力は 120 サンプル長にリサンプルされ実質 2 倍速再生になる
- Interpolation を Cubic にすると倍速時のカーブも滑らかに保たれる
Example 2: 音声クリップの時間伸縮 🎵
Audio File In CHOP → Stretch CHOP (Start / End / Interp=Linear) → Audio Device Out CHOP
- Audio File In CHOP でサンプル音声を読み込み
- Stretch CHOP の Unit Values を Absolute にし Start / End で再生区間を指定
- Interpolation を Linear にして音声サンプルを補間
- Audio Device Out CHOP に流して伸縮済みの音声として再生
Example 3: ループ末尾の逆再生でシームレス化 🔄
Pattern CHOP → Stretch CHOP (Reverse Interval = On) → Merge CHOP → Loop
- Pattern CHOP で前半部分のカーブを生成
- Stretch CHOP で Reverse Interval をオンにし反転コピーを作成
- Merge CHOP で前半と反転後半を連結
- 始端と終端が同値になりループしてもジャンプしないシームレス信号が得られる
関連オペレータ 🔗
類似機能OP 🔍
- Resample CHOP — サンプルレート(時間密度)を変更(Stretch は長さ自体を変更)
- Time Slice CHOP — 時間軸に沿った別の切り出し方式(区間ベースではなくフレーム同期)
組み合わせ推奨OP 🔄
- Filter CHOP — Stretch の後段で補間ノイズを平滑化
- Math CHOP — 伸縮後の値域を Range 変換でスケーリング
- Merge CHOP — Reverse Interval で生成した反転コピーを結合
- Trim CHOP — Stretch で伸縮した区間を更に切り出す
- Speed CHOP — 再生速度を時間制御で変える(Stretch は長さ固定変更)
前処理・後処理CHOP 🎯
- 前処理: Pattern CHOP、Audio File In CHOP、Filter CHOP
- 後処理: Resample CHOP、Math CHOP、Filter CHOP、Merge CHOP
Info CHOP情報 📊
Stretch 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: Cubic 補間でカーブが暴れる(オーバーシュート)
✅ Solution:
- 急峻な変化を持つチャンネルでは Cubic がオーバーシュートを起こす(公式 docs でも非推奨)
- Interpolation を Linear に切り替えるとオーバーシュートが解消
- 前段に Filter CHOP を入れてエッジを平滑化してから Stretch に渡す
❌ Problem: サンプル数が想定と違う長さで出力される
✅ Solution:
- Unit Values が Absolute / Relative どちらに設定されているか確認(解釈が変わる)
- Start Unit / End Unit でサンプル / フレーム / 秒の単位を確認
- Length Scale が 1 以外になっていないか確認(最終的に Start / End 区間を更に倍率変更する)
❌ Problem: Constant Area を有効にしたら値域が大きく変動する
✅ Solution:
- Constant Area は区間長変化に応じて値をスケーリングするため、短縮時は振幅が増大する
- 面積保存が不要なら Constant Area をオフに戻す
- 後段の Math CHOP の Range 変換で振幅を再正規化
❌ Problem: Reverse Interval で値が想定外の方向に動く
✅ Solution:
- Reverse Interval は時間方向のみ反転(値方向の符号反転ではない)
- 値そのものを反転させたい場合は Math CHOP の Channel Post OP に Negate を設定
- 終端値と始端値が同じでないと反転接続時にジャンプが発生する点に注意
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

