diff options
Diffstat (limited to 'sky/music/gmmusic.cpp')
-rw-r--r-- | sky/music/gmmusic.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/sky/music/gmmusic.cpp b/sky/music/gmmusic.cpp index 92ea1e4954..78bf349a04 100644 --- a/sky/music/gmmusic.cpp +++ b/sky/music/gmmusic.cpp @@ -47,6 +47,16 @@ SkyGmMusic::~SkyGmMusic(void) { delete _midiDrv; } +void SkyGmMusic::setVolume(uint8 volume) { + + uint8 sysEx[6]; + _musicVolume = volume; + if (volume > 0) volume = (volume * 2) / 3 + 43; // GM synths behave kinda logarithmic + sysEx[0] = 0x7F; sysEx[1] = 0x7F; sysEx[2] = 0x04; sysEx[3] = 0x01; + sysEx[4] = 0; sysEx[5] = volume & 0x7F; + _midiDrv->sysEx(sysEx, 6); +} + void SkyGmMusic::timerCall(void) { // midi driver polls hundred times per sec. We only want 50 times. |