|
@@ -777,32 +777,84 @@ void _cmXScoreSort( cmXScore_t* p )
|
777
|
777
|
}
|
778
|
778
|
}
|
779
|
779
|
|
780
|
|
-bool _cmXScoreFindTiedNote( cmXScore_t* p, cmXsMeas_t* mp, cmXsNote_t* np, bool rptFl )
|
|
780
|
+bool _cmXScoreFindTiedNote( cmXScore_t* p, cmXsMeas_t* mp, cmXsNote_t* n0p, bool rptFl )
|
781
|
781
|
{
|
782
|
|
- cmXsNote_t* nnp = np->slink; // begin w/ note following np
|
783
|
|
- unsigned measNumb = mp->number;
|
784
|
|
- unsigned measNumb0= measNumb;
|
785
|
|
- cmChar_t acc = np->alter==-1?'b' : (np->alter==1?'#':' ');
|
|
782
|
+ cmXsNote_t* nnp = n0p->slink; // begin w/ note following np
|
|
783
|
+ unsigned measNumb = mp->number;
|
|
784
|
+ cmChar_t acc = n0p->alter==-1?'b' : (n0p->alter==1?'#':' ');
|
786
|
785
|
|
787
|
786
|
if( rptFl )
|
788
|
|
- printf("%i %s ",np->meas->number,cmMidiToSciPitch(np->pitch,NULL,0));
|
|
787
|
+ printf("%i %i %s ",n0p->meas->number,n0p->tick,cmMidiToSciPitch(n0p->pitch,NULL,0));
|
789
|
788
|
|
790
|
|
- // for each successive measure
|
791
|
|
- for(; mp!=NULL; mp=mp->link)
|
|
789
|
+
|
|
790
|
+ while(1)
|
792
|
791
|
{
|
|
792
|
+ // if we are at the end of a measure advance to the next measure
|
793
|
793
|
if( nnp == NULL )
|
|
794
|
+ {
|
|
795
|
+ mp = mp->link;
|
794
|
796
|
nnp = mp->noteL;
|
795
|
797
|
|
|
798
|
+ // if a measure was completed and no end note was found ... then the tie is unterminated
|
|
799
|
+ // (a tie must be continued in every measure which it passes through)
|
|
800
|
+ if( mp->number > measNumb + 1 )
|
|
801
|
+ break;
|
|
802
|
+ }
|
|
803
|
+
|
|
804
|
+ // for each note starting at nnp
|
|
805
|
+ for(; nnp!=NULL; nnp=nnp->slink)
|
|
806
|
+ {
|
|
807
|
+ // if this note is tied to the originating note (np)
|
|
808
|
+ if( nnp->voice->id == n0p->voice->id && nnp->step == n0p->step && nnp->octave == n0p->octave )
|
|
809
|
+ {
|
|
810
|
+ nnp->flags |= kTieProcXsFl;
|
|
811
|
+ nnp->flags = cmClrFlag(nnp->flags,kOnsetXsFl);
|
|
812
|
+
|
|
813
|
+ if( rptFl )
|
|
814
|
+ printf("---> %i %i %s ",nnp->meas->number,nnp->tick,cmMidiToSciPitch(nnp->pitch,NULL,0));
|
|
815
|
+
|
|
816
|
+ // if this note is not tied to a subsequent note
|
|
817
|
+ if( cmIsNotFlag(nnp->flags,kTieBegXsFl) )
|
|
818
|
+ return true;
|
|
819
|
+
|
|
820
|
+ // record the measure number of the last note with a tie-start
|
|
821
|
+ measNumb = mp->number;
|
|
822
|
+ }
|
|
823
|
+ }
|
|
824
|
+
|
|
825
|
+ }
|
|
826
|
+
|
|
827
|
+ cmErrWarnMsg(&p->err,kUnterminatedTieXsRC,"The tied %c%c%i in measure %i was not terminated.",n0p->step,acc,n0p->octave,measNumb);
|
|
828
|
+ return false;
|
|
829
|
+}
|
|
830
|
+
|
|
831
|
+bool _cmXScoreFindTiedNote1( cmXScore_t* p, cmXsMeas_t* mp, cmXsNote_t* np, bool rptFl )
|
|
832
|
+{
|
|
833
|
+ cmXsNote_t* nnp = np->slink; // begin w/ note following np
|
|
834
|
+ unsigned measNumb = mp->number;
|
|
835
|
+ unsigned measNumb0 = measNumb;
|
|
836
|
+ cmChar_t acc = np->alter==-1?'b' : (np->alter==1?'#':' ');
|
|
837
|
+
|
|
838
|
+ if( rptFl )
|
|
839
|
+ printf("%i %i %s ",np->meas->number,np->tick,cmMidiToSciPitch(np->pitch,NULL,0));
|
|
840
|
+
|
|
841
|
+ // for each successive measure
|
|
842
|
+ for(; mp!=NULL; mp=mp->link)
|
|
843
|
+ {
|
|
844
|
+ //if( nnp == NULL )
|
|
845
|
+ // nnp = mp->noteL;
|
|
846
|
+
|
796
|
847
|
// for each note starting at nnp
|
797
|
848
|
for(; nnp!=NULL; nnp=nnp->slink)
|
798
|
849
|
{
|
|
850
|
+ // if this note is tied to the originating note (np)
|
799
|
851
|
if( nnp->voice->id == np->voice->id && nnp->step == np->step && nnp->octave == np->octave )
|
800
|
852
|
{
|
801
|
853
|
nnp->flags |= kTieProcXsFl;
|
802
|
854
|
nnp->flags = cmClrFlag(nnp->flags,kOnsetXsFl);
|
803
|
855
|
|
804
|
856
|
if( rptFl )
|
805
|
|
- printf("---> %i %s ",nnp->meas->number,cmMidiToSciPitch(nnp->pitch,NULL,0));
|
|
857
|
+ printf("---> %i %i %s ",nnp->meas->number,nnp->tick,cmMidiToSciPitch(nnp->pitch,NULL,0));
|
806
|
858
|
|
807
|
859
|
// if this note is not tied to a subsequent note
|
808
|
860
|
if( cmIsNotFlag(nnp->flags,kTieBegXsFl) )
|
|
@@ -810,7 +862,7 @@ bool _cmXScoreFindTiedNote( cmXScore_t* p, cmXsMeas_t* mp, cmXsNote_t* np, bool
|
810
|
862
|
return true;
|
811
|
863
|
}
|
812
|
864
|
|
813
|
|
- measNumb0 = mp->number;
|
|
865
|
+ measNumb0 = mp->number;
|
814
|
866
|
}
|
815
|
867
|
}
|
816
|
868
|
|
|
@@ -1212,6 +1264,12 @@ cmXsRC_t cmXScoreFinalize( cmXsH_t* hp )
|
1212
|
1264
|
bool cmXScoreIsValid( cmXsH_t h )
|
1213
|
1265
|
{ return h.h != NULL; }
|
1214
|
1266
|
|
|
1267
|
+void _cmXScoreReportTitle( cmRpt_t* rpt )
|
|
1268
|
+{
|
|
1269
|
+ cmRptPrintf(rpt," voc loc tick durtn rval flags\n");
|
|
1270
|
+ cmRptPrintf(rpt," --- ----- ----- ----- ---- --- -------------\n");
|
|
1271
|
+}
|
|
1272
|
+
|
1215
|
1273
|
void _cmXScoreReportNote( cmRpt_t* rpt, const cmXsNote_t* note )
|
1216
|
1274
|
{
|
1217
|
1275
|
const cmChar_t* B = cmIsFlag(note->flags,kBarXsFl) ? "|" : "-";
|
|
@@ -1235,7 +1293,13 @@ void _cmXScoreReportNote( cmRpt_t* rpt, const cmXsNote_t* note )
|
1235
|
1293
|
cmChar_t acc = note->alter==-1?'b':(note->alter==1?'#':' ');
|
1236
|
1294
|
snprintf(N,4,"%c%c%1i",note->step,acc,note->octave);
|
1237
|
1295
|
|
1238
|
|
- cmRptPrintf(rpt," %3i %5i %5i %5i %4.1f %3s %s%s%s%s%s%s%s%s%s%s%s%s%s",note->voice->id,note->locIdx,note->tick,note->duration,note->rvalue,N,B,R,G,D,C,e,d,t,P,S,H,T0,T1);
|
|
1296
|
+ cmRptPrintf(rpt," %3i %5i %5i %5i %4.1f %3s %s%s%s%s%s%s%s%s%s%s%s%s%s",
|
|
1297
|
+ note->voice->id,
|
|
1298
|
+ note->locIdx,
|
|
1299
|
+ note->tick,
|
|
1300
|
+ note->duration,
|
|
1301
|
+ note->rvalue,
|
|
1302
|
+ N,B,R,G,D,C,e,d,t,P,S,H,T0,T1);
|
1239
|
1303
|
|
1240
|
1304
|
if( cmIsFlag(note->flags,kSectionXsFl) )
|
1241
|
1305
|
cmRptPrintf(rpt," %s",cmStringNullGuard(note->tvalue));
|
|
@@ -1591,6 +1655,8 @@ void cmXScoreReport( cmXsH_t h, cmRpt_t* rpt, bool sortFl )
|
1591
|
1655
|
|
1592
|
1656
|
if( sortFl )
|
1593
|
1657
|
{
|
|
1658
|
+ _cmXScoreReportTitle(rpt);
|
|
1659
|
+
|
1594
|
1660
|
const cmXsNote_t* note = meas->noteL;
|
1595
|
1661
|
for(; note!=NULL; note=note->slink)
|
1596
|
1662
|
{
|
|
@@ -1606,6 +1672,8 @@ void cmXScoreReport( cmXsH_t h, cmRpt_t* rpt, bool sortFl )
|
1606
|
1672
|
else
|
1607
|
1673
|
{
|
1608
|
1674
|
|
|
1675
|
+ _cmXScoreReportTitle(rpt);
|
|
1676
|
+
|
1609
|
1677
|
const cmXsVoice_t* v = meas->voiceL;
|
1610
|
1678
|
for(; v!=NULL; v=v->link)
|
1611
|
1679
|
{
|
|
@@ -1660,7 +1728,7 @@ cmXsRC_t cmXScoreTest( cmCtx_t* ctx, const cmChar_t* xmlFn, const cmChar_t* midi
|
1660
|
1728
|
return cmErrMsg(&ctx->err,rc,"XScore alloc failed.");
|
1661
|
1729
|
|
1662
|
1730
|
cmXScoreWriteCsv(h,"/Users/kevin/temp/a0.csv");
|
1663
|
|
- cmXScoreReport(h,&ctx->rpt,false);
|
|
1731
|
+ cmXScoreReport(h,&ctx->rpt,true);
|
1664
|
1732
|
|
1665
|
1733
|
return cmXScoreFinalize(&h);
|
1666
|
1734
|
|