shithub: choc

Download patch

ref: f6ce7dfea99cf32beb2afc8e7b02fb5f19f7544f
parent: f2f36117c889c19b643058a0af33070baf4b48be
author: Simon Howard <fraggle@gmail.com>
date: Sat Aug 29 21:56:33 EDT 2009

Make some noise.

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

--- a/src/i_oplmusic.c
+++ b/src/i_oplmusic.c
@@ -42,6 +42,8 @@
 #include "opl.h"
 #include "midifile.h"
 
+#define TEST
+
 #define MAXMIDLENGTH (96 * 1024)
 #define GENMIDI_NUM_INSTRS  128
 
@@ -405,6 +407,30 @@
     }
 }
 
+#ifdef TEST
+static void TestCallback(void *arg)
+{
+    opl_voice_t *voice = arg;
+    int note;
+    int wait_time;
+
+    // Set level:
+    WriteRegister(OPL_REGS_LEVEL + voice->op2, 0);
+
+    // Note off:
+
+    WriteRegister(OPL_REGS_FREQ_2 + voice->index, 0x00);
+    // Note on:
+
+    note = (rand() % (0x2ae - 0x16b)) + 0x16b;
+    WriteRegister(OPL_REGS_FREQ_1 + voice->index, note & 0xff);
+    WriteRegister(OPL_REGS_FREQ_2 + voice->index, 0x30 + (note >> 8));
+
+    wait_time = (rand() % 700) + 50;
+    OPL_SetCallback(wait_time, TestCallback, arg);
+}
+#endif
+
 // Initialise music subsystem
 
 static boolean I_OPL_InitMusic(void)
@@ -443,17 +469,19 @@
 
 #ifdef TEST
     {
+        int i;
         opl_voice_t *voice;
+        int instr_num;
 
-        voice = GetFreeVoice();
-        SetVoiceInstrument(voice, &main_instrs[34].opl2_voice);
+        for (i=0; i<3; ++i)
+        {
+            voice = GetFreeVoice();
+            instr_num = rand() % 100;
 
-        // Set level:
-        WriteRegister(OPL_REGS_LEVEL + voice->op2, 0x94);
+            SetVoiceInstrument(voice, &main_instrs[instr_num].opl2_voice);
 
-        // Note on:
-        WriteRegister(OPL_REGS_FREQ_1 + voice->index, 0x65);
-        WriteRegister(OPL_REGS_FREQ_2 + voice->index, 0x2b);
+            OPL_SetCallback(0, TestCallback, voice);
+        }
     }
 #endif