From 40e7379569241957f607dcbe01fdc5d7a4358029 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 15 Jan 2014 16:19:04 -0500 Subject: [PATCH 1/6] don't require VST plugins to actually ask for time info fields --- libs/ardour/session_vst.cc | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/libs/ardour/session_vst.cc b/libs/ardour/session_vst.cc index b2e9b14c1a..67e990e7fe 100644 --- a/libs/ardour/session_vst.cc +++ b/libs/ardour/session_vst.cc @@ -138,18 +138,18 @@ intptr_t Session::vst_callback ( 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)) { +// } +// if (value & (kVstBarsValid)) { const Meter& m (tm.meter()); _timeInfo.timeSigNumerator = m.divisions_per_bar (); _timeInfo.timeSigDenominator = m.note_divisor (); - _timeInfo.flags |= (kVstBarsValid); - } - if (value & (kVstPpqPosValid)) { + _timeInfo.flags |= (kVstTimeSigValid); +// } +// if (value & (kVstPpqPosValid)) { Timecode::BBT_Time bbt; try { session->tempo_map().bbt_time_rt (now, bbt); @@ -168,19 +168,11 @@ intptr_t Session::vst_callback ( } 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; From 0265f3f1e2f9c69c151331350f00bfb5a1be9492 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 15 Jan 2014 16:24:03 -0500 Subject: [PATCH 2/6] debug VST timeinfo callback --- libs/ardour/session_vst.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libs/ardour/session_vst.cc b/libs/ardour/session_vst.cc index 67e990e7fe..fa8e6aa42e 100644 --- a/libs/ardour/session_vst.cc +++ b/libs/ardour/session_vst.cc @@ -130,8 +130,12 @@ intptr_t Session::vst_callback ( // (see valid masks above), as some items may require extensive // conversions memset(&_timeInfo, 0, sizeof(_timeInfo)); + std::cerr << "VST get time callback\n"; 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; @@ -179,6 +183,7 @@ intptr_t Session::vst_callback ( } } + std::cerr << "\ttimeinfo valid = " << std::hex << _timeinfo.flags << std::dec << std::endl; return (long)&_timeInfo; case audioMasterProcessEvents: From 4365ea06e3a0976a8434ea10ae458dcd3773ed5a Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 15 Jan 2014 16:26:21 -0500 Subject: [PATCH 3/6] debug VST timeinfo callback, pt2 --- libs/ardour/session_vst.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/ardour/session_vst.cc b/libs/ardour/session_vst.cc index fa8e6aa42e..687c7fa735 100644 --- a/libs/ardour/session_vst.cc +++ b/libs/ardour/session_vst.cc @@ -183,7 +183,7 @@ intptr_t Session::vst_callback ( } } - std::cerr << "\ttimeinfo valid = " << std::hex << _timeinfo.flags << std::dec << std::endl; + std::cerr << "\ttimeinfo valid = " << std::hex << _timeInfo.flags << std::dec << std::endl; return (long)&_timeInfo; case audioMasterProcessEvents: From 3eadbaaf583c283ceccd9c5760f05f0533b24aad Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 15 Jan 2014 16:31:10 -0500 Subject: [PATCH 4/6] debug VST timeinfo callback, pt3 --- libs/ardour/session_vst.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/ardour/session_vst.cc b/libs/ardour/session_vst.cc index 687c7fa735..59859fafba 100644 --- a/libs/ardour/session_vst.cc +++ b/libs/ardour/session_vst.cc @@ -130,7 +130,7 @@ intptr_t Session::vst_callback ( // (see valid masks above), as some items may require extensive // conversions memset(&_timeInfo, 0, sizeof(_timeInfo)); - std::cerr << "VST get time callback\n"; + std::cerr << "VST get time callback, value = " << std::hex << value << " index = " << index << std::dec << std::endl; if (session) { framepos_t now = session->transport_frame(); From c3984f35ac25bc0a3b6b37240ba140b5b0e2b6ea Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 15 Jan 2014 16:48:22 -0500 Subject: [PATCH 5/6] more work on debugging VST timeinfo issues --- libs/ardour/session_vst.cc | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) 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; From 1c01ac5bc8c417ce26bde3ee8ef7733ac410f309 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 15 Jan 2014 20:37:26 -0500 Subject: [PATCH 6/6] minor tweak to layout of vestige aeffectx.h --- libs/ardour/ardour/vestige/aeffectx.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) 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)