fix MIDI clock, part 2

This commit is contained in:
tildearrow 2023-05-09 22:12:14 -05:00
parent 1d3c89aa51
commit eb521a6dac
3 changed files with 13 additions and 5 deletions

View file

@ -2043,6 +2043,8 @@ String DivEngine::getPlaybackDebugInfo() {
"totalSeconds: %d\n" "totalSeconds: %d\n"
"totalTicks: %d\n" "totalTicks: %d\n"
"totalTicksR: %d\n" "totalTicksR: %d\n"
"curMidiClock: %d\n"
"curMidiTime: %d\n"
"totalCmds: %d\n" "totalCmds: %d\n"
"lastCmds: %d\n" "lastCmds: %d\n"
"cmdsPerSecond: %d\n" "cmdsPerSecond: %d\n"
@ -2053,8 +2055,8 @@ String DivEngine::getPlaybackDebugInfo() {
"bufferPos: %d\n", "bufferPos: %d\n",
curOrder,prevOrder,curRow,prevRow,ticks,subticks,totalLoops,lastLoopPos,nextSpeed,divider,cycles,clockDrift, curOrder,prevOrder,curRow,prevRow,ticks,subticks,totalLoops,lastLoopPos,nextSpeed,divider,cycles,clockDrift,
midiClockCycles,midiClockDrift,midiTimeCycles,midiTimeDrift,changeOrd,changePos,totalSeconds,totalTicks, midiClockCycles,midiClockDrift,midiTimeCycles,midiTimeDrift,changeOrd,changePos,totalSeconds,totalTicks,
totalTicksR,totalCmds,lastCmds,cmdsPerSecond,globalPitch,(int)extValue,(int)tempoAccum,(int)totalProcessed, totalTicksR,curMidiClock,curMidiTime,totalCmds,lastCmds,cmdsPerSecond,globalPitch,
(int)bufferPos (int)extValue,(int)tempoAccum,(int)totalProcessed,(int)bufferPos
); );
} }
@ -2186,6 +2188,8 @@ void DivEngine::playSub(bool preserveDrift, int goalRow) {
totalTicks=0; totalTicks=0;
totalSeconds=0; totalSeconds=0;
totalTicksR=0; totalTicksR=0;
curMidiClock=0;
curMidiTime=0;
totalLoops=0; totalLoops=0;
lastLoopPos=-1; lastLoopPos=-1;
} }
@ -2400,7 +2404,7 @@ void DivEngine::play() {
keyHit[i]=false; keyHit[i]=false;
} }
if (output) if (!skipping && output->midiOut!=NULL) { 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_POSITION,(pos>>7)&0x7f,pos&0x7f));
output->midiOut->send(TAMidiMessage(TA_MIDI_MACHINE_PLAY,0,0)); output->midiOut->send(TAMidiMessage(TA_MIDI_MACHINE_PLAY,0,0));
} }
@ -4404,6 +4408,8 @@ void DivEngine::quitDispatch() {
totalTicks=0; totalTicks=0;
totalSeconds=0; totalSeconds=0;
totalTicksR=0; totalTicksR=0;
curMidiClock=0;
curMidiTime=0;
totalCmds=0; totalCmds=0;
lastCmds=0; lastCmds=0;
cmdsPerSecond=0; cmdsPerSecond=0;

View file

@ -383,7 +383,7 @@ class DivEngine {
int midiTimeCycles; int midiTimeCycles;
double midiTimeDrift; double midiTimeDrift;
int stepPlay; 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; unsigned char extValue, pendingMetroTick;
DivGroovePattern speeds; DivGroovePattern speeds;
short tempoAccum; short tempoAccum;
@ -1160,6 +1160,8 @@ class DivEngine {
totalSeconds(0), totalSeconds(0),
totalTicks(0), totalTicks(0),
totalTicksR(0), totalTicksR(0),
curMidiClock(0),
curMidiTime(0),
totalCmds(0), totalCmds(0),
lastCmds(0), lastCmds(0),
cmdsPerSecond(0), cmdsPerSecond(0),

View file

@ -1833,8 +1833,8 @@ void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsi
// 3. run MIDI clock // 3. run MIDI clock
int midiTotal=MIN(cycles,runLeftG); int midiTotal=MIN(cycles,runLeftG);
for (int i=0; i<midiTotal; i++) { for (int i=0; i<midiTotal; i++) {
// TODO: TEMPO
if (--midiClockCycles<=0) { if (--midiClockCycles<=0) {
curMidiClock++;
if (output) if (!skipping && output->midiOut!=NULL && midiOutClock) { if (output) if (!skipping && output->midiOut!=NULL && midiOutClock) {
output->midiOut->send(TAMidiMessage(TA_MIDI_CLOCK,0,0)); output->midiOut->send(TAMidiMessage(TA_MIDI_CLOCK,0,0));
} }