diff --git a/Source/synth/blit.c b/Source/synth/blit.c index 4a61c3b..43fcf83 100644 --- a/Source/synth/blit.c +++ b/Source/synth/blit.c @@ -6,9 +6,11 @@ #include #include +#include "noise.h" #include "synth_defs.h" #include "blit.h" -#include +#include "fir/fir2.h" +#include "synth_types.h" #include "vector_utils.h" // -------------------------------------------------------------- @@ -197,6 +199,7 @@ void BLIT_ModFree(blit_common_t *pCom) void BLIT_Init(blit_t *pObj, blit_common_t *pCom, synth_float_t fs) { pObj->pCom = pCom; + Noise_Init(&pCom->noise, 0x31101970); pObj->fs = fs; pObj->dutycycle = 0.5; @@ -256,6 +259,7 @@ 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; } void BLIT_Start(blit_t *pObj) @@ -280,6 +284,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++) { @@ -295,7 +303,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]); + BLIT_freq_update(pObj, pPitch[i] * (1+pObj->pm_filtered)); } m = pObj->m; diff --git a/Source/synth/blit.h b/Source/synth/blit.h index e2b59f3..807eb59 100644 --- a/Source/synth/blit.h +++ b/Source/synth/blit.h @@ -4,6 +4,8 @@ #define _BLIT_H_ #include "synth_defs.h" +#include "noise.h" +#include "synth_types.h" // -------------------------------------------------------------- // Types @@ -14,6 +16,7 @@ typedef struct _sblit_common_t synth_float_t **ppBLEP; synth_float_t N_K[(BLIT_INTEROLATION_ORDER+0)*(BLIT_INTEROLATION_ORDER+1)]; synth_float_t K[(BLIT_INTEROLATION_ORDER+0)*(BLIT_INTEROLATION_ORDER+1)]; + noise_gen_t noise; } blit_common_t; @@ -27,6 +30,7 @@ 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; } blit_t;