diff options
-rw-r--r-- | OPL-TODO | 1 | ||||
-rw-r--r-- | src/i_oplmusic.c | 16 |
2 files changed, 15 insertions, 2 deletions
@@ -15,7 +15,6 @@ Bad MIDIs: Other tasks: - * Menu volume control * Pause music * Add option to select MIDI type in setup tool diff --git a/src/i_oplmusic.c b/src/i_oplmusic.c index b8e93534..4ac52754 100644 --- a/src/i_oplmusic.c +++ b/src/i_oplmusic.c @@ -651,7 +651,8 @@ static void SetVoiceVolume(opl_voice_t *voice, unsigned int volume) // Multiply note volume and channel volume to get the actual volume. full_volume = (volume_mapping_table[voice->note_volume] - * volume_mapping_table[voice->channel->volume]) / 127; + * volume_mapping_table[voice->channel->volume] + * volume_mapping_table[current_music_volume]) / (127 * 127); // The volume of each instrument can be controlled via GENMIDI: @@ -769,8 +770,21 @@ static boolean I_OPL_InitMusic(void) static void I_OPL_SetMusicVolume(int volume) { + unsigned int i; + // Internal state variable. + current_music_volume = volume; + + // Update the volume of all voices. + + for (i=0; i<OPL_NUM_VOICES; ++i) + { + if (voices[i].channel != NULL) + { + SetVoiceVolume(&voices[i], voices[i].note_volume); + } + } } static void VoiceKeyOff(opl_voice_t *voice) |