summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim E. Real <termtech@rogers.com>2012-12-14 06:11:28 +0000
committerTim E. Real <termtech@rogers.com>2012-12-14 06:11:28 +0000
commitfe749a83cc4fab70ba8d4102f0b7d5543e9b5350 (patch)
tree0d3f7bcc998fb0ce4a0284e1c095d7da946802ef
parent469316ca9c63006cda58b4b25bd5f6b1f7d67f4b (diff)
Work in progress on vst timebase
-rw-r--r--muse2/muse/vst_native.cpp64
1 files changed, 38 insertions, 26 deletions
diff --git a/muse2/muse/vst_native.cpp b/muse2/muse/vst_native.cpp
index b6208d5b..c22799d6 100644
--- a/muse2/muse/vst_native.cpp
+++ b/muse2/muse/vst_native.cpp
@@ -943,6 +943,17 @@ VstIntPtr VstNativeSynthIF::hostCallback(VstInt32 opcode, VstInt32 index, VstInt
// (see valid masks above), as some items may require extensive
// conversions
+#ifdef VST_NATIVE_DEBUG
+ fprintf(stderr, "VstNativeSynthIF::hostCallback master time: valid: nanos:%d ppqpos:%d tempo:%d bars:%d cyclepos:%d sig:%d smpte:%d clock:%d\n", // REMOVE Tim.
+ (bool)(value & kVstNanosValid),
+ (bool)(value & kVstPpqPosValid),
+ (bool)(value & kVstTempoValid),
+ (bool)(value & kVstBarsValid),
+ (bool)(value & kVstCyclePosValid),
+ (bool)(value & kVstTimeSigValid),
+ (bool)(value & kVstSmpteValid),
+ (bool)(value & kVstClockValid));
+#endif
memset(&_timeInfo, 0, sizeof(_timeInfo));
unsigned int curr_frame = MusEGlobal::audio->pos().frame();
@@ -950,28 +961,18 @@ VstIntPtr VstNativeSynthIF::hostCallback(VstInt32 opcode, VstInt32 index, VstInt
_timeInfo.sampleRate = (double)MusEGlobal::sampleRate;
_timeInfo.flags = 0;
- if(value & (kVstBarsValid | kVstTimeSigValid | kVstTempoValid | kVstPpqPosValid))
- {
- Pos p(MusEGlobal::extSyncFlag.value() ? MusEGlobal::audio->tickPos() : curr_frame, MusEGlobal::extSyncFlag.value() ? true : false);
- // Can't use song pos - it is only updated every (slow) GUI heartbeat !
- //Pos p(MusEGlobal::extSyncFlag.value() ? MusEGlobal::song->cpos() : pos->frame, MusEGlobal::extSyncFlag.value() ? true : false);
-
+ Pos p(MusEGlobal::extSyncFlag.value() ? MusEGlobal::audio->tickPos() : curr_frame, MusEGlobal::extSyncFlag.value() ? true : false);
- //unsigned int tick_pos = MusEGlobal::audio->tickPos();
-
+ if(value & kVstBarsValid)
+ {
int p_bar, p_beat, p_tick;
p.mbt(&p_bar, &p_beat, &p_tick);
-
-//#ifndef VST_VESTIGE_SUPPORT
_timeInfo.barStartPos = (double)Pos(p_bar, 0, 0).tick() / (double)MusEGlobal::config.division;
- _timeInfo.ppqPos = (double)MusEGlobal::audio->tickPos() / (double)MusEGlobal::config.division;
-// #else
-// *((double*)&_timeInfo.empty2[0]) = (double)Pos(p_bar, 0, 0).tick() / (double)MusEGlobal::config.division;
-// *((double*)&_timeInfo.empty1[8]) = (double)MusEGlobal::audio->tickPos() / (double)MusEGlobal::config.division;
-// #endif
- //pos->bar++;
- //pos->beat++;
+ _timeInfo.flags |= kVstBarsValid;
+ }
+ if(value & kVstTimeSigValid)
+ {
int z, n;
AL::sigmap.timesig(p.tick(), z, n);
@@ -982,22 +983,33 @@ VstIntPtr VstNativeSynthIF::hostCallback(VstInt32 opcode, VstInt32 index, VstInt
_timeInfo.timeSigNumerator = z;
_timeInfo.timeSigDenominator = n;
#endif
+ _timeInfo.flags |= kVstTimeSigValid;
+ }
+
+ if(value & kVstPpqPosValid)
+ {
+ _timeInfo.ppqPos = (double)MusEGlobal::audio->tickPos() / (double)MusEGlobal::config.division;
+ _timeInfo.flags |= kVstPpqPosValid;
+ }
- ////pos->ticks_per_beat = 24;
- //pos->ticks_per_beat = MusEGlobal::config.division;
-
+ if(value & kVstTempoValid)
+ {
double tempo = MusEGlobal::tempomap.tempo(p.tick());
_timeInfo.tempo = (60000000.0 / tempo) * double(MusEGlobal::tempomap.globalTempo())/100.0;
- _timeInfo.flags |= (kVstBarsValid | kVstTimeSigValid | kVstTempoValid | kVstPpqPosValid);
-
+ _timeInfo.flags |= kVstTempoValid;
+ }
+
#ifdef VST_NATIVE_DEBUG
- fprintf(stderr, "VstNativeSynthIF::hostCallback master time: sample pos:%f samplerate:%f sig num:%ld den:%ld tempo:%f\n",
- _timeInfo.samplePos, _timeInfo.sampleRate, _timeInfo.timeSigNumerator, _timeInfo.timeSigDenominator, _timeInfo.tempo);
+ fprintf(stderr, "VstNativeSynthIF::hostCallback master time: sample pos:%f samplerate:%f sig num:%ld den:%ld tempo:%f\n",
+ _timeInfo.samplePos, _timeInfo.sampleRate, _timeInfo.timeSigNumerator, _timeInfo.timeSigDenominator, _timeInfo.tempo);
#endif
- }
-
+
if(MusEGlobal::audio->isPlaying())
_timeInfo.flags |= (kVstTransportPlaying | kVstTransportChanged);
+ // TODO
+ //if(MusEGlobal::audio->isRecording())
+ // _timeInfo.flags |= (kVstTransportRecording | kVstTransportChanged);
+
return (long)&_timeInfo;
}