commit 1083a86dd794cbb533194d8d8f684674a70f0dd1
parent aa20320f9a64ddcdf8d00e59fd8d06e35fec51ce
Author: falkTX <falktx@falktx.com>
Date: Mon, 24 May 2021 10:05:15 +0100
Make TimePosition::BarBeatTick::tick a double
Signed-off-by: falkTX <falktx@falktx.com>
Diffstat:
3 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/distrho/DistrhoPlugin.hpp b/distrho/DistrhoPlugin.hpp
@@ -569,8 +569,9 @@ struct TimePosition {
Current tick within beat.@n
Should always be >= 0 and < @a ticksPerBeat.@n
The first tick is tick '0'.
+ @note Fraction part of tick is only available on some plugin formats.
*/
- int32_t tick;
+ double tick;
/**
Number of ticks that have elapsed between frame 0 and the first beat of the current measure.
diff --git a/distrho/src/DistrhoPluginLV2.cpp b/distrho/src/DistrhoPluginLV2.cpp
@@ -223,10 +223,10 @@ public:
#if DISTRHO_PLUGIN_WANT_TIMEPOS
fTimePosition.clear();
- // hosts may not send all values, resulting on some invalid data
+ // hosts may not send all values, resulting on some invalid data, let's reset everything
fTimePosition.bbt.bar = 1;
fTimePosition.bbt.beat = 1;
- fTimePosition.bbt.tick = 0;
+ fTimePosition.bbt.tick = 0.0;
fTimePosition.bbt.barStartTick = 0;
fTimePosition.bbt.beatsPerBar = 4;
fTimePosition.bbt.beatType = 4;
@@ -441,8 +441,8 @@ public:
if (fLastPositionData.barBeat >= 0.0f)
{
const double rest = std::fmod(fLastPositionData.barBeat, 1.0f);
- fTimePosition.bbt.beat = std::round(fLastPositionData.barBeat-rest+1.0);
- fTimePosition.bbt.tick = rest*fTimePosition.bbt.ticksPerBeat+0.5;
+ fTimePosition.bbt.beat = std::round(fLastPositionData.barBeat - rest + 1.0);
+ fTimePosition.bbt.tick = rest * fTimePosition.bbt.ticksPerBeat;
}
}
@@ -643,8 +643,8 @@ public:
(double)fLastPositionData.beatsPerBar);
const double rest = std::fmod(fLastPositionData.barBeat, 1.0f);
- fTimePosition.bbt.beat = std::round(fLastPositionData.barBeat-rest+1.0);
- fTimePosition.bbt.tick = rest*fTimePosition.bbt.ticksPerBeat+0.5;
+ fTimePosition.bbt.beat = std::round(fLastPositionData.barBeat - rest + 1.0);
+ fTimePosition.bbt.tick = rest * fTimePosition.bbt.ticksPerBeat;
if (fLastPositionData.bar >= 0)
{
diff --git a/distrho/src/DistrhoPluginVST.cpp b/distrho/src/DistrhoPluginVST.cpp
@@ -1036,7 +1036,7 @@ public:
fTimePosition.bbt.bar = static_cast<int32_t>(ppqPos) / ppqPerBar + 1;
fTimePosition.bbt.beat = static_cast<int32_t>(barBeats - rest + 0.5) + 1;
- fTimePosition.bbt.tick = static_cast<int32_t>(rest * fTimePosition.bbt.ticksPerBeat + 0.5);
+ fTimePosition.bbt.tick = rest * fTimePosition.bbt.ticksPerBeat;
fTimePosition.bbt.beatsPerBar = vstTimeInfo->timeSigNumerator;
fTimePosition.bbt.beatType = vstTimeInfo->timeSigDenominator;
@@ -1044,14 +1044,14 @@ public:
{
--fTimePosition.bbt.bar;
fTimePosition.bbt.beat = vstTimeInfo->timeSigNumerator - fTimePosition.bbt.beat + 1;
- fTimePosition.bbt.tick = int(fTimePosition.bbt.ticksPerBeat) - fTimePosition.bbt.tick - 1;
+ fTimePosition.bbt.tick = fTimePosition.bbt.ticksPerBeat - fTimePosition.bbt.tick - 1;
}
}
else
{
fTimePosition.bbt.bar = 1;
fTimePosition.bbt.beat = 1;
- fTimePosition.bbt.tick = 0;
+ fTimePosition.bbt.tick = 0.0;
fTimePosition.bbt.beatsPerBar = 4.0f;
fTimePosition.bbt.beatType = 4.0f;
}