Browse Source

cmScoreMatchGraphic.c : Display damper pedal events.

master
kevin 8 years ago
parent
commit
3f3bc296aa
1 changed files with 31 additions and 23 deletions
  1. 31
    23
      app/cmScoreMatchGraphic.c

+ 31
- 23
app/cmScoreMatchGraphic.c View File

@@ -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);

Loading…
Cancel
Save