diff options
-rw-r--r-- | sky/music/mt32music.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/sky/music/mt32music.cpp b/sky/music/mt32music.cpp index d5bf335422..81637f4754 100644 --- a/sky/music/mt32music.cpp +++ b/sky/music/mt32music.cpp @@ -62,12 +62,14 @@ void SkyMT32Music::timerCall(void) { } void SkyMT32Music::setVolume(uint8 volume) { - - uint8 sysEx[6]; + uint8 sysEx[10] = "\x41\x10\x16\x12\x10\x00\x16\x00\x00"; _musicVolume = volume; - sysEx[0] = 0x7F; sysEx[1] = 0x7F; sysEx[2] = 0x04; sysEx[3] = 0x01; - sysEx[4] = 0; sysEx[5] = volume & 0x7F; - _midiDrv->sysEx(sysEx, 6); + sysEx[7] = (volume > 100) ? 100 : volume; + sysEx[8] = 0x00; + for (uint8 cnt = 4; cnt < 8; cnt++) + sysEx[8] -= sysEx[cnt]; + sysEx[8] &= 0x7F; + _midiDrv->sysEx(sysEx, 9); } void SkyMT32Music::setupPointers(void) { |