diff --git a/distrho/DistrhoPlugin.hpp b/distrho/DistrhoPlugin.hpp index 56a29d4e..9635ed6a 100644 --- a/distrho/DistrhoPlugin.hpp +++ b/distrho/DistrhoPlugin.hpp @@ -19,6 +19,12 @@ #include "DistrhoUtils.hpp" +#include + +#ifndef M_PI +# define M_PI 3.14159265358979323846 +#endif + START_NAMESPACE_DISTRHO // ----------------------------------------------------------------------- diff --git a/distrho/src/DistrhoPluginVST.cpp b/distrho/src/DistrhoPluginVST.cpp index a45220c2..1ad04e4b 100644 --- a/distrho/src/DistrhoPluginVST.cpp +++ b/distrho/src/DistrhoPluginVST.cpp @@ -60,7 +60,7 @@ struct ERect { # warning VST State still TODO (working but needs final testing) #endif #if DISTRHO_PLUGIN_WANT_TIMEPOS -# warning VST TimePos still TODO +# warning VST TimePos still TODO (only basic BBT working) #endif typedef std::map StringMap; @@ -670,13 +670,24 @@ public: void vst_processReplacing(float** const inputs, float** const outputs, const int32_t sampleFrames) { #if DISTRHO_PLUGIN_WANT_TIMEPOS - if (const VstTimeInfo* const timeInfo = (const VstTimeInfo*)fEffect->dispatcher(fEffect, audioMasterGetTime, 0, kVstTempoValid, nullptr, 0.0f)) + static const int kWantedVstTimeFlags(kVstTransportPlaying|kVstTempoValid|kVstTimeSigValid); + + if (const VstTimeInfo* const vstTimeInfo = (const VstTimeInfo*)fEffect->dispatcher(fEffect, audioMasterGetTime, 0, kWantedVstTimeFlags, nullptr, 0.0f)) { - fTimePos.playing = (timeInfo->flags & kVstTransportPlaying); - fTimePos.frame = timeInfo->samplePos; + fTimePos.playing = (vstTimeInfo->flags & kVstTransportPlaying); + fTimePos.frame = vstTimeInfo->samplePos; - // TODO: BBT - // timeInfo->tempo etc + if (vstTimeInfo->flags & kVstTempoValid) + { + fTimePos.bbt.valid = true; + fTimePos.bbt.beatsPerMinute = vstTimeInfo->tempo; + } + if (vstTimeInfo->flags & kVstTimeSigValid) + { + fTimePos.bbt.valid = true; + fTimePos.bbt.beatsPerBar = vstTimeInfo->timeSigNumerator; + fTimePos.bbt.beatType = vstTimeInfo->timeSigDenominator; + } fPlugin.setTimePos(fTimePos); }