cmXScore.c : Fixed sostenuto / damper edits from reorder file implementation.
Added processing for ~x sostenuto edit.
This commit is contained in:
parent
f0b6e55207
commit
de1649b204
@ -1541,6 +1541,37 @@ cmXsNote_t* _cmXsReorderFindNote( cmXScore_t* p, unsigned measNumb, const cmXsR
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _cmXScoreInsertPedalEvent( cmXScore_t* p, const cmXsReorder_t* r, unsigned flags )
|
||||||
|
{
|
||||||
|
// Create a new score event record
|
||||||
|
cmXsNote_t* nn = cmLhAllocZ(p->lhH,cmXsNote_t,1);
|
||||||
|
|
||||||
|
nn->uid = p->nextUid++;
|
||||||
|
nn->voice = r->note->voice;
|
||||||
|
nn->meas = r->note->meas;
|
||||||
|
nn->flags = flags;
|
||||||
|
|
||||||
|
// Pedal down events occur after the event they are attached to
|
||||||
|
if( cmIsFlag(flags,kSostDnXsFl | kPedalDnXsFl ) )
|
||||||
|
{
|
||||||
|
nn->tick = r->note->tick + 1;
|
||||||
|
_cmXScoreInsertNoteAfter(r->note,nn);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Pedal up events occur before the event they are attached to
|
||||||
|
if( cmIsFlag(flags,kSostUpXsFl | kPedalUpXsFl ) )
|
||||||
|
{
|
||||||
|
nn->tick = r->note->tick==0 ? 0 : r->note->tick - 1;
|
||||||
|
_cmXScoreInsertNoteBefore(r->note,nn);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ assert(0); }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
cmXsRC_t _cmXScoreReorderMeas( cmXScore_t* p, unsigned measNumb, cmXsReorder_t* rV, unsigned rN )
|
cmXsRC_t _cmXScoreReorderMeas( cmXScore_t* p, unsigned measNumb, cmXsReorder_t* rV, unsigned rN )
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
@ -1600,30 +1631,21 @@ cmXsRC_t _cmXScoreReorderMeas( cmXScore_t* p, unsigned measNumb, cmXsReorder_t*
|
|||||||
// Insert new note records for pedal up/dn events.
|
// Insert new note records for pedal up/dn events.
|
||||||
for(i=0; i<rN; ++i)
|
for(i=0; i<rN; ++i)
|
||||||
{
|
{
|
||||||
|
|
||||||
if( rV[i].newFlags != 0 )
|
if( rV[i].newFlags != 0 )
|
||||||
{
|
{
|
||||||
// Create a new score event record
|
|
||||||
cmXsNote_t* nn = cmLhAllocZ(p->lhH,cmXsNote_t,1);
|
|
||||||
|
|
||||||
nn->uid = p->nextUid++;
|
if( cmIsFlag(rV[i].newFlags,kPedalDnXsFl ) )
|
||||||
nn->voice = rV[i].note->voice;
|
_cmXScoreInsertPedalEvent(p,rV + i,kPedalDnXsFl);
|
||||||
nn->meas = rV[i].note->meas;
|
|
||||||
nn->flags = rV[i].newFlags;
|
|
||||||
|
|
||||||
// Pedal down events occur after the event they are attached to
|
|
||||||
if( cmIsFlag(rV[i].newFlags,kSostDnXsFl | kPedalDnXsFl ) )
|
|
||||||
{
|
|
||||||
nn->tick = rV[i].note->tick + 1;
|
|
||||||
_cmXScoreInsertNoteAfter(rV[i].note,nn);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pedal up events occur before the event they are attached to
|
if( cmIsFlag(rV[i].newFlags,kSostDnXsFl ) )
|
||||||
if( cmIsFlag(rV[i].newFlags,kSostUpXsFl | kPedalUpXsFl ) )
|
_cmXScoreInsertPedalEvent(p,rV + i,kSostDnXsFl);
|
||||||
{
|
|
||||||
nn->tick = rV[i].note->tick==0 ? 0 : rV[i].note->tick - 1;
|
if( cmIsFlag(rV[i].newFlags,kPedalUpXsFl ) )
|
||||||
_cmXScoreInsertNoteBefore(rV[i].note,nn);
|
_cmXScoreInsertPedalEvent(p,rV + i,kPedalUpXsFl);
|
||||||
}
|
|
||||||
|
if( cmIsFlag(rV[i].newFlags,kSostUpXsFl ) )
|
||||||
|
_cmXScoreInsertPedalEvent(p,rV + i,kSostUpXsFl);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1726,8 +1748,12 @@ cmXsRC_t _cmXScoreReorderParseFlags(cmXScore_t* p, const cmChar_t* b, unsigned
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'u':
|
case 'u':
|
||||||
*newFlagsRef |= kSostUpXsFl; // sostenuto pedal up
|
*newFlagsRef |= kSostUpXsFl; // sostenuto pedal up just before this event
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'x':
|
||||||
|
*newFlagsRef |= (kSostUpXsFl | kSostDnXsFl); // sostenuto pedal up just before this event and sost down just after it.
|
||||||
|
break;
|
||||||
|
|
||||||
case 'D':
|
case 'D':
|
||||||
*newFlagsRef |= kPedalDnXsFl; // damper pedal down
|
*newFlagsRef |= kPedalDnXsFl; // damper pedal down
|
||||||
|
Loading…
Reference in New Issue
Block a user