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());