
概要 📖 – キーボード入力をチャンネル化して取得
Keyboard In CHOPは、キーボードのキー押下状態をチャンネル値として取得しリアルタイム入力ソースに変換する CHOPです。数字キー 0-9・アルファベット A-Z・キーパッド 0-9 の押下状態を 0/1 のチャンネル値で出力し、Ctrl/Alt/Shift 修飾キー組合せや Panel フォーカス連動にも対応します。
主な用途 🎯
- キーボードのキー押下状態をチャンネル値(0/1)として取得
- ライブパフォーマンスでのキーバインド操作(シーン切替・トリガー・パラメータ変更)
- Ctrl・Alt・Shift 等の修飾キー組合せによるショートカット入力検出
- Panel COMP にフォーカスがある時だけイベントを拾うフォーカス連動入力
- プロトタイプ・デバッグ用途でのインタラクティブ入力(GUI 不要の即席操作)
データフロー 🔄
入力: OS のキーボードイベント
↓
キー名フィルタ(Keys パラメータ)
↓
修飾キー判定(Modifier Keys)
↓
Panel フォーカス判定
↓
出力: 各キーの押下状態(0/1)チャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Keys Page 📋
Active .active 🟢
キーボード入力の監視状態を制御するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
キーボード入力を監視せず CHOP もクックされない(現在のキー値は出力されない) |
| On | .on |
キーボード入力を常時監視し毎フレーム CHOP がクック |
| While Playing | .play |
Timeline が前向き再生中のときのみキーボードイベントをキャプチャ |
Modifier Keys .modifiers 🎛️
Ctrl/Alt/Shift 修飾キーの組合せ判定モード
| 項目 | 内部名 | 説明 |
|---|---|---|
| Ignore | .ignore |
Ctrl/Alt/Shift の押下状態を無視(修飾キーの有無に関わらず反応) |
| None | .none |
修飾キーが一切押されていないときのみ反応 |
| Control | .ctrl |
Ctrl キーが同時に押されているときのみ反応 |
| Alt | .alt |
Alt キーが同時に押されているときのみ反応 |
| Control and Alt | .ctrlalt |
Ctrl + Alt 同時押しのときのみ反応 |
| Shift | .shift |
Shift キーが同時に押されているときのみ反応 |
| Shift and Alt | .shiftalt |
Shift + Alt 同時押しのときのみ反応 |
| Shift and Control | .shiftctrl |
Shift + Ctrl 同時押しのときのみ反応 |
| Shift and Control and Alt | .shiftctrlalt |
Shift + Ctrl + Alt 同時押しのときのみ反応 |
Channel Names .channelnames 🏷️
出力チャンネルの命名方式を選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| by Key Name | .key |
キー名から自動生成(例: Q W R → kq kw ke、キーパッドは kp0, kp1…) |
| by Channel Number | .number |
順序ベースで命名(k1 k2 k3 …) |
キー指定・フォーカス制御 ⌨️
Keys .keys 🔑
– 監視するキーを指定し各キーをチャンネル化
– 有効なキーは数字 0-9・アルファベット A-Z・キーパッド 0-9
– パラメータ右側のドロップダウンメニューから選択可能
Panels .panels 🎯
– フォーカス対象とする Panel COMP のパスを指定
– 指定 Panel にフォーカスがあるときだけキーボードイベントを取得
– 未指定時はグローバルにキーボードイベントを取得
Channel Page 📐
Extend Left .left ⬅️
チャンネル範囲外(開始前)の値の補間方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| Hold | .hold |
チャンネルの現在値を保持 |
| Slope | .slope |
チャンネル開始前の傾きを継続 |
| Cycle | .cycle |
チャンネルを繰り返し循環 |
| Mirror | .mirror |
1 サイクルごとにミラーリングして循環 |
| Default Value | .default |
Default Value パラメータで指定した定数値を使用 |
Extend Right .right ➡️
チャンネル範囲外(終了後)の値の補間方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| Hold | .hold |
チャンネルの現在値を保持 |
| Slope | .slope |
チャンネル終了後の傾きを継続 |
| Cycle | .cycle |
チャンネルを繰り返し循環 |
| Mirror | .mirror |
1 サイクルごとにミラーリングして循環 |
| Default Value | .default |
Default Value パラメータで指定した定数値を使用 |
サンプリング・既定値 📏
Sample Rate .rate 📐
– 出力チャンネルのサンプルレート(samples per second)
– フレームレートに合わせるか高めに取って後段でリサンプリングするのが一般的
Default Value .defval 🔢
– Extend Left / Extend Right が Default Value のときに使用される定数値
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: ライブ演出のシーン切替ショートカット 🎬
Keyboard In CHOP → Trigger CHOP → Switch TOP
- Keyboard In CHOP の Keys に
1 2 3 4を指定し各シーンに対応 - Modifier Keys を
Controlに設定して通常入力との衝突を回避 - Trigger CHOP でキー押下を立ち上がりイベントに変換
- Switch TOP の Index にバインドしシーンを瞬時に切替
Example 2: Panel フォーカス連動の即席パラメータ操作 🎯
Container COMP (Panel) → Keyboard In CHOP (panels=container1) → Math CHOP → Parameter
- Container COMP を作成しキーボード操作の対象 Panel として配置
- Keyboard In CHOP の Panels に
/project1/container1等のパスを設定 - Keys に
U D(上下)を指定し押下中だけ値を変動させる - Math CHOP で値域を整え Parameter に Export
Example 3: GUI不要のプロトタイプ操作 ⚙️
Keyboard In CHOP (Active=While Playing) → CHOP Execute DAT
- Active を
While Playingに切替えて Timeline 再生中だけ入力をキャプチャ - Keys に
Q W E R等のテストキーを登録 - CHOP Execute DAT でチャンネル変化を検知しデバッグ用 print・状態遷移を起動
- Channel Names を
by Key Nameにしてキー名と CHOP チャンネル名の対応を直感化
関連オペレータ 🔗
類似機能OP 🔍
- Mouse In CHOP — マウスの位置・ボタン状態をチャンネル化
- Joystick CHOP — ゲームパッド・ジョイスティックの軸・ボタン入力をチャンネル化
組み合わせ推奨OP 🔄
- Trigger CHOP — キー押下の立ち上がりを ADSR エンベロープ等に変換
- Count CHOP — 押下回数のカウント・トグル動作の生成
- Speed CHOP — 押下中の値を時間積分して連続的なパラメータ変化を作る
- Math CHOP — 押下値(0/1)のスケーリング・オフセット・正規化
- Select CHOP — 監視中の特定キーチャンネルだけを取り出す
前処理・後処理CHOP 🎯
Info CHOP情報 📊
Keyboard In 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: キー入力が CHOP に反映されない/チャンネルが 0 のまま
✅ Solution:
- Active が
OnまたはWhile Playingになっているか確認(Offではクックされない) - Keys パラメータに監視対象キーが正しく登録されているか確認
- Panels パラメータに Panel COMP パスを指定している場合、その Panel にフォーカスが当たっているかを確認(未フォーカス時はイベントが届かない)
- 他の OP(DAT・Panel COMP の Key Capture 等)が同じイベントを横取りしていないか確認
❌ Problem: 修飾キー(Ctrl/Alt/Shift)の組合せが意図どおり動かない
✅ Solution:
- Modifier Keys を目的の組合せ(例:
Control and Alt)に変更 - 汎用ショートカットとして使う場合は
Ignoreに切替えて修飾キーの状態に依存しない動作にする - OS 側のショートカット(例: Alt+Tab)と衝突していないか確認
❌ Problem: チャンネル名が想定と違う/キーごとの値を区別できない
✅ Solution:
- Channel Names を
by Key Nameに切替えてキー名(kqkw等)でチャンネルを識別 - 順序ベースで扱いたい場合は
by Channel Numberにしてk1k2…で固定 - 後段でSelect CHOPを使い必要なチャンネルだけ取り出す
❌ Problem: 押下を 1 回のイベントとして扱いたい/チャタリングが起きる
✅ Solution:
- 後段に Trigger CHOP を入れて押下の立ち上がりだけを単発イベント化
- Count CHOPで押下回数をカウントしトグル動作を生成
- Filter CHOPで短時間のチャタリング(重複入力)を平滑化
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

