From 3b225c6bc6db02026f7b4c6b98c32d16a6c7edd0 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 29 Jan 2014 20:48:16 +0000 Subject: [PATCH] Fix M_PI; Implement basic VST timePos support --- distrho/DistrhoPlugin.hpp | 6 ++++++ distrho/src/DistrhoPluginVST.cpp | 23 +++++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) 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); }