
概要 📖 – 複数入力 CHOP のインデックス切替
Switch CHOPは、複数の入力 CHOP からインデックス値で 1 本を選んで下流に流す切替 CHOPです。Index パラメータの数値指定に加え、第 1 入力の値そのものをインデックスとして使う動的切替モード (First Input is Index) を備え、範囲外インデックスは Clamp / Loop / ZigZag で安全に丸められます。
主な用途 🎯
- 複数入力 CHOP の中から 1 本をインデックス値で選んで下流に流す切替制御
- CHOP の値そのものをインデックスとして使う動的な入力ソース切替 (First Input is Index 機能)
- シーン遷移・状態切替に応じた制御信号セットの差し替え
- 範囲外インデックスの境界処理 (Clamp / Loop / ZigZag) によるループや反復切替
- UI ボタン・ステートマシン出力を入力選択トリガとして使うインタラクション設計
データフロー 🔄
入力: 複数の CHOP (input0, input1, input2, ...) + (オプション) First Input is Index 用インデックス CHOP
↓
Index パラメータまたは第 1 入力チャンネルでインデックスを決定
↓
Extend 設定で範囲外インデックスを Clamp / Loop / ZigZag 処理
↓
出力: 選択された 1 本の CHOP
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Switch Page 🔀
インデックス指定 🎯
First Input is Index .indexfirst 🔢
– オン: 第 1 入力 CHOP の最初のチャンネルの値を「どの入力を選ぶか」のインデックスとして使用
– このとき第 1 入力は選択候補から外れ、純粋にインデックス供給用となる
– オフ: 下記 Index パラメータの数値を使う
Index .index 🔟
– First Input is Index がオフのときに使われるインデックス値
– 0 始まりで、0 なら第 1 入力 / 1 なら第 2 入力 を選択
– CHOP 参照や式を入れれば動的切替も可能
Extend .extend 🔁
インデックスが入力数の範囲外になったときの境界処理
| 項目 | 内部名 | 説明 |
|---|---|---|
| Clamp | .clamp |
範囲外インデックスを 0 〜 入力数-1 にクランプ (端でホールド) |
| Loop | .loop |
範囲外インデックスを入力数で剰余して循環 (周回切替) |
| ZigZag | .zigzag |
範囲外インデックスを端で折り返して往復 (ピンポン切替) |
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: シーン切替ボタンで制御信号セットを差し替え 🎛️
Constant CHOP (scene_index) → Switch CHOP (Index=`op('scene_index')['chan1']`, 入力 0/1/2 に各シーン用制御セット) → 下流の Geometry / Render パラメータ
- シーンごとに用意した制御 CHOP (色・位置・速度のセット) を Switch CHOP の入力 0, 1, 2 に接続
- Constant CHOP の値 (0/1/2) を UI ボタンや state machine から書き換える
- Switch の Index パラメータに
op('scene_index')['chan1']を入れて参照 - Constant の値が変わるたびに、出力されるパラメータセットが入れ替わる
Example 2: CHOP 値そのものをインデックスにして動的切替 🌀
LFO CHOP (index 用) → Switch CHOP (First Input is Index=on, 入力 1/2/3 に切替先 CHOP) → 出力
- LFO CHOP 等で 0 〜 入力数-1 の範囲を行き来する値を生成
- Switch CHOP の First Input is Index をオンにし、その LFO を第 1 入力に接続
- 切替候補の CHOP を第 2 入力以降に並べる (第 1 入力はインデックス用のため選択候補から除外される)
- Extend を Loop または ZigZag にしておけば、LFO が範囲をはみ出しても安全に循環切替が継続
関連オペレータ 🔗
類似機能OP 🔍
- Select CHOP — 入力 CHOP を「切替」ではなく「名前パターンでチャンネル抽出」する
- Cross CHOP — 2 本の入力をクロスフェード補間する (離散切替ではなく連続ブレンド)
- Blend CHOP — ウェイト指定で複数 CHOP を重み付き合成する (Switch の連続版)
組み合わせ推奨OP 🔄
- Constant CHOP — Constant の値を Index に参照してボタン / UI 駆動の切替を構築
- LFO CHOP — LFO 値を First Input is Index 用に流して時間駆動の循環切替を作る
- Logic CHOP — 条件評価結果 (0/1) を Index にして条件分岐切替
- Math CHOP — 切替後の出力に Range 変換 / 単位変換を後段で適用
- Null CHOP — Switch 出力の参照点として後段の参照を安定化
前処理・後処理CHOP 🎯
Info CHOP情報 📊
Switch 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: Index を変えても出力が切り替わらない
✅ Solution:
- First Input is Index がオンになっていないか確認 (オンの場合 Index パラメータは無視され、第 1 入力の値が優先される)
- Index が整数になっているか確認 (小数値は切り捨てされる、想定外の入力が選ばれていないか CHOP ビューワで確認)
- Extend が Clamp のとき、範囲外インデックスは端で固定されるため切替が起きないように見える。Loop / ZigZag への変更も検討
❌ Problem: First Input is Index を使ったときに想定外の入力が選ばれる
✅ Solution:
- 第 1 入力 CHOP の最初のチャンネルの値だけがインデックスとして使われる点を再確認 (それ以外のチャンネルは無視)
- インデックス用 CHOP の値域が 0 〜 (入力数 – 1) に収まっているか確認、必要なら前段に Math CHOP で Range 変換
- 第 1 入力はインデックス供給用に占有されるため、切替候補の入力は第 2 入力以降に並べることを忘れない
❌ Problem: 範囲外インデックスでエラーまたは出力が止まる
✅ Solution:
- Extend を Clamp / Loop / ZigZag のいずれかに設定して範囲外を安全に丸める
- 前段で Math CHOP の Range 変換でインデックス値域を入力数に合わせる
- Loop を使うときは入力数が動的に変わるとループ周期も変わる点に注意、必要なら入力数を固定して運用
❌ Problem: 切替時にカクついた信号変化が出る
✅ Solution:
- Switch は離散切替のため、切替瞬間に値がジャンプする仕様。連続的にブレンドしたい場合は Cross CHOP / Blend CHOP を使う
- 後段に Lag CHOP / Filter CHOP を入れて切替直後の急変を滑らかに整形
- 各入力 CHOP のサンプルレート / 長さが揃っているか確認 (Common Page の Sample Rate Match で吸収可能)
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

