
概要 📖 – サンプルレート変換と時間軸の伸縮
Resample CHOPは、入力チャンネルのサンプルレートや時間範囲を変換し、補間を伴って新しいサンプル列を生成する CHOPです。Method を切り替えることで「サンプル数だけ変える」「時間範囲だけ変える」「両方変える」を独立に制御でき、Interpolation で No Interp / Linear / Cubic / Repeat の 4 種補間を選べます。
主な用途 🎯
- 異なるサンプルレートを持つ CHOP 同士のレート統一(前処理)
- 時系列データのアップサンプリング・ダウンサンプリングによる解像度調整
- アニメーションカーブの時間方向の伸縮・短縮(タイムストレッチ)
- 角度・回転チャンネルの周期補正付きリサンプリング(Correct for Cycles)
- Quaternion を用いた回転チャンネルの正しい補間
データフロー 🔄
入力: チャンネル波形(任意のサンプル数・レート)
↓
Method で変換方式を選択
↓
Sample Rate / Start / End / Interpolation で出力サンプルを再構成
↓
出力: 新しいサンプルレートまたは新しい時間範囲のチャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Resample Page 📋
Method .method 🎛️
サンプルレートと時間範囲の変換方式を決定するメニューパラメータ(4 種)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Same Rate, New Interval | .strech |
サンプルレートを維持したままチャンネルを時間方向に伸縮(Stretch CHOP と同等)。Start/End を変更してサンプル数が増減 |
| New Rate, Same Time Range | .preserve |
時間長を維持したままサンプルレートを変更。サンプル数が変わるが Start/End は不変 |
| New Rate, Same Index Range | .index |
サンプル数を維持したままサンプルレートを変更。時間長が変わる |
| New Rate, New Interval | .newint |
サンプルレートと時間範囲の両方を独立に変更。最も柔軟だが Start/End/Rate を同時指定する必要あり |
サンプルレートと時間範囲 ⚡
Sample Rate .rate 🎚️
– 出力チャンネルの新しいサンプルレート(Hz)
– Method が preserve / index / newint のときに有効
Start .start ⏩
– 出力チャンネルの新しい開始位置
– Unit Values の設定により絶対値または相対値として解釈される
Start Unit .startunit 📏
– Start パラメータの単位を Samples / Frames / Seconds から選択
End .end ⏪
– 出力チャンネルの新しい終了位置
– Unit Values の設定により絶対値または相対値として解釈される
End Unit .endunit 📐
– End パラメータの単位を Samples / Frames / Seconds から選択
Unit Values .relative 🔢
Start / End パラメータの解釈方法を決定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Absolute | .abs |
Start/End の値を新しい開始位置・終了位置の絶対値として扱う |
| Relative to Start/End | .rel |
Start/End の値を元の開始位置・終了位置からのシフト量として扱う |
Interpolation .interp 📈
リサンプリング時に使用する補間方式(4 種)
| 項目 | 内部名 | 説明 |
|---|---|---|
| No Interpolation | .nointerp |
最も近いサンプル値をそのまま使用(ステップ補間) |
| Linear | .linear |
サンプル間を直線補間。出力サンプル数が増える場合は線形補間、減る場合は付近サンプルの平均 |
| Cubic | .cubic |
3 次補間でサンプル間を滑らかにつなぐ。Linear より滑らかだが、急激な変化を持つチャンネルには非推奨 |
| Repeat Samples | .edge |
出力サンプル数が入力の整数倍のとき、より等間隔な結果になる補間方式 |
回転・周期チャンネル制御 🔄
Quaternion Blend .quatrot 🌐
– クォータニオンを用いてサンプル間を補間
– 回転チャンネル(4 チャンネルセット)の補間で姿勢の歪みを避けたい場合に有効
Correct for Cycles .correct 🔁
– 角度のような周期チャンネルでサンプル間の最短経路を選ぶ補間を行う
– 例: 360 から 0 への遷移を「-360 進む」ではなく「+0 へ即遷移」として扱う
Cycle Length .cyclelen 📐
– 1 サイクルの長さを指定
– 角度の場合は 360 が一般的
Constant Area .constarea 📊
– オン時、チャンネル値をスケーリングしてチャンネル下の面積を一定に保つ
– エネルギー保存が必要なシグナル変換で使用
Use Last Frame Only .uselastframe ⏱️
– 入力 CHOP の最終フレームのみを切り出してリサンプリングを実施
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: 異なるレートの CHOP を Math CHOP で合成する前処理 🔗
Audio Device In CHOP (44100 Hz) → Resample CHOP (60 Hz, preserve) → Math CHOP (+ LFO CHOP 60 Hz)
- Audio Device In CHOP は 44100 Hz、LFO CHOP は 60 Hz というレート差がある状態
- Resample CHOP の Method を「New Rate, Same Time Range」、Sample Rate を 60 に設定
- Interpolation を「Linear」にして音声を 60 Hz にダウンサンプル
- 後段の Math CHOP で LFO とレート一致のまま加算・乗算が可能になる
Example 2: アニメーションカーブのタイムストレッチ(スローモーション) 🎬
Animation COMP → Resample CHOP (Same Rate, New Interval) → Geometry COMP
- Animation COMP で 1 秒のカーブを作成
- Resample CHOP の Method を「Same Rate, New Interval」、Unit Values を「Absolute」、End を 2 秒に設定
- Interpolation を「Cubic」にして滑らかな補間で 2 倍に引き伸ばす
- サンプルレートは維持されたまま、再生時間だけ 2 倍になりスローモーション表現が得られる
Example 3: 角度チャンネルのループ補正付きリサンプリング 🌀
Constant CHOP (0°→360°) → Resample CHOP (Correct for Cycles ON) → Geometry COMP の Rotate
- 角度値が 0 から 360 まで変化するチャンネルを用意
- Resample CHOP の Correct for Cycles をオンにし、Cycle Length を 360 に設定
- 360 → 0 の不連続点でも最短経路(+0 へジャンプ)として補間されるため、ジオメトリの回転がループ境界で逆回転しない
- Quaternion Blend を併用すると複数軸の回転チャンネルでも姿勢が崩れない
Example 4: Analyze前段でサンプル数を削減 📉
Audio Device In CHOP → Resample CHOP (New Rate, Same Time Range, 240 Hz) → Analyze CHOP (RMS Power)
- Audio Device In CHOP が高サンプルレート(44100 Hz)のまま Analyze に通すと負荷が大きい
- Resample CHOP の Method を「New Rate, Same Time Range」、Sample Rate を 240 に設定
- Interpolation を「Linear」にしてダウンサンプルし、Analyze CHOP の処理サンプル数を大幅に削減
- RMS Power や Peak 検出の精度を保ちつつ、フレームレートに見合った負荷で実行できる
関連オペレータ 🔗
類似機能OP 🔍
- Stretch CHOP — Same Rate, New Interval モードと同等。時間方向の伸縮専用
- Filter CHOP — 平滑化目的の用途で機能が一部重なる(補間ではなく畳み込み)
- Trim CHOP — Start / End 指定での時間範囲切り出し用途
組み合わせ推奨OP 🔄
- Math CHOP — レート統一後にチャンネル合成を行う後段処理
- Analyze CHOP — サンプル数を削減してから統計解析を行う前段処理
- Filter CHOP — リサンプル後に平滑化フィルタを適用してノイズを抑制
- LFO CHOP — LFO のサンプルレートを他チャンネルに揃える前処理として活用
- Audio Spectrum CHOP — 音声を周波数領域に変換する前のレート調整
- Trail CHOP — Resample 結果の時間履歴を可視化
前処理・後処理CHOP 🎯
- 前処理: Math CHOP、Filter CHOP、Select CHOP、Delete CHOP
- 後処理: Analyze CHOP、Math CHOP、Filter CHOP、Merge CHOP
Info CHOP情報 📊
Resample 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:
- ダウンサンプル時は Interpolation を「Linear」にして付近サンプルを平均化
- 前段にFilter CHOP(Gaussian や Box)でローパスをかけてからリサンプル
- Cubic 補間は急峻な変化を持つチャンネルでオーバーシュートを起こすため、ステップ的なデータでは Linear か No Interpolation を選ぶ
❌ Problem: Start / End を指定しても範囲が変わらない
✅ Solution:
- Method が「New Rate, Same Time Range」だと時間範囲は固定。範囲を変える場合は「New Interval」系を選ぶ
- Unit Values の Absolute / Relative の解釈を確認(Relative は元の開始位置からの差分)
- Start Unit / End Unit が想定の単位(Samples / Frames / Seconds)になっているか確認
❌ Problem: 回転チャンネルがリサンプル後に逆回転や姿勢崩れを起こす
✅ Solution:
- Correct for Cycles をオンにして Cycle Length を 360(角度の場合)に設定
- クォータニオン入力(4 チャンネル)の場合は Quaternion Blend をオンにする
- 後段のMath CHOPで値域を確認し、想定外のジャンプがあれば Correct for Cycles を見直す
❌ Problem: サンプルレート違いで Merge / Math が拒否される
✅ Solution:
- Resample CHOP を前段に挿入して全入力のレートを揃える
- Method を「New Rate, Same Time Range」にし Sample Rate を統一値に設定
- Common Page の Sample Rate Match を「Resample At Maximum Rate」等にしておくと自動調整される
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

