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,9 +635,9 @@ cmTlRC_t _cmTlProcMidiFile( _cmTl_t* p,  _cmTlObj_t* op, cmMidiFileH_t mfH )
635 635
   unsigned                 mn           = cmMidiFileMsgCount(mfH);
636 636
   const cmMidiTrackMsg_t** mapp         = cmMidiFileMsgArray(mfH);
637 637
   unsigned                 mi           = 0;
638
-  double                   accum = 0; 
638
+  //double                   accum = 0; 
639 639
   _cmTlObj_t*              refOp        = op;
640
-  bool                     fl           = false;
640
+  //bool                     fl           = false;
641 641
   unsigned                 dtick        = 0;
642 642
   mfp->noteOnCnt = 0;
643 643
   
@@ -649,16 +649,16 @@ cmTlRC_t _cmTlProcMidiFile( _cmTl_t* p,  _cmTlObj_t* op, cmMidiFileH_t mfH )
649 649
 
650 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 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 662
     int      durSmpCnt         = 0;
663 663
     unsigned midiTrkMsgByteCnt = cmMidiFilePackTrackMsgBufByteCount( mp );
664 664
     unsigned recdByteCnt       = sizeof(cmTlMidiEvt_t) + midiTrkMsgByteCnt;
@@ -669,7 +669,8 @@ cmTlRC_t _cmTlProcMidiFile( _cmTl_t* p,  _cmTlObj_t* op, cmMidiFileH_t mfH )
669 669
     // count the note-on messages
670 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 674
       ++mfp->noteOnCnt;
674 675
     }
675 676
 
@@ -727,7 +728,7 @@ cmTlRC_t _cmTlAllocMidiFileRecd( _cmTl_t* p, const cmChar_t* nameStr, const cmCh
727 728
   unsigned durSmpCnt = floor(cmMidiFileDurSecs(mfH)*p->srate);
728 729
 
729 730
   // convert the midi file from ticks to microseconds
730
-  cmMidiFileTickToMicros(mfH);
731
+  cmMidiFileTickToSamples(mfH,p->srate,false);
731 732
 
732 733
   // assign note durations to all note-on msg's
733 734
   cmMidiFileCalcNoteDurations(mfH);
@@ -957,6 +958,11 @@ double cmTimeLineSampleRate( cmTlH_t h )
957 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 966
 cmTlObj_t* _cmTimeLineIdToObj( _cmTl_t* p, unsigned seqId, unsigned id )
961 967
 {
962 968
   assert( seqId < p->seqCnt );

+ 3
- 0
app/cmTimeLine.h View File

@@ -111,6 +111,9 @@ extern "C" {
111 111
   bool            cmTimeLineIsValid( cmTlH_t h );
112 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 117
   // Given cmTlObj_t.uid return a pointer to the associated record.
115 118
   // seqId is optional (dflt:cmInvalidId)
116 119
   cmTlObj_t*      cmTimeLineIdToObj( cmTlH_t h, unsigned seqId, unsigned uid );

Loading…
Cancel
Save