From 3bda521d6201eca2706070491b2906b04b6936cf Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sat, 2 Aug 2025 12:04:40 +0200 Subject: [PATCH] - fixed master volume - added osc jitter to blep waveform saw, square and tri --- Source/PluginProcessor.cpp | 14 +++++++++++++ Source/synth/blit.c | 40 ++++++++++++++++++++++++++++++-------- Source/synth/blit.h | 9 ++++++--- 3 files changed, 52 insertions(+), 11 deletions(-) diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index a971e81..03c36f6 100644 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -610,10 +610,24 @@ void JaySynthAudioProcessor::processBlock (AudioSampleBuffer& buffer, MidiBuffer } for (i=0; i misc_process_downsammple_counter) + { + pObj->misc_process_downsammple_counter--; + return; + } + + pObj->misc_process_downsammple_counter = BLIT_MISC_PROCESS_DOWN_SAMPLE; + + const synth_float_t alpha = BLIT_JITTER_ERROR*BLIT_MISC_PROCESS_DOWN_SAMPLE; + synth_float_t pm = Noise_Uniform(&pObj->pCom->noise, 1, 0); + + if (pm > 0) + { + pObj->jitter += alpha; + } + else + { + pObj->jitter -= alpha; + } + +} + void BLIT_freq_update(blit_t *pObj, synth_float_t scale) { synth_float_t p; @@ -99,7 +123,7 @@ void BLIT_freq_update(blit_t *pObj, synth_float_t scale) pObj->freq_update_req = 0; // p = pObj->fs/(pObj->f*scale*pObj->fm); - p = pObj->fs/(scale*pObj->fm); + p = pObj->fs/(scale * pObj->fm * (1 + pObj->jitter)); pObj->dx = (synth_float_t)1.0/p; pObj->m = umin(BLIT_NUM_HARM_MAX-1, (UINT32)((synth_float_t)SYNTH_BANDWIDTH*2.0*(int)((p/2)) + 0)); @@ -259,7 +283,8 @@ void BLIT_Reset(blit_t *pObj, synth_float_t phase) pObj->fm = 1; pObj->pwm = 0; pObj->pulse_offset = 0; // ToDo: Adjust according to phase - pObj->pm_filtered = 0; + pObj->jitter = 0; + pObj->misc_process_downsammple_counter = BLIT_MISC_PROCESS_DOWN_SAMPLE; } void BLIT_Start(blit_t *pObj) @@ -284,13 +309,10 @@ void BLIT_Process_SAW_Vector(blit_t *pObj, synth_float_t *pPitch, synth_float_t if (pSyncOut) memset(pSyncOut, 0, len*sizeof(synth_float_t)); - synth_float_t alpha = 0.001; - synth_float_t pm = Noise_Gaussian(&pObj->pCom->noise, 0.01, 0); - pObj->pm_filtered = pObj->pm_filtered*(1.0 - alpha) + pm*alpha; - // Create output for (i=0; i< len; i++) { + BLIT_process_misc(pObj); if (pObj->freq_update_req) { BLIT_freq_update(pObj, pPitch[i]); @@ -303,7 +325,7 @@ void BLIT_Process_SAW_Vector(blit_t *pObj, synth_float_t *pPitch, synth_float_t { pObj->fm = (synth_float_t)pow((synth_float_t)2, pCV_fm[i]); } - BLIT_freq_update(pObj, pPitch[i] * (1+pObj->pm_filtered)); + BLIT_freq_update(pObj, pPitch[i]); } m = pObj->m; @@ -334,6 +356,7 @@ void BLIT_Process_SQR_Vector(blit_t *pObj, synth_float_t *pPitch, synth_float_t // Create output for (i=0; i< len; i++) { + BLIT_process_misc(pObj); if (pObj->freq_update_req) { BLIT_freq_update(pObj, pPitch[i]); @@ -403,6 +426,7 @@ void BLIT_Process_TRI_Vector(blit_t *pObj, synth_float_t *pPitch, synth_float_t for (i=0; i< len; i++) { + BLIT_process_misc(pObj); if (pObj->freq_update_req) { BLIT_freq_update(pObj, pPitch[i]); diff --git a/Source/synth/blit.h b/Source/synth/blit.h index 807eb59..1263b88 100644 --- a/Source/synth/blit.h +++ b/Source/synth/blit.h @@ -6,7 +6,10 @@ #include "synth_defs.h" #include "noise.h" #include "synth_types.h" - + +#define BLIT_MISC_PROCESS_DOWN_SAMPLE 2 +#define BLIT_JITTER_ERROR 0.0000001 + // -------------------------------------------------------------- // Types // -------------------------------------------------------------- @@ -30,8 +33,8 @@ typedef struct _sblit_t synth_float_t tri_x, tri_sum; UINT32 m, tri_pol, sqr_pol1, sqr_pol2; UINT32 freq_update_req, bufsize; - synth_float_t pm_filtered; - + synth_float_t jitter; + UINT32 misc_process_downsammple_counter; } blit_t; // --------------------------------------------------------------