fbpx


The MIDI Forum

  Friday, 05 November 2021
  19 Replies
  10.3K Visits
22
Votes
Undo
  Subscribe
Hello, I am developing some open-source MIDI software.

I have been trying to find some MIDIs with XG/GS drum use, so I can proper test the software works.
Specifically these types:

Type 1 MIDI with XG drums in tracks where there also is melodic notes.
Type 0 and 1 GS MIDI with drums on channel that is not 10, especially where there also is melodic notes in same track.

Does anyone have such MIDIs laying around or link to such? Would be appreciated.

Regards
- Nikolai
2 years ago
·
#11820
Accepted Answer
3
Votes
Undo
Here are two XG files. One has drums on Ch 10 and 11, type 1. The other has drums on 9, 10, and 11, type 0.
2 years ago
·
#11803
0
Votes
Undo
And one question more:

What does 'sum' mean in the specification below:


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
2 years ago
·
#11804
1
Votes
Undo
With SysEX mesages for GS devices the penultimate byte is a checksum as detailed in several of the GS device specifications.
(See the manual for the SC-8850, where I found it in the past.)

JohnG.
2 years ago
·
#11808
1
Votes
Undo
The GS file called test-sysex-gs-40-1x-15-drum-part-change.mid is available at https://github.com/jazz-soft/test-midi-files
An XG example at http://midkar.com/MidiStudio/ERock/Spice_Girls_Wannabe_XG.mid uses drums on channels 9, 10, 11 via "Bank select" and "Program Change" messages.
1
Votes
Undo
What does 'sum' mean in the specification below:

You can have a look at my tutorial to understand how the checksum works.
2 years ago
·
#11810
0
Votes
Undo
Thank you for all the answers and the samples. :)

One more thing I am confused about is if GS can convert a channel to drums in the middle of the song? or if it always applies to whole song. The message was called non-realtime in the spec, which leads me to believe its only for whole song, but I don't know..
2 years ago
·
#11811
0
Votes
Undo
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?
2 years ago
·
#11814
0
Votes
Undo

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?


Changing drum parts is legal, but that makes the MIDI file incompatible with non-GS synths.


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
2 years ago
·
#11815
0
Votes
Undo
[code] 0: 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
2 years ago
·
#11816
1
Votes
Undo
Third byte is the device ID. 10 means for the device 10, 7f means for all devices.
Check the specs :)
2 years ago
·
#11817
0
Votes
Undo
Ah, cool. Didn't know that, thanks.
2 years ago
·
#11820
Accepted Answer
3
Votes
Undo
Here are two XG files. One has drums on Ch 10 and 11, type 1. The other has drums on 9, 10, and 11, type 0.
2 years ago
·
#11821
1
Votes
Undo
Here's a GS file with drums on 10 and 11, type 0.
2 years ago
·
#11822
1
Votes
Undo
Another GS, drums on 10 and 11, type 1.
2 years ago
·
#11825
1
Votes
Undo
FYI, here is my code from my instrument changer to check for GS percussion assignment on a non-standard channel:


// 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;


I read the F0 to trigger a SYSEX scan (all values in HEX). If the next byte is 0A then check for 41 (skip device ID) 42 12 40 (skip part number) 15 (skip type) 0F F7. If those all match, I then go back and read the part number and type.

XG is easier to determine percussion channels, as the MSB for a channel will either be set to 126 or 127.

GM can also have percussion set with MSB 120.
2 years ago
·
#11826
1
Votes
Undo
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 :)

Only System Exclusive messages with Manufacturer IDs of 7E and 7F have their contents specified by the MIDI specs available on the midi.org website. In these messages, a Device ID of hex 7F represents "all devices".

System Exclusive messages with any other Manufacturer ID have their contents specified by the manufacturer that is assigned to that Manufacturer ID. My understanding is the Device ID in Roland System Exclusive messages is a value from hex 00 to hex 1F, and Roland products typically have a default device ID of hex 10. You can see information about the GS Reset message in manuals for Roland products that use GS, such as the Roland SC-8850 manual, which describes the GS Reset message on the bottom of page 230.
2 years ago
·
#11829
0
Votes
Undo
The GS file called test-sysex-gs-40-1x-15-drum-part-change.mid


Sorry to keep asking about this file, but I am unsure I interpreted it correct.
Is this correct: ?

Change the first track to drums.
Change the second track to grand piano even though its on 10th channel.
2 years ago
·
#11832
1
Votes
Undo
Yes, that is correct.

It is NOT a 'rule' that drums should be on Ch 10 (midi data 09), merely a convention. This .mid file will be demonstrating that drums could happily be on Ch 0, and piano on Ch 10.

Geoff
Nikolai selected the reply #11820 as the answer for this post — 2 years ago
1 year ago
·
#14810
0
Votes
Undo
Another GS, drums on 10 and 11, type 1.

Channel 12 too?
F0 41 10 42 12 40 1B 15 02 0E F7
1 year ago
·
#14813
0
Votes
Undo
Another GS, drums on 10 and 11, type 1.

Channel 12 too?
F0 41 10 42 12 40 1B 15 02 0E F7
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.

I just had a look through my code, and I was always checking for a checksum of 0F, but in this case it's 0E so I missed it. I just removed the checksum from my SYSEX detection, and now can see the correct drums on 12.
  • Page :
  • 1
There are no replies made for this post yet.