summaryrefslogtreecommitdiff
path: root/src/music/midifile.cpp
diff options
context:
space:
mode:
authorNiels Martin Hansen <nielsm@indvikleren.dk>2019-07-04 21:14:41 +0200
committerNiels Martin Hansen <nielsm@indvikleren.dk>2019-07-04 22:27:34 +0200
commit27384486e486ea2ced69b48f5174577317108731 (patch)
tree99a63f13ce4450bded86b245e9518faacbdfd222 /src/music/midifile.cpp
parent9d8a83bf8d6f1753ea7dc99faa94695c050d818c (diff)
downloadopenttd-27384486e486ea2ced69b48f5174577317108731.tar.xz
Codechange: Use common source for well-known SysEx messages in Windows music drivers
Diffstat (limited to 'src/music/midifile.cpp')
-rw-r--r--src/music/midifile.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/music/midifile.cpp b/src/music/midifile.cpp
index 0259181b3..33d09c80b 100644
--- a/src/music/midifile.cpp
+++ b/src/music/midifile.cpp
@@ -27,6 +27,37 @@
static MidiFile *_midifile_instance = nullptr;
/**
+ * Retrieve a well-known MIDI system exclusive message.
+ * @param msg Which sysex message to retrieve
+ * @param[out] length Receives the length of the returned buffer
+ * @return Pointer to byte buffer with sysex message
+ */
+const byte *MidiGetStandardSysexMessage(MidiSysexMessage msg, size_t &length)
+{
+ static byte reset_gm_sysex[] = { 0xF0, 0x7E, 0x00, 0x09, 0x01, 0xF7 };
+ static byte reset_gs_sysex[] = { 0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x00, 0x41, 0xF7 };
+ static byte reset_xg_sysex[] = { 0xF0, 0x43, 0x10, 0x4C, 0x00, 0x00, 0x7E, 0x00, 0xF7 };
+ static byte roland_reverb_sysex[] = { 0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x01, 0x30, 0x02, 0x04, 0x00, 0x40, 0x40, 0x00, 0x00, 0x09, 0xF7 };
+
+ switch (msg) {
+ case MidiSysexMessage::ResetGM:
+ length = lengthof(reset_gm_sysex);
+ return reset_gm_sysex;
+ case MidiSysexMessage::ResetGS:
+ length = lengthof(reset_gs_sysex);
+ return reset_gs_sysex;
+ case MidiSysexMessage::ResetXG:
+ length = lengthof(reset_xg_sysex);
+ return reset_xg_sysex;
+ case MidiSysexMessage::RolandSetReverb:
+ length = lengthof(roland_reverb_sysex);
+ return roland_reverb_sysex;
+ default:
+ NOT_REACHED();
+ }
+}
+
+/**
* Owning byte buffer readable as a stream.
* RAII-compliant to make teardown in error situations easier.
*/