diff --git a/app/cmScore.c b/app/cmScore.c index 977636e..f5186e6 100644 --- a/app/cmScore.c +++ b/app/cmScore.c @@ -2433,13 +2433,8 @@ cmScRC_t cmScoreFileFromMidi( cmCtx_t* ctx, const cmChar_t* midiFn, const c goto errLabel; } - printf("secs:%f smps:%f\n",cmMidiFileDurSecs(mfH),cmMidiFileDurSecs(mfH)*96000); + //printf("secs:%f smps:%f\n",cmMidiFileDurSecs(mfH),cmMidiFileDurSecs(mfH)*96000); - - // Convert the track message 'dtick' field to delta-microseconds. - cmMidiFileTickToMicros(mfH); - - unsigned msgCnt = cmMidiFileMsgCount(mfH); unsigned i; const cmMidiTrackMsg_t** tmpp = cmMidiFileMsgArray(mfH); @@ -2474,7 +2469,7 @@ cmScRC_t cmScoreFileFromMidi( cmCtx_t* ctx, const cmChar_t* midiFn, const c unsigned d0 = 0; unsigned d1 = 0; unsigned metaId = 0; - double dsecs = (double)tmp->dtick / 1000000.0; + double dsecs = (double)tmp->amicro / 1000000.0; acc_secs += dsecs; @@ -2666,10 +2661,6 @@ void cmScoreFix( cmCtx_t* ctx ) if( cmMidiFileOpen(mfn,&mfH,ctx) != kOkMfRC ) goto errLabel; - cmMidiFileTickToMicros(mfH); - - cmMidiFileCalcNoteDurations(mfH); - mn = cmMidiFileMsgCount(mfH); msg = cmMidiFileMsgArray(mfH); @@ -2699,7 +2690,7 @@ void cmScoreFix( cmCtx_t* ctx ) const cmMidiTrackMsg_t* m = msg[mi]; assert( mi+1 <= id ); - secs += m->dtick/1000000.0; + secs += m->amicro/1000000.0; if( mi+1 != id ) { @@ -2715,7 +2706,7 @@ void cmScoreFix( cmCtx_t* ctx ) ++mi; if( m->status == kNoteOnMdId ) - cmCsvSetCellDouble( csvH, ci, kDSecsColScIdx, m->u.chMsgPtr->durTicks/1000000.0 ); + cmCsvSetCellDouble( csvH, ci, kDSecsColScIdx, m->u.chMsgPtr->durMicros /1000000.0 ); break; } diff --git a/app/cmTakeSeqBldr.c b/app/cmTakeSeqBldr.c index 66a2e22..6d1a9a6 100644 --- a/app/cmTakeSeqBldr.c +++ b/app/cmTakeSeqBldr.c @@ -956,14 +956,15 @@ cmTsbRC_t cmTakeSeqBldrLoadTake( cmTakeSeqBldrH_t h, unsigned tlMarkUid, bool ov } // convert the dtick field to delta samples - cmMidiFileTickToSamples( mfH, cmTimeLineSampleRate(p->tlH), false ); + //cmMidiFileTickToSamples( mfH, cmTimeLineSampleRate(p->tlH), false ); // calculate MIDI note and pedal durations (see cmMidiChMsg_t.durTicks) cmMidiFileCalcNoteDurations( mfH ); - unsigned i = 0; - unsigned n = cmMidiFileMsgCount(mfH); - const cmMidiTrackMsg_t** a = cmMidiFileMsgArray(mfH); + unsigned i = 0; + unsigned n = cmMidiFileMsgCount(mfH); + const cmMidiTrackMsg_t** a = cmMidiFileMsgArray(mfH); + double srate = cmTimeLineSampleRate(p->tlH); // allocate and link a new take render record cmTakeTsb_t* t = cmMemAllocZ(cmTakeTsb_t,1); @@ -1011,8 +1012,8 @@ cmTsbRC_t cmTakeSeqBldrLoadTake( cmTakeSeqBldrH_t h, unsigned tlMarkUid, bool ov m1->scEvtIdx = stm != NULL ? stm->scEvtIdx : cmInvalidIdx; m1->flags = stm != NULL ? stm->flags : 0; m1->ref = m0; - m1->offsetSmp = mf0 == NULL ? 0 : mf1->dtick; - m1->durSmp = mf1->u.chMsgPtr->durTicks; + m1->offsetSmp = mf0 == NULL ? 0 : round(mf1->amicro * srate / 1000000.0); + m1->durSmp = mf1->u.chMsgPtr->durMicros * srate / 1000000.0; m1->d0 = mf1->u.chMsgPtr->d0; m1->d1 = mf1->u.chMsgPtr->d1; m1->status = mf1->status;