From eb521a6dacc8a756aea75bfe5d1d2830cd00b167 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 9 May 2023 22:12:14 -0500 Subject: [PATCH] fix MIDI clock, part 2 --- src/engine/engine.cpp | 12 +++++++++--- src/engine/engine.h | 4 +++- src/engine/playback.cpp | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index b83c68a6b..4963cb685 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -2043,6 +2043,8 @@ String DivEngine::getPlaybackDebugInfo() { "totalSeconds: %d\n" "totalTicks: %d\n" "totalTicksR: %d\n" + "curMidiClock: %d\n" + "curMidiTime: %d\n" "totalCmds: %d\n" "lastCmds: %d\n" "cmdsPerSecond: %d\n" @@ -2053,8 +2055,8 @@ String DivEngine::getPlaybackDebugInfo() { "bufferPos: %d\n", curOrder,prevOrder,curRow,prevRow,ticks,subticks,totalLoops,lastLoopPos,nextSpeed,divider,cycles,clockDrift, midiClockCycles,midiClockDrift,midiTimeCycles,midiTimeDrift,changeOrd,changePos,totalSeconds,totalTicks, - totalTicksR,totalCmds,lastCmds,cmdsPerSecond,globalPitch,(int)extValue,(int)tempoAccum,(int)totalProcessed, - (int)bufferPos + totalTicksR,curMidiClock,curMidiTime,totalCmds,lastCmds,cmdsPerSecond,globalPitch, + (int)extValue,(int)tempoAccum,(int)totalProcessed,(int)bufferPos ); } @@ -2186,6 +2188,8 @@ void DivEngine::playSub(bool preserveDrift, int goalRow) { totalTicks=0; totalSeconds=0; totalTicksR=0; + curMidiClock=0; + curMidiTime=0; totalLoops=0; lastLoopPos=-1; } @@ -2400,7 +2404,7 @@ void DivEngine::play() { keyHit[i]=false; } if (output) if (!skipping && output->midiOut!=NULL) { - int pos=totalTicksR/6; + int pos=curMidiClock; output->midiOut->send(TAMidiMessage(TA_MIDI_POSITION,(pos>>7)&0x7f,pos&0x7f)); output->midiOut->send(TAMidiMessage(TA_MIDI_MACHINE_PLAY,0,0)); } @@ -4404,6 +4408,8 @@ void DivEngine::quitDispatch() { totalTicks=0; totalSeconds=0; totalTicksR=0; + curMidiClock=0; + curMidiTime=0; totalCmds=0; lastCmds=0; cmdsPerSecond=0; diff --git a/src/engine/engine.h b/src/engine/engine.h index 4e7d44de5..1cc853836 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -383,7 +383,7 @@ class DivEngine { int midiTimeCycles; double midiTimeDrift; int stepPlay; - int changeOrd, changePos, totalSeconds, totalTicks, totalTicksR, totalCmds, lastCmds, cmdsPerSecond, globalPitch; + int changeOrd, changePos, totalSeconds, totalTicks, totalTicksR, curMidiClock, curMidiTime, totalCmds, lastCmds, cmdsPerSecond, globalPitch; unsigned char extValue, pendingMetroTick; DivGroovePattern speeds; short tempoAccum; @@ -1160,6 +1160,8 @@ class DivEngine { totalSeconds(0), totalTicks(0), totalTicksR(0), + curMidiClock(0), + curMidiTime(0), totalCmds(0), lastCmds(0), cmdsPerSecond(0), diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index ce8dab16e..2930d3060 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -1833,8 +1833,8 @@ void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsi // 3. run MIDI clock int midiTotal=MIN(cycles,runLeftG); for (int i=0; imidiOut!=NULL && midiOutClock) { output->midiOut->send(TAMidiMessage(TA_MIDI_CLOCK,0,0)); }