changeset 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 2a3b00915beb
children c0aaf3106148
files jssplr.c jssplr.h
diffstat 2 files changed, 20 insertions(+), 21 deletions(-) [+]
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);
--- a/jssplr.h	Sat Oct 06 19:11:49 2012 +0300
+++ b/jssplr.h	Sat Oct 06 19:13:20 2012 +0300
@@ -20,15 +20,16 @@
 
 
 // Channel New-Data flags
-#define cdfNONE             (0x00)    // Set nothing
-#define cdfNewInstr         (0x01)    // Set a new instrument
-#define cdfNewPitch         (0x02)    // Set a new pitch
-#define cdfNewPos           (0x04)    // Set a new position
-#define cdfNewVolume        (0x08)    // Set a new volume
-#define cdfNewPanPos        (0x10)    // Set a new panning position
-#define cdfNewGlobalVol     (0x20)    // Set a new global volume
-#define cdfPlay             (0x40)    // Start or restart playing sample
-#define cdfStop             (0x80)    // Stop channel playing
+#define cdfNONE             (0x000)    // Set nothing
+#define cdfNewInstr         (0x001)    // Set a new instrument
+#define cdfNewPitch         (0x002)    // Set a new pitch
+#define cdfNewPos           (0x004)    // Set a new position
+#define cdfNewVolume        (0x008)    // Set a new volume
+#define cdfNewPanPos        (0x010)    // Set a new panning position
+#define cdfNewGlobalVol     (0x020)    // Set a new global volume
+#define cdfNewFreq          (0x040)    // New frequency
+#define cdfPlay             (0x100)    // Start or restart playing sample
+#define cdfStop             (0x200)    // Stop channel playing
 
 
 // Player envelope data
@@ -60,6 +61,7 @@
             nextInstrument,
             note,                 // Current note
             pitch,                // Pitch (NOT actual frequency!)
+            freq, cfreq,
             oldPitch,
             position,             // Sample position
             volume,               // Volume