DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

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:
Mdistrho/DistrhoPlugin.hpp | 3++-
Mdistrho/src/DistrhoPluginLV2.cpp | 12++++++------
Mdistrho/src/DistrhoPluginVST.cpp | 6+++---
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; }