|
@@ -25,8 +25,9 @@ enum
|
25
|
25
|
kLocSmgFl = 0x0001,
|
26
|
26
|
kBarSmgFl = 0x0002,
|
27
|
27
|
kNoteSmgFl = 0x0004,
|
28
|
|
- kMidiSmgFl = 0x0008,
|
29
|
|
- kNoMatchSmgFl = 0x0010
|
|
28
|
+ kPedalSmgFl = 0x0008,
|
|
29
|
+ kMidiSmgFl = 0x0010,
|
|
30
|
+ kNoMatchSmgFl = 0x0020
|
30
|
31
|
};
|
31
|
32
|
|
32
|
33
|
// Graphic box representing a score label or MIDI event
|
|
@@ -60,7 +61,7 @@ typedef struct cmSmgLoc_str
|
60
|
61
|
// Score label
|
61
|
62
|
typedef struct
|
62
|
63
|
{
|
63
|
|
- unsigned type; // kBarEvtScId | kNonEvtScId
|
|
64
|
+ unsigned type; // kBarEvtScId | kNonEvtScId | kPedalEvtScId
|
64
|
65
|
unsigned barNumb;
|
65
|
66
|
unsigned csvEventId;
|
66
|
67
|
unsigned locIdx;
|
|
@@ -222,37 +223,44 @@ cmSmgRC_t _cmSmgInitFromScore( cmCtx_t* ctx, cmSmg_t* p, const cmChar_t* scoreFn
|
222
|
223
|
for(j=0; j<l->evtCnt; ++j)
|
223
|
224
|
{
|
224
|
225
|
const cmScoreEvt_t* e = l->evtArray[j];
|
|
226
|
+ unsigned flags = kNoMatchSmgFl;
|
|
227
|
+ cmChar_t* text = NULL;
|
225
|
228
|
|
226
|
229
|
switch( e->type)
|
227
|
230
|
{
|
228
|
|
- case kBarEvtScId:
|
229
|
231
|
case kNonEvtScId:
|
230
|
|
- {
|
231
|
|
- // Note: Mark all score boxes as 'no-match' - this will be cleared in cmScoreMatchGraphicInsertMidi().
|
232
|
|
- unsigned flags = kNoMatchSmgFl | (e->type==kNonEvtScId ? kNoteSmgFl : kBarSmgFl);
|
233
|
|
- cmChar_t* text = NULL;
|
|
232
|
+ flags |= kNoteSmgFl;
|
|
233
|
+ text = cmMemAllocStr( cmMidiToSciPitch( e->pitch, NULL, 0));
|
|
234
|
+ break;
|
234
|
235
|
|
235
|
|
- assert( k < p->scN );
|
|
236
|
+ case kBarEvtScId:
|
|
237
|
+ flags |= kBarSmgFl;
|
|
238
|
+ text = cmTsPrintfP(NULL,"%i",e->barNumb);
|
|
239
|
+ break;
|
|
240
|
+
|
|
241
|
+ case kPedalEvtScId:
|
|
242
|
+ flags |= kPedalSmgFl;
|
|
243
|
+ text = cmTsPrintfP(NULL,"%s", cmIsFlag(e->flags,kPedalDnScFl)?"v":"^");
|
|
244
|
+ break;
|
|
245
|
+ }
|
236
|
246
|
|
237
|
|
- p->scV[k].type = e->type;
|
238
|
|
- p->scV[k].csvEventId = e->csvEventId;
|
239
|
|
- p->scV[k].locIdx = i;
|
240
|
|
- p->scV[k].barNumb = e->barNumb;
|
|
247
|
+ // if e is a score event of interest then store a reference to it
|
|
248
|
+ if( flags != kNoMatchSmgFl )
|
|
249
|
+ {
|
|
250
|
+ assert( k < p->scN );
|
241
|
251
|
|
242
|
|
- if( e->type == kBarEvtScId )
|
243
|
|
- text = cmTsPrintfP(NULL,"%i",e->barNumb);
|
244
|
|
- else
|
245
|
|
- text = cmMemAllocStr( cmMidiToSciPitch( e->pitch, NULL, 0));
|
246
|
|
-
|
247
|
|
- p->scV[k].box = _cmSmgInsertBox(p, i, flags, e->csvEventId, text, NULL );
|
|
252
|
+ p->scV[k].type = e->type;
|
|
253
|
+ p->scV[k].csvEventId = e->csvEventId;
|
|
254
|
+ p->scV[k].locIdx = i;
|
|
255
|
+ p->scV[k].barNumb = e->barNumb;
|
|
256
|
+
|
|
257
|
+ p->scV[k].box = _cmSmgInsertBox(p, i, flags, e->csvEventId, text, NULL );
|
248
|
258
|
|
249
|
|
- k += 1;
|
250
|
|
- }
|
251
|
|
- break;
|
|
259
|
+ k += 1;
|
252
|
260
|
}
|
253
|
261
|
}
|
254
|
262
|
}
|
255
|
|
-
|
|
263
|
+
|
256
|
264
|
p->scN = k;
|
257
|
265
|
|
258
|
266
|
cmScoreFinalize(&scH);
|