1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-23 15:50:05 +02:00

Bug1922: updating play indicator when looping with a time track

This commit is contained in:
Paul Licameli 2018-08-09 13:07:37 -04:00
parent 871bc65c8e
commit af81dfa10b

View File

@ -5441,12 +5441,44 @@ bool AudioIO::PlaybackSchedule::PassIsComplete() const
void AudioIO::PlaybackSchedule::TrackTimeUpdate(double realElapsed)
{
if (!Interactive()) {
if (Interactive())
return;
if (ReversedTime())
realElapsed *= -1.0;
if (mTimeTrack)
if (mTimeTrack) {
// Defence against a case that might cause the do-loop not to terminate
if ( fabs(mT0 - mT1) < 1e-9 ) {
mTime = mT0;
return;
}
double total;
bool foundTotal = false;
do {
auto oldTime = mTime;
mTime = mTimeTrack->SolveWarpedLength(mTime, realElapsed);
if (Looping() && PassIsComplete()) {
// Bug1922: The part of the time track outside the loop should not
// influence the result
double delta;
if (foundTotal && oldTime == mT0)
// Avoid integrating again
delta = total;
else {
delta = mTimeTrack->ComputeWarpedLength(oldTime, mT1);
if (oldTime == mT0)
foundTotal = true, total = delta;
}
realElapsed -= delta;
mTime = mT0;
}
else
break;
} while ( true );
}
else {
mTime += realElapsed;
// Wrap to start if looping