diff --git a/libs/ardour/ardour/vestige/aeffectx.h b/libs/ardour/ardour/vestige/aeffectx.h index 2fb7df9065..bd2e3a1479 100644 --- a/libs/ardour/ardour/vestige/aeffectx.h +++ b/libs/ardour/ardour/vestige/aeffectx.h @@ -113,12 +113,11 @@ #define kEffectMagic (CCONST( 'V', 's', 't', 'P' )) #define kVstLangEnglish 1 #define kVstMidiType 1 -#define kVstTempoValid (1 << 10) -#define kVstTransportPlaying (1 << 1) - struct RemoteVstPlugin; +#define kVstTransportPlaying (1 << 1) + #define kVstNanosValid (1 << 8) #define kVstPpqPosValid (1 << 9) #define kVstTempoValid (1 << 10) diff --git a/libs/ardour/session_vst.cc b/libs/ardour/session_vst.cc index b2e9b14c1a..33cd39ba43 100644 --- a/libs/ardour/session_vst.cc +++ b/libs/ardour/session_vst.cc @@ -22,6 +22,7 @@ #endif #include +#include "ardour/audioengine.h" #include "ardour/session.h" #include "ardour/tempo.h" #include "ardour/windows_vst_plugin.h" @@ -129,12 +130,15 @@ intptr_t Session::vst_callback ( // should contain a mask indicating which fields are required // (see valid masks above), as some items may require extensive // conversions - memset(&_timeInfo, 0, sizeof(_timeInfo)); + _timeInfo.flags = 0; + std::cerr << "VST get time callback, value = " << std::hex << value << std::dec << std::endl; if (session) { framepos_t now = session->transport_frame(); + + std::cerr << "\t@ " << now << std::endl; + _timeInfo.samplePos = now; _timeInfo.sampleRate = session->frame_rate(); - _timeInfo.flags = 0; const TempoMetric& tm (session->tempo_map().metric_at (now)); @@ -142,12 +146,14 @@ intptr_t Session::vst_callback ( const Tempo& t (tm.tempo()); _timeInfo.tempo = t.beats_per_minute (); _timeInfo.flags |= (kVstTempoValid); + std::cerr << "\ttempo makes " << std::hex << _timeInfo.flags << std::dec << std::endl; } - if (value & (kVstBarsValid)) { + if (value & (kVstTimeSigValid)) { const Meter& m (tm.meter()); _timeInfo.timeSigNumerator = m.divisions_per_bar (); _timeInfo.timeSigDenominator = m.note_divisor (); - _timeInfo.flags |= (kVstBarsValid); + _timeInfo.flags |= (kVstTimeSigValid); + std::cerr << "\ttimedig makes " << std::hex << _timeInfo.flags << std::dec << std::endl; } if (value & (kVstPpqPosValid)) { Timecode::BBT_Time bbt; @@ -165,28 +171,25 @@ intptr_t Session::vst_callback ( // PPQ Pos _timeInfo.ppqPos = ppqBar + ppqBeat + ppqTick; _timeInfo.flags |= (kVstPpqPosValid); + std::cerr << "\tppq makes " << std::hex << _timeInfo.flags << std::dec << std::endl; } catch (...) { /* relax */ } } - _timeInfo.tempo = tm.tempo().beats_per_minute(); - _timeInfo.flags |= kVstTempoValid; - // Bars // _timeInfo.barStartPos = ppqBar; // _timeInfo.flags |= kVstBarsValid; - - // Time Signature - _timeInfo.timeSigNumerator = tm.meter().divisions_per_bar(); - _timeInfo.timeSigDenominator = tm.meter().note_divisor(); - _timeInfo.flags |= kVstTimeSigValid; if (session->transport_speed() != 0.0f) { _timeInfo.flags |= kVstTransportPlaying; } + } else { + _timeInfo.samplePos = 0; + _timeInfo.sampleRate = AudioEngine::instance()->sample_rate(); } + std::cerr << "\ttimeinfo valid = " << std::hex << _timeInfo.flags << std::dec << std::endl; return (long)&_timeInfo; case audioMasterProcessEvents: