cmProc4.c:
1. cmScMeasCalcVal(): changed method of calculating the first and last MIDI event in p->midiBuf[] and first and the score location window area defined by 'bli' and 'ln'. 2. cmScMeasExec(): Set p->vsi and p->vsli to indicate that no new 'sets' are available prior to the early return when locIdx==cmInvalidIdx.
This commit is contained in:
parent
5fac001b90
commit
7b84ae7bfb
57
cmProc4.c
57
cmProc4.c
@ -1277,7 +1277,9 @@ cmRC_t _cmScMatchInitMtx( cmScMatch* p, unsigned rn, unsigned cn )
|
|||||||
{
|
{
|
||||||
//if( rn >p->mrn && cn > p->mcn )
|
//if( rn >p->mrn && cn > p->mcn )
|
||||||
if( rn*cn > p->mrn*p->mcn )
|
if( rn*cn > p->mrn*p->mcn )
|
||||||
|
{
|
||||||
return cmCtxRtCondition( &p->obj, cmInvalidArgRC, "MIDI sequence length must be less than %i. Score sequence length must be less than %i.",p->mmn,p->msn);
|
return cmCtxRtCondition( &p->obj, cmInvalidArgRC, "MIDI sequence length must be less than %i. Score sequence length must be less than %i.",p->mmn,p->msn);
|
||||||
|
}
|
||||||
|
|
||||||
// if the size of the mtx is not changing then there is nothing to do
|
// if the size of the mtx is not changing then there is nothing to do
|
||||||
if( rn == p->rn && cn == p->cn )
|
if( rn == p->rn && cn == p->cn )
|
||||||
@ -1990,10 +1992,26 @@ cmRC_t cmScMatcherReset( cmScMatcher* p, unsigned scLocIdx )
|
|||||||
p->ili = 0;
|
p->ili = 0;
|
||||||
|
|
||||||
// convert scLocIdx to an index into p->mp->loc[]
|
// convert scLocIdx to an index into p->mp->loc[]
|
||||||
unsigned i;
|
unsigned i = 0;
|
||||||
for(i=0; i<p->mp->locN; ++i)
|
while(1)
|
||||||
if( p->mp->loc[i].scLocIdx == scLocIdx )
|
{
|
||||||
p->ili = i;
|
for(i=0; i<p->mp->locN; ++i)
|
||||||
|
if( p->mp->loc[i].scLocIdx == scLocIdx )
|
||||||
|
{
|
||||||
|
p->ili = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(p->mp->locN>0);
|
||||||
|
if( i!=p->mp->locN || scLocIdx==p->mp->loc[p->mp->locN-1].scLocIdx)
|
||||||
|
break;
|
||||||
|
|
||||||
|
scLocIdx += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( i==p->mp->locN)
|
||||||
|
return cmCtxRtCondition( &p->obj, cmSubSysFailRC, "Score matcher reset failed.");
|
||||||
|
|
||||||
|
|
||||||
return cmOkRC;
|
return cmOkRC;
|
||||||
}
|
}
|
||||||
@ -2240,7 +2258,9 @@ cmRC_t cmScMatcherExec( cmScMatcher* p, unsigned smpIdx, unsigned status, c
|
|||||||
if( fl && p->mbi == 0 )
|
if( fl && p->mbi == 0 )
|
||||||
{
|
{
|
||||||
if( (p->begSyncLocIdx = cmScMatcherScan(p,p->ili,p->initHopCnt)) == cmInvalidIdx )
|
if( (p->begSyncLocIdx = cmScMatcherScan(p,p->ili,p->initHopCnt)) == cmInvalidIdx )
|
||||||
|
{
|
||||||
rc = cmInvalidArgRC; // signal init. scan sync. fail
|
rc = cmInvalidArgRC; // signal init. scan sync. fail
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//cmScMatcherPrintPath(p);
|
//cmScMatcherPrintPath(p);
|
||||||
@ -2314,6 +2334,7 @@ typedef struct cmScMatcherPrint_str
|
|||||||
unsigned mni;
|
unsigned mni;
|
||||||
unsigned pitch;
|
unsigned pitch;
|
||||||
unsigned vel;
|
unsigned vel;
|
||||||
|
unsigned barNumb;
|
||||||
} cmScMatcherPrint_t;
|
} cmScMatcherPrint_t;
|
||||||
|
|
||||||
void _cmScMatcherInsertPrint(cmScMatcherPrint_t* a, unsigned i, unsigned* anp, unsigned aan, const cmScMatcherResult_t* rp, unsigned scLocIdx )
|
void _cmScMatcherInsertPrint(cmScMatcherPrint_t* a, unsigned i, unsigned* anp, unsigned aan, const cmScMatcherResult_t* rp, unsigned scLocIdx )
|
||||||
@ -2389,6 +2410,7 @@ void cmScMatcherPrint( cmScMatcher* p )
|
|||||||
pp->mni = cmInvalidIdx;
|
pp->mni = cmInvalidIdx;
|
||||||
pp->pitch = ep->pitch;
|
pp->pitch = ep->pitch;
|
||||||
pp->vel = kInvalidMidiVelocity;
|
pp->vel = kInvalidMidiVelocity;
|
||||||
|
pp->barNumb = ep->barNumb;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -2487,7 +2509,7 @@ void cmScMatcherPrint( cmScMatcher* p )
|
|||||||
|
|
||||||
for(i=0; i<an; ++i)
|
for(i=0; i<an; ++i)
|
||||||
{
|
{
|
||||||
printf("%4i %4i %4s %c%c%c\n",a[i].scLocIdx,a[i].mni,
|
printf("%4i %4i %4i %4s %c%c%c\n",a[i].scLocIdx,a[i].barNumb,a[i].mni,
|
||||||
cmIsFlag(a[i].flags,kSmBarFl) ? "|" : cmMidiToSciPitch(a[i].pitch,NULL,0),
|
cmIsFlag(a[i].flags,kSmBarFl) ? "|" : cmMidiToSciPitch(a[i].pitch,NULL,0),
|
||||||
cmIsFlag(a[i].flags,kSmNoteFl) ? 'n' : ' ',
|
cmIsFlag(a[i].flags,kSmNoteFl) ? 'n' : ' ',
|
||||||
cmIsFlag(a[i].flags,kSmMatchFl) ? 'm' : (cmIsFlag(a[i].flags,kSmTransFl) ? 't' : ' '),
|
cmIsFlag(a[i].flags,kSmMatchFl) ? 'm' : (cmIsFlag(a[i].flags,kSmTransFl) ? 't' : ' '),
|
||||||
@ -2495,6 +2517,9 @@ void cmScMatcherPrint( cmScMatcher* p )
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
cmMemFree(a);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2992,7 +3017,7 @@ void _cmScMeasPrintResult( cmScMeas* p, cmScMeasSet_t* sp, _cmScMeasResult_t* r
|
|||||||
void _cmScMeasCalcVal( cmScMeas* p, cmScMeasSet_t* sp, int n_mii )
|
void _cmScMeasCalcVal( cmScMeas* p, cmScMeasSet_t* sp, int n_mii )
|
||||||
{
|
{
|
||||||
unsigned mn = 0;
|
unsigned mn = 0;
|
||||||
int i;
|
int i,k = cmInvalidIdx;
|
||||||
|
|
||||||
if( n_mii == 0 )
|
if( n_mii == 0 )
|
||||||
return;
|
return;
|
||||||
@ -3003,18 +3028,20 @@ void _cmScMeasCalcVal( cmScMeas* p, cmScMeasSet_t* sp, int n_mii )
|
|||||||
// prior to the set's begScLocIdx.
|
// prior to the set's begScLocIdx.
|
||||||
for(i=n_mii; i>=0; --i)
|
for(i=n_mii; i>=0; --i)
|
||||||
{
|
{
|
||||||
++mn;
|
|
||||||
|
|
||||||
if( p->midiBuf[i].locIdx != cmInvalidIdx )
|
if( p->midiBuf[i].locIdx != cmInvalidIdx )
|
||||||
{
|
{
|
||||||
|
k = i;
|
||||||
unsigned scLocIdx = p->mp->loc[ p->midiBuf[i].locIdx ].scLocIdx;
|
unsigned scLocIdx = p->mp->loc[ p->midiBuf[i].locIdx ].scLocIdx;
|
||||||
if( scLocIdx < sp->bsli )
|
if( scLocIdx < sp->bsli )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
i = cmMax(0,i);
|
assert(k != cmInvalidIdx);
|
||||||
|
mn = n_mii - k + 1;
|
||||||
|
i = k;
|
||||||
|
|
||||||
|
assert(i>=0);
|
||||||
assert(mn>0);
|
assert(mn>0);
|
||||||
|
|
||||||
// Create a copy of the the MIDI buffer to prevent the
|
// Create a copy of the the MIDI buffer to prevent the
|
||||||
@ -3032,8 +3059,11 @@ void _cmScMeasCalcVal( cmScMeas* p, cmScMeasSet_t* sp, int n_mii )
|
|||||||
// event's prior to the one at p->midiBuf[n_mii] were assigned.
|
// event's prior to the one at p->midiBuf[n_mii] were assigned.
|
||||||
assert( (i==0 || p->midiBuf[i].locIdx!=cmInvalidIdx) && p->midiBuf[i+mn-1].locIdx != cmInvalidIdx);
|
assert( (i==0 || p->midiBuf[i].locIdx!=cmInvalidIdx) && p->midiBuf[i+mn-1].locIdx != cmInvalidIdx);
|
||||||
|
|
||||||
unsigned bli = p->midiBuf[i].locIdx;
|
unsigned l0i = cmMin(p->midiBuf[i].locIdx,p->midiBuf[i+mn-1].locIdx);
|
||||||
unsigned ln = p->midiBuf[i+mn-1].locIdx - bli + 1;
|
unsigned l1i = cmMax(p->midiBuf[i].locIdx,p->midiBuf[i+mn-1].locIdx);
|
||||||
|
|
||||||
|
unsigned bli = l0i;
|
||||||
|
unsigned ln = l1i - bli + 1;
|
||||||
double min_cost = DBL_MAX;
|
double min_cost = DBL_MAX;
|
||||||
_cmScMeasResult_t r;
|
_cmScMeasResult_t r;
|
||||||
memset(&r,0,sizeof(r));
|
memset(&r,0,sizeof(r));
|
||||||
@ -3112,6 +3142,11 @@ cmRC_t cmScMeasExec( cmScMeas* p, unsigned mni, unsigned locIdx, unsigned scEvtI
|
|||||||
p->midiBuf[n_mii].pitch = pitch;
|
p->midiBuf[n_mii].pitch = pitch;
|
||||||
p->midiBuf[n_mii].vel = vel;
|
p->midiBuf[n_mii].vel = vel;
|
||||||
|
|
||||||
|
// setting vsi=nsi and vsli=nsli will indicate to the calling
|
||||||
|
// program that no new sets are ready.
|
||||||
|
p->vsi = p->nsi;
|
||||||
|
p->vsli = p->nsli;
|
||||||
|
|
||||||
if( locIdx == cmInvalidIdx )
|
if( locIdx == cmInvalidIdx )
|
||||||
return cmOkRC;
|
return cmOkRC;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user