(SOLVED) Help Noise in Synth after Adding juce::Reverb Can Anybody Help Me?

Here’s the renderNextBlock. I keep hearing weird noises all over the place after adding the reverb. I declared a juce::Reverb in .h file, and then in prepare method added the default reverb parameters, everything else seems to be working, up until I process the outputBuffer with the reverb. What am I doin wrong?

void SynthVoice::renderNextBlock ( juce::AudioBuffer &outputBuffer,
int startSample,
int numSamples){

//Apply ADSR Envelope Changes
mAdsrParams.attack = *audioProcessor.apvts.getRawParameterValue("ATTACK");
mAdsrParams.decay = *audioProcessor.apvts.getRawParameterValue("DECAY");
mAdsrParams.sustain = *audioProcessor.apvts.getRawParameterValue("SUSTAIN");
mAdsrParams.release = *audioProcessor.apvts.getRawParameterValue("RELEASE");
mAdsr.setParameters(mAdsrParams);

//Apply Filter Cutoff and Resonance Changes
mFilter.setCutoffFrequency(*audioProcessor.apvts.getRawParameterValue("CUTOFF"));
mFilter.setResonance(*audioProcessor.apvts.getRawParameterValue("RESONANCE"));

//Compresser Update Parameters
mCompressor.setRatio(*audioProcessor.apvts.getRawParameterValue("COMPRATIO"));
mCompressor.setThreshold(*audioProcessor.apvts.getRawParameterValue("COMPTHRESH"));
mCompressor.setAttack(*audioProcessor.apvts.getRawParameterValue("COMPATTACK"));
mCompressor.setRelease(*audioProcessor.apvts.getRawParameterValue("COMPRELEASE"));

//Process the signal buffer
if (angleDelta != 0.0f){
    if (tailOff > 0.0f){
        while (--numSamples >= 0){
            //auto currentSample = (float) (processedOscillatorSample(std::sin (currentAngle)) * level * tailOff);
            auto currentSample = (float) processedOscillatorSample(level * tailOff * std::cos(currentAngle));

            for (auto i = outputBuffer.getNumChannels(); --i >= 0;){
                auto sampleAfterEnvelopeAndGain = currentSample * (mAdsr.getNextSample() * (*audioProcessor.apvts.getRawParameterValue("GAIN")));
                auto filteredSample = mFilter.processSample(i,sampleAfterEnvelopeAndGain);
                auto compressedSample = mCompressor.processSample(i,filteredSample);
                outputBuffer.addSample (i, startSample, compressedSample);
            }
            
            

            
            currentAngle += angleDelta;
            ++startSample;

            tailOff *= 1.0f;

            if (tailOff <= 0.005f){
                clearCurrentNote();
                angleDelta = 0.0f;
                break;
            }
        }
    }
    else{
        while (--numSamples >= 0){
            auto currentSample = (float) processedOscillatorSample(level * std::cos(currentAngle));
            for (auto i = outputBuffer.getNumChannels(); --i >= 0;){

                auto sampleAfterEnvelopeAndGain = currentSample * (mAdsr.getNextSample() * (*audioProcessor.apvts.getRawParameterValue("GAIN")));
                auto filteredSample = mFilter.processSample(i,sampleAfterEnvelopeAndGain);
                auto compressedSample = mCompressor.processSample(i,filteredSample * *audioProcessor.apvts.getRawParameterValue("GAIN"));
                outputBuffer.addSample (i, startSample, compressedSample);
                

            }
            
            currentAngle += angleDelta;
            ++startSample;
        }
    }
    
    
    mReverb.processStereo(outputBuffer.getWritePointer(0),outputBuffer.getWritePointer(1), outputBuffer.getNumSamples());

}

`
Hey if anybody reads this and ends up in a similar situation, I figured out that the problem was that I was trying to process the reverb on each individual voice’s renderNextBlock buffer, instead I was supposed to process the reverb on the processBlock buffer of the PluginProcessor.cpp instead. So I just removed the reverb from the SynthVoice class altogether, and defined it within the PluginProcessor class instead. Hope that helps someone.

Thank you so much for leaving this tip! I was also trying to process reverb on each SynthVoice and it was not working :smile: