|
30 | 30 | * Scene D, Program Change with Bank in a single UMP |
31 | 31 | * Scene E, RPN/NRPN 32-bit + Relative RPN/NRPN (incremental) |
32 | 32 | * Scene F, Note On with Attribute pitch_7_9 (microtonal +50¢) |
33 | | - * Scene G, SysEx8 emission (8-bit SysEx, no 7-bit aliasing) |
| 33 | + * Scene G, SysEx7 emission (fragmented Universal SysEx Identity Reply) |
34 | 34 | * Scene H, Delta Clockstamp (DCTPQ + delta ticks) |
35 | 35 | * Scene I, Property Exchange Notify (broadcast OverlayRate change |
36 | 36 | * to any current subscribers) |
@@ -193,7 +193,7 @@ constexpr uint8_t kF_Note = 64; // E4 |
193 | 193 | constexpr uint32_t kF_OnMs = 14800; |
194 | 194 | constexpr uint32_t kF_OffMs = 16500; |
195 | 195 |
|
196 | | -// Scene G: SysEx8 |
| 196 | +// Scene G: SysEx7 |
197 | 197 | constexpr uint32_t kG_Ms = 17200; |
198 | 198 |
|
199 | 199 | // Scene H: Delta Clockstamp |
@@ -420,17 +420,17 @@ static void scene_f_attribute(m2device& midi, Showcase& s, uint32_t t) { |
420 | 420 | } |
421 | 421 | } |
422 | 422 |
|
423 | | -static void scene_g_sysex8(m2device& midi, Showcase& s, uint32_t t) { |
| 423 | +static void scene_g_sysex7(m2device& midi, Showcase& s, uint32_t t) { |
424 | 424 | if (s.g_done || t < kG_Ms) return; |
425 | | - // Custom SysEx8 payload, full 8-bit bytes per packet, no 7-bit |
426 | | - // aliasing. UNIQUE to MIDI 2.0 (MT 0x5). |
| 425 | + // Universal SysEx Identity Reply, 12 bytes of 7-bit data. |
| 426 | + // sendSysEx7 fragments automatically into Start + End packets (MT 0x3). |
427 | 427 | static const uint8_t payload[] = { |
428 | | - 0x7E, 0x7F, 0x06, 0x01, // Universal SysEx Identity Reply prefix |
429 | | - 0xFF, 0xC3, 0xA1, 0xB2, 0xC4, 0xD5, 0xE6, // 8-bit bytes (would need MCoded7 in 1.0) |
430 | | - 0xF7, 0x00, 0x80, 0xAA, 0x55, |
| 428 | + 0x7E, 0x7F, 0x06, 0x02, // Universal Non-Realtime, device 0x7F, Identity Reply |
| 429 | + 0x7D, 0x01, 0x00, 0x40, // mfr id + family LSB/MSB + model LSB |
| 430 | + 0x00, 0x04, 0x00, 0x00, // model MSB + version v0.4.0.0 |
431 | 431 | }; |
432 | | - midi.sendSysEx8(/*group*/ 0, /*streamId*/ 1, payload, sizeof(payload)); |
433 | | - std::printf("[G] SysEx8 emitted (%zu raw 8-bit bytes)\r\n", sizeof(payload)); |
| 432 | + midi.sendSysEx7(/*group*/ 0, payload, sizeof(payload)); |
| 433 | + std::printf("[G] SysEx7 emitted (%zu bytes, Identity Reply)\r\n", sizeof(payload)); |
434 | 434 | s.g_done = true; |
435 | 435 | } |
436 | 436 |
|
@@ -489,7 +489,7 @@ static void showcase_step(m2device& midi, m2ci& ci, Showcase& s) { |
489 | 489 | scene_d_program(midi, s, t); |
490 | 490 | scene_e_rpn_nrpn(midi, s, t); |
491 | 491 | scene_f_attribute(midi, s, t); |
492 | | - scene_g_sysex8(midi, s, t); |
| 492 | + scene_g_sysex7(midi, s, t); |
493 | 493 | scene_h_dctpq(midi, s, t); |
494 | 494 | scene_i_pe_notify(ci, s, t); |
495 | 495 | scene_j_clip_end(midi, s, t); |
|
0 commit comments