diff options
-rw-r--r-- | engines/groovie/music.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/engines/groovie/music.cpp b/engines/groovie/music.cpp index a92beee17e..0566b611d5 100644 --- a/engines/groovie/music.cpp +++ b/engines/groovie/music.cpp @@ -557,7 +557,14 @@ void MusicPlayerXMI::setTimbreAD(byte channel, const Timbre &timbre) { } // Prepare the AdLib Instrument array from the GTL entry - byte data[13]; + // + // struct AdlibInstrument used by our AdLib MIDI synth is 30 bytes, + // since we pass data + 2 for non precussion instruments we need to + // have a buffer of size 32, so there are no invalid memory reads, + // when setting up an AdLib instrument. + byte data[32]; + memset(data, 0, sizeof(data)); + data[2] = timbre.data[1]; // mod_characteristic data[3] = timbre.data[2] ^ 0x3F; // mod_scalingOutputLevel data[4] = ~timbre.data[3]; // mod_attackDecay |