Metronome fix

do not call now() multiple times to avoid time difference between calls.
This commit is contained in:
Bruno Herbelin
2022-03-13 23:13:32 +01:00
parent 0b12c5a169
commit e0676c66a0
2 changed files with 26 additions and 10 deletions

View File

@@ -59,10 +59,10 @@ namespace ableton
return sessionState.beatAtTime(now(), mQuantum);
}
std::chrono::microseconds timeNextBeat() const
std::chrono::microseconds timeNextBeat(std::chrono::microseconds now) const
{
auto sessionState = mLink.captureAppSessionState();
double beat = ceil(sessionState.beatAtTime(now(), mQuantum));
double beat = ceil(sessionState.beatAtTime(now, mQuantum));
return sessionState.timeAtBeat(beat, mQuantum);
}
@@ -72,11 +72,11 @@ namespace ableton
return sessionState.phaseAtTime(now(), mQuantum);
}
std::chrono::microseconds timeNextPhase() const
std::chrono::microseconds timeNextPhase(std::chrono::microseconds now) const
{
auto sessionState = mLink.captureAppSessionState();
double phase = ceil(sessionState.phaseAtTime(now(), mQuantum));
double beat = ceil(sessionState.beatAtTime(now(), mQuantum));
double phase = ceil(sessionState.phaseAtTime(now, mQuantum));
double beat = ceil(sessionState.beatAtTime(now, mQuantum));
return sessionState.timeAtBeat(beat + (mQuantum-phase), mQuantum);
}
@@ -223,12 +223,14 @@ void Metronome::restart()
std::chrono::microseconds Metronome::timeToBeat()
{
return engine_.timeNextBeat() - engine_.now();
std::chrono::microseconds now = engine_.now();
return engine_.timeNextBeat( now ) - now;
}
std::chrono::microseconds Metronome::timeToPhase()
{
return engine_.timeNextPhase() - engine_.now();
std::chrono::microseconds now = engine_.now();
return engine_.timeNextPhase( now ) - now;
}
void delay(std::function<void()> f, std::chrono::microseconds us)