MIDI In CHOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

MIDI In CHOP の MIDI 入力取り込みを示す図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – 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 チャンネル群

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

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 等の高めの値を推奨

※ 注意: サンプルレートが低いと、ノートオン直後のノートオフが同サンプルに上書きされてイベントが消失する。MIDI 入力が密になる演奏では Sample Rate を高く設定するか、入力側でオン/オフ間隔の最小時間を確保すること。

引用元: 公式 docs

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 → 音響/視覚エンジン
  1. MIDI In CHOP で接続デバイスを選択
  2. Note Name に n、Note Output を Separate Channels、Velocity を Separate Channels に設定
  3. Note Scope で取得したい鍵盤範囲を指定(例: 21-108
  4. 出力チャンネルをシンセ音源・ライト制御・パーティクル発生のトリガに利用

Example 2: MIDI コントローラの CC 値を 0-1 に正規化 🎚️

MIDI Controller → MIDI In CHOP (Controller Name c, Normalize 0 to 1) → Math CHOP → パラメータ Export
  1. Controller Name を c、Controller Type を By Index Only に設定
  2. Controller Index で取得したい CC 番号(例: 1-32)を指定
  3. Normalize を 0 to 1 に設定して値を 0〜1 に整える
  4. Math CHOP や Export で TouchDesigner パラメータに直接接続

Example 3: MIDI ファイル再生でシーケンス駆動演出 📁

MIDI File → MIDI In CHOP (Source: File, Read Entire On) → Trigger CHOP → ビジュアルエンジン
  1. MIDI Source を File、MIDI File に再生する .mid ファイルを指定
  2. Read Entire MIDI File をオンにしてファイル全体を読込
  3. Note Name と Velocity Name を設定してノート列を CHOP チャンネル化
  4. Trigger CHOP でノートオン時にビジュアル演出を起動

Example 4: ピッチホイールで連続パラメータを操作 🎼

MIDI Keyboard (Pitch Wheel) → MIDI In CHOP (Pitch Wheel Name p) → Lag CHOP → 3D Camera Tilt
  1. Pitch Wheel Name を p に設定(値域は -1〜+1)
  2. 後段の Lag CHOP でホイールの動きを滑らかに
  3. 出力をカメラの傾き角や色相シフトにマッピング
  4. 演奏中の表現的なジェスチャーを 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、無効時は0
  • export_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 で滑らかに補間

参考資料 📚

その他 🔗

公式リソース 📖

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました