
概要 📖 – MIDI 入力の取り込みと制御
MIDI In CHOPは、MIDI デバイスやファイルからのイベントを解析し、ノート・ベロシティ・コントローラ等を CHOP チャンネルとして出力する CHOPです。ライブパフォーマンスでの鍵盤・コントローラ入力から、MIDI ファイル再生によるシーケンス駆動まで、MIDI 由来の制御信号を一括で扱えます。
主な用途 🎯
- MIDI デバイス(鍵盤・コントローラ・パッド)からのリアルタイム入力取得
- ノートオン/オフ・ベロシティ・アフタータッチによる演奏情報の CHOP チャンネル化
- コントロールチェンジ(CC)の取得と正規化(0-1 / -1 to 1 / On-Off 変換)
- ピッチホイール・プログラムチェンジ・SysEx などの周辺メッセージの捕捉
- MIDI ファイル再生によるシーケンス駆動・タイムライン同期演出
データフロー 🔄
入力: MIDI デバイス または MIDI ファイル
↓
MIDI イベント解析(Note / Velocity / Controller / Pitch / Timer 等)
↓
チャンネル名生成 → 正規化
↓
出力: CHOP チャンネル群
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Source Page 📋
Active .active 🎛️
MIDI In CHOP の有効/無効切替
| 項目 | 内部名 | 説明 |
|---|---|---|
| Active | .active |
オンで MIDI 入力受信を有効化、オフで停止 |
MIDI Source .source 🎚️
MIDI イベントの取得元(デバイスまたはファイル)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Device | .device |
ライブの MIDI デバイスからイベントを取得 |
| File | .file |
既存の MIDI ファイルからイベントを取得 |
Device 設定 .device_settings 🎹
MIDI デバイス参照と ID 指定
Device Table .device
MIDI デバイス Table DAT へのパス
Device ID .id
使用するデバイスの id を指定
MIDI File .file_settings 📁
MIDI ファイル指定と読み込み範囲
MIDI File .file
MIDI Source が File のとき読み込む MIDI ファイル名(ディスクまたは http:// 形式の URL 指定可)
Read Entire MIDI File .entire
オンで MIDI ファイル全体を読み込む。オフでは Channel ページの Start / End で読込範囲を限定
Reset 制御 .reset_settings 🔄
チャンネル削除・値リセットの制御
Reset Channels .resetchannels
オンで全チャンネルを削除、オフに戻すまで新規チャンネル追加が止まる
Reset Channels Pulse .resetchannelspulse
ボタン押下で即座に全チャンネルを削除
Reset Values .resetvalues
オンで全チャンネル値を 0 にリセット、オフに戻すまで値の更新が止まる
Simplified Output .simplified ✨
デバイスから検出された MIDI 信号に対し自動でチャンネルを生成するモード
| 項目 | 内部名 | 説明 |
|---|---|---|
| Simplified Output | .simplified |
オンで選択した MIDI デバイスから検出された信号に応じて自動的にチャンネルを生成 |
Preserve Pulses .preservepulses ⚡
高頻度パルスを連続出力サンプルに分散して取りこぼしを防ぐモード
| 項目 | 内部名 | 説明 |
|---|---|---|
| Preserve Pulses | .preservepulses |
オンでパルスのような瞬時値遷移を連続サンプルに分散させる。タイムラインレートに近いか超えるパルス頻度のときに有効、オフでは重なって失われる可能性 |
1 Based Index .onebased 🔢
ノート・コントローラのインデックス基数
| 項目 | 内部名 | 説明 |
|---|---|---|
| 1 Based Index | .onebased |
オンでインデックスを 1 始まり(1-128)、オフでデフォルトの 0 始まり(0-127)。Note と Controller の両インデックスに影響 |
MIDI Channels .channel 🎯
MIDI Channels .channel
受信する MIDI チャンネル番号(1-16)。範囲・複数指定可(例: 1 4 6, 1-7 12, 1-5:2)。Channel Prefix が空なら複数 MIDI チャンネルの入力は 1 つの CHOP チャンネル群にマージされる
Channel Prefix .prefix
複数 MIDI チャンネル受信時、ch 等の文字列を入れると MIDI チャンネル毎に CHOP チャンネルが分離。空なら全 MIDI チャンネルが単一の CHOP チャンネル群にマージ
Controller Format .format 🎛️
コントローラのビット解釈(7bit / 14bit ペア解釈)
| 項目 | 内部名 | 説明 |
|---|---|---|
| 7 bit Controllers | .7bit |
コントローラを通常の 7bit メッセージとして扱う |
| 14 bit Controllers | .14bit |
ペア(インデックス 0-31, 98, 100)を 1 つの 14bit コントローラとして 2 つの 7bit メッセージから受信 |
Record Page 📁
Record Method .recordtype 🎚️
録音対象の指定
| 項目 | 内部名 | 説明 |
|---|---|---|
| Full Length | .timeline |
タイムラインの全長を記録 |
Record .record ⏺️
録音の開始/停止ボタン
| 項目 | 内部名 | 説明 |
|---|---|---|
| Record | .record |
ボタンとして使用し CHOP チャンネルへの録音を開始・停止 |
Note Page 📁
Note Name / Scope .note_name_scope 🎵
ノートイベント用チャンネル名と録音対象スコープ
Note Name .notename
ノートイベント用 CHOP チャンネルのベース名(例: n)。空ならノートは無視。Note Output が Separate Channels のとき Note Scope の各ノート毎にチャンネルが生成される
Note Scope .notescope
録音対象ノートのスコープ(例: 50-60, 64 65 66 70-80 のように複数範囲・個別指定可)
Note Output .notemeth 📤
複数ノートの取扱い方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| Separate Channels | .sep |
各ノート番号毎に個別の CHOP チャンネルを生成 |
Velocity .velocity 🎚️
ベロシティイベントの記録方式
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .veloff |
ベロシティを記録しない |
| Note Amplitude | .velencode |
ノートチャンネルの振幅としてベロシティを記録(Note Output が Separate Channels のときのみ有効) |
| Separate Channels | .velsep |
ベロシティを別 CHOP チャンネルに記録、各ノートチャンネルに対応する Velocity チャンネルが作られる |
Velocity / Aftertouch / Pressure 名 .vel_after_press_names 🏷️
Velocity / Aftertouch / Channel Pressure チャンネル命名
Velocity Name .velname
Velocity = Separate Channels のとき、Velocity の CHOP チャンネルのベース名(例: v)。空なら Velocity チャンネルは生成されない
Aftertouch Name .aftername
ポリフォニック Aftertouch の CHOP チャンネルのベース名。Note Scope の各ノート毎に 1 つ作られる。空なら Aftertouch チャンネルは生成されない
Pressure Name .pressname
Channel Pressure チャンネル名。複数 MIDI チャンネル受信時は全 Channel Pressure 変動がこの 1 チャンネルに記録される。空なら生成されない
Normalize (Note) .notenorm 📐
ノート値の正規化方式
| 項目 | 内部名 | 説明 |
|---|---|---|
| None | .off |
正規化なし。7bit は 0-127、14bit は 0-16383 |
| 0 to 1 | .0to1 |
0〜1 の範囲に正規化 |
Pitch Wheel Name .pitchname 🎼
ピッチホイール用チャンネル名
| 項目 | 内部名 | 説明 |
|---|---|---|
| Pitch Wheel Name | .pitchname |
Pitch Wheel の CHOP チャンネル名。値域は -1〜+1。空ならチャンネル生成されない(例: p を指定で生成) |
Control Page 📁
Controller Name .controlname 🏷️
コントロールチェンジ用チャンネルのベース名
| 項目 | 内部名 | 説明 |
|---|---|---|
| Controller Name | .controlname |
Control Change の CHOP チャンネルのベース名。チャンネル名末尾に Controller index(0-127)が付加される。空なら Control Change は記録されない(典型は c) |
Controller Type .controltype 🎛️
コントローラの種類選択(128 種類から指定、または index 指定)
| 項目 | 内部名 | 説明 |
|---|---|---|
| By Index Only | .index |
Controller Index で番号指定(特定タイプを選ばない) |
| Bank Select | .n0 |
Bank Select コントローラ |
| Modulation Wheel | .n1 |
Modulation Wheel コントローラ |
| Breath Control | .n2 |
Breath Control コントローラ |
| Foot Controller | .n3 |
Foot Controller コントローラ |
| Portamento Time | .n4 |
Portamento Time コントローラ |
| Data Entry | .n5 |
Data Entry コントローラ |
| Channel Volume | .n6 |
Channel Volume コントローラ |
| Balance | .n7 |
Balance コントローラ |
| Pan | .n8 |
Pan コントローラ |
| Effect Control 1-2 | .n10 |
Effect Control 1-2 コントローラ |
| 14 bit General Purpose 1-4 | .n11 |
14 bit 汎用コントローラ 1-4 |
| Sustain on/off | .n12 |
Sustain ペダル on/off |
| Portamento on/off | .n13 |
Portamento on/off |
| Sustenuto on/off | .n14 |
Sustenuto ペダル on/off |
| Soft Pedal on/off | .n15 |
Soft Pedal on/off |
| Legato Footswitch on/off | .n16 |
Legato フットスイッチ on/off |
| Hold 2 on/off | .n17 |
Hold 2 ペダル on/off |
| Sound Controller 1-10 | .n18 |
Sound Controller 1-10 |
| 7 bit General Purpose 5-8 | .n19 |
7 bit 汎用コントローラ 5-8 |
| Portamento Control | .n20 |
Portamento Control コントローラ |
| Effect Depth 1-5 | .n21 |
Effect Depth 1-5 |
Controller Index .controlind 🔢
コントローラ番号や範囲指定
| 項目 | 内部名 | 説明 |
|---|---|---|
| Controller Index | .controlind |
番号や範囲でコントローラを選択。By Index Only モードでは 128 個全てまたは部分範囲を指定可(例: 1-10, 2 34 70, 1-32 70-80:2) |
Normalize (Controller) .norm 📐
コントローラ値の正規化方式
| 項目 | 内部名 | 説明 |
|---|---|---|
| None | .off |
正規化なし。7bit は 0-127、14bit は 0-16383 |
| 0 to 1 | .0to1 |
0〜1 の範囲に正規化 |
| -1 to 1 | .-1to1 |
-1〜+1 の範囲に正規化 |
| On/Off | .onoff |
on/off 状態のコントローラ向け。値 64 以上を 1、64 未満を 0 として解釈 |
Unwrap .unwrap 🔄
値のラップアラウンド回避
| 項目 | 内部名 | 説明 |
|---|---|---|
| Unwrap | .unwrap |
オンで min と max 間で値が飛ばずに連続したランプとして解釈。ノブ型コントローラの利用に推奨 |
Program Change .progname 🎼
プログラムチェンジ用チャンネル名
| 項目 | 内部名 | 説明 |
|---|---|---|
| Program Change | .progname |
Program Change の CHOP チャンネル名。全 Program Change メッセージがこの 1 チャンネルに記録。空なら生成されない |
Timer Page 📁
Timer メッセージ .timer_messages ⏱️
タイマー系メッセージのチャンネル化
Timer Pulse Name .pulsename
タイマーパルスメッセージを記録するチャンネル名
Timer Ramp Name .rampname
タイマーランプメッセージを記録するチャンネル名
Timer Period .timerperiod
タイマー周期メッセージを記録するチャンネル名
Timer Start .timerstart
タイマー開始メッセージを記録するチャンネル名
Ticks per Beat .ticks
1 拍あたりのティック数を指定。タイマーおよび Bar 出力値に影響
Bar / Song Position .bar_song 🎼
Bar 位置・Song Position の出力
Bar Ramp Name .barname
現在の Bar 位置を出力するチャンネル名
Bar Period .barperiod
現在の Bar 周期イベントを出力するチャンネル名
Bar Start .barstart
Bar 開始時に出力するチャンネル名
Bar Message .barmsg
Bar メッセージを捕捉。V をメッセージ内に置くとそのチャンネルが取るべき値を指定可
Song Pos Name .songpos
Song Position メッセージを捕捉するチャンネル名
Sys Page 📁
System Exclusive .sysex_settings 🛠️
System Exclusive .sysex
System Exclusive メッセージハンドラのシーケンス
Channel Name .sysex0name
捕捉する固有 Exclusive メッセージのチャンネル名
Message .sysex0msg
Exclusive メッセージの中身。V をメッセージ内に置くとそのチャンネルが取るべき値を指定可
Chan Page 📁
Start / End .start_end 📍
録音開始・終了位置(MIDI ファイル読込時のセグメント定義)
Start .start
録音開始位置。Tie to Time Line モードでは開始時刻以前のイベントは無視、Time Line Independent モードではこの位置から開始してループしない。MIDI File 読込時は読込セグメントの開始を決定。Common ページの単位(Samples / Frames / Seconds)で表現される
End .end
MIDI File 読込時の読込セグメントの終了位置
Start Unit .startunit 📐
Start パラメータの単位選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| I | .samples |
サンプル単位 |
| F | .frames |
フレーム単位 |
| S | .seconds |
秒単位 |
End Unit .endunit 📐
End パラメータの単位選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| I | .samples |
サンプル単位 |
| F | .frames |
フレーム単位 |
| S | .seconds |
秒単位 |
Sample Rate .rate ⚡
CHOP のサンプリングレート(毎秒サンプル数)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Sample Rate | .rate |
本 CHOP のサンプルレートを毎秒サンプル数で指定。低すぎると急激な入力変化を取りこぼす(例: 1/30 秒以内の連続イベントが同サンプルに重なって失われる)。高頻度 MIDI イベントを取り逃さないために 600 等の高めの値を推奨
|
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 パラメータの定数値を使用 |
Default Value .defval 🎯
Default Value 拡張時に使う定数値
| 項目 | 内部名 | 説明 |
|---|---|---|
| Default Value | .defval |
Extend Left / 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: MIDI 鍵盤からの演奏キャプチャ 🎹
MIDI Keyboard → MIDI In CHOP (Note Name n, Velocity Separate) → Filter CHOP → 音響/視覚エンジン
- MIDI In CHOP で接続デバイスを選択
- Note Name に
n、Note Output を Separate Channels、Velocity を Separate Channels に設定 - Note Scope で取得したい鍵盤範囲を指定(例:
21-108) - 出力チャンネルをシンセ音源・ライト制御・パーティクル発生のトリガに利用
Example 2: MIDI コントローラの CC 値を 0-1 に正規化 🎚️
MIDI Controller → MIDI In CHOP (Controller Name c, Normalize 0 to 1) → Math CHOP → パラメータ Export
- Controller Name を
c、Controller Type を By Index Only に設定 - Controller Index で取得したい CC 番号(例:
1-32)を指定 - Normalize を
0 to 1に設定して値を 0〜1 に整える - Math CHOP や Export で TouchDesigner パラメータに直接接続
Example 3: MIDI ファイル再生でシーケンス駆動演出 📁
MIDI File → MIDI In CHOP (Source: File, Read Entire On) → Trigger CHOP → ビジュアルエンジン
- MIDI Source を
File、MIDI File に再生する.midファイルを指定 - Read Entire MIDI File をオンにしてファイル全体を読込
- Note Name と Velocity Name を設定してノート列を CHOP チャンネル化
- Trigger CHOP でノートオン時にビジュアル演出を起動
Example 4: ピッチホイールで連続パラメータを操作 🎼
MIDI Keyboard (Pitch Wheel) → MIDI In CHOP (Pitch Wheel Name p) → Lag CHOP → 3D Camera Tilt
- Pitch Wheel Name を
pに設定(値域は -1〜+1) - 後段の Lag CHOP でホイールの動きを滑らかに
- 出力をカメラの傾き角や色相シフトにマッピング
- 演奏中の表現的なジェスチャーを 3D 演出に変換
関連オペレータ 🔗
類似機能OP 🔍
- MIDI Out CHOP — MIDI 信号の送信側、入力ではなく出力に特化
- MIDI Event DAT — MIDI イベントを DAT テーブルで取得(CHOP チャンネルではなく文字列ベース)
組み合わせ推奨OP 🔄
- Filter CHOP — MIDI 入力のジッタや高頻度パルスをスムージング
- Trigger CHOP — ノートオン時にエンベロープを起動
- Math CHOP — CC 値のレンジ変換やオフセット適用
- Lag CHOP — ピッチホイールやモジュレーションの動きを滑らかに
- Logic CHOP — ノートオン/オフの閾値判定やゲート制御
前処理・後処理CHOP 🎯
Info CHOP情報 📊
MIDI 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: MIDI デバイスが認識されない・チャンネルが生成されない
✅ Solution:
- Active がオンになっているか確認
- Device Table DAT に対象デバイスが列挙されているか確認、Device ID が正しい行を指しているか確認
- Simplified Output をオンにすると検出された MIDI 信号で自動的にチャンネル生成される
❌ Problem: ノートやコントローラが取りこぼされる(高速演奏で消失)
✅ Solution:
- Sample Rate を 600 等の高い値に上げて高頻度イベントを取り込む
- Preserve Pulses をオンにして連続するパルスをサンプル列に分散
- 後段で扱いやすくするため Filter CHOP 等でスムージングするのは原信号確認後に検討
❌ Problem: CC 値が 0-127 のまま正規化されない
✅ Solution:
- Control ページの Normalize を
0 to 1または-1 to 1に設定 - On/Off コントローラ(Sustain 等)は Normalize を
On/Offにすると 0/1 に変換 - 後段で Math CHOP の Range 変換でも追加調整可能
❌ Problem: ノブを 1 周回したら値がジャンプする
✅ Solution:
- Control ページの Unwrap をオンにして min/max のラップを連続ランプに変換
- ノブ型コントローラ全般に有効(ロータリーエンコーダ等)
- それでもジャンプする場合は後段の Lag CHOP で滑らかに補間
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

