13
0

Merge branch 'master' into cairocanvas

This commit is contained in:
Paul Davis 2014-01-15 20:40:11 -05:00
commit 1745340c67
2 changed files with 17 additions and 15 deletions

View File

@ -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)

View File

@ -22,6 +22,7 @@
#endif
#include <cstdio>
#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 (
// <value> 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: