# HG changeset patch # User Matti Hamalainen # Date 1349540000 -10800 # Node ID b778cc2fe7c852dc78d348f27c409e7af6696f8e # Parent 2a3b00915bebe14f0b3ea418d984de1c59010838 Create a separate new frequency flag (vs. new pitch), for future changes. diff -r 2a3b00915beb -r b778cc2fe7c8 jssplr.c --- 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); diff -r 2a3b00915beb -r b778cc2fe7c8 jssplr.h --- 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