
概要 📖 – チャンネルの時間軸シフトとスクロール
Shift CHOPは、チャンネルの開始位置・終了位置・スクロールオフセットを変更して時間軸方向にずらす CHOPです。サンプル長を変えずに位置だけずらすスクロール用途と、絶対・相対指定で開始終了を再配置するアライメント用途の両方に対応します。
主な用途 🎯
- チャンネルの開始位置・終了位置を絶対値または相対値で揃える
- 再生開始タイミングを 0 秒や任意のオフセットに合わせるアライメント
- サンプル長を変えずにチャンネル内データをスクロールさせるループ表現
- チャンネルごとに異なるオフセット量を
$Cで与えるマルチチャンネル位相ずらし - 前段で取得したセンサー・音声データのタイミング調整・同期
データフロー 🔄
入力: 任意の長さの CHOP チャンネル
↓
Reference (start/end) 基準で Start / End を絶対または相対で再設定
↓
Scroll Offset でサンプル長を保ったまま内容をスクロール
↓
出力: 同次元のシフト済みチャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Shift Page 📋
Reference .reference 📍
チャンネルの開始または終了のどちらを基準位置として揃えるかを選ぶメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Start Position | .refstart |
CHOP の開始位置を基準としてアライメントを行う |
| End Position | .refend |
CHOP の終了位置を基準としてアライメントを行う |
Unit Values .relative 📐
Start / End パラメータの値を絶対値として扱うか、入力 CHOP の開始終了からの相対値として扱うかを決めるメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Absolute | .abs |
Start / End を絶対位置として解釈(例: CHOP を 0 秒開始に揃えるときに使用) |
| Relative to Start/End | .rel |
Start / End を入力 CHOP の開始終了からの相対シフト量として解釈 |
Start / End .startend 📏
Start .start ⏮️
– インターバルの開始位置
– Unit Values が abs なら絶対位置、rel なら入力 CHOP の開始からの相対シフト量
Start Unit .startunit 📐
– Start の値を解釈する単位(samples / frames / seconds)
– 単位を切替えてもサンプル基準で内部換算される
End .end ⏭️
– インターバルの終了位置
– Unit Values が abs なら絶対位置、rel なら入力 CHOP の終了からの相対シフト量
End Unit .endunit 📐
– End の値を解釈する単位(samples / frames / seconds)
– Start Unit と独立に指定できる
Scroll Offset .scroll 🔁
Scroll Offset .scroll 🔁
– CHOP の長さを変えずにチャンネル内容を範囲内でスクロールさせるオフセット量
– $C をパラメータに使うとチャンネルインデックスごとに異なるスクロール量を与えられる
Scroll Offset Unit .scrollunit 📐
– Scroll Offset の値を解釈する単位(samples / frames / seconds)
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: 録音音声を 0 秒開始に揃える 🎵
Audio File In CHOP → Shift CHOP (Reference: Start, Unit: Absolute, Start: 0) → Audio Device Out CHOP
- Audio File In CHOP で開始位置がオフセットされた音声ファイルを読み込む
- Shift CHOP の Reference を「Start Position」、Unit Values を「Absolute」に設定
- Start を 0、Start Unit を seconds に設定し再生開始を 0 秒に揃える
- Audio Device Out CHOP に渡して頭出し済の音声として再生
Example 2: ループアニメーションの位相ずらし 🔁
LFO CHOP (4 channels) → Shift CHOP (Scroll Offset: $C * 0.25) → Geometry Transform
- LFO CHOP で 4 チャンネルの正弦波を生成
- Shift CHOP の Scroll Offset に
$C * 0.25を入力($C はチャンネルインデックス) - Scroll Offset Unit を seconds に設定し各チャンネルで位相をずらす
- 出力をジオメトリの位置パラメータに渡し連鎖アニメーションを実現
Example 3: センサーログのタイムライン整列 📊
Serial CHOP → Trim CHOP → Shift CHOP (Reference: Start, Unit: Relative) → Analyze CHOP
- Serial CHOP でセンサーログを取得し Trim CHOP で必要範囲を切り出す
- Shift CHOP の Reference を「Start Position」、Unit Values を「Relative to Start/End」に設定
- Start に小さな負の値を入れて開始位置を前倒し、複数センサーログのタイミングを揃える
- 後段の Analyze CHOP でピーク検出や統計量を算出
Example 4: MIDI 録音の頭出しと整列 🎹
MIDI In CHOP → Trim CHOP → Shift CHOP (Absolute Start: 0) → Pattern CHOP
- MIDI In CHOP で演奏データを記録
- Trim CHOP で本編のみを切り出す
- Shift CHOP の Unit Values を「Absolute」、Start を 0 frames に設定し頭出し
- 後段の Pattern CHOP やシーケンサーに渡しタイムラインに同期
関連オペレータ 🔗
類似機能OP 🔍
- Trim CHOP — 範囲の切り出しに特化(Shift は長さを保ったまま位置だけ変える)
- Stretch CHOP — サンプル長を伸縮させる(Shift は伸縮せず位置のみ移動)
- Lag CHOP — サンプル単位ではなく時間遅延としてのスムージング遅延
組み合わせ推奨OP 🔄
- Trim CHOP — 前段で範囲を切り出した後に Shift で開始位置を揃える
- Audio File In CHOP — ファイル読み込み後の頭出し・位相調整に多用
- Pattern CHOP — Shift と組み合わせシーケンスの開始タイミングを調整
- Math CHOP — Shift 後段で値域を整える
- Analyze CHOP — Shift で整列した後に統計量・ピーク検出
前処理・後処理CHOP 🎯
- 前処理: Trim CHOP、Audio File In CHOP、MIDI In CHOP
- 後処理: Math CHOP、Analyze CHOP、Pattern CHOP、Audio Device Out CHOP
Info CHOP情報 📊
Shift 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: Shift をかけてもチャンネル内容が変わらない
✅ Solution:
- Unit Values が
relのとき Start = 0 / End = 0 だと入力 CHOP と同じ位置になり何も起きない、絶対値か非ゼロの相対値に変更 - Reference を Start Position / End Position 切替えると同じ Start / End の意味が変わるため、基準を意識して再設定
- Scroll Offset 用途なら Start / End ではなく Scroll Offset を変更する
❌ Problem: Scroll Offset でチャンネル端の値が想定外になる
✅ Solution:
- Shift CHOP の Scroll はサンプル長を保ったまま範囲外をループ補間するため、終端で wrap が発生する
- ループさせたくない場合は前段に Filter CHOP や Lookup CHOP を組み合わせ、参照範囲を明示的に制御する
- Scroll Offset Unit が seconds / frames / samples のどれを使っているか単位を再確認
❌ Problem: 複数チャンネルの位相ずらしが効かない
✅ Solution:
- Scroll Offset パラメータに
$C式を入れる必要がある(定数値だと全チャンネル同じ量シフトする) $Cはチャンネルインデックス(0 始まり)を返す、必要に応じ$C * <step>の形で間隔を指定- Scope パラメータで対象チャンネルを限定している場合、対象外チャンネルはシフトされない
❌ Problem: Absolute と Relative の挙動が混乱する
✅ Solution:
absは出力の絶対位置を直接決める(例: Start = 0 で 0 秒開始)relは入力 CHOP の現在位置からの差分(例: Start = 1, Start Unit = seconds で +1 秒シフト)- Reference が Start Position なら Start のみ意味を持ち、End Position なら End のみが基準となる
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

