shithub: choc

Download patch

ref: dd03cbbe2b688eac26011ac0ea0ada4047e5beb0
parent: 13314576f8d5d8eec8bf413ca4b49255b9e1a6a2
author: Simon Howard <fraggle@gmail.com>
date: Sun Sep 20 16:47:17 EDT 2009

Use the base note offset field to offset notes, not a fixed lookup table
of instruments to offset.

Subversion-branch: /branches/opl-branch
Subversion-revision: 1680

--- a/src/i_oplmusic.c
+++ b/src/i_oplmusic.c
@@ -34,6 +34,7 @@
 #include "mus2mid.h"
 
 #include "deh_main.h"
+#include "i_swap.h"
 #include "m_misc.h"
 #include "s_sound.h"
 #include "w_wad.h"
@@ -304,31 +305,6 @@
     124, 124, 125, 125, 126, 126, 127, 127
 };
 
-// For octave offset table:
-
-static const unsigned int octave_offset_table[2][128] = {
-    {
-        0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0,     // 0-15
-        0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,     // 16-31
-        0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,     // 32-47
-        0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,     // 48-63
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,     // 64-79
-        0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0,     // 80-95
-        0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,     // 96-111
-        1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1,     // 112-127
-    },
-    {
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,     // 0-15
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,     // 16-31
-        0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,     // 32-47
-        0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,     // 48-63
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,     // 64-79
-        0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,     // 80-95
-        0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,     // 96-111
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,     // 112-127
-    }
-};
-
 static boolean music_initialised = false;
 
 //static boolean musicpaused = false;
@@ -945,26 +921,18 @@
 
 static unsigned int FrequencyForVoice(opl_voice_t *voice)
 {
+    genmidi_voice_t *gm_voice;
     unsigned int freq_index;
     unsigned int octave;
     unsigned int sub_index;
-    unsigned int instr_num;
     unsigned int note;
 
     note = voice->note;
 
-    // What instrument number is this?
-    // Certain instruments have all notes offset down by one octave.
-    // Use the octave offset table to work out if this voice should
-    // be offset.
+    // Apply note offset:
 
-    instr_num = voice->current_instr - main_instrs;
-
-    if (instr_num < 128 && note >= 12
-     && octave_offset_table[voice->current_instr_voice][instr_num])
-    {
-        note -= 12;
-    }
+    gm_voice = &voice->current_instr->voices[voice->current_instr_voice];
+    note += (signed short) SHORT(gm_voice->base_note_offset);
 
     freq_index = 64 + 32 * note + voice->channel->bend;