- SHOW_CALLBACK ("amc: audioMasterGetTime\n");
- // returns const VstTimeInfo* (or 0 if not supported)
- // <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));
- 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;
-
- const TempoMetric& tm (session->tempo_map().metric_at (now));
-
-// if (value & (kVstTempoValid)) {
- const Tempo& t (tm.tempo());
- _timeInfo.tempo = t.beats_per_minute ();
- _timeInfo.flags |= (kVstTempoValid);
-// }
-// if (value & (kVstBarsValid)) {
- const Meter& m (tm.meter());
- _timeInfo.timeSigNumerator = m.divisions_per_bar ();
- _timeInfo.timeSigDenominator = m.note_divisor ();
- _timeInfo.flags |= (kVstTimeSigValid);
-// }
-// if (value & (kVstPpqPosValid)) {
+ SHOW_CALLBACK ("audioMasterGetTime");
+ newflags = kVstNanosValid | kVstAutomationWriting | kVstAutomationReading;
+
+ timeinfo->nanoSeconds = g_get_monotonic_time () * 1000;
+
+ if (plug && session) {
+ framepos_t now = plug->transport_frame();
+
+ timeinfo->samplePos = now;
+ timeinfo->sampleRate = session->frame_rate();
+
+ if (value & (kVstTempoValid)) {
+ const Tempo& t (session->tempo_map().tempo_at_frame (now));
+ timeinfo->tempo = t.quarter_notes_per_minute ();
+ newflags |= (kVstTempoValid);
+ }
+ if (value & (kVstTimeSigValid)) {
+ const MeterSection& ms (session->tempo_map().meter_section_at_frame (now));
+ timeinfo->timeSigNumerator = ms.divisions_per_bar ();
+ timeinfo->timeSigDenominator = ms.note_divisor ();
+ newflags |= (kVstTimeSigValid);
+ }
+ if ((value & (kVstPpqPosValid)) || (value & (kVstBarsValid))) {