mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-28 02:30:05 +00:00
Make setPlayHead in AudioProcessorGraph thread safe
This commit is contained in:
parent
3c0d634b4f
commit
80224cafae
2 changed files with 11 additions and 19 deletions
|
|
@ -36,10 +36,11 @@ struct GraphRenderSequence
|
|||
{
|
||||
FloatType** audioBuffers;
|
||||
MidiBuffer* midiBuffers;
|
||||
AudioPlayHead* audioPlayHead;
|
||||
int numSamples;
|
||||
};
|
||||
|
||||
void perform (AudioBuffer<FloatType>& buffer, MidiBuffer& midiMessages)
|
||||
void perform (AudioBuffer<FloatType>& buffer, MidiBuffer& midiMessages, AudioPlayHead* audioPlayHead)
|
||||
{
|
||||
auto numSamples = buffer.getNumSamples();
|
||||
auto maxSamples = renderingBuffer.getNumSamples();
|
||||
|
|
@ -53,11 +54,11 @@ struct GraphRenderSequence
|
|||
{
|
||||
AudioBuffer<FloatType> startAudio (buffer.getArrayOfWritePointers(), buffer.getNumChannels(), maxSamples);
|
||||
midiMessages.clear (maxSamples, numSamples);
|
||||
perform (startAudio, midiMessages);
|
||||
perform (startAudio, midiMessages, audioPlayHead);
|
||||
}
|
||||
|
||||
AudioBuffer<FloatType> endAudio (buffer.getArrayOfWritePointers(), buffer.getNumChannels(), maxSamples, numSamples - maxSamples);
|
||||
perform (endAudio, tempMIDI);
|
||||
perform (endAudio, tempMIDI, audioPlayHead);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -68,7 +69,7 @@ struct GraphRenderSequence
|
|||
currentMidiOutputBuffer.clear();
|
||||
|
||||
{
|
||||
const Context context { renderingBuffer.getArrayOfWritePointers(), midiBuffers.begin(), numSamples };
|
||||
const Context context { renderingBuffer.getArrayOfWritePointers(), midiBuffers.begin(), audioPlayHead, numSamples };
|
||||
|
||||
for (auto* op : renderOps)
|
||||
op->perform (context);
|
||||
|
|
@ -210,7 +211,7 @@ private:
|
|||
buffer.calloc ((size_t) bufferSize);
|
||||
}
|
||||
|
||||
void perform (const Context& c)
|
||||
void perform (const Context& c) override
|
||||
{
|
||||
auto* data = c.audioBuffers[channel];
|
||||
|
||||
|
|
@ -249,8 +250,10 @@ private:
|
|||
audioChannelsToUse.add (0);
|
||||
}
|
||||
|
||||
void perform (const Context& c)
|
||||
void perform (const Context& c) override
|
||||
{
|
||||
processor.setPlayHead (c.audioPlayHead);
|
||||
|
||||
for (int i = 0; i < totalChans; ++i)
|
||||
audioChannels[i] = c.audioBuffers[audioChannelsToUse.getUnchecked (i)];
|
||||
|
||||
|
|
@ -1248,16 +1251,6 @@ void AudioProcessorGraph::setNonRealtime (bool isProcessingNonRealtime) noexcept
|
|||
n->getProcessor()->setNonRealtime (isProcessingNonRealtime);
|
||||
}
|
||||
|
||||
void AudioProcessorGraph::setPlayHead (AudioPlayHead* audioPlayHead)
|
||||
{
|
||||
const ScopedLock sl (getCallbackLock());
|
||||
|
||||
AudioProcessor::setPlayHead (audioPlayHead);
|
||||
|
||||
for (auto* n : nodes)
|
||||
n->getProcessor()->setPlayHead (audioPlayHead);
|
||||
}
|
||||
|
||||
double AudioProcessorGraph::getTailLengthSeconds() const { return 0; }
|
||||
bool AudioProcessorGraph::acceptsMidi() const { return true; }
|
||||
bool AudioProcessorGraph::producesMidi() const { return true; }
|
||||
|
|
@ -1269,7 +1262,7 @@ void AudioProcessorGraph::processBlock (AudioBuffer<float>& buffer, MidiBuffer&
|
|||
const ScopedLock sl (getCallbackLock());
|
||||
|
||||
if (renderSequenceFloat != nullptr)
|
||||
renderSequenceFloat->perform (buffer, midiMessages);
|
||||
renderSequenceFloat->perform (buffer, midiMessages, getPlayHead());
|
||||
}
|
||||
|
||||
void AudioProcessorGraph::processBlock (AudioBuffer<double>& buffer, MidiBuffer& midiMessages)
|
||||
|
|
@ -1277,7 +1270,7 @@ void AudioProcessorGraph::processBlock (AudioBuffer<double>& buffer, MidiBuffer&
|
|||
const ScopedLock sl (getCallbackLock());
|
||||
|
||||
if (renderSequenceDouble != nullptr)
|
||||
renderSequenceDouble->perform (buffer, midiMessages);
|
||||
renderSequenceDouble->perform (buffer, midiMessages, getPlayHead());
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -349,7 +349,6 @@ public:
|
|||
|
||||
void reset() override;
|
||||
void setNonRealtime (bool) noexcept override;
|
||||
void setPlayHead (AudioPlayHead*) override;
|
||||
|
||||
double getTailLengthSeconds() const override;
|
||||
bool acceptsMidi() const override;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue