Skip to content

Commit

Permalink
added fixed filter for anti-aliasing/ artifacts
Browse files Browse the repository at this point in the history
  • Loading branch information
hsetlik committed Apr 13, 2021
1 parent 8c51697 commit 208176b
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 17 deletions.
23 changes: 11 additions & 12 deletions Source/PluginProcessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,11 +124,7 @@ HexFmAudioProcessor::HexFmAudioProcessor()
),
tree(*this, nullptr, "synthParams", createLayout(numOperators)),
synth(6, 4, 6, &tree),
fwdFFT(10),
invFFT(10),
bufferSize(getBlockSize()),
fftArray1(new float[bufferSize]),
fftArray2(new float[2 * bufferSize])
fixedFilter(juce::dsp::IIR::Coefficients<float>::makeHighShelf(44100.0f, 44100.0f * 0.35f, 1.0f, 0.00001f))
#endif
{
for(int i = 0; i < 4; ++i)
Expand Down Expand Up @@ -235,7 +231,6 @@ void HexFmAudioProcessor::changeProgramName (int index, const juce::String& newN
//==============================================================================
void HexFmAudioProcessor::prepareToPlay (double sampleRate, int samplesPerBlock)
{
bufferSize = samplesPerBlock;
juce::ignoreUnused(samplesPerBlock);
synth.setCurrentPlaybackSampleRate(sampleRate);
maxiSettings::setup((int)sampleRate, 2, samplesPerBlock);
Expand All @@ -244,6 +239,13 @@ void HexFmAudioProcessor::prepareToPlay (double sampleRate, int samplesPerBlock)
auto* voice = dynamic_cast<FmVoice*>(i);
voice->setSampleRate(sampleRate);
}
juce::dsp::ProcessSpec spec;
spec.sampleRate = sampleRate;
spec.maximumBlockSize = samplesPerBlock;
spec.numChannels = getTotalNumOutputChannels();

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

void HexFmAudioProcessor::releaseResources()
Expand Down Expand Up @@ -278,15 +280,12 @@ bool HexFmAudioProcessor::isBusesLayoutSupported (const BusesLayout& layouts) co

void HexFmAudioProcessor::processBlock (juce::AudioBuffer<float>& buffer, juce::MidiBuffer& midiMessages)
{
if(bufferSize != buffer.getNumSamples())
{
bufferSize = buffer.getNumSamples();
fftArray1 = new float[bufferSize];
fftArray2 = new float[2 * bufferSize];
}
buffer.clear();
synth.updateParams();
synth.renderNextBlock(buffer, midiMessages, 0, buffer.getNumSamples());

juce::dsp::AudioBlock<float> block(buffer);
fixedFilter.process(juce::dsp::ProcessContextReplacing<float>(block));
}

//==============================================================================
Expand Down
6 changes: 1 addition & 5 deletions Source/PluginProcessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,7 @@ class HexFmAudioProcessor : public juce::AudioProcessor
int voiceIndex;
FmSynth synth;

juce::dsp::FFT fwdFFT;
juce::dsp::FFT invFFT;
int bufferSize;
float* fftArray1;
float* fftArray2;
juce::dsp::ProcessorDuplicator<juce::dsp::IIR::Filter<float>, juce::dsp::IIR::Coefficients<float>> fixedFilter;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (HexFmAudioProcessor)
};

0 comments on commit 208176b

Please sign in to comment.