changeset 15:e5603b03732b

Some more work.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 15 Mar 2013 18:18:30 +0200
parents 2663b7bb23b9
children e846eda89058
files 3x666.c config.h
diffstat 2 files changed, 22 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/3x666.c	Fri Mar 15 17:57:09 2013 +0200
+++ b/3x666.c	Fri Mar 15 18:18:30 2013 +0200
@@ -29,6 +29,7 @@
 
     BOOL exitFlag;
 
+    Sint16 *mixBuf;
     int optVFlags;
     SDL_Surface *screen;
     SDL_Event event;
@@ -424,7 +425,7 @@
     22, 17, 17, 22
 };
 
-signed int *drum0, *drum1;
+int *drum0, *drum1;
 
 
 /* sampling sucks! */
@@ -441,20 +442,13 @@
 
     for (i = drumlgt; i; i--)
     {
-        int u;
-
         o = (o >> 1) + (rand() % vol) - (rand() % vol);
         oo = (oo * 2 + ((rand() % vol) - (rand() % vol))) / 3;
 
         o *= sin(a);
         oo *= sin(a);
 
-        u = o * 2;
-        if (u < -65535)
-            u = -65535;
-        if (u > 65535)
-            u = 65535;
-        *d++ = (vol * sin((a / 2) + ((float) u) / 80000));
+        *d++ = (vol * sin((a / 2) + ((float) dmClamp(o * 2, -65535, 65535)) / 80000));
         *e++ = (vol * sin(a + ((float) oo) / 60000));
 
         a += da;
@@ -464,21 +458,15 @@
 }
 
 
-static void engineAudioCallback(void *userdata, Uint8 *stream, int len)
+static int engineRenderAudio(Sint16 *stream)
 {
-#if 0
-    (void) userdata;
     static int rowno = 0;
     static signed int delta = -5;
     static char ismelody = 0, silend = 0;
-
-    int rowlgt = engine.tickLen * SET_ROWTIX, i;
-    int *d = mxbuf, note;
+    int i, rowlgt = engine.tickLen * SET_ROWTIX;
+    Sint16 *d = stream, note;
 
     /* BASS (sawtooth ofcoz) */
-
-    *d++ = rowlgt;
-
     note = basstrak[(rowno >> 1) & 31];
 
     if (!note)
@@ -497,7 +485,7 @@
         dps = ((noterate[note] << 10) / SET_AUDIO_FREQ);
         for (i = rowlgt; i; i--)
         {
-            *d++ = ps;
+            *d++ = dmClamp(ps, -32767, 32767);
             ps = (ps + dps) & 32767;
         }
     }
@@ -513,7 +501,7 @@
     {
         if (ismelody)
         {
-            d = mxbuf + 1;
+            d = (Sint16 *) stream;
             if (rowno & 1)
                 note = 0;
             else
@@ -525,7 +513,7 @@
                 dps = ((noterate[note] << 12) / engine.optAfmt.freq);
                 for (i = rowlgt; i; i--)
                 {
-                    *d++ += ps;
+                    *d++ = dmClamp(ps, -32767, 32767);
                     ps = (ps + dps) & 32767;
                 }
             }
@@ -534,7 +522,7 @@
         /* DRUMS (rave on!!!) */
         {
             int *s = drum1;
-            d = mxbuf + 1;
+            d = (Sint16 *) stream;
             if (rowno & 4)
                 s = drum0;
             s += (rowno & 3) * rowlgt;
@@ -571,9 +559,16 @@
         }
     }
 
-//    if (engine.dev != NULL)
-//        jvmRenderAudio(engine.dev, stream, len / jvmGetSampleSize(engine.dev));
-#endif
+    return rowlgt;
+}
+
+
+
+static void engineAudioCallback(void *userdata, Uint8 *stream, int len)
+{
+    (void) userdata;
+    int slen = len / sizeof(Sint16);
+    
 }
 
 
@@ -910,6 +905,7 @@
     initSDL = TRUE;
 
     // Initialize audio parts
+    engine.mixBuf = malloc((1 + SET_MAXROWLGT) * sizeof(Sint16));
     engine.optAfmt.freq     = SET_AUDIO_FREQ;
     engine.optAfmt.format   = AUDIO_S16SYS;
     engine.optAfmt.channels = SET_AUDIO_CHN;
--- a/config.h	Fri Mar 15 17:57:09 2013 +0200
+++ b/config.h	Fri Mar 15 18:18:30 2013 +0200
@@ -16,4 +16,4 @@
 
 // Maybe these shouldn't be here
 #define SET_ROWTIX     6
-#define SET_MAXROWLGT  (TIKLGT * SET_ROWTIX)
+#define SET_MAXROWLGT  (engine.tickLen * SET_ROWTIX)