#pragma once #include "../SynthVoice.h" void NeuralSynthVoice::renderEQ(juce::dsp::AudioBlock &block) { // ================================================================ // EQ + Master + Limiter (EQ guarded by eqOn) // ================================================================ const bool eqEnabled = shared.eqOn && shared.eqOn->load() > 0.5f; auto& eqL = chain.get(); auto& eqM = chain.get(); auto& eqH = chain.get(); if (eqEnabled) { eqL.coefficients = juce::dsp::IIR::Coefficients::makeLowShelf ( spec.sampleRate, 100.0f, 0.707f, juce::Decibels::decibelsToGain (shared.lowGainDbls ? shared.lowGainDbls->load() : 0.0f)); eqM.coefficients = juce::dsp::IIR::Coefficients::makePeakFilter ( spec.sampleRate, 1000.0f, 1.0f, juce::Decibels::decibelsToGain (shared.midGainDbls ? shared.midGainDbls->load() : 0.0f)); eqH.coefficients = juce::dsp::IIR::Coefficients::makePeakFilter ( spec.sampleRate, 10000.0f, 0.707f, juce::Decibels::decibelsToGain (shared.highGainDbls ? shared.highGainDbls->load() : 0.0f)); eqL.process (juce::dsp::ProcessContextReplacing (block)); eqM.process (juce::dsp::ProcessContextReplacing (block)); eqH.process (juce::dsp::ProcessContextReplacing (block)); } chain.get().setGainDecibels (shared.masterDbls ? shared.masterDbls->load() : 0.0f); chain.get().process (juce::dsp::ProcessContextReplacing (block)); chain.get().process (juce::dsp::ProcessContextReplacing (block)); }