Merge branch 'master' into cairocanvas
This commit is contained in:
commit
1745340c67
|
@ -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)
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue
Block a user