- wired all LFO types to Sync_phase_update

- refactored waveform names

git-svn-id: http://moon:8086/svn/software/trunk/projects/JaySynth@721 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2020-08-11 16:36:00 +00:00
parent 6b11f1dd1a
commit 4c6f9859bd
2 changed files with 152 additions and 89 deletions
+145 -83
View File
@@ -96,6 +96,8 @@ void Sync_init(sync_t *pObj)
pObj->klead = 1.0; pObj->klead = 1.0;
pObj->klag = 0.04/200; pObj->klag = 0.04/200;
pObj->phase_update = 0; pObj->phase_update = 0;
pObj->freq_update = 0;
} }
void Sync_set_callback(sync_t *pObj, void *pFuncObj, SyncOnProcess funcSyncOnProcess, SyncOnGetPhase funcSyncOnGetPhase, SyncOnFreqUpdate funcSyncOnFreqUpdate) void Sync_set_callback(sync_t *pObj, void *pFuncObj, SyncOnProcess funcSyncOnProcess, SyncOnGetPhase funcSyncOnGetPhase, SyncOnFreqUpdate funcSyncOnFreqUpdate)
@@ -112,9 +114,8 @@ void Sync_phase_update(sync_t *pObj, synth_float_t phase_ref)
pObj->phase_update = 1; pObj->phase_update = 1;
} }
int Sync_process(sync_t *pObj) void Sync_process(sync_t *pObj)
{ {
int do_lfo_update = 0;
synth_float_t perr = 0; synth_float_t perr = 0;
if (pObj->funcSyncOnProcess) if (pObj->funcSyncOnProcess)
{ {
@@ -123,7 +124,6 @@ int Sync_process(sync_t *pObj)
if (pObj->phase_update) if (pObj->phase_update)
{ {
pObj->phase_update = 0; pObj->phase_update = 0;
do_lfo_update = 1;
if (pObj->funcSyncOnGetPhase) if (pObj->funcSyncOnGetPhase)
{ {
synth_float_t phase = (*pObj->funcSyncOnGetPhase)(pObj->pFuncObj); synth_float_t phase = (*pObj->funcSyncOnGetPhase)(pObj->pFuncObj);
@@ -131,37 +131,143 @@ int Sync_process(sync_t *pObj)
SynthDebug("phase_ref=%f, phase_lo=%f, perr=%f\n", pObj->phase_ref, pObj->phase, perr); SynthDebug("phase_ref=%f, phase_lo=%f, perr=%f\n", pObj->phase_ref, pObj->phase, perr);
} }
} }
synth_float_t omega = -(pObj->klag*pObj->accu + pObj->klead*perr); if (perr != 0 || pObj->freq_update)
if (omega != pObj->omega)
{ {
synth_float_t omega = -(pObj->klag*pObj->accu + pObj->klead*perr);
if (pObj->funcSyncOnFreqUpdate) if (pObj->funcSyncOnFreqUpdate)
{ {
(*pObj->funcSyncOnFreqUpdate)(pObj->pFuncObj, omega); (*pObj->funcSyncOnFreqUpdate)(pObj->pFuncObj, omega);
} }
} }
pObj->accu += perr; pObj->accu += perr;
pObj->freq_update = perr != 0;
return do_lfo_update;
} }
void syncOnProcess(void *pFuncObj) void syncOnProcess(void *pFuncObj)
{ {
lfo_t *pObj = (lfo_t*)pFuncObj; lfo_t *pObj = (lfo_t*)pFuncObj;
pObj->sync.phase = Sync_mod(pObj->sync.phase + pObj->sync.omega, 1.0);
switch((int)pObj->param[LFO_PARAM2_WAVEFORM])
{
case LFO_WAVEFORM_SAW:
case LFO_WAVEFORM_SAW_REV:
pObj->x = Sync_mod(pObj->x + pObj->dx, 1.0);
break;
case LFO_WAVEFORM_SH_UNI:
pObj->x += pObj->dx;
if (pObj->x >= 1.f)
{
pObj->x -= 1.f;
pObj->sh_sample = Noise_Uniform(&pObj->noise, 1, 0.5);
}
break;
case LFO_WAVEFORM_SH_GAUSS:
pObj->x += pObj->dx;
if (pObj->x >= 1.f)
{
pObj->x -= 1.f;
do
{
pObj->sh_sample = Noise_Gaussian(&pObj->noise, sqrt(1.f/36), 0.5);
} while ((pObj->sh_sample < 0) || (pObj->sh_sample > 1.f));
}
break;
case LFO_WAVEFORM_SQUARE:
case LFO_WAVEFORM_SQUARE_REV:
pObj->x = Sync_mod(pObj->x + pObj->dx, 1.0);
pObj->sqr = (int)(pObj->x < 0.5);
break;
case LFO_WAVEFORM_SINE:
case LFO_WAVEFORM_SINE_REV:
case LFO_WAVEFORM_COSINE:
case LFO_WAVEFORM_COSINE_REV:
pObj->y[0] = pObj->y[0] - pObj->b*pObj->y[1];
pObj->y[1] = pObj->y[1] + pObj->b*pObj->y[0];
break;
case LFO_WAVEFORM_TRIANGLE:
case LFO_WAVEFORM_TRIANGLE_REV:
pObj->x = Sync_mod(pObj->x + pObj->dx, 1.0);
if (pObj->x < 0.5)
pObj->tri = 2*pObj->x;
else
pObj->tri = 2*(1-pObj->x);
break;
default:
pObj->sync.phase = Sync_mod(pObj->sync.phase + pObj->sync.omega, 1.0);
break;
}
} }
synth_float_t syncOnGetPhase(void *pFuncObj) synth_float_t syncOnGetPhase(void *pFuncObj)
{ {
synth_float_t result = 0;
lfo_t *pObj = (lfo_t*)pFuncObj; lfo_t *pObj = (lfo_t*)pFuncObj;
SynthDebug("syncOnGetPhase()\n");
return pObj->sync.phase; switch((int)pObj->param[LFO_PARAM2_WAVEFORM])
{
case LFO_WAVEFORM_SAW:
case LFO_WAVEFORM_SAW_REV:
case LFO_WAVEFORM_SH_UNI:
case LFO_WAVEFORM_SH_GAUSS:
case LFO_WAVEFORM_SQUARE:
case LFO_WAVEFORM_SQUARE_REV:
case LFO_WAVEFORM_TRIANGLE:
case LFO_WAVEFORM_TRIANGLE_REV:
result = Sync_mod(pObj->x, 1.0);
break;
case LFO_WAVEFORM_SINE:
case LFO_WAVEFORM_SINE_REV:
case LFO_WAVEFORM_COSINE:
case LFO_WAVEFORM_COSINE_REV:
result = 0.5 + 0.5*atan2(pObj->y[0], -pObj->y[1])/M_PI;
break;
default:
result = pObj->sync.phase;
break;
}
return result;
} }
void syncOnFreqUpdate(void *pFuncObj, synth_float_t omega) void syncOnFreqUpdate(void *pFuncObj, synth_float_t omega)
{ {
lfo_t *pObj = (lfo_t*)pFuncObj; lfo_t *pObj = (lfo_t*)pFuncObj;
pObj->sync.omega = omega;
switch((int)pObj->param[LFO_PARAM2_WAVEFORM])
{
case LFO_WAVEFORM_SAW:
case LFO_WAVEFORM_SAW_REV:
case LFO_WAVEFORM_SH_UNI:
case LFO_WAVEFORM_SH_GAUSS:
case LFO_WAVEFORM_SQUARE:
case LFO_WAVEFORM_SQUARE_REV:
case LFO_WAVEFORM_TRIANGLE:
case LFO_WAVEFORM_TRIANGLE_REV:
pObj->dx = omega;
break;
case LFO_WAVEFORM_SINE:
case LFO_WAVEFORM_SINE_REV:
case LFO_WAVEFORM_COSINE:
case LFO_WAVEFORM_COSINE_REV:
pObj->b = 2.0 * sin(omega*pi);
break;
default:
pObj->sync.omega = omega;
break;
}
SynthDebug("syncOnFreqUpdate(): BPM=%f\n", omega*pObj->fs*60); SynthDebug("syncOnFreqUpdate(): BPM=%f\n", omega*pObj->fs*60);
} }
@@ -327,11 +433,7 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
// Create phase // Create phase
for (i=i0; i< len; i++) for (i=i0; i< len; i++)
{ {
if (Sync_process(&pObj->sync)) Sync_process(&pObj->sync);
{
// LFO_set_omega(pObj, pObj->sync.omega);
}
pObj->x = pObj->sync.phase;
in = pObj->x + pObj->offset; in = pObj->x + pObj->offset;
pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in; pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in;
@@ -342,8 +444,6 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
*(pOut++) = out*pObj->attack_y; *(pOut++) = out*pObj->attack_y;
pObj->attack_y += pObj->attack_a*(1-pObj->attack_y); pObj->attack_y += pObj->attack_a*(1-pObj->attack_y);
pObj->x = Sync_mod(pObj->x + pObj->dx, 1.0);
if (pObj->freq_update_req) if (pObj->freq_update_req)
{ {
pObj->freq_update_req = 0; pObj->freq_update_req = 0;
@@ -352,11 +452,13 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
} }
} }
if (pObj->param[LFO_PARAM2_WAVEFORM] == LFO_WAVEFORM_ONE_MINUS_SAW) if (pObj->param[LFO_PARAM2_WAVEFORM] == LFO_WAVEFORM_SAW_REV)
{ {
// Create phase // Create phase
for (i=i0; i< len; i++) for (i=i0; i< len; i++)
{ {
Sync_process(&pObj->sync);
in = (1-pObj->x) + pObj->offset; in = (1-pObj->x) + pObj->offset;
pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in; pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in;
out = pObj->out; out = pObj->out;
@@ -366,8 +468,6 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
*(pOut++) = out*pObj->attack_y; *(pOut++) = out*pObj->attack_y;
pObj->attack_y += pObj->attack_a*(1-pObj->attack_y); pObj->attack_y += pObj->attack_a*(1-pObj->attack_y);
pObj->x = Sync_mod(pObj->x + pObj->dx, 1.0);
if (pObj->freq_update_req) if (pObj->freq_update_req)
{ {
pObj->freq_update_req = 0; pObj->freq_update_req = 0;
@@ -381,11 +481,8 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
// Create phase for S/H // Create phase for S/H
for (i=i0; i< len; i++) for (i=i0; i< len; i++)
{ {
if (pObj->x >= 1.f) Sync_process(&pObj->sync);
{
pObj->x -= 1.f;
pObj->sh_sample = Noise_Uniform(&pObj->noise, 1, 0.5);
}
in = pObj->sh_sample + pObj->offset; in = pObj->sh_sample + pObj->offset;
pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in; pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in;
out = pObj->out; out = pObj->out;
@@ -395,8 +492,6 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
*(pOut++) = out*pObj->attack_y; *(pOut++) = out*pObj->attack_y;
pObj->attack_y += pObj->attack_a*(1-pObj->attack_y); pObj->attack_y += pObj->attack_a*(1-pObj->attack_y);
pObj->x += pObj->dx;
if (pObj->freq_update_req) if (pObj->freq_update_req)
{ {
pObj->freq_update_req = 0; pObj->freq_update_req = 0;
@@ -410,15 +505,8 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
// Create phase for S/H // Create phase for S/H
for (i=i0; i< len; i++) for (i=i0; i< len; i++)
{ {
if (pObj->x >= 1.f) Sync_process(&pObj->sync);
{
pObj->x -= 1.f;
do
{
pObj->sh_sample = Noise_Gaussian(&pObj->noise, sqrt(1.f/36), 0.5);
} while ((pObj->sh_sample < 0) || (pObj->sh_sample > 1.f));
}
in = pObj->sh_sample + pObj->offset; in = pObj->sh_sample + pObj->offset;
pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in; pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in;
out = pObj->out; out = pObj->out;
@@ -428,8 +516,6 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
*(pOut++) = out*pObj->attack_y; *(pOut++) = out*pObj->attack_y;
pObj->attack_y += pObj->attack_a*(1-pObj->attack_y); pObj->attack_y += pObj->attack_a*(1-pObj->attack_y);
pObj->x += pObj->dx;
if (pObj->freq_update_req) if (pObj->freq_update_req)
{ {
pObj->freq_update_req = 0; pObj->freq_update_req = 0;
@@ -443,6 +529,8 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
{ {
for (i=i0; i< len; i++) for (i=i0; i< len; i++)
{ {
Sync_process(&pObj->sync);
in = pObj->y[1]+pObj->a + pObj->offset; in = pObj->y[1]+pObj->a + pObj->offset;
pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in; pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in;
out = pObj->out; out = pObj->out;
@@ -452,9 +540,6 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
*(pOut++) = out*pObj->attack_y; *(pOut++) = out*pObj->attack_y;
pObj->attack_y += pObj->attack_a*(1-pObj->attack_y); pObj->attack_y += pObj->attack_a*(1-pObj->attack_y);
pObj->y[0] = pObj->y[0] - pObj->b*pObj->y[1];
pObj->y[1] = pObj->y[1] + pObj->b*pObj->y[0];
if (pObj->freq_update_req) if (pObj->freq_update_req)
{ {
pObj->freq_update_req = 0; pObj->freq_update_req = 0;
@@ -463,10 +548,12 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
} }
} }
if (pObj->param[LFO_PARAM2_WAVEFORM] == LFO_WAVEFORM_ONE_MINUS_SINE) if (pObj->param[LFO_PARAM2_WAVEFORM] == LFO_WAVEFORM_SINE_REV)
{ {
for (i=i0; i< len; i++) for (i=i0; i< len; i++)
{ {
Sync_process(&pObj->sync);
in = (1-(pObj->y[1]+pObj->a)) + pObj->offset; in = (1-(pObj->y[1]+pObj->a)) + pObj->offset;
pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in; pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in;
out = pObj->out; out = pObj->out;
@@ -476,9 +563,6 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
*(pOut++) = out*pObj->attack_y; *(pOut++) = out*pObj->attack_y;
pObj->attack_y += pObj->attack_a*(1-pObj->attack_y); pObj->attack_y += pObj->attack_a*(1-pObj->attack_y);
pObj->y[0] = pObj->y[0] - pObj->b*pObj->y[1];
pObj->y[1] = pObj->y[1] + pObj->b*pObj->y[0];
if (pObj->freq_update_req) if (pObj->freq_update_req)
{ {
pObj->freq_update_req = 0; pObj->freq_update_req = 0;
@@ -491,6 +575,8 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
{ {
for (i=i0; i< len; i++) for (i=i0; i< len; i++)
{ {
Sync_process(&pObj->sync);
in = pObj->y[0]+pObj->a + pObj->offset; in = pObj->y[0]+pObj->a + pObj->offset;
pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in; pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in;
out = pObj->out; out = pObj->out;
@@ -500,9 +586,6 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
*(pOut++) = out*pObj->attack_y; *(pOut++) = out*pObj->attack_y;
pObj->attack_y += pObj->attack_a*(1-pObj->attack_y); pObj->attack_y += pObj->attack_a*(1-pObj->attack_y);
pObj->y[0] = pObj->y[0] - pObj->b*pObj->y[1];
pObj->y[1] = pObj->y[1] + pObj->b*pObj->y[0];
if (pObj->freq_update_req) if (pObj->freq_update_req)
{ {
pObj->freq_update_req = 0; pObj->freq_update_req = 0;
@@ -511,10 +594,12 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
} }
} }
if (pObj->param[LFO_PARAM2_WAVEFORM] == LFO_WAVEFORM_ONE_MINUS_COSINE) if (pObj->param[LFO_PARAM2_WAVEFORM] == LFO_WAVEFORM_COSINE_REV)
{ {
for (i=i0; i< len; i++) for (i=i0; i< len; i++)
{ {
Sync_process(&pObj->sync);
in = (1-(pObj->y[0]+pObj->a)) + pObj->offset; in = (1-(pObj->y[0]+pObj->a)) + pObj->offset;
pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in; pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in;
out = pObj->out; out = pObj->out;
@@ -524,9 +609,6 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
*(pOut++) = out*pObj->attack_y; *(pOut++) = out*pObj->attack_y;
pObj->attack_y += pObj->attack_a*(1-pObj->attack_y); pObj->attack_y += pObj->attack_a*(1-pObj->attack_y);
pObj->y[0] = pObj->y[0] - pObj->b*pObj->y[1];
pObj->y[1] = pObj->y[1] + pObj->b*pObj->y[0];
if (pObj->freq_update_req) if (pObj->freq_update_req)
{ {
pObj->freq_update_req = 0; pObj->freq_update_req = 0;
@@ -540,6 +622,8 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
// Create phase // Create phase
for (i=i0; i< len; i++) for (i=i0; i< len; i++)
{ {
Sync_process(&pObj->sync);
in = (synth_float_t)pObj->sqr + pObj->offset; in = (synth_float_t)pObj->sqr + pObj->offset;
pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in; pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in;
out = pObj->out; out = pObj->out;
@@ -549,13 +633,6 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
*(pOut++) = out*pObj->attack_y; *(pOut++) = out*pObj->attack_y;
pObj->attack_y += pObj->attack_a*(1-pObj->attack_y); pObj->attack_y += pObj->attack_a*(1-pObj->attack_y);
pObj->x += 2*pObj->dx;
if (pObj->x >= 1.f)
{
pObj->x -= 1.f;
pObj->sqr = !pObj->sqr;
}
if (pObj->freq_update_req) if (pObj->freq_update_req)
{ {
pObj->freq_update_req = 0; pObj->freq_update_req = 0;
@@ -564,11 +641,13 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
} }
} }
if (pObj->param[LFO_PARAM2_WAVEFORM] == LFO_WAVEFORM_ONE_MINUS_SQUARE) if (pObj->param[LFO_PARAM2_WAVEFORM] == LFO_WAVEFORM_SQUARE_REV)
{ {
// Create phase // Create phase
for (i=i0; i< len; i++) for (i=i0; i< len; i++)
{ {
Sync_process(&pObj->sync);
in = (1-((synth_float_t)pObj->sqr)) + pObj->offset; in = (1-((synth_float_t)pObj->sqr)) + pObj->offset;
pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in; pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in;
out = pObj->out; out = pObj->out;
@@ -578,13 +657,6 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
*(pOut++) = out*pObj->attack_y; *(pOut++) = out*pObj->attack_y;
pObj->attack_y += pObj->attack_a*(1-pObj->attack_y); pObj->attack_y += pObj->attack_a*(1-pObj->attack_y);
pObj->x += 2*pObj->dx;
if (pObj->x >= 1.f)
{
pObj->x -= 1.f;
pObj->sqr = !pObj->sqr;
}
if (pObj->freq_update_req) if (pObj->freq_update_req)
{ {
pObj->freq_update_req = 0; pObj->freq_update_req = 0;
@@ -598,6 +670,8 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
// Create phase // Create phase
for (i=i0; i< len; i++) for (i=i0; i< len; i++)
{ {
Sync_process(&pObj->sync);
in = (synth_float_t)pObj->tri + pObj->offset; in = (synth_float_t)pObj->tri + pObj->offset;
pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in; pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in;
out = pObj->out; out = pObj->out;
@@ -607,13 +681,6 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
*(pOut++) = out*pObj->attack_y; *(pOut++) = out*pObj->attack_y;
pObj->attack_y += pObj->attack_a*(1-pObj->attack_y); pObj->attack_y += pObj->attack_a*(1-pObj->attack_y);
if (pObj->x < 0.5)
pObj->tri = 2*pObj->x;
else
pObj->tri = 2*(1-pObj->x);
pObj->x = Sync_mod(pObj->x + pObj->dx, 1.0);
if (pObj->freq_update_req) if (pObj->freq_update_req)
{ {
pObj->freq_update_req = 0; pObj->freq_update_req = 0;
@@ -622,11 +689,13 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
} }
} }
if (pObj->param[LFO_PARAM2_WAVEFORM] == LFO_WAVEFORM_ONE_MINUS_TRIANGLE) if (pObj->param[LFO_PARAM2_WAVEFORM] == LFO_WAVEFORM_TRIANGLE_REV)
{ {
// Create phase // Create phase
for (i=i0; i< len; i++) for (i=i0; i< len; i++)
{ {
Sync_process(&pObj->sync);
in = (1-((synth_float_t)pObj->tri)) + pObj->offset; in = (1-((synth_float_t)pObj->tri)) + pObj->offset;
pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in; pObj->out = pObj->smooth_a*pObj->out + pObj->smooth_b*in;
out = pObj->out; out = pObj->out;
@@ -636,13 +705,6 @@ synth_float_t* LFO_ProcessDataV(lfo_t *pObj, UINT32 len)
*(pOut++) = out*pObj->attack_y; *(pOut++) = out*pObj->attack_y;
pObj->attack_y += pObj->attack_a*(1-pObj->attack_y); pObj->attack_y += pObj->attack_a*(1-pObj->attack_y);
if (pObj->x < 0.5)
pObj->tri = 2*pObj->x;
else
pObj->tri = 2*(1-pObj->x);
pObj->x = Sync_mod(pObj->x + pObj->dx, 1.0);
if (pObj->freq_update_req) if (pObj->freq_update_req)
{ {
pObj->freq_update_req = 0; pObj->freq_update_req = 0;
+7 -6
View File
@@ -21,11 +21,11 @@ enum
LFO_WAVEFORM_TRIANGLE, LFO_WAVEFORM_TRIANGLE,
LFO_WAVEFORM_SH_UNI, LFO_WAVEFORM_SH_UNI,
LFO_WAVEFORM_SH_GAUSS, LFO_WAVEFORM_SH_GAUSS,
LFO_WAVEFORM_ONE_MINUS_SINE, LFO_WAVEFORM_SINE_REV,
LFO_WAVEFORM_ONE_MINUS_COSINE, LFO_WAVEFORM_COSINE_REV,
LFO_WAVEFORM_ONE_MINUS_SAW, LFO_WAVEFORM_SAW_REV,
LFO_WAVEFORM_ONE_MINUS_SQUARE, LFO_WAVEFORM_SQUARE_REV,
LFO_WAVEFORM_ONE_MINUS_TRIANGLE, LFO_WAVEFORM_TRIANGLE_REV,
LFO_NUM_WAVEFORMS LFO_NUM_WAVEFORMS
}; };
@@ -59,6 +59,7 @@ typedef struct _ssync_t
synth_float_t accu; synth_float_t accu;
int phase_update; int phase_update;
int freq_update;
} sync_t; } sync_t;
@@ -73,7 +74,7 @@ void Sync_init(sync_t *pObj);
void Sync_set_callback(sync_t *pObj, void *pFuncObj, SyncOnProcess funcSyncOnProcess, SyncOnGetPhase funcSyncOnGetPhase, SyncOnFreqUpdate funcSyncOnFreqUpdate); void Sync_set_callback(sync_t *pObj, void *pFuncObj, SyncOnProcess funcSyncOnProcess, SyncOnGetPhase funcSyncOnGetPhase, SyncOnFreqUpdate funcSyncOnFreqUpdate);
void Sync_phase_update(sync_t *pObj, synth_float_t phase_ref); void Sync_phase_update(sync_t *pObj, synth_float_t phase_ref);
int Sync_process(sync_t *pObj); void Sync_process(sync_t *pObj);
#if defined(__cplusplus) #if defined(__cplusplus)
} }