cmDspFx.c : Changed AvailCh to default to channel 0 and change to channel 1

on second audio cycle. This allows default parameters to be routed to channel 0
and all subsequent paramters to be routed to channel 1.
Removed debugging code from Xfader.
This commit is contained in:
kevin 2015-10-22 17:59:38 -04:00
parent 5ec36d98b9
commit 5ee8f27b03

View File

@ -1564,26 +1564,18 @@ cmDspRC_t _cmDspXfaderExec(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_t*
} }
if( p->xfdp->chArray[i].onFl ) if( p->xfdp->chArray[i].onFl )
{
cmDspSetBool(ctx,inst,p->stateBaseXfId+i,true); cmDspSetBool(ctx,inst,p->stateBaseXfId+i,true);
}
if( p->xfdp->chArray[i].offFl ) if( p->xfdp->chArray[i].offFl )
{
cmDspSetBool(ctx,inst,p->stateBaseXfId+i,false); cmDspSetBool(ctx,inst,p->stateBaseXfId+i,false);
}
// send the gain output // send the gain output
cmDspSetDouble(ctx,inst,p->gainBaseXfId+i,gain); cmDspSetDouble(ctx,inst,p->gainBaseXfId+i,gain);
/*
if( gain > 0 )
printf("(%i %f %i %i %i %f)",
i,
gain,
p->chGateV[i],
cmDspBool(inst,p->stateBaseXfId+i),
p->xfdp->chArray[i].gateFl,
p->xfdp->chArray[i].gain);
*/
} }
if( p->xfdp->onFl ) if( p->xfdp->onFl )
@ -5698,6 +5690,7 @@ cmDspRC_t _cmDspRouter_Reset(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_
unsigned i; unsigned i;
for(i=0; i<p->oChCnt; ++i) for(i=0; i<p->oChCnt; ++i)
cmDspZeroAudioBuf(ctx,inst,p->baseOutAudioRtId+i); cmDspZeroAudioBuf(ctx,inst,p->baseOutAudioRtId+i);
} }
return rc; return rc;
@ -5736,7 +5729,14 @@ cmDspRC_t _cmDspRouter_Recv(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_t
return kOkDspRC; return kOkDspRC;
} }
/*
if( evt->dstVarId == kOutChIdxRtId && cmDsvGetUInt(evt->valuePtr) < p->oChCnt )
{
const cmChar_t* symLbl = cmSymTblLabel(ctx->stH,inst->symId);
cmDspInstErr(ctx,inst,kOkDspRC,"Router: ch:%i %s\n",cmDsvGetUInt(evt->valuePtr),symLbl==NULL?"":symLbl);
}
*/
// store the incoming value // store the incoming value
if( evt->dstVarId < p->baseBaseOutRtId ) if( evt->dstVarId < p->baseBaseOutRtId )
if((rc = cmDspSetEvent(ctx,inst,evt)) != kOkDspRC ) if((rc = cmDspSetEvent(ctx,inst,evt)) != kOkDspRC )
@ -5881,8 +5881,8 @@ cmDspInst_t* _cmDspAvailCh_Alloc(cmDspCtx_t* ctx, cmDspClass_t* classPtr, unsig
cmDspSetDefaultBool( ctx, &p->inst, baseGateOutAvId+i, false, false ); cmDspSetDefaultBool( ctx, &p->inst, baseGateOutAvId+i, false, false );
} }
cmDspSetDefaultUInt( ctx, &p->inst, kModeAvId, 0, kExclusiveModeAvId ); cmDspSetDefaultUInt( ctx, &p->inst, kModeAvId, 0, kExclusiveModeAvId );
cmDspSetDefaultUInt( ctx, &p->inst, kChIdxAvId, 0, cmInvalidIdx ); cmDspSetDefaultUInt( ctx, &p->inst, kChIdxAvId, 0, 0 );
va_end(vl1); va_end(vl1);
return &p->inst; return &p->inst;
@ -5897,10 +5897,11 @@ cmDspRC_t _cmDspAvailCh_DoReset( cmDspCtx_t* ctx, cmDspInst_t* inst )
{ {
unsigned i; unsigned i;
cmDspAvailCh_t* p = (cmDspAvailCh_t*)inst; cmDspAvailCh_t* p = (cmDspAvailCh_t*)inst;
// ch 0 is the channel receiving parameters // ch 0 is the channel receiving parameters
cmDspSetUInt(ctx,inst,kChIdxAvId,0); cmDspSetUInt(ctx,inst,kChIdxAvId,0);
for(i=0; i<p->chCnt; ++i) for(i=0; i<p->chCnt; ++i)
{ {
cmDspSetBool(ctx, inst, p->baseDisInAvId + i, i==0); // disable all channels except ch zero cmDspSetBool(ctx, inst, p->baseDisInAvId + i, i==0); // disable all channels except ch zero
@ -5927,14 +5928,16 @@ cmDspRC_t _cmDspAvailCh_Reset(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt
return rc; return rc;
} }
void _cmDspAvailCh_SetNextAvailCh( cmDspCtx_t* ctx, cmDspInst_t* inst, bool warnFl ) void _cmDspAvailCh_SetNextAvailCh( cmDspCtx_t* ctx, cmDspInst_t* inst, bool warnFl, const char* label )
{ {
cmDspAvailCh_t* p = (cmDspAvailCh_t*)inst; cmDspAvailCh_t* p = (cmDspAvailCh_t*)inst;
unsigned i; unsigned i;
// if a valid next avail ch already exists then do nothing
if( p->nextAvailChIdx != cmInvalidIdx ) if( p->nextAvailChIdx != cmInvalidIdx )
return; return;
// for each channel
for(i=0; i<p->chCnt; ++i) for(i=0; i<p->chCnt; ++i)
{ {
// the channel's active state is held in the 'dis' variable. // the channel's active state is held in the 'dis' variable.
@ -5943,15 +5946,18 @@ void _cmDspAvailCh_SetNextAvailCh( cmDspCtx_t* ctx, cmDspInst_t* inst, bool warn
// if ch[i] is the first avail inactive channel // if ch[i] is the first avail inactive channel
if( !activeFl ) if( !activeFl )
{ {
p->nextAvailChIdx = i; // set the next available channel p->nextAvailChIdx = i; // then make it the next available channel
break; break;
} }
} }
// if no available channels were found // if no available channels were found
if( p->nextAvailChIdx == cmInvalidIdx && warnFl ) if( p->nextAvailChIdx == cmInvalidIdx )
cmDspInstErr(ctx,inst,kInvalidStateDspRC,"No available channels exist."); {
if( warnFl )
cmDspInstErr(ctx,inst,kInvalidStateDspRC,"No available channels exist.");
}
else else
{ {
// Notify the external world which channel is to be used next. // Notify the external world which channel is to be used next.
@ -5960,7 +5966,7 @@ void _cmDspAvailCh_SetNextAvailCh( cmDspCtx_t* ctx, cmDspInst_t* inst, bool warn
// next available channel rather than the current channel. // next available channel rather than the current channel.
// The next available channel will then be faded up with the // The next available channel will then be faded up with the
// new parameters on the next trigger command. // new parameters on the next trigger command.
cmDspSetUInt(ctx,inst,kChIdxAvId,p->nextAvailChIdx); cmDspSetUInt(ctx,inst,kChIdxAvId,p->nextAvailChIdx);
} }
} }
@ -5971,9 +5977,9 @@ cmDspRC_t _cmDspAvailCh_Exec( cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt
p->audioCycleCnt += 1; p->audioCycleCnt += 1;
// Setting the next available channel here solves the problem of doing the // Setting the next available channel here solves the problem of sending the
// first 'ch' output after the program starts executing. // first 'ch' output after the program starts executing.
// The problem is that 'ch' should be set to 0 for at least the first // The problem is that 'ch' should be set to 0 for the first
// execution cycle so that parameters may be set to the initial active channel // execution cycle so that parameters may be set to the initial active channel
// during the first cycle. After the first cycle however parameters should be // during the first cycle. After the first cycle however parameters should be
// sent to the next channel which will be faded up. Setting // sent to the next channel which will be faded up. Setting
@ -5986,7 +5992,7 @@ cmDspRC_t _cmDspAvailCh_Exec( cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt
// other processors had at least one chance to run. // other processors had at least one chance to run.
if( p->audioCycleCnt == 2 ) if( p->audioCycleCnt == 2 )
{ {
_cmDspAvailCh_SetNextAvailCh(ctx,inst,true); _cmDspAvailCh_SetNextAvailCh(ctx,inst,true,"exec");
} }
return rc; return rc;
@ -6013,7 +6019,7 @@ cmDspRC_t _cmDspAvailCh_Recv(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_
cmDspInstErr(ctx,inst,kInvalidStateDspRC,"There are no available channels to trigger."); cmDspInstErr(ctx,inst,kInvalidStateDspRC,"There are no available channels to trigger.");
else else
{ {
// indicate that the next channel is no longer available // indicate that ch[nexAvailChIdx] is no longer available
cmDspSetBool(ctx, inst, p->baseDisInAvId + p->nextAvailChIdx, true); cmDspSetBool(ctx, inst, p->baseDisInAvId + p->nextAvailChIdx, true);
// raise the gate to start the xfade. // raise the gate to start the xfade.
@ -6027,10 +6033,11 @@ cmDspRC_t _cmDspAvailCh_Recv(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_
cmDspSetBool(ctx,inst, p->baseGateOutAvId+i, false ); cmDspSetBool(ctx,inst, p->baseGateOutAvId+i, false );
} }
// invalidate nextAvailChIdx
p->nextAvailChIdx = cmInvalidIdx; p->nextAvailChIdx = cmInvalidIdx;
// It may be possible to know the next avail ch so try to set it here. // It may be possible to know the next avail ch so try to set it here.
_cmDspAvailCh_SetNextAvailCh(ctx, inst, false ); _cmDspAvailCh_SetNextAvailCh(ctx, inst, false, "trig" );
} }
@ -6043,8 +6050,9 @@ cmDspRC_t _cmDspAvailCh_Recv(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_
{ {
cmDspSetEvent(ctx,inst,evt); cmDspSetEvent(ctx,inst,evt);
// a channel was disabled so a new channel is available for selection // a channel was disabled so a new channel should be available for selection
_cmDspAvailCh_SetNextAvailCh(ctx, inst, true ); if( p->audioCycleCnt > 0 )
_cmDspAvailCh_SetNextAvailCh(ctx, inst, true, "dis" );
if( !exclModeFl ) if( !exclModeFl )
cmDspSetBool(ctx, inst, p->baseGateOutAvId + (evt->dstVarId - p->baseDisInAvId), false); cmDspSetBool(ctx, inst, p->baseGateOutAvId + (evt->dstVarId - p->baseDisInAvId), false);