Introducing modes of Metronome synchronicity

This commit is contained in:
Bruno Herbelin
2021-11-24 21:48:51 +01:00
parent a8abd52afb
commit e123d139e4
7 changed files with 60 additions and 11 deletions

View File

@@ -72,6 +72,13 @@ namespace ableton
return sessionState.phaseAtTime(now(), mQuantum);
}
std::chrono::microseconds timeNextPhase() const
{
auto sessionState = mLink.captureAppSessionState();
double beat = ceil(sessionState.phaseAtTime(now(), mQuantum));
return sessionState.timeAtBeat(beat, mQuantum);
}
double tempo() const
{
auto sessionState = mLink.captureAppSessionState();
@@ -218,6 +225,11 @@ std::chrono::microseconds Metronome::timeToBeat()
return engine_.timeNextBeat() - engine_.now();
}
std::chrono::microseconds Metronome::timeToPhase()
{
return engine_.timeNextPhase() - engine_.now();
}
void delay(std::function<void()> f, std::chrono::microseconds us)
{
std::this_thread::sleep_for(us);
@@ -229,6 +241,11 @@ void Metronome::executeAtBeat( std::function<void()> f )
std::thread( delay, f, timeToBeat() ).detach();
}
void Metronome::executeAtPhase( std::function<void()> f )
{
std::thread( delay, f, timeToPhase() ).detach();
}
size_t Metronome::peers() const
{
return link_.numPeers();