ref: 4b598f3d40e34b5d786c9236f891fbe2337c1b66
parent: fcf4a7241a742e7f3d8189c40ad852d48c674612
author: Simon Howard <[email protected]>
date: Sun Sep 20 17:25:59 EDT 2009
Implement volume control. Subversion-branch: /branches/opl-branch Subversion-revision: 1685
--- a/OPL-TODO
+++ b/OPL-TODO
@@ -15,7 +15,6 @@
Other tasks:
- * Menu volume control
* Pause music
* Add option to select MIDI type in setup tool
--- a/src/i_oplmusic.c
+++ b/src/i_oplmusic.c
@@ -651,7 +651,8 @@
// 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 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)