diff --git a/plugins/Cardinal/src/HostAudio.cpp b/plugins/Cardinal/src/HostAudio.cpp index 489216e..d7238a3 100644 --- a/plugins/Cardinal/src/HostAudio.cpp +++ b/plugins/Cardinal/src/HostAudio.cpp @@ -244,6 +244,7 @@ struct HostAudio : Module { // for rack core audio module compatibility dsp::RCFilter dcFilters[numIO]; bool dcFilterEnabled = (numIO == 2); + volatile bool resetMeters = true; float gainMeterL = 0.0f; float gainMeterR = 0.0f; @@ -269,10 +270,13 @@ struct HostAudio : Module { void onReset() override { dcFilterEnabled = (numIO == 2); + resetMeters = true; } void onSampleRateChange(const SampleRateChangeEvent& e) override { + resetMeters = true; + for (int i=0; i struct NanoMeter : Widget { HostAudio* const module; + float gainMeterL = 0.0f; + float gainMeterR = 0.0f; NanoMeter(HostAudio* const m) : module(m) @@ -387,10 +398,13 @@ struct NanoMeter : Widget { if (module != nullptr) { - float gainMeterL = 0.0f; - float gainMeterR = 0.0f; - std::swap(gainMeterL, module->gainMeterL); - std::swap(gainMeterR, module->gainMeterR); + // Only fetch new values once DSP side is updated + if (! module->resetMeters) + { + gainMeterL = module->gainMeterL; + gainMeterR = module->gainMeterR; + module->resetMeters = true; + } const float heightL = 1.0f + std::sqrt(gainMeterL) * (usableHeight - 1.0f); nvgBeginPath(args.vg);