cwFlowPerf.cpp : Fix beg/end loc/meas updates in _on_new_begin_loc() and _on_new_end_loc() in score_player.
This commit is contained in:
parent
d4f7180102
commit
bdd458f902
408
cwFlowPerf.cpp
408
cwFlowPerf.cpp
@ -141,7 +141,8 @@ namespace cw
|
|||||||
const perf_score::event_t* score_evt = nullptr;
|
const perf_score::event_t* score_evt = nullptr;
|
||||||
char* fname = nullptr;
|
char* fname = nullptr;
|
||||||
unsigned pedalStateFlags = 0;
|
unsigned pedalStateFlags = 0;
|
||||||
|
unsigned uuid = 0;
|
||||||
|
unsigned last_loc = 0;
|
||||||
p->score_end_loc = 0;
|
p->score_end_loc = 0;
|
||||||
p->score_end_meas = 0;
|
p->score_end_meas = 0;
|
||||||
|
|
||||||
@ -157,6 +158,8 @@ namespace cw
|
|||||||
goto errLabel;
|
goto errLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cwLogInfo("Opening:%s",fname);
|
||||||
|
|
||||||
if((rc= perf_score::create( perfScoreH, fname )) != kOkRC )
|
if((rc= perf_score::create( perfScoreH, fname )) != kOkRC )
|
||||||
{
|
{
|
||||||
rc = cwLogError(rc,"Score create failed on '%s'.",fname);
|
rc = cwLogError(rc,"Score create failed on '%s'.",fname);
|
||||||
@ -184,13 +187,18 @@ namespace cw
|
|||||||
{
|
{
|
||||||
msg_t* m = p->msgA + p->msgN;
|
msg_t* m = p->msgA + p->msgN;
|
||||||
midi::ch_msg_t* mm = p->chMsgA + p->msgN;
|
midi::ch_msg_t* mm = p->chMsgA + p->msgN;
|
||||||
|
|
||||||
|
if( score_evt->loc != kInvalidId )
|
||||||
|
last_loc = score_evt->loc;
|
||||||
|
|
||||||
m->sample_idx = (unsigned)(proc->ctx->sample_rate * score_evt->sec);
|
m->sample_idx = (unsigned)(proc->ctx->sample_rate * score_evt->sec);
|
||||||
m->loc = score_evt->loc;
|
m->loc = last_loc;
|
||||||
m->meas = score_evt->meas;
|
m->meas = score_evt->meas;
|
||||||
m->midi = mm;
|
m->midi = mm;
|
||||||
|
|
||||||
if( m->loc > p->score_end_loc )
|
//printf("%i %i\n",m->meas,m->loc);
|
||||||
|
|
||||||
|
if( m->loc!=kInvalidId && m->loc > p->score_end_loc )
|
||||||
p->score_end_loc = m->loc;
|
p->score_end_loc = m->loc;
|
||||||
|
|
||||||
if( m->meas > p->score_end_meas )
|
if( m->meas > p->score_end_meas )
|
||||||
@ -200,7 +208,7 @@ namespace cw
|
|||||||
|
|
||||||
mm->devIdx = kInvalidIdx;
|
mm->devIdx = kInvalidIdx;
|
||||||
mm->portIdx= kInvalidIdx;
|
mm->portIdx= kInvalidIdx;
|
||||||
mm->uid = score_evt->loc;
|
mm->uid = uuid++;
|
||||||
mm->ch = score_evt->status & 0x0f;
|
mm->ch = score_evt->status & 0x0f;
|
||||||
mm->status = score_evt->status & 0xf0;
|
mm->status = score_evt->status & 0xf0;
|
||||||
mm->d0 = score_evt->d0;
|
mm->d0 = score_evt->d0;
|
||||||
@ -282,121 +290,6 @@ namespace cw
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rc_t _create( proc_t* proc, inst_t* p )
|
|
||||||
{
|
|
||||||
rc_t rc = kOkRC;
|
|
||||||
const char* score_fname = nullptr;
|
|
||||||
double stopping_secs = 5.0;
|
|
||||||
|
|
||||||
if((rc = var_register_and_get(proc,kAnyChIdx,
|
|
||||||
kScoreFNamePId, "fname", kBaseSfxId, score_fname,
|
|
||||||
kStoppingMsPId, "stopping_ms", kBaseSfxId, p->stopping_ms)) != kOkRC )
|
|
||||||
{
|
|
||||||
goto errLabel;
|
|
||||||
}
|
|
||||||
|
|
||||||
// load the score
|
|
||||||
if((rc = _load_score( proc, p, score_fname )) != kOkRC )
|
|
||||||
{
|
|
||||||
goto errLabel;
|
|
||||||
}
|
|
||||||
|
|
||||||
if((rc = var_register(proc,kAnyChIdx,
|
|
||||||
kStartPId, "start", kBaseSfxId,
|
|
||||||
kStopPId, "stop", kBaseSfxId )) != kOkRC )
|
|
||||||
{
|
|
||||||
goto errLabel;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if((rc = var_register_and_set(proc,kAnyChIdx,
|
|
||||||
kDoneFlPId,"done_fl", kBaseSfxId, false,
|
|
||||||
kBLocPId, "b_loc", kBaseSfxId, 0,
|
|
||||||
kBMeasPId, "b_meas", kBaseSfxId, 0,
|
|
||||||
kELocPId, "e_loc", kBaseSfxId, p->score_end_loc,
|
|
||||||
kEMeasPId, "e_meas", kBaseSfxId, p->score_end_meas + 1)) != kOkRC )
|
|
||||||
{
|
|
||||||
goto errLabel;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// allocate the output recd array
|
|
||||||
if((rc = _alloc_recd_array( proc, "out", kBaseSfxId, kAnyChIdx, nullptr, p->recd_array )) != kOkRC )
|
|
||||||
{
|
|
||||||
goto errLabel;
|
|
||||||
}
|
|
||||||
|
|
||||||
// create one output record buffer
|
|
||||||
rc = var_register_and_set( proc, "out", kBaseSfxId, kOutPId, kAnyChIdx, p->recd_array->type, nullptr, 0 );
|
|
||||||
|
|
||||||
p->midi_fld_idx = recd_type_field_index( p->recd_array->type, "midi");
|
|
||||||
p->loc_fld_idx = recd_type_field_index( p->recd_array->type, "loc");
|
|
||||||
p->meas_fld_idx = recd_type_field_index( p->recd_array->type, "meas");
|
|
||||||
|
|
||||||
p->bVId = kInvalidId;
|
|
||||||
p->eVId = kInvalidId;
|
|
||||||
p->end_msg_idx = kInvalidIdx;
|
|
||||||
|
|
||||||
p->midiChMsgA[kAllNotesOffMsgIdx] = { .timeStamp={ .tv_sec=0, .tv_nsec=0}, .devIdx=kInvalidIdx, .portIdx=kInvalidIdx, .uid=0, .ch=0, .status=midi::kCtlMdId, .d0=midi::kAllNotesOffMdId, .d1=0 };
|
|
||||||
p->midiChMsgA[kResetAllCtlsMsgIdx] = { .timeStamp={ .tv_sec=0, .tv_nsec=0}, .devIdx=kInvalidIdx, .portIdx=kInvalidIdx, .uid=0, .ch=0, .status=midi::kCtlMdId, .d0=midi::kResetAllCtlsMdId, .d1=0 };
|
|
||||||
p->midiChMsgA[kDampPedalDownMsgIdx] = { .timeStamp={ .tv_sec=0, .tv_nsec=0}, .devIdx=kInvalidIdx, .portIdx=kInvalidIdx, .uid=0, .ch=0, .status=midi::kCtlMdId, .d0=midi::kSustainCtlMdId, .d1=64 };
|
|
||||||
p->midiChMsgA[kSostPedalDownMsgIdx] = { .timeStamp={ .tv_sec=0, .tv_nsec=0}, .devIdx=kInvalidIdx, .portIdx=kInvalidIdx, .uid=0, .ch=0, .status=midi::kCtlMdId, .d0=midi::kSostenutoCtlMdId, .d1=64 };
|
|
||||||
|
|
||||||
p->midiMsgA[kAllNotesOffMsgIdx].midi = p->midiChMsgA + kAllNotesOffMsgIdx;
|
|
||||||
p->midiMsgA[kResetAllCtlsMsgIdx].midi = p->midiChMsgA + kResetAllCtlsMsgIdx;
|
|
||||||
p->midiMsgA[kDampPedalDownMsgIdx].midi = p->midiChMsgA + kDampPedalDownMsgIdx;
|
|
||||||
p->midiMsgA[kSostPedalDownMsgIdx].midi = p->midiChMsgA + kSostPedalDownMsgIdx;
|
|
||||||
|
|
||||||
p->state = kIdleStateId;
|
|
||||||
|
|
||||||
errLabel:
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
rc_t _destroy( proc_t* proc, inst_t* p )
|
|
||||||
{
|
|
||||||
rc_t rc = kOkRC;
|
|
||||||
|
|
||||||
recd_array_destroy(p->recd_array);
|
|
||||||
mem::release(p->msgA);
|
|
||||||
mem::release(p->chMsgA);
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
rc_t _value( proc_t* proc, inst_t* p, variable_t* var )
|
|
||||||
{
|
|
||||||
rc_t rc = kOkRC;
|
|
||||||
|
|
||||||
if( proc->ctx->isInRuntimeFl )
|
|
||||||
{
|
|
||||||
switch( var->vid )
|
|
||||||
{
|
|
||||||
case kStartPId:
|
|
||||||
p->start_trig_fl = true;
|
|
||||||
printf("Start Clicked\n");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case kStopPId:
|
|
||||||
p->stop_trig_fl = true;
|
|
||||||
printf("Stop Clicked\n");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case kBLocPId:
|
|
||||||
case kBMeasPId:
|
|
||||||
p->bVId = var->vid;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case kELocPId:
|
|
||||||
case kEMeasPId:
|
|
||||||
p->eVId = var->vid;
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
rc_t _on_new_begin_loc( proc_t* proc, inst_t* p, unsigned vid )
|
rc_t _on_new_begin_loc( proc_t* proc, inst_t* p, unsigned vid )
|
||||||
{
|
{
|
||||||
rc_t rc = kOkRC;
|
rc_t rc = kOkRC;
|
||||||
@ -416,6 +309,7 @@ namespace cw
|
|||||||
switch( vid )
|
switch( vid )
|
||||||
{
|
{
|
||||||
case kBLocPId:
|
case kBLocPId:
|
||||||
|
printf("Setting: bloc:%i %i meas:%i msg_idx:%i\n",bloc,p->msgA[i].loc, p->msgA[i].meas+1,i);
|
||||||
if( i < p->msgN )
|
if( i < p->msgN )
|
||||||
var_set(proc,kBMeasPId,kAnyChIdx,p->msgA[i].meas+1);
|
var_set(proc,kBMeasPId,kAnyChIdx,p->msgA[i].meas+1);
|
||||||
else
|
else
|
||||||
@ -426,6 +320,8 @@ namespace cw
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case kBMeasPId:
|
case kBMeasPId:
|
||||||
|
|
||||||
|
printf("Setting: bmeas:%i %i meas:%i msg_idx:%i\n",bmeas,p->msgA[i].loc, p->msgA[i].meas, i);
|
||||||
if( i < p->msgN )
|
if( i < p->msgN )
|
||||||
var_set(proc,kBLocPId,kAnyChIdx,p->msgA[i].loc);
|
var_set(proc,kBLocPId,kAnyChIdx,p->msgA[i].loc);
|
||||||
else
|
else
|
||||||
@ -483,6 +379,132 @@ namespace cw
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
rc_t _create( proc_t* proc, inst_t* p )
|
||||||
|
{
|
||||||
|
rc_t rc = kOkRC;
|
||||||
|
const char* score_fname = nullptr;
|
||||||
|
unsigned bloc=0;
|
||||||
|
unsigned eloc=0;
|
||||||
|
unsigned bmeas=0;
|
||||||
|
unsigned emeas=0;
|
||||||
|
|
||||||
|
if((rc = var_register_and_get(proc,kAnyChIdx,
|
||||||
|
kScoreFNamePId, "fname", kBaseSfxId, score_fname,
|
||||||
|
kStoppingMsPId, "stopping_ms", kBaseSfxId, p->stopping_ms,
|
||||||
|
kBLocPId, "b_loc", kBaseSfxId, bloc,
|
||||||
|
kBMeasPId, "b_meas", kBaseSfxId, bmeas,
|
||||||
|
kELocPId, "e_loc", kBaseSfxId, eloc,
|
||||||
|
kEMeasPId, "e_meas", kBaseSfxId, emeas,
|
||||||
|
kStartPId, "start", kBaseSfxId, p->start_trig_fl)) != kOkRC )
|
||||||
|
{
|
||||||
|
goto errLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// load the score
|
||||||
|
if((rc = _load_score( proc, p, score_fname )) != kOkRC )
|
||||||
|
{
|
||||||
|
goto errLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((rc = var_register(proc,kAnyChIdx,
|
||||||
|
kStopPId, "stop", kBaseSfxId )) != kOkRC )
|
||||||
|
{
|
||||||
|
goto errLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if((rc = var_register_and_set(proc,kAnyChIdx,
|
||||||
|
kDoneFlPId,"done_fl", kBaseSfxId, false)) != kOkRC )
|
||||||
|
{
|
||||||
|
goto errLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
// allocate the output recd array
|
||||||
|
if((rc = _alloc_recd_array( proc, "out", kBaseSfxId, kAnyChIdx, nullptr, p->recd_array )) != kOkRC )
|
||||||
|
{
|
||||||
|
goto errLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
// create one output record buffer
|
||||||
|
rc = var_register_and_set( proc, "out", kBaseSfxId, kOutPId, kAnyChIdx, p->recd_array->type, nullptr, 0 );
|
||||||
|
|
||||||
|
p->midi_fld_idx = recd_type_field_index( p->recd_array->type, "midi");
|
||||||
|
p->loc_fld_idx = recd_type_field_index( p->recd_array->type, "loc");
|
||||||
|
p->meas_fld_idx = recd_type_field_index( p->recd_array->type, "meas");
|
||||||
|
|
||||||
|
p->bVId = bloc!=0 ? (unsigned)kBLocPId : (bmeas !=0 ? (unsigned)kBMeasPId : kInvalidId);
|
||||||
|
p->eVId = eloc!=0 ? (unsigned)kELocPId : (emeas !=0 ? (unsigned)kEMeasPId : kInvalidId);
|
||||||
|
p->end_msg_idx = kInvalidIdx;
|
||||||
|
|
||||||
|
p->midiChMsgA[kAllNotesOffMsgIdx] = { .timeStamp={ .tv_sec=0, .tv_nsec=0}, .devIdx=kInvalidIdx, .portIdx=kInvalidIdx, .uid=0, .ch=0, .status=midi::kCtlMdId, .d0=midi::kAllNotesOffMdId, .d1=0 };
|
||||||
|
p->midiChMsgA[kResetAllCtlsMsgIdx] = { .timeStamp={ .tv_sec=0, .tv_nsec=0}, .devIdx=kInvalidIdx, .portIdx=kInvalidIdx, .uid=0, .ch=0, .status=midi::kCtlMdId, .d0=midi::kResetAllCtlsMdId, .d1=0 };
|
||||||
|
p->midiChMsgA[kDampPedalDownMsgIdx] = { .timeStamp={ .tv_sec=0, .tv_nsec=0}, .devIdx=kInvalidIdx, .portIdx=kInvalidIdx, .uid=0, .ch=0, .status=midi::kCtlMdId, .d0=midi::kSustainCtlMdId, .d1=64 };
|
||||||
|
p->midiChMsgA[kSostPedalDownMsgIdx] = { .timeStamp={ .tv_sec=0, .tv_nsec=0}, .devIdx=kInvalidIdx, .portIdx=kInvalidIdx, .uid=0, .ch=0, .status=midi::kCtlMdId, .d0=midi::kSostenutoCtlMdId, .d1=64 };
|
||||||
|
|
||||||
|
p->midiMsgA[kAllNotesOffMsgIdx].midi = p->midiChMsgA + kAllNotesOffMsgIdx;
|
||||||
|
p->midiMsgA[kResetAllCtlsMsgIdx].midi = p->midiChMsgA + kResetAllCtlsMsgIdx;
|
||||||
|
p->midiMsgA[kDampPedalDownMsgIdx].midi = p->midiChMsgA + kDampPedalDownMsgIdx;
|
||||||
|
p->midiMsgA[kSostPedalDownMsgIdx].midi = p->midiChMsgA + kSostPedalDownMsgIdx;
|
||||||
|
|
||||||
|
if( eloc==0 && emeas==0 )
|
||||||
|
{
|
||||||
|
var_set(proc,kELocPId,kAnyChIdx,p->score_end_loc);
|
||||||
|
var_set(proc,kEMeasPId,kAnyChIdx,p->score_end_meas+1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
p->state = kIdleStateId;
|
||||||
|
|
||||||
|
errLabel:
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc_t _destroy( proc_t* proc, inst_t* p )
|
||||||
|
{
|
||||||
|
rc_t rc = kOkRC;
|
||||||
|
|
||||||
|
recd_array_destroy(p->recd_array);
|
||||||
|
mem::release(p->msgA);
|
||||||
|
mem::release(p->chMsgA);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc_t _value( proc_t* proc, inst_t* p, variable_t* var )
|
||||||
|
{
|
||||||
|
rc_t rc = kOkRC;
|
||||||
|
|
||||||
|
if( proc->ctx->isInRuntimeFl )
|
||||||
|
{
|
||||||
|
switch( var->vid )
|
||||||
|
{
|
||||||
|
case kStartPId:
|
||||||
|
p->start_trig_fl = true;
|
||||||
|
printf("Start Clicked\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case kStopPId:
|
||||||
|
p->stop_trig_fl = true;
|
||||||
|
printf("Stop Clicked\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case kBLocPId:
|
||||||
|
case kBMeasPId:
|
||||||
|
p->bVId = var->vid;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case kELocPId:
|
||||||
|
case kEMeasPId:
|
||||||
|
p->eVId = var->vid;
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
rc_t _do_begin_stopping( proc_t* proc, inst_t* p, unsigned stopping_ms )
|
rc_t _do_begin_stopping( proc_t* proc, inst_t* p, unsigned stopping_ms )
|
||||||
{
|
{
|
||||||
@ -492,10 +514,12 @@ namespace cw
|
|||||||
return kOkRC;
|
return kOkRC;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc_t _set_output_record( inst_t* p, rbuf_t* rbuf, const msg_t* m, recd_t* r )
|
rc_t _set_output_record( inst_t* p, rbuf_t* rbuf, const msg_t* m )
|
||||||
{
|
{
|
||||||
rc_t rc = kOkRC;
|
rc_t rc = kOkRC;
|
||||||
|
|
||||||
|
recd_t* r = p->recd_array->recdA + rbuf->recdN;
|
||||||
|
|
||||||
// if the output record array is full
|
// if the output record array is full
|
||||||
if( rbuf->recdN >= p->recd_array->allocRecdN )
|
if( rbuf->recdN >= p->recd_array->allocRecdN )
|
||||||
{
|
{
|
||||||
@ -517,8 +541,8 @@ namespace cw
|
|||||||
rc_t rc = kOkRC;
|
rc_t rc = kOkRC;
|
||||||
|
|
||||||
// copy the 'all-note-off','all-ctl-off' msg into output record array
|
// copy the 'all-note-off','all-ctl-off' msg into output record array
|
||||||
_set_output_record(p,rbuf,p->midiMsgA + kAllNotesOffMsgIdx, p->recd_array->recdA + rbuf->recdN);
|
_set_output_record(p,rbuf,p->midiMsgA + kAllNotesOffMsgIdx);
|
||||||
_set_output_record(p,rbuf,p->midiMsgA + kResetAllCtlsMsgIdx, p->recd_array->recdA + rbuf->recdN);
|
_set_output_record(p,rbuf,p->midiMsgA + kResetAllCtlsMsgIdx);
|
||||||
|
|
||||||
p->state = kIdleStateId;
|
p->state = kIdleStateId;
|
||||||
|
|
||||||
@ -527,7 +551,7 @@ namespace cw
|
|||||||
|
|
||||||
cwLogInfo("Stopped.");
|
cwLogInfo("Stopped.");
|
||||||
|
|
||||||
return kOkRC;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -540,12 +564,17 @@ namespace cw
|
|||||||
if( p->state != kIdleStateId )
|
if( p->state != kIdleStateId )
|
||||||
if((rc = _do_stop_now(proc,p,rbuf)) != kOkRC )
|
if((rc = _do_stop_now(proc,p,rbuf)) != kOkRC )
|
||||||
goto errLabel;
|
goto errLabel;
|
||||||
|
|
||||||
|
// BUG BUG BUG - using measure instead of loc because when we use loc
|
||||||
|
// we go to the wrong place
|
||||||
|
|
||||||
var_get( proc, kBLocPId, kAnyChIdx, bloc );
|
var_get( proc, kBMeasPId, kAnyChIdx, bloc );
|
||||||
|
|
||||||
|
printf("Starting at loc:%i\n",bloc);
|
||||||
|
|
||||||
// Rewind the current position to the begin location
|
// Rewind the current position to the begin location
|
||||||
for(i=0; i<p->msgN; ++i)
|
for(i=0; i<p->msgN; ++i)
|
||||||
if( p->msgA[i].loc == bloc )
|
if( p->msgA[i].meas >= bloc )
|
||||||
{
|
{
|
||||||
p->sample_idx = p->msgA[i].sample_idx;
|
p->sample_idx = p->msgA[i].sample_idx;
|
||||||
p->msg_idx = i;
|
p->msg_idx = i;
|
||||||
@ -553,13 +582,13 @@ namespace cw
|
|||||||
|
|
||||||
// if the damper pedal is down at the start location
|
// if the damper pedal is down at the start location
|
||||||
if( p->msgA[i].flags & kDampPedalDownFl )
|
if( p->msgA[i].flags & kDampPedalDownFl )
|
||||||
_set_output_record(p,rbuf,p->midiMsgA + kDampPedalDownMsgIdx, p->recd_array->recdA + rbuf->recdN);
|
_set_output_record(p,rbuf,p->midiMsgA + kDampPedalDownMsgIdx);
|
||||||
|
|
||||||
// if the sostenuto pedal was put down at the start location
|
// if the sostenuto pedal was put down at the start location
|
||||||
if( p->msgA[i].flags & kSostPedalDownFl )
|
if( p->msgA[i].flags & kSostPedalDownFl )
|
||||||
_set_output_record(p,rbuf,p->midiMsgA + kSostPedalDownMsgIdx, p->recd_array->recdA + rbuf->recdN);
|
_set_output_record(p,rbuf,p->midiMsgA + kSostPedalDownMsgIdx);
|
||||||
|
|
||||||
cwLogInfo("New current: msg_idx:%i meas:%i loc:%i",p->msg_idx, p->msgA[i].meas, p->msgA[i].loc );
|
cwLogInfo("New current: msg_idx:%i meas:%i loc:%i %i",p->msg_idx, p->msgA[i].meas, p->msgA[i].loc, bloc );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -631,7 +660,6 @@ namespace cw
|
|||||||
// transmit all msgs, beginning with the msg at p->msg_idx, whose 'sample_idx' is <= p->sample_idx
|
// transmit all msgs, beginning with the msg at p->msg_idx, whose 'sample_idx' is <= p->sample_idx
|
||||||
while( p->msg_idx < p->msgN && p->sample_idx >= p->msgA[p->msg_idx].sample_idx )
|
while( p->msg_idx < p->msgN && p->sample_idx >= p->msgA[p->msg_idx].sample_idx )
|
||||||
{
|
{
|
||||||
recd_t* r = p->recd_array->recdA + rbuf->recdN;
|
|
||||||
msg_t* m = p->msgA + p->msg_idx;
|
msg_t* m = p->msgA + p->msg_idx;
|
||||||
|
|
||||||
// if the end-loc was encountered
|
// if the end-loc was encountered
|
||||||
@ -640,16 +668,12 @@ namespace cw
|
|||||||
_do_begin_stopping(proc,p,p->stopping_ms);
|
_do_begin_stopping(proc,p,p->stopping_ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if the base pointer of the output recd array has not yet been set
|
|
||||||
if( rbuf->recdA == nullptr )
|
|
||||||
rbuf->recdA = r;
|
|
||||||
|
|
||||||
bool note_on_fl = midi::isNoteOn(m->midi->status, m->midi->d1);
|
bool note_on_fl = midi::isNoteOn(m->midi->status, m->midi->d1);
|
||||||
|
|
||||||
// fill the output record with this msg but filter out note-on's when in stopping-state
|
// fill the output record with this msg but filter out note-on's when in stopping-state
|
||||||
if( p->state == kPlayStateId || (p->state==kStoppingStateId && note_on_fl==false) )
|
if( p->state == kPlayStateId || (p->state==kStoppingStateId && note_on_fl==false) )
|
||||||
{
|
{
|
||||||
_set_output_record(p, rbuf, m, r );
|
_set_output_record(p, rbuf, m );
|
||||||
|
|
||||||
if( note_on_fl )
|
if( note_on_fl )
|
||||||
p->note_cnt += 1;
|
p->note_cnt += 1;
|
||||||
@ -680,119 +704,6 @@ namespace cw
|
|||||||
errLabel:
|
errLabel:
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
rc_t _exec( proc_t* proc, inst_t* p )
|
|
||||||
{
|
|
||||||
rc_t rc = kOkRC;
|
|
||||||
rbuf_t* rbuf = nullptr;
|
|
||||||
|
|
||||||
// if the begin loc/meas was changed
|
|
||||||
if( p->bVId != kInvalidId )
|
|
||||||
{
|
|
||||||
_on_new_begin_loc(proc,p,p->bVId);
|
|
||||||
p->bVId = kInvalidId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if the end loc/meas was changed
|
|
||||||
if( p->eVId != kInvalidId )
|
|
||||||
{
|
|
||||||
_on_new_end_loc(proc,p,p->eVId);
|
|
||||||
p->eVId = kInvalidId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if the start button was clicked
|
|
||||||
if( p->start_trig_fl )
|
|
||||||
{
|
|
||||||
_on_start_clicked(proc,p);
|
|
||||||
p->start_trig_fl = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if the stop button was clicked
|
|
||||||
if( p->stop_trig_fl )
|
|
||||||
{
|
|
||||||
_on_stop_clicked(proc,p);
|
|
||||||
p->stop_trig_fl = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if in idle state then there is noting to do
|
|
||||||
if( p->state == kIdleStateId )
|
|
||||||
goto errLabel;
|
|
||||||
|
|
||||||
// advance sample_idx to the end sample associated with this cycle
|
|
||||||
p->sample_idx += proc->ctx->framesPerCycle;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// get the output variable
|
|
||||||
if((rc = var_get(proc,kOutPId,kAnyChIdx,rbuf)) != kOkRC )
|
|
||||||
rc = cwLogError(kInvalidStateRC,"The MIDI file instance '%s' does not have a valid MIDI output buffer.",proc->label);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
if( p->state == kStoppedStateId )
|
|
||||||
{
|
|
||||||
rc = _do_stop_now(proc,p,rbuf);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rbuf->recdA = nullptr;
|
|
||||||
rbuf->recdN = 0;
|
|
||||||
|
|
||||||
|
|
||||||
// transmit all msgs, beginning with the msg at p->msg_idx, whose 'sample_idx' is <= p->sample_idx
|
|
||||||
while( p->msg_idx < p->msgN && p->sample_idx >= p->msgA[p->msg_idx].sample_idx )
|
|
||||||
{
|
|
||||||
recd_t* r = p->recd_array->recdA + rbuf->recdN;
|
|
||||||
msg_t* m = p->msgA + p->msg_idx;
|
|
||||||
bool note_on_fl = false;
|
|
||||||
|
|
||||||
// if the end-loc was encountered
|
|
||||||
if( p->state==kPlayStateId && p->end_msg_idx != kInvalidIdx && p->msg_idx > p->end_msg_idx )
|
|
||||||
{
|
|
||||||
_do_begin_stopping(proc,p,p->stopping_ms);
|
|
||||||
}
|
|
||||||
|
|
||||||
// if the base pointer of the output recd array has not yet been set
|
|
||||||
if( rbuf->recdA == nullptr )
|
|
||||||
rbuf->recdA = r;
|
|
||||||
|
|
||||||
// if we are in play-state and this is a note-on
|
|
||||||
if( p->state==kPlayStateId && (note_on_fl = midi::isNoteOn(m->midi->status, m->midi->d1)) )
|
|
||||||
p->note_cnt += 1;
|
|
||||||
|
|
||||||
// if this is a note-off
|
|
||||||
if( midi::isNoteOff(m->midi->status, m->midi->d1 ) && p->note_cnt>0 )
|
|
||||||
p->note_cnt -= 1;
|
|
||||||
|
|
||||||
|
|
||||||
// fill the output record with this msg but filter out note-on's when in stopping-state
|
|
||||||
if( p->state == kPlayStateId || (p->state==kStoppingStateId && note_on_fl==false) )
|
|
||||||
{
|
|
||||||
_set_output_record(p, rbuf, m, r );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
p->msg_idx += 1;
|
|
||||||
|
|
||||||
// track the current measure
|
|
||||||
if( m->meas > p->cur_meas )
|
|
||||||
{
|
|
||||||
cwLogInfo("meas:%i",m->meas);
|
|
||||||
p->cur_meas = m->meas;
|
|
||||||
}
|
|
||||||
} // end-while
|
|
||||||
|
|
||||||
if( (p->state==kStoppingStateId && (p->note_cnt == 0 || p->sample_idx> p->stopping_sample_idx)) || p->msg_idx == p->msgN )
|
|
||||||
{
|
|
||||||
p->state = kStoppedStateId; // this will be noticed in the next execution
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
errLabel:
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
rc_t _report( proc_t* proc, inst_t* p )
|
rc_t _report( proc_t* proc, inst_t* p )
|
||||||
{ return kOkRC; }
|
{ return kOkRC; }
|
||||||
@ -1937,6 +1848,9 @@ namespace cw
|
|||||||
goto errLabel;
|
goto errLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//preset_sel::report(p->psH);
|
||||||
|
//preset_sel::report_presets(p->psH);
|
||||||
|
|
||||||
// The location is coming from a 'record', get the location field.
|
// The location is coming from a 'record', get the location field.
|
||||||
if((p->loc_fld_idx = recd_type_field_index( rbuf->type, "loc")) == kInvalidIdx )
|
if((p->loc_fld_idx = recd_type_field_index( rbuf->type, "loc")) == kInvalidIdx )
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user