SYSEX GS USE FOR RHYTHM PART
[ F0 41 10 42 12 40 1x 15 mm sum F7 ]
x : 1 - 9 => 0 - 8 channel / 0 => 9 channel / A - F => 11 - 16 channel
mm : 0 => normal part / 1,2 => set to drum track
The GS file called test-sysex-gs-40-1x-15-drum-part-change.mid
Am I reading it wrong or is this a GM file? I didn't find the F0 41 10 42 12 40 00 7F 00 41 F7 in it..
So it should not be legal for it to change drum parts, right?
SMF:
type: 0
ppqn: 96
tracks: 1
MTrk:
0: ff03 -- Sequence Name: GS Drum Part Change Test
0: ff02 -- Copyright: https://jazz-soft.net
0: ff01 -- Text: Changing the drum channel on GS-compatible synths.\n
0: f0 41 7f 42 12 40 00 7f 00 41 f7 (GS Reset)
0: f0 41 7f 42 12 40 11 15 02 18 f7 (GS Drum Part Change)
0: ff01 -- Text: If your synth supports GS you must hear drum playing on channel 0
0: 90 30 7f -- Note On
96: 80 30 40 -- Note Off
96: 90 34 7f -- Note On
192: 80 34 40 -- Note Off
192: 90 37 7f -- Note On
288: 80 37 40 -- Note Off
288: 90 3c 7f -- Note On
384: 80 3c 40 -- Note Off
576: f0 41 7f 42 12 40 10 15 00 1b f7 (GS Drum Part Change)
576: ff01 -- Text: If your synth supports GS you must hear piano playing on channel 9
576: 99 30 7f -- Note On
672: 89 30 40 -- Note Off
672: 99 34 7f -- Note On
768: 89 34 40 -- Note Off
768: 99 37 7f -- Note On
864: 89 37 40 -- Note Off
864: 99 3c 7f -- Note On
960: 89 3c 40 -- Note Off
1152: ff01 -- Text: Thank you!
1152: ff2f -- End of Track
[code] 0: f0 41 7f 42 12 40 00 7f 00 41 f7 (GS Reset)
// GS Custom Percussion Assignment
// F0 0A 41 (10) 42 12 [40 1A 15] [02] 0F F7
// [.. 1x ..] x = part# / (probably) ch# 1-9, 0, A-F
// [0y] y = type: 0 = standard, 1 = drum map 1, 2 = drum map 2
else if ((buffer_peek(global.edit_buffer, cur_pos, buffer_u8) == 0x41) &&
/*(buffer_peek(global.edit_buffer, cur_pos + 1, buffer_u8) == 0x10) &&*/
(buffer_peek(global.edit_buffer, cur_pos + 2, buffer_u8) == 0x42) &&
(buffer_peek(global.edit_buffer, cur_pos + 3, buffer_u8) == 0x12) &&
(buffer_peek(global.edit_buffer, cur_pos + 4, buffer_u8) == 0x40) &&
/*(buffer_peek(global.edit_buffer, cur_pos + 5, buffer_u8) == 0x00) &&*/
(buffer_peek(global.edit_buffer, cur_pos + 6, buffer_u8) == 0x15) &&
/*(buffer_peek(global.edit_buffer, cur_pos + 7, buffer_u8) == 0x00) &&*/
(buffer_peek(global.edit_buffer, cur_pos + 8, buffer_u8) == 0x0F) &&
(buffer_peek(global.edit_buffer, cur_pos + 9, buffer_u8) == 0xF7))
{
part_num = buffer_peek(global.edit_buffer, cur_pos + 5, buffer_u8);
part_num -= 0xF;
part_type = buffer_peek(global.edit_buffer, cur_pos + 7, buffer_u8);
global.custom_drums[part_num - 1] = part_type;
}
buffer_seek(global.edit_buffer, buffer_seek_relative, v_length);
break;
f0 41 7f 42 12 40 00 7f 00 41 f7 (GS Reset)
But why 7F instead of 10? All the specs I looked at showed 41 10 42 ...etc
Third byte is the device ID. 10 means for the device 10, 7f means for all devices.
Check the specs
The GS file called test-sysex-gs-40-1x-15-drum-part-change.mid
Another GS, drums on 10 and 11, type 1.
Yes, it would appear so. Somehow my editor is not picking that up, but that SYSEX is there in the file, and I just played the file and muted all other channels, and it is a drum. 808 Snare, in fact, as the channel is labeled as such.Another GS, drums on 10 and 11, type 1.
Channel 12 too?
F0 41 10 42 12 40 1B 15 02 0E F7