more low-latency mode work

playSub() runs at normal tick rate
This commit is contained in:
tildearrow 2022-04-15 22:22:47 -05:00
parent 98b9bd32b9
commit b48a2368be
4 changed files with 51 additions and 52 deletions

View file

@ -853,6 +853,7 @@ void DivEngine::playSub(bool preserveDrift, int goalRow) {
}
if (!preserveDrift) {
ticks=1;
subticks=1;
}
skipping=false;
cmdStream.clear();

View file

@ -1476,15 +1476,17 @@ bool DivEngine::nextTick(bool noAccum) {
bool ret=false;
if (divider<10) divider=10;
if (lowLatency) {
if (lowLatency && !skipping) {
tickMult=1000/divider;
if (tickMult<1) tickMult=1;
} else {
tickMult=1;
}
cycles=got.rate*pow(2,MASTER_CLOCK_PREC)/(divider*tickMult);
clockDrift+=fmod(got.rate*pow(2,MASTER_CLOCK_PREC),(double)divider);
if (clockDrift>=divider) {
clockDrift-=divider;
clockDrift+=fmod(got.rate*pow(2,MASTER_CLOCK_PREC),(double)(divider*tickMult));
if (clockDrift>=(divider*tickMult)) {
clockDrift-=(divider*tickMult);
cycles++;
}