diff --git a/plugin/Source/PluginProcessor.cpp b/plugin/Source/PluginProcessor.cpp index 953feeb..76ecca3 100644 --- a/plugin/Source/PluginProcessor.cpp +++ b/plugin/Source/PluginProcessor.cpp @@ -723,7 +723,16 @@ void WavetableAudioProcessor::processBlock (juce::AudioBuffer& buffer, ju { juce::ScopedNoDenormals noDenormals; if (! dspLock.tryEnter()) + { + blockMissed = true; return; + } + + if (blockMissed) + { + blockMissed = false; + turnOffAllVoices (false); + } startBlock(); setMPE (globalParams.mpe->isOn()); diff --git a/plugin/Source/PluginProcessor.h b/plugin/Source/PluginProcessor.h index d955716..898d0bb 100644 --- a/plugin/Source/PluginProcessor.h +++ b/plugin/Source/PluginProcessor.h @@ -269,6 +269,7 @@ public: gin::StepLFO modStepLFO; juce::AudioPlayHead* playhead = nullptr; + bool blockMissed = false; struct CurTable { diff --git a/plugin/Source/WavetableVoice.cpp b/plugin/Source/WavetableVoice.cpp index b084c72..543ae8f 100644 --- a/plugin/Source/WavetableVoice.cpp +++ b/plugin/Source/WavetableVoice.cpp @@ -52,13 +52,17 @@ void WavetableVoice::noteStarted() for (auto& osc : oscillators) osc.noteOn(); + noise.noteOn(); sub.noteOn(); filterADSR.noteOn(); for (auto& a : modADSRs) - a.noteOn(); + { + a.reset(); + a.noteOn(); + } for (auto& l : modLFOs) l.noteOn();