Why does filter.processSample not work?

Hi there, my filter doesn’t do anything. Is it because it gets reset in every sample? I don’t know how to cast the voices outside my processBlock I tried but no sound.

void renderNextBlock (AudioBuffer <float> &outputBuffer, int startSample, int numSamples) override
{
  if(tune < 0){increment = (frequency / tune_holder) * wt_size / samplerate;}
  else{        increment = (frequency * tune_holder) * wt_size / samplerate;}

  adsr.setParameters(adsr_parameters);

    for (int sample = startSample; sample < startSample + numSamples; ++sample)
    {
        float env_value = adsr.getNextSample();
        float sample_out = (*wavetable)[id][phase_0]  * level * env_value * gain;


        for (int channel = 0; channel < outputBuffer.getNumChannels(); ++channel)
        {
          outputBuffer.addSample(channel, sample, sample_out);
          filter.processSample(channel, sample);
        }

        phase_0 = fmod(phase_0 + increment,wt_size);
    }
}

void prepFilter(int samplesPerBlock)
{
  spec.maximumBlockSize = samplesPerBlock;
  spec.numChannels = 2;
  spec.sampleRate = samplerate;

  filter.reset();
  filter.prepare (spec);
}

void updateFilter(std::atomic<float>* filt, std::atomic<float>* cut,
                  std::atomic<float>* res)
{
  if (spec.sampleRate != 0.0)
  {
    filter.setCutoffFrequency (static_cast<float> (*cut));
    filter.setResonance       (static_cast<float> (*res));

    int switch_type = static_cast<int> (*filt);
    switch (switch_type)
    {
        case 0:   filter.setType (dsp::StateVariableTPTFilterType::lowpass);  break;
        case 1:   filter.setType (dsp::StateVariableTPTFilterType::highpass); break;
        case 2:   filter.setType (dsp::StateVariableTPTFilterType::bandpass); break;
        default:  jassertfalse;                                          break;
    };
  }
}

pB:

      void processBlock (juce::AudioSampleBuffer& buffer, juce::MidiBuffer& midiMessages) override
  {
    for (int i = 0; i < synth.getNumVoices(); i++)
    {
        //if myVoice sucessfully casts as a SynthVoice*, get the voice and set the params
        if ((voice = dynamic_cast<SynthVoice*>(synth.getVoice(i))))
        {
          voice->setSampleRate(lastSampleRate);
          voice->prepFilter(lastSamplesPerBlock);
          voice->updateFilter(filt, cut, res);
          voice->setWavetable(wavetable, id);
          voice->setADSRParameters(att, dec, sus, rel);
          voice->setGain(gain);
          voice->setTableRange(first_sample, last_sample);
          voice->setTuning(tune);
        }
    }

    synth.renderNextBlock(buffer, midiMessages, 0, buffer.getNumSamples());