diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index a9d004355..54e0c96ba 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -1740,6 +1740,7 @@ void DivEngine::playSub(bool preserveDrift, int goalRow) { subticks=1; prevOrder=curOrder; prevRow=curRow; + prevSpeed=nextSpeed; tempoAccum=0; } skipping=false; @@ -2398,7 +2399,7 @@ void DivEngine::getPlayPosTick(int& order, int& row, int& tick, int& speed) { order=prevOrder; row=prevRow; tick=ticks; - speed=nextSpeed; + speed=prevSpeed; playPosLock.unlock(); } diff --git a/src/engine/engine.h b/src/engine/engine.h index 9dfbec181..8be46cdb7 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -475,7 +475,7 @@ class DivEngine { int midiOutTimeRate; float midiVolExp; int softLockCount; - int subticks, ticks, curRow, curOrder, prevRow, prevOrder, remainingLoops, totalLoops, lastLoopPos, exportLoopCount, curExportChan, nextSpeed, elapsedBars, elapsedBeats, curSpeed; + int subticks, ticks, curRow, curOrder, prevRow, prevOrder, remainingLoops, totalLoops, lastLoopPos, exportLoopCount, curExportChan, nextSpeed, prevSpeed, elapsedBars, elapsedBeats, curSpeed; size_t curSubSongIndex; size_t bufferPos; double divider; @@ -1439,6 +1439,7 @@ class DivEngine { exportLoopCount(0), curExportChan(0), nextSpeed(3), + prevSpeed(6), elapsedBars(0), elapsedBeats(0), curSpeed(0), diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index 1197043c8..8c76a7188 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -1438,6 +1438,7 @@ void DivEngine::nextRow() { memset(walked,0,8192); } + prevSpeed=nextSpeed; if (song.brokenSpeedSel) { unsigned char speed2=(speeds.len>=2)?speeds.val[1]:speeds.val[0]; unsigned char speed1=speeds.val[0];