From c3984f35ac25bc0a3b6b37240ba140b5b0e2b6ea Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 15 Jan 2014 16:48:22 -0500 Subject: more work on debugging VST timeinfo issues --- libs/ardour/session_vst.cc | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'libs') diff --git a/libs/ardour/session_vst.cc b/libs/ardour/session_vst.cc index 59859fafba..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,8 +130,8 @@ 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)); - std::cerr << "VST get time callback, value = " << std::hex << value << " index = " << index << std::dec << std::endl; + _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(); @@ -138,22 +139,23 @@ intptr_t Session::vst_callback ( _timeInfo.samplePos = now; _timeInfo.sampleRate = session->frame_rate(); - _timeInfo.flags = 0; const TempoMetric& tm (session->tempo_map().metric_at (now)); -// if (value & (kVstTempoValid)) { + if (value & (kVstTempoValid)) { const Tempo& t (tm.tempo()); _timeInfo.tempo = t.beats_per_minute (); _timeInfo.flags |= (kVstTempoValid); -// } -// if (value & (kVstBarsValid)) { + std::cerr << "\ttempo makes " << std::hex << _timeInfo.flags << std::dec << std::endl; + } + if (value & (kVstTimeSigValid)) { const Meter& m (tm.meter()); _timeInfo.timeSigNumerator = m.divisions_per_bar (); _timeInfo.timeSigDenominator = m.note_divisor (); _timeInfo.flags |= (kVstTimeSigValid); -// } -// if (value & (kVstPpqPosValid)) { + std::cerr << "\ttimedig makes " << std::hex << _timeInfo.flags << std::dec << std::endl; + } + if (value & (kVstPpqPosValid)) { Timecode::BBT_Time bbt; try { session->tempo_map().bbt_time_rt (now, bbt); @@ -169,10 +171,11 @@ 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 */ } -// } + } // Bars // _timeInfo.barStartPos = ppqBar; @@ -181,6 +184,9 @@ intptr_t Session::vst_callback ( 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; -- cgit v1.2.3