Browse Source

cmTimeLine.h/c Added cmTimeLineSeqToLocalSampleIndex()

master
kevin 11 years ago
parent
commit
bf8fceead1
2 changed files with 20 additions and 11 deletions
  1. 17
    11
      app/cmTimeLine.c
  2. 3
    0
      app/cmTimeLine.h

+ 17
- 11
app/cmTimeLine.c View File

635
   unsigned                 mn           = cmMidiFileMsgCount(mfH);
635
   unsigned                 mn           = cmMidiFileMsgCount(mfH);
636
   const cmMidiTrackMsg_t** mapp         = cmMidiFileMsgArray(mfH);
636
   const cmMidiTrackMsg_t** mapp         = cmMidiFileMsgArray(mfH);
637
   unsigned                 mi           = 0;
637
   unsigned                 mi           = 0;
638
-  double                   accum = 0; 
638
+  //double                   accum = 0; 
639
   _cmTlObj_t*              refOp        = op;
639
   _cmTlObj_t*              refOp        = op;
640
-  bool                     fl           = false;
640
+  //bool                     fl           = false;
641
   unsigned                 dtick        = 0;
641
   unsigned                 dtick        = 0;
642
   mfp->noteOnCnt = 0;
642
   mfp->noteOnCnt = 0;
643
   
643
   
649
 
649
 
650
     dtick = mp->dtick;
650
     dtick = mp->dtick;
651
 
651
 
652
-    if( fl )
653
-    {
654
-      dtick = 0;
655
-      fl =  mp->dtick == 0;        
656
-    }
652
+    //if( fl )
653
+    //{
654
+    //  dtick = 0;
655
+    //  fl =  mp->dtick == 0;        
656
+    //}
657
       
657
       
658
-    accum += dtick * p->srate / 1000000;
658
+    //accum += dtick * p->srate / 1000000;
659
 
659
 
660
     //int      begSmpIdx         = floor(accum_micros * p->srate / 1000000);
660
     //int      begSmpIdx         = floor(accum_micros * p->srate / 1000000);
661
-    int      begSmpIdx         = floor( dtick * p->srate / 1000000 );
661
+    int      begSmpIdx         = dtick; //floor( dtick * p->srate / 1000000.0 );
662
     int      durSmpCnt         = 0;
662
     int      durSmpCnt         = 0;
663
     unsigned midiTrkMsgByteCnt = cmMidiFilePackTrackMsgBufByteCount( mp );
663
     unsigned midiTrkMsgByteCnt = cmMidiFilePackTrackMsgBufByteCount( mp );
664
     unsigned recdByteCnt       = sizeof(cmTlMidiEvt_t) + midiTrkMsgByteCnt;
664
     unsigned recdByteCnt       = sizeof(cmTlMidiEvt_t) + midiTrkMsgByteCnt;
669
     // count the note-on messages
669
     // count the note-on messages
670
     if( mp->status == kNoteOnMdId )
670
     if( mp->status == kNoteOnMdId )
671
     {
671
     {
672
-      durSmpCnt = floor(mp->u.chMsgPtr->durTicks * p->srate  / 1000000 );
672
+      //durSmpCnt = floor(mp->u.chMsgPtr->durTicks * p->srate  / 1000000.0 );
673
+      durSmpCnt = mp->u.chMsgPtr->durTicks;
673
       ++mfp->noteOnCnt;
674
       ++mfp->noteOnCnt;
674
     }
675
     }
675
 
676
 
727
   unsigned durSmpCnt = floor(cmMidiFileDurSecs(mfH)*p->srate);
728
   unsigned durSmpCnt = floor(cmMidiFileDurSecs(mfH)*p->srate);
728
 
729
 
729
   // convert the midi file from ticks to microseconds
730
   // convert the midi file from ticks to microseconds
730
-  cmMidiFileTickToMicros(mfH);
731
+  cmMidiFileTickToSamples(mfH,p->srate,false);
731
 
732
 
732
   // assign note durations to all note-on msg's
733
   // assign note durations to all note-on msg's
733
   cmMidiFileCalcNoteDurations(mfH);
734
   cmMidiFileCalcNoteDurations(mfH);
957
   return p->srate;
958
   return p->srate;
958
 }
959
 }
959
 
960
 
961
+int cmTimeLineSeqToLocalSampleIndex( int seqSmpIdx, cmTlObj_t* localObjPtr )
962
+{
963
+  return seqSmpIdx - localObjPtr->seqSmpIdx;
964
+}
965
+
960
 cmTlObj_t* _cmTimeLineIdToObj( _cmTl_t* p, unsigned seqId, unsigned id )
966
 cmTlObj_t* _cmTimeLineIdToObj( _cmTl_t* p, unsigned seqId, unsigned id )
961
 {
967
 {
962
   assert( seqId < p->seqCnt );
968
   assert( seqId < p->seqCnt );

+ 3
- 0
app/cmTimeLine.h View File

111
   bool            cmTimeLineIsValid( cmTlH_t h );
111
   bool            cmTimeLineIsValid( cmTlH_t h );
112
   double          cmTimeLineSampleRate( cmTlH_t h );
112
   double          cmTimeLineSampleRate( cmTlH_t h );
113
 
113
 
114
+  // Convert global (sequence) time to a time relative to an object.
115
+  int             cmTimeLineSeqToLocalSampleIndex( int seqSmpIdx, cmTlObj_t* localObjPtr );
116
+
114
   // Given cmTlObj_t.uid return a pointer to the associated record.
117
   // Given cmTlObj_t.uid return a pointer to the associated record.
115
   // seqId is optional (dflt:cmInvalidId)
118
   // seqId is optional (dflt:cmInvalidId)
116
   cmTlObj_t*      cmTimeLineIdToObj( cmTlH_t h, unsigned seqId, unsigned uid );
119
   cmTlObj_t*      cmTimeLineIdToObj( cmTlH_t h, unsigned seqId, unsigned uid );

Loading…
Cancel
Save