cmXScore.c: _cmXScoreSetAbsoluteTime() is now automatically called from _cmXScoreSort().
This commit is contained in:
parent
1d1681eefd
commit
4ac92aef52
@ -882,32 +882,6 @@ cmXsNote_t* _cmXScoreInsertSortedNote( cmXsNote_t* s0, cmXsNote_t* np )
|
|||||||
return s0;
|
return s0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _cmXScoreSort( cmXScore_t* p )
|
|
||||||
{
|
|
||||||
// for each part
|
|
||||||
cmXsPart_t* pp = p->partL;
|
|
||||||
for(; pp!=NULL; pp=pp->link)
|
|
||||||
{
|
|
||||||
// for each measure in this part
|
|
||||||
cmXsMeas_t* mp = pp->measL;
|
|
||||||
for(; mp!=NULL; mp=mp->link)
|
|
||||||
{
|
|
||||||
// explicitely set noteL to NULL to in case we are re-sorting
|
|
||||||
mp->noteL = NULL;
|
|
||||||
|
|
||||||
// for each voice in this measure
|
|
||||||
cmXsVoice_t* vp = mp->voiceL;
|
|
||||||
for(; vp!=NULL; vp=vp->link)
|
|
||||||
{
|
|
||||||
// for each note in this measure
|
|
||||||
cmXsNote_t* np = vp->noteL;
|
|
||||||
for(; np!=NULL; np=np->mlink)
|
|
||||||
mp->noteL = _cmXScoreInsertSortedNote(mp->noteL,np);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the cmXsNode_t.secs and dsecs.
|
// Set the cmXsNode_t.secs and dsecs.
|
||||||
void _cmXScoreSetAbsoluteTime( cmXScore_t* p )
|
void _cmXScoreSetAbsoluteTime( cmXScore_t* p )
|
||||||
{
|
{
|
||||||
@ -960,6 +934,36 @@ void _cmXScoreSetAbsoluteTime( cmXScore_t* p )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void _cmXScoreSort( cmXScore_t* p )
|
||||||
|
{
|
||||||
|
// for each part
|
||||||
|
cmXsPart_t* pp = p->partL;
|
||||||
|
for(; pp!=NULL; pp=pp->link)
|
||||||
|
{
|
||||||
|
// for each measure in this part
|
||||||
|
cmXsMeas_t* mp = pp->measL;
|
||||||
|
for(; mp!=NULL; mp=mp->link)
|
||||||
|
{
|
||||||
|
// explicitely set noteL to NULL to in case we are re-sorting
|
||||||
|
mp->noteL = NULL;
|
||||||
|
|
||||||
|
// for each voice in this measure
|
||||||
|
cmXsVoice_t* vp = mp->voiceL;
|
||||||
|
for(; vp!=NULL; vp=vp->link)
|
||||||
|
{
|
||||||
|
// for each note in this measure
|
||||||
|
cmXsNote_t* np = vp->noteL;
|
||||||
|
for(; np!=NULL; np=np->mlink)
|
||||||
|
mp->noteL = _cmXScoreInsertSortedNote(mp->noteL,np);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// The order of events may have changed update the absolute time.
|
||||||
|
_cmXScoreSetAbsoluteTime( p );
|
||||||
|
}
|
||||||
|
|
||||||
// All notes in a[aN] are on the same tick
|
// All notes in a[aN] are on the same tick
|
||||||
unsigned _cmXsSpreadGraceNotes( cmXsNote_t** a, unsigned aN )
|
unsigned _cmXsSpreadGraceNotes( cmXsNote_t** a, unsigned aN )
|
||||||
{
|
{
|
||||||
@ -1514,7 +1518,7 @@ void _cmXScoreGraceInsertTimeBase( cmXScore_t* p, unsigned graceGroupId, cmXsNot
|
|||||||
_cmXScoreInsertTime(p,np->meas,np,expand_ticks);
|
_cmXScoreInsertTime(p,np->meas,np,expand_ticks);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Insert the grace notes in between the first and last note in the group
|
// (a) Insert the grace notes in between the first and last note in the group
|
||||||
// by inserting time between the first and last note.
|
// by inserting time between the first and last note.
|
||||||
// Note that in effect his means that the last note is pushed back
|
// Note that in effect his means that the last note is pushed back
|
||||||
// in time by the total duration of the grace notes.
|
// in time by the total duration of the grace notes.
|
||||||
@ -1523,7 +1527,7 @@ void _cmXScoreGraceInsertTime( cmXScore_t* p, unsigned graceGroupId, cmXsNote_t*
|
|||||||
_cmXScoreGraceInsertTimeBase( p, graceGroupId,aV,aN, aV[aN-1]->tick );
|
_cmXScoreGraceInsertTimeBase( p, graceGroupId,aV,aN, aV[aN-1]->tick );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Insert the grace notes in between the first and last note in the group
|
// (s) Insert the grace notes in between the first and last note in the group
|
||||||
// but do not insert any additional time betwee the first and last note.
|
// but do not insert any additional time betwee the first and last note.
|
||||||
// In effect time is removed from the first note and taken by the grace notes.
|
// In effect time is removed from the first note and taken by the grace notes.
|
||||||
// The time position of the last note is therefore unchanged.
|
// The time position of the last note is therefore unchanged.
|
||||||
@ -1550,7 +1554,7 @@ void _cmXScoreGraceOverlayTime( cmXScore_t* p, unsigned graceGroupId, cmXsNote_t
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Play the first grace at the time of the first note in the group (which is a non-grace note)
|
// (A) Play the first grace at the time of the first note in the group (which is a non-grace note)
|
||||||
// and then expand time while inserting the other grace notes.
|
// and then expand time while inserting the other grace notes.
|
||||||
void _cmXScoreGraceInsertAfterFirst( cmXScore_t* p, unsigned graceGroupId, cmXsNote_t* aV[], unsigned aN )
|
void _cmXScoreGraceInsertAfterFirst( cmXScore_t* p, unsigned graceGroupId, cmXsNote_t* aV[], unsigned aN )
|
||||||
{
|
{
|
||||||
@ -1558,7 +1562,7 @@ void _cmXScoreGraceInsertAfterFirst( cmXScore_t* p, unsigned graceGroupId, cmXsN
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Play the first grace not shortly (one grace note duration) after the first note
|
// (n) Play the first grace not shortly (one grace note duration) after the first note
|
||||||
// in the group (which is a non-grace note) and then expand time while inserting the other
|
// in the group (which is a non-grace note) and then expand time while inserting the other
|
||||||
// grace notes.
|
// grace notes.
|
||||||
void _cmXScoreGraceInsertSoonAfterFirst( cmXScore_t* p, unsigned graceGroupId, cmXsNote_t* aV[], unsigned aN )
|
void _cmXScoreGraceInsertSoonAfterFirst( cmXScore_t* p, unsigned graceGroupId, cmXsNote_t* aV[], unsigned aN )
|
||||||
@ -1672,7 +1676,7 @@ cmXsRC_t _cmXScoreProcessGraceNotes( cmXScore_t* p )
|
|||||||
n1p = mp->noteL;
|
n1p = mp->noteL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(1)
|
if(0)
|
||||||
{
|
{
|
||||||
bool fl = n0p != NULL && n0p->tick < n1p->tick;
|
bool fl = n0p != NULL && n0p->tick < n1p->tick;
|
||||||
unsigned type = n1p->flags & (kBegGraceXsFl|kEndGraceXsFl|kAddGraceXsFl|kSubGraceXsFl|kAFirstGraceXsFl|kNFirstGraceXsFl);
|
unsigned type = n1p->flags & (kBegGraceXsFl|kEndGraceXsFl|kAddGraceXsFl|kSubGraceXsFl|kAFirstGraceXsFl|kNFirstGraceXsFl);
|
||||||
@ -1773,8 +1777,6 @@ cmXsRC_t cmXScoreInitialize( cmCtx_t* ctx, cmXsH_t* hp, const cmChar_t* xmlFn )
|
|||||||
|
|
||||||
_cmXScoreSort(p);
|
_cmXScoreSort(p);
|
||||||
|
|
||||||
_cmXScoreSetAbsoluteTime(p);
|
|
||||||
|
|
||||||
_cmXScoreResolveTiesAndLoc(p);
|
_cmXScoreResolveTiesAndLoc(p);
|
||||||
|
|
||||||
_cmXScoreRemoveDuplicateNotes(p);
|
_cmXScoreRemoveDuplicateNotes(p);
|
||||||
@ -3298,7 +3300,7 @@ cmXsRC_t cmXScoreTest(
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cmXScoreReport(h,&ctx->rpt,true);
|
//cmXScoreReport(h,&ctx->rpt,true);
|
||||||
|
|
||||||
errLabel:
|
errLabel:
|
||||||
return cmXScoreFinalize(&h);
|
return cmXScoreFinalize(&h);
|
||||||
|
Loading…
Reference in New Issue
Block a user