commit 3b225c6bc6db02026f7b4c6b98c32d16a6c7edd0
parent 6fb740038a0c07e9ac7c10555307904317dfe99b
Author: falkTX <falktx@gmail.com>
Date: Wed, 29 Jan 2014 20:47:51 +0000
Fix M_PI; Implement basic VST timePos support
Diffstat:
2 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/distrho/DistrhoPlugin.hpp b/distrho/DistrhoPlugin.hpp
@@ -19,6 +19,12 @@
#include "DistrhoUtils.hpp"
+#include <cmath>
+
+#ifndef M_PI
+# define M_PI 3.14159265358979323846
+#endif
+
START_NAMESPACE_DISTRHO
// -----------------------------------------------------------------------
diff --git 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<d_string,d_string> 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);
}