Browse Source

AudioUnits: In host + plugin sides, passed the loop start/end ppq positions via the playhead position info.

tags/2021-05-28
jules 10 years ago
parent
commit
0d3afee459
2 changed files with 41 additions and 43 deletions
  1. +3
    -5
      modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm
  2. +38
    -38
      modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm

+ 3
- 5
modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm View File

@@ -645,8 +645,6 @@ public:
info.editOriginTime = 0;
info.ppqPositionOfLastBarStart = 0;
info.isRecording = false;
info.ppqLoopStart = 0;
info.ppqLoopEnd = 0;
switch (lastTimeStamp.mSMPTETime.mType)
{
@@ -656,8 +654,6 @@ public:
case kSMPTETimeType30: info.frameRate = AudioPlayHead::fps30; break;
case kSMPTETimeType2997: info.frameRate = AudioPlayHead::fps2997; break;
case kSMPTETimeType2997Drop: info.frameRate = AudioPlayHead::fps2997drop; break;
//case kSMPTETimeType60:
//case kSMPTETimeType5994:
default: info.frameRate = AudioPlayHead::fpsUnknown; break;
}
@@ -680,7 +676,7 @@ public:
info.ppqPositionOfLastBarStart = outCurrentMeasureDownBeat;
}
double outCurrentSampleInTimeLine, outCycleStartBeat, outCycleEndBeat;
double outCurrentSampleInTimeLine, outCycleStartBeat = 0, outCycleEndBeat = 0;
Boolean playing = false, looping = false, playchanged;
if (CallHostTransportState (&playing,
@@ -698,6 +694,8 @@ public:
info.timeInSamples = (int64) (outCurrentSampleInTimeLine + 0.5);
info.timeInSeconds = info.timeInSamples / getSampleRate();
info.isLooping = looping;
info.ppqLoopStart = outCycleStartBeat;
info.ppqLoopEnd = outCycleEndBeat;
return true;
}


+ 38
- 38
modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm View File

@@ -1122,24 +1122,24 @@ private:
OSStatus getMusicalTimeLocation (UInt32* outDeltaSampleOffsetToNextBeat, Float32* outTimeSig_Numerator,
UInt32* outTimeSig_Denominator, Float64* outCurrentMeasureDownBeat) const
{
AudioPlayHead* const ph = getPlayHead();
AudioPlayHead::CurrentPositionInfo result;
if (ph != nullptr && ph->getCurrentPosition (result))
if (AudioPlayHead* const ph = getPlayHead())
{
setIfNotNull (outTimeSig_Numerator, (UInt32) result.timeSigNumerator);
setIfNotNull (outTimeSig_Denominator, (UInt32) result.timeSigDenominator);
setIfNotNull (outDeltaSampleOffsetToNextBeat, (UInt32) 0); //xxx
setIfNotNull (outCurrentMeasureDownBeat, result.ppqPositionOfLastBarStart); //xxx wrong
}
else
{
setIfNotNull (outDeltaSampleOffsetToNextBeat, (UInt32) 0);
setIfNotNull (outTimeSig_Numerator, (UInt32) 4);
setIfNotNull (outTimeSig_Denominator, (UInt32) 4);
setIfNotNull (outCurrentMeasureDownBeat, 0);
AudioPlayHead::CurrentPositionInfo result;
if (ph->getCurrentPosition (result))
{
setIfNotNull (outDeltaSampleOffsetToNextBeat, (UInt32) 0); //xxx
setIfNotNull (outTimeSig_Numerator, (UInt32) result.timeSigNumerator);
setIfNotNull (outTimeSig_Denominator, (UInt32) result.timeSigDenominator);
setIfNotNull (outCurrentMeasureDownBeat, result.ppqPositionOfLastBarStart); //xxx wrong
return noErr;
}
}
setIfNotNull (outDeltaSampleOffsetToNextBeat, (UInt32) 0);
setIfNotNull (outTimeSig_Numerator, (UInt32) 4);
setIfNotNull (outTimeSig_Denominator, (UInt32) 4);
setIfNotNull (outCurrentMeasureDownBeat, 0);
return noErr;
}
@@ -1147,34 +1147,34 @@ private:
Float64* outCurrentSampleInTimeLine, Boolean* outIsCycling,
Float64* outCycleStartBeat, Float64* outCycleEndBeat)
{
AudioPlayHead* const ph = getPlayHead();
AudioPlayHead::CurrentPositionInfo result;
if (ph != nullptr && ph->getCurrentPosition (result))
if (AudioPlayHead* const ph = getPlayHead())
{
setIfNotNull (outIsPlaying, result.isPlaying);
AudioPlayHead::CurrentPositionInfo result;
if (outTransportStateChanged != nullptr)
if (ph->getCurrentPosition (result))
{
*outTransportStateChanged = result.isPlaying != wasPlaying;
wasPlaying = result.isPlaying;
}
setIfNotNull (outIsPlaying, result.isPlaying);
setIfNotNull (outCurrentSampleInTimeLine, result.timeInSamples);
setIfNotNull (outIsCycling, false);
setIfNotNull (outCycleStartBeat, 0);
setIfNotNull (outCycleEndBeat, 0);
}
else
{
setIfNotNull (outIsPlaying, false);
setIfNotNull (outTransportStateChanged, false);
setIfNotNull (outCurrentSampleInTimeLine, 0);
setIfNotNull (outIsCycling, false);
setIfNotNull (outCycleStartBeat, 0);
setIfNotNull (outCycleEndBeat, 0);
if (outTransportStateChanged != nullptr)
{
*outTransportStateChanged = result.isPlaying != wasPlaying;
wasPlaying = result.isPlaying;
}
setIfNotNull (outCurrentSampleInTimeLine, result.timeInSamples);
setIfNotNull (outIsCycling, result.isLooping);
setIfNotNull (outCycleStartBeat, result.ppqLoopStart);
setIfNotNull (outCycleEndBeat, result.ppqLoopEnd);
return noErr;
}
}
setIfNotNull (outIsPlaying, false);
setIfNotNull (outTransportStateChanged, false);
setIfNotNull (outCurrentSampleInTimeLine, 0);
setIfNotNull (outIsCycling, false);
setIfNotNull (outCycleStartBeat, 0.0);
setIfNotNull (outCycleEndBeat, 0.0);
return noErr;
}
@@ -1188,7 +1188,7 @@ private:
}
static OSStatus renderMidiOutputCallback (void* hostRef, const AudioTimeStamp*, UInt32 /*midiOutNum*/,
const struct MIDIPacketList* pktlist)
const MIDIPacketList* pktlist)
{
return static_cast<AudioUnitPluginInstance*> (hostRef)->renderMidiOutput (pktlist);
}


Loading…
Cancel
Save