I am implementing SYSEX reset replacement in my program.
I forgot what the generic/all devices ID is. I know 10 is the default for many things, but I imagine I should be using the generic/all ID, as my software is not device-specific.
Is it 7E?
To clarify, say I have a GM reset that I wish to convert to a GS reset.
F0 05 7E 7F 09 01 F7
to
F0 0A 41 (10) 42 12 40 00 7F 00 41 F7
(10) is the default device ID, but I want to use the generic/all ID in its place.
> Is it 7E? no, it's 7F.
(7F) instead of (10) should work.
> F0 0A 41 (10) 42 12 40 00 7F 00 41 F7
GS reset in your message is incorrect, it should be
f0 41 7f 42 12 40 00 7f 00 41 f7
It looks like the second byte in your messages is the message length.
This is how it is encoded in MIDI files, but in real MIDI messages you should remove it.
Double check the specs 😉
Your message is not an universal sysex message, it is a Roland exclusive message, because it starts with the Roland ID (41H). The device id should be between 0 and 1FH, and must match the device id configured on the device, as the documentation of some Roland devices states:
GS Reset is a command message that resets the internal settings of a device to the GS initial
state. This message appears at the beginning of GS music data, and a GS device that receives
this message will automatically be set to the proper state to correctly play back GS music
data.
Status Data byte Status
F0H 41H, dev, 42H, 12H, 40H, 00H, 7FH, 00H, 41H F7H
Byte Explanation
F0H Exclusive status
41H ID number (Roland)
dev Device ID (dev: 00H – 1FH (1 – 32), Initial value is 10H (17))
42H Model ID (GS)
12H Command ID (DT1)
40H Address MSB
00H Address
7FH Address LSB
00H Data (GS reset)
41H Checksum
F7H EOX (End Of Exclusive)
* When this message is received, Rx.NRPN will be ON.
* There must be an interval of at least 50 ms between this message and the next.
Be aware that the "Device ID" concept is not portable across manufacturers.
Everything inside of a system exclusive message after the Manufacturer ID is specified by the manufacturer. A manufacturer's messages might not use a Device ID at all. If a Device ID is used, it might not be the same Device ID format found in another manufacturer's messages or in Universal System Exclusive messages.
For Universal System Exclusive messages (Manufacturer ID hex 7E or 7F), a Device ID of hex 7F indicates all devices should respond.
For Roland system exclusive messages (Manufacturer ID hex 41), my understanding is there is no Device ID that indicates all devices should respond. I believe Roland recommends using Device ID hex 10 in GS messages in MIDI files, because that is the default Device ID on most Roland devices.
As far as I can tell, there are no publicly available Roland GS specification documents, we can only look in manuals for Roland GS devices for information about Roland GS messages. The manuals I've seen (SC-55, SC-88 Pro, SC-8850) show Roland GS messages use Device IDs of hex 00 to 1F, with a default of hex 10.
I thought I remembered reading a Roland support page about GS Resets that specifically recommended using Device ID hex 10, but I can't find it again, so maybe I misremembered that. The closest thing I can find right now is a page "Sending a GS Reset" that shows a GS Reset message with Device ID hex 10, but doesn't go into any detail about what the bytes of the message mean.
Previous posts:
Re: Do MIDI files store GM/GS/XG indicator info? Do banks have common bank #s?
Re: Example MIDIs with XG/GS drums?
Sema, I am working solely with MIDI files, so the message length needs to be there.
So I should just use 10 then for GS resets?
What about XG resets?
F0 08 43 (10) 4C 00 00 7E 00 F7
Should I just leave that as 10 as well?
And for GM2?
F0 05 7E 7F 09 03 F7
Up to now, I only have read them in and ignored the device IDs because they were not relevant to what I was doing, but now I need to replace (and eventually insert) GM2, GS, and XG resets.
I've tested GS with 7F with Microsoft GS Wavetable Synth and with the Roland keyboard I have and it works.
XG is still a mystery to me because 10 means device 0 and I don't know if device ID 0 stands for ALL devices or only one device with id=0.
I could not find an answer in the specs I've seen.
I'm also aware that doing this SYSEX replacement will not always produce the desired results. I tried it earlier this year before scrapping the idea, but now I need to have it work, at least sometimes. Most problematic are any files that contain manufacturer-specific SYSEX messages besides just the reset. My failed attempt earlier was converting an XG file to a GS file, which I later found out that the file in question has hundreds of Yamaha-specific SYSEX messages. But for simpler files that either contain no reset at all, or just a single GM, GS, or XG reset, I should be able to replace the reset and then have access to the bank select instrumentation for the new reset.
For example, I am working on converting a bunch of SNES music in to MIDI files using someone else's app. It adds a GM reset to the files it creates, but I need to use GS instruments in the final file so I can have a better-sounding end product, so I am adding this functionality in to my instrument changer.
[quotePost id=12634]I've tested GS with 7F with Microsoft GS Wavetable Synth [...] and it works.[/quotePost] I previously discovered the Microsoft GS Wavetable Synth ignores the Device ID. Because the Microsoft GS Wavetable Synth is the only thing that can ever be listening to its port, it seems okay for it to ignore the Device ID.
However, when you are making a MIDI file, you never know if someone will play it back on an external Roland GS device. I think it's a good idea to use Device ID hex 10 in GS messages to maximize the chance it will match the default Device ID of an external device.
[quotePost id=12634]I've tested GS with 7F [...] with the Roland keyboard I have and it works.[/quotePost] Interesting! What model is your Roland keyboard? I want to see what its manual says.
I don't have any external Roland devices myself, so I've looked at Roland device manuals to predict how Roland GS devices will respond. I think it's a good idea to use Device ID hex 10 in GS messages to maximize the chance it will match the default Device ID of an external device. But now I wonder how likely it is that Roland GS devices will respond to Device ID hex 7F also.
[quotePost id=12634]XG is still a mystery to me because 10 means device 0 and I don't know if device ID 0 stands for ALL devices or only one device with id=0. I could not find an answer in the specs I've seen.[/quotePost] Yamaha XG Specifications documents can be found online. In the specs, the Device Number isn't described in detail, only listed as hex digit n in various messages:
F0 43 0n 4C ... F7: Bulk Dump
F0 43 1n 4C ... F7: Parameter Change (including XG System On)
F0 43 2n 4C ... F7: Dump Request
F0 43 3n 4C ... F7: Parameter Request
So I guess it's more precise to say a Yamaha XG Device Number is a single hex digit from 0 to F -- the other part of that byte helps indicate the message type.
In a previous post, I looked in the manual for the Yamaha MU80, the first device to use Yamaha XG. It has a panel setting for the Device Number that displays it as 1 to 16, or "all" to indicate it ignores the Device Number in incoming messages. The manual doesn't specifically mention how the Device Number displayed on the panel maps to hex bytes in the incoming messages, but I assume the displayed numbers 1 to 16 match System Exclusive hex digits 0 to F.
The manual says you should use the setting "all" if you have one MU80, or set specific Device Numbers if you use multiple MU80s. It doesn't specifically say what the default setting is, but perhaps the default is "all" so the MU80 ignores the Device Number by default. If so, then perhaps all or most Yamaha XG devices ignore the Device Number in XG messages by default?
My SC-8820 receives this SysEx only with the correct device ID (10h); it does not work with 7Eh or 7Fh.
(The manual says that 7Fh = broadcast works for GS Reset, but it is wrong. None of the other SoundCanvas manuals have this mistake.)