diff --git a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm index 3f0e150b09..8b30eb4b11 100644 --- a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm +++ b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm @@ -468,6 +468,7 @@ public: { info.timeSigNumerator = 0; info.timeSigDenominator = 0; + info.timeInSamples = 0; info.timeInSeconds = 0; info.editOriginTime = 0; info.ppqPositionOfLastBarStart = 0; @@ -520,6 +521,7 @@ public: &outCycleEndBeat) == noErr) { info.isPlaying = playing; + info.timeInSamples = (int64) outCurrentSampleInTimeLine; info.timeInSeconds = outCurrentSampleInTimeLine / GetSampleRate(); } diff --git a/modules/juce_audio_plugin_client/RTAS/juce_RTAS_Wrapper.cpp b/modules/juce_audio_plugin_client/RTAS/juce_RTAS_Wrapper.cpp index e8f6ffeab2..7b9c32bc16 100644 --- a/modules/juce_audio_plugin_client/RTAS/juce_RTAS_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/RTAS/juce_RTAS_Wrapper.cpp @@ -518,8 +518,7 @@ protected: juceFilter->setPlayConfigDetails (fNumInputs, fNumOutputs, sampleRate, mRTGlobals->mHWBufferSizeInSamples); - juceFilter->prepareToPlay (sampleRate, - mRTGlobals->mHWBufferSizeInSamples); + juceFilter->prepareToPlay (sampleRate, mRTGlobals->mHWBufferSizeInSamples); prepared = true; } @@ -702,7 +701,7 @@ protected: Cmn_Int64 ticks = 0; Cmn_Bool isPlaying = false; - if (midiTransport != 0) + if (midiTransport != nullptr) { midiTransport->GetCurrentTempo (&bpm); midiTransport->IsTransportPlaying (&isPlaying); @@ -717,6 +716,14 @@ protected: midiTransport->GetCurrentTDMSampleLocation (&sampleLocation); midiTransport->GetCustomTickPosition (&ticks, sampleLocation); + + info.timeInSamples = (int64) sampleLocation; + info.timeInSeconds = sampleLocation / sampleRate; + } + else + { + info.timeInSamples = 0; + info.timeInSeconds = 0; } info.bpm = bpm; @@ -730,10 +737,6 @@ protected: info.ppqLoopStart = 0; info.ppqLoopEnd = 0; - // xxx incorrect if there are tempo changes, but there's no - // other way of getting this info.. - info.timeInSeconds = ticks * (60.0 / 960000.0) / bpm; - double framesPerSec = 24.0; switch (fTimeCodeInfo.mFrameRate) diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp index 8c4665eaa7..85ec7403c8 100644 --- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp @@ -682,6 +682,7 @@ public: info.timeSigDenominator = 4; } + info.timeInSamples = (int64) ti->samplePos; info.timeInSeconds = ti->samplePos / ti->sampleRate; info.ppqPosition = (ti->flags & kVstPpqPosValid) != 0 ? ti->ppqPos : 0.0; info.ppqPositionOfLastBarStart = (ti->flags & kVstBarsValid) != 0 ? ti->barStartPos : 0.0; diff --git a/modules/juce_audio_processors/processors/juce_AudioPlayHead.h b/modules/juce_audio_processors/processors/juce_AudioPlayHead.h index 67d96c3b4a..5c9c39a7f0 100644 --- a/modules/juce_audio_processors/processors/juce_AudioPlayHead.h +++ b/modules/juce_audio_processors/processors/juce_AudioPlayHead.h @@ -72,6 +72,8 @@ public: /** Time signature denominator, e.g. the 4 of a 3/4 time sig */ int timeSigDenominator; + /** The current play position, in samples from the start of the edit. */ + int64 timeInSamples; /** The current play position, in seconds from the start of the edit. */ double timeInSeconds; diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp index a49e41d5a0..ff4e9587ff 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp +++ b/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp @@ -291,7 +291,7 @@ void AudioProcessorListener::audioProcessorParameterChangeGestureEnd (AudioProce //============================================================================== bool AudioPlayHead::CurrentPositionInfo::operator== (const CurrentPositionInfo& other) const noexcept { - return timeInSeconds == other.timeInSeconds + return timeInSamples == other.timeInSamples && ppqPosition == other.ppqPosition && editOriginTime == other.editOriginTime && ppqPositionOfLastBarStart == other.ppqPositionOfLastBarStart