aboutsummaryrefslogtreecommitdiff
path: root/sky/music/gmmusic.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sky/music/gmmusic.cpp')
-rw-r--r--sky/music/gmmusic.cpp10
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.