cwFlowProc.cpp: Allow interactive changing of audio_delay() delay param.
This commit is contained in:
parent
a4188a7ff0
commit
abcaa093c7
@ -2384,8 +2384,53 @@ namespace cw
|
|||||||
return kOkRC;
|
return kOkRC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rc_t _update_delay( instance_t* ctx, variable_t* var )
|
||||||
|
{
|
||||||
|
rc_t rc = kOkRC;
|
||||||
|
inst_t* inst = (inst_t*)ctx->userPtr;
|
||||||
|
abuf_t* ibuf = nullptr;
|
||||||
|
real_t delayMs = 0;
|
||||||
|
unsigned delayFrameN = 0;
|
||||||
|
|
||||||
|
if((rc = var_get(ctx,kInPId, kAnyChIdx, ibuf )) != kOkRC )
|
||||||
|
goto errLabel;
|
||||||
|
|
||||||
|
if((rc = var_get( var, delayMs )) != kOkRC )
|
||||||
|
goto errLabel;
|
||||||
|
|
||||||
|
delayFrameN = (unsigned)(fabs(delayMs) * ibuf->srate / 1000.0);
|
||||||
|
|
||||||
|
if( delayFrameN > inst->maxDelayFrameN )
|
||||||
|
{
|
||||||
|
delayFrameN = inst->maxDelayFrameN;
|
||||||
|
cwLogWarning("The audio delay length is limited to %i milliseconds.", (int)((delayFrameN * 1000) / ibuf->srate));
|
||||||
|
}
|
||||||
|
|
||||||
|
vop::zero(inst->delayBuf->buf,inst->delayBuf->chN*inst->delayBuf->frameN);
|
||||||
|
|
||||||
|
for(unsigned i=0; i<ibuf->chN; ++i)
|
||||||
|
{
|
||||||
|
inst->cntV[i] = delayFrameN;
|
||||||
|
inst->idxV[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
errLabel:
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
rc_t value( instance_t* ctx, variable_t* var )
|
rc_t value( instance_t* ctx, variable_t* var )
|
||||||
{ return kOkRC; }
|
{
|
||||||
|
rc_t rc = kOkRC;
|
||||||
|
|
||||||
|
switch( var->vid )
|
||||||
|
{
|
||||||
|
case kDelayMsPId:
|
||||||
|
rc = _update_delay(ctx,var);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
rc_t exec( instance_t* ctx )
|
rc_t exec( instance_t* ctx )
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user