diff jssplr.c @ 193:b778cc2fe7c8

Create a separate new frequency flag (vs. new pitch), for future changes.
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 06 Oct 2012 19:13:20 +0300
parents 06da4e365dc9
children c0aaf3106148
line wrap: on
line diff
--- a/jssplr.c	Sat Oct 06 19:11:49 2012 +0300
+++ b/jssplr.c	Sat Oct 06 19:13:20 2012 +0300
@@ -85,25 +85,19 @@
 }
 
 
-static void jmpCSetPitch(JSSPlayer *mp, int channel, int value)
+static void jmpCSetPitch(JSSPlayer *mp, JSSPlayerChannel *chn, int value)
 {
-    assert(mp != NULL);
-    assert(mp->device != NULL);
-
     if (value > 0)
     {
         if (JMPGETMODFLAGS(mp, jmdfAmigaPeriods))
         {
             // Frequency = 8363*1712 / Period
-//fprintf(stderr, "jmpCSetPitch::AMIGA(%d, %d)\n", channel, value);
-            jvmSetFreq(mp->device, channel, 14317456.0f / (double) value);
+            chn->cfreq = chn->freq = 14317456 / value;
         }
         else
         {
             // Frequency = Frequency = 8363*2^((6*12*16*4 - Period) / (12*16*4))
-//fprintf(stderr, "jmpCSetPitch::Linear(%d, %d)\n", channel, value);
-            jvmSetFreq(mp->device, channel,
-                8363.0f * pow(2.0f, (4608.0f - (double) value) / 768.0f));
+            chn->cfreq = chn->freq = 8363.0f * pow(2.0f, (4608.0f - (double) value) / 768.0f);
         }
     }
 }
@@ -813,7 +807,7 @@
                 tmp += paramY;
                 break;
         }
-        jmpCSetPitch(mp, channel, jmpGetPeriodFromNote(mp, tmp + tempInst->ERelNote, tempInst->EFineTune));
+        jmpCSetPitch(mp, chn, jmpGetPeriodFromNote(mp, tmp + tempInst->ERelNote, tempInst->EFineTune));
     }
 }
 
@@ -856,7 +850,7 @@
             {
                 chn->iLastPortaToNotePitch = chn->pitch;
                 chn->pitch = chn->oldPitch;
-                JMPUNSETNDFLAGS(cdfNewPitch | cdfPlay);
+                JMPUNSETNDFLAGS(cdfNewPitch);
             }
             break;
 
@@ -1481,7 +1475,10 @@
                 jvmPlay(mp->device, channel);
 
             if (flags & cdfNewPitch)
-                jmpCSetPitch(mp, channel, chn->pitch);
+                jmpCSetPitch(mp, chn, chn->pitch);
+                
+            if (flags & (cdfNewPitch | cdfNewFreq))
+                jvmSetFreq(mp->device, channel, chn->freq);
 
             if (flags & cdfNewPos)
                 jvmSetPos(mp->device, channel, chn->position);