shithub: choc

Download patch

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)