更新
2024/8/13
- SystemCommon & System Realtime の項目を一覧記述に変更
- System Realtimeの※(脚注)を追加
- CCリストにGS仕様 CC1 Control / CC2 Controlを追加
- 追加に伴い一部の説明を修正
変更理由
Systemメッセージに関しては、最初は簡潔さを考慮して省いていましたが、未定義箇所があり、テスト的に用いる(あくまで予約済みである点には注意)ことが可能な点を考慮すると、明示した方が良いという判断です。CC1/2 Controlに関しては、デフォルト値の関係上、記載すべき項目でしたが、書き忘れていました。
書く理由
MIDIコントロールチェンジのリストはWeb上に多く見かけますが、プレイヤー/サウンドプログラマー向けの資料が多いです。ソフトウェアプログラマー向けの資料(空きCC、デフォルト値、Resetすべき項目、詳細資料などを記載)はあまり見ないため、備忘録を兼ねて作成することにしました。
またM5Stack UnitSynth (SAM2695)のCCリスト化も兼ねています。 (比較のためRoland SC-88Proも掲載)
GS(NRPN)に関しては、一応記載しています。
※Systemメッセージ & MPEに関しては、おおよその配置箇所を示すだけにとどめます。
MIDIメッセージ概要
MIDIメッセージの大きな分類を示しておきます。
コントロールチェンジ(CC)は分類上、Status Byteが0xBn(n:channel)、 データの1バイトが0-119になります。120-127はチャンネルモードメッセージなりますが、CCと同じデータ形式を採るため、実装上はまとめて扱われることが多いように思われます。Descriptionの色に関しては後述します。
| Status Byte | Data Bytes | Description | Message | Spec. | |||
| & 0xf0 (上位4bit) |
& 0xf (下位4bit) |
1Byte | 2Byte | 3… | |||
| 0x80 | Channel 0-15 |
Note | Velocity | - | Note Off | Channel Voice | GM |
| 0x90 | Velocity 0 | - | Note Off | GM | |||
| Velocity 1-127 | - | Note On | GM | ||||
| 0xA0 | Pressure | - | Polyphonic Key Pressure (Aftertouch) |
||||
| 0xB0 | Control 0-119 | Value | - | Control Change | (GM) | ||
| Control 120-127 | Value | - | Channel Mode | Channel Mode | (GM) | ||
| 0xC0 | Program | - | - | Program Change | Channel Voice | (GM) | |
| 0xD0 | Pressure | - | - | Channel Pressure (Aftertouch) |
GM | ||
| 0xE0 | Value (LSB) | Value (MSB) | - | Pitch Bend Change | GM | ||
| 0xF0 | 0x0 | 可変 | SYSEX | System Exclusive | |||
| 0x1 | Value |
- | - | MIDI Time Code Quater Frame |
System Common | ||
| 0x2 | Value (LSB) | Value (MSB) | - | Song Position Pointer (SPP) |
|||
| 0x3 | Song | - | - | Song Select | |||
| 0x4/0x5 | 可変 | Undefined(Reserved) | |||||
| 0x6 | - | - | - | Tune Request | |||
| 0x7 | - | - | - | EOX ( End Of eXclusive) | |||
| 0x8 | - | - | - | Timing Clock | System Realtime ※ |
||
| 0x9 | 可変 | Undefined(Reserved) | |||||
| 0xA | - | - | - | Start | |||
| 0xB | - | - | - | Continue | |||
| 0xC | - | - | - | Stop | |||
| 0xD | 可変 | Undefined(Reserved) | |||||
| 0xE | - | - | - | Active Sensing | |||
| 0xF | - | - | - | System Reset | |||
※ 仕様上、System Realtime Messageは他のMessageより優先権があり、他のStatus-Dataの合間に表れても良い
以下、個人的なピックアップ項目です。
- Status Byteは最上位ビットがONで、データと区別できる
- SYSEXを除くと、すべてのメッセージが3バイト以下になる(実装上はSYSEXが別の構造を採ることが多い)
- Velocityと音量の関係は指数関数的であることを推奨(MIDI 1.0仕様書)、Velocity Mappingの存在も意識する必要がある
- Pitch Bend / SPP のMSB / LSBは間違えやすい部分(SYSEXには逆順のデータが存在し、一貫性がない)
- 0xFFのSystem Reset(工場出荷時設定にリセット)はテストに便利(仕様上もマニュアルを推奨)
コントロールチェンジ (+チャンネルモードメッセージ)一覧
Descriptionの色の意味は次の通りです。
- 緑:Reset All Controller (CC121)でリセットされない項目
- 赤:Reset All Controller (CC121)でリセットされる項目
-
青:未定義
またCCの背景色の色の意味は次のようになっています。
- 灰色:ドラムチャンネルでの受信、非推奨項目
いずれもGM2の仕様書を元にしています。GM2の仕様に該当しない項目に関しては、そのままです。従って実装上の必要性に応じて、項目は変えると良いかもしれません(例えば、Freezeを実装した場合、これは論理的(他のPedalに従い)にResetすべき項目に含んで良いと思われます)。
Valueの[]はDefault値を表します。
| Category | Spec. | CC | Value | Description | SAM 2695 |
88 Pro |
Note | Ref. |
| MSB 受信時 MSB→LSB LSBは0に |
0 | Bank Select | ✅ | ✅ | ||||
| GM | 1 | [0] | Modulation Wheel | ✅ | ✅ | |||
| 2 | Breath Controller | - | - | |||||
| 3 | Undefined | - | - | |||||
| 4 | Foot Controller | - | - | |||||
| GM2 | 5 | [0] | Portamento Time | ✅ | ✅ | 推奨グラフあり | ||
| GM2 | 6 | [0] | Data entry | ✅ | ✅ | (N)RPNの値 | ||
| GM | 7 | [100] | Volume | ✅ | ✅ | 40*log10(cc7/127) [dB] | ||
| 8 | [64] | Balance | - | - | L/Lower→R/Upper | |||
| 9 | Undefined | - | - | |||||
| GM | 10 | [64] | Pan | ✅ | ✅ | L→R 推奨式あり | RP-036 | |
| GM | 11 | [127] | Expression | ✅ | ✅ | 40*log10(cc11/127) [dB] | ||
| 12/13 | Effect Control 1/2 | - | - | |||||
| 14-15 | Undefined | - | - | |||||
| 16-19 | General Purpose 1-4 |
↓ | ↓ | 汎用操作子 (2バイト拡張可能) |
||||
| GS | 16 | [CC1 Control] | ✅ | ✅ | SYSEXを用いて、 CC[0-0x5f]に変更可 |
|||
| GS | 17 | [CC2 Control] | ✅ | ✅ | SYSEXを用いて、 CC[0-0x5f]に変更可 |
|||
| 20-31 | Undefined | - | - | |||||
| LSB LSBのみ 変更は可 |
32 | [0] | Bank Select LSB | - | ✅ | |||
| 33-37 | * LSB | - | - | |||||
| GM2 | 38 | [0] | Data entry LSB | - | ✅ | (N)RPNの値 | ||
| 39-43 | * LSB | - | - | |||||
| 例1 | 42 | [0]? | Pan LSB | - | - | |||
| 例2 | 43 | [127]? | Expression LSB | - | - | |||
| 44-63 | * LSB | - | - | |||||
| Switch 送信側 0: OFF 127: ON 受信側 0-63 : OFF 64-127: ON |
GM | 64 | [0] | Sustain Pedal / Damper (Hold) |
✅ | ✅ | ハーフダンパー可 0-127 |
|
| GM2 | 65 | [0] | Portamento | ✅ | ✅ | |||
| GM2 | 66 | [0] | Sostenuto Pedal (Chord Hold) |
✅ | ✅ | |||
| GM2 | 67 | [0] | Soft Pedal | ✅ | ✅ | |||
| 68 | [0] | Legato Footswitch | - | - | On:Mono Mode 再アタックしない Off: Modeを復帰 |
|||
| 69 | [0] | Freeze (Hold2) |
- | - | ||||
| Sound Controller (Default) CC71-78 Relative |
70 | [0] | Sound Variation | - | - | RP-021 | ||
| 2推奨 | 71 | [64] | Timber/Harmonic Intensity (Filter Resonance) |
GS | GS | RP-021 | ||
| 2推奨 | 72 | [64] | Release Time | GS | GS | Realtimeは任意 | RP-021 | |
| 2推奨 | 73 | [64] | Attack Time | GS | GS | Realtimeは任意 | RP-021 | |
| 2推奨 | 74 | [64] | Brightness (Filter Cutoff) |
GS | GS | 暗→明 | RP-021 | |
| 2推奨 | 75 | [64] | Decay Time | GS | GS | RP-021 | ||
| 2推奨 | 76 | [64] | Vibrato Ratio | GS | GS | RP-021 | ||
| 2推奨 | 77 | [64] | Vibrato Depth | GS | GS | RP-021 | ||
| 2推奨 | 78 | [64] | Vibrato Delay | GS | GS | RP-021 | ||
| 79 | Undefined | - | - | RP-021 | ||||
| 80-83 | General Purpose 5-8 |
↓ | - | 汎用操作子 (1バイトのみ) |
||||
| Dream | 80 | [4] | Reverb Program | ✅ | - | 汎用操作子5 | ||
| Dream | 81 | [2] | Chorus Program | ✅ | - | 汎用操作子6 | ||
| 84 | Portamento Control | - | ✅ | Source Note On/Off(CC65)は無視 |
||||
| 85-87 | Undefined | - | - | |||||
| 88 | High Resolution Velocity Prefix |
- | - | On / Off 下位7bit 0x80-0x3ffff Velocity 0では無効 |
PR-053 | |||
| 89-90 | Undefined | - | - | |||||
| Effect Controller |
GM2 | 91 | [40] | Reverb Send Level | ✅ | ✅ | 2695はDefault未記載 | |
| 92 | Tremolo Depth | |||||||
| GM2 | 93 | [0] | Chorus Send Level | ✅ | ✅ | |||
| 94 | Celeste(Detune) Depth Delay Send Level |
- | ✅ | |||||
| 95 | Phaser Depth | - | - | |||||
| 96 | Data Increment(+1) | - | - | (N)RPNの値を操作 | RP-018 | |||
| 97 | Data Decrement(-1) | - | - | (N)RPNの値を操作 | RP-018 | |||
| NRPN MSB 1 ↓ LSB Sound Controller MSB 24-31 ↓ LSB Drum Note 値のLSBは 無効 |
98 | [0x7F] | NRPN LSB | ✅ | ※1 | |||
| GS | 8 | Vibrato Ratio | ✅ | ✅ | Sound Controller CC71-78に対応 [64] Relative |
|||
| GS | 9 | Vibrato Depth | ✅ | ✅ | ||||
| GS | 10 | Vibrato Delay | ✅ | ✅ | ||||
| GS | 32 | TVF Cutoff | ✅ | ✅ | ||||
| GS | 33 | TVF Resonance | ✅ | ✅ | ||||
| GS | 99 | TVF&TVA Attack Time |
✅ | ✅ | ||||
| GS | 100 | TVF&TVA Decay Time |
✅ | ✅ | ||||
| GS | 102 | TVF&TVA Release Time |
✅ | ✅ | ||||
| 0x7F | null | ✅ | ✅ | 値操作を無効 | ||||
| 99 | [0x7F] | NRPN MSB | ✅ | ※1 | ||||
| GS | 1 | →LSB | Sound Controller | |||||
| GS | 24 | Drum inst. Pitch Coarse |
✅ | ✅ | [64] Relative | |||
| GS | 26 | Drum inst. Level |
✅ | ✅ | ||||
| GS | 28 | Drum inst. Pan |
✅ | ✅ | 0: Random 1-127: L→R |
|||
| GS | 29 | Drum inst. Reverb Send L |
✅ | ✅ | ||||
| GS | 30 | Drum inst. Chorus Send L |
✅ | ✅ | ||||
| GS? | 31 | Drum inst. Delay Send L |
- | ✅ | SC-88 / Pro 専用と記載 |
|||
| Dream | 0x37 | ✅ | - | SAM2695 Special | ||||
| 0x7F | null | ✅ | ✅ | 値操作を無効 | ||||
| RPN 項目 MSB(0) / LSB 値設定 CC6 ↓ CC38 値の増減 CC96 or CC97 |
GM | 100 | [0x7F] | RPN LSB | ✅ | ✅ | ||
| GM | 0 | Pitch Bend Sensitivity |
✅ | ✅ | [semitone] / [cent] [2 / 0] |
|||
| GM | 1 | Channel Fine Tuning |
✅ | ✅ | [-100, +100) [cent] [0x40 / 0] |
RP-022 | ||
| GM | 2 | Channel Coarse Tuning |
✅ | ✅ | [-64, +63] [semitone] [64] |
RP-022 | ||
| 3 | Tuning Program Select |
- | - | 0-127 | CA-020 | |||
| 4 | Tuning Bank Select |
- | - | 0-127 | CA-020 | |||
| GM2 | 5 | Modulation Depth Range |
- | - | MSB: [semitone] LSB: [100/128 cent] 0 / 0x40 |
CA-026 | ||
| MPE | 6 | MPE Configuration |
- | - | Ch [0/F]: Lower/Upper 0: MPE OFF 1-15: Member Channels |
CA-034 | ||
| 0x7F | null | ✅ | ✅ | 値操作を無効 | ||||
| GM | 101 | [0x7F] | RPN MSB | ✅ | ✅ | |||
| 0 | →LSB | 有効 | ||||||
| 0x7F | null | ✅ | ✅ | 値操作を無効 | ||||
| 102 -119 |
Undefined | |||||||
| Channel Mode Message |
GM2 | 120 | 0 | All Sound Off | ✅ | ✅ | All Sound Off | |
| GM | 121 | 0 | Reset All Controllers |
✅ | ✅ | 項目は色を参照 |
||
| 122 | 0/[127] | Local Control | - | - | 0:OFF 127:ON | |||
| GM | 123 | 0 | All Notes Off | ✅ | ✅ | All Notes Off | ||
| GM2 | 124 | 0 | Omni Off | - | ✅ | All Notes Off | ||
| GM2 | 125 | 0 | Omni On | - | ✅ | All Notes Off | ||
| GM2 | 126 | 0-16 | Mono On | ✅ | ✅ | All Sound Off ※2 | ||
| GM2 | 127 | 0 | Poly On | ✅ | ✅ | All Sound Off ※2 |
※1 デフォルトでは無効、有効にするためにはGS Resetが必要
※2 MIDI 1.0規格書には”オール・ノート・オフ”と記載
参考資料
https://amei.or.jp/midistandardcommittee/RP&CAj.html
https://amei.or.jp/midistandardcommittee/MIDIspcj.html
- MIDI1.0規格書
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/products/unit/Unit-Synth/SAM2695.pdf
- SAM2695 Datasheet (SAM2695.pdf)