Skip to content

Commit

Permalink
filter working
Browse files Browse the repository at this point in the history
cracking on more complex stereo patches
  • Loading branch information
hsetlik committed Apr 16, 2021
1 parent 70b6375 commit 0e4bf4e
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 4 deletions.
1 change: 1 addition & 0 deletions Source/FilterPanel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ FilterPanel::FilterPanel() : cutoffLabel(&cutoffSlider, ""), resonanceLabel(&res

addAndMakeVisible(&filterType);
filterType.setButtonText("Low Pass");
filterType.setClickingTogglesState(true);
filterType.addListener(this);

cutoffSlider.setLookAndFeel(&look);
Expand Down
8 changes: 7 additions & 1 deletion Source/FmVoice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,13 @@ void FmVoice::renderNextBlock(juce::AudioBuffer<float> &outputBuffer, int startS
for(Operator* d : operators)
{
if(opRouting[op1Index][op2Index])
{ d->modOffset += o->lastOutputSample;}
{
d->modOffset += o->lastOutputSample;
if(fabs(d->modOffset) > 500.0f)
{
d->modOffset = 500.0f;
}
}
++op2Index;
}
opSample = o->sample(fundamental);
Expand Down
17 changes: 14 additions & 3 deletions Source/PluginProcessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,8 @@ juce::AudioProcessorValueTreeState::ParameterLayout createLayout(int numOperator
auto toggleId = "filterToggleParam";
auto toggleName = "Bypass Filter";

layout.add(std::make_unique<juce::AudioParameterFloat>(cutoffId, cutoffName, 0.0f, 15000.0f , 2500.0f));
layout.add(std::make_unique<juce::AudioParameterFloat>(resonanceId, resonanceName, 0.0f, 20.0f , 1.0f));
layout.add(std::make_unique<juce::AudioParameterFloat>(cutoffId, cutoffName, 0.01f, 15000.0f , 2500.0f));
layout.add(std::make_unique<juce::AudioParameterFloat>(resonanceId, resonanceName, 0.001f, 20.0f , 1.0f));
layout.add(std::make_unique<juce::AudioParameterBool>(typeId, typeName, false));
layout.add(std::make_unique<juce::AudioParameterBool>(toggleId, toggleName, false));

Expand All @@ -138,7 +138,8 @@ HexFmAudioProcessor::HexFmAudioProcessor()
),
tree(*this, nullptr, "synthParams", createLayout(numOperators)),
synth(6, 4, 6, &tree),
fixedFilter(juce::dsp::IIR::Coefficients<float>::makeHighShelf(44100.0f, 44100.0f * 0.35f, 1.0f, 0.00001f))
fixedFilter(juce::dsp::IIR::Coefficients<float>::makeHighShelf(44100.0f, 44100.0f * 0.35f, 1.0f, 0.00001f)),
synthFilter(juce::dsp::IIR::Coefficients<float>::makeLowPass(44100.0f, 2500.0f, 1.0f))
#endif
{
for(int i = 0; i < 4; ++i)
Expand Down Expand Up @@ -246,6 +247,7 @@ void HexFmAudioProcessor::changeProgramName (int index, const juce::String& newN
void HexFmAudioProcessor::prepareToPlay (double sampleRate, int samplesPerBlock)
{
juce::ignoreUnused(samplesPerBlock);
lastSampleRate = sampleRate;
synth.setCurrentPlaybackSampleRate(sampleRate);
maxiSettings::setup((int)sampleRate, 2, samplesPerBlock);
for(juce::SynthesiserVoice* i : *synth.voiceArray())
Expand All @@ -260,6 +262,10 @@ void HexFmAudioProcessor::prepareToPlay (double sampleRate, int samplesPerBlock)

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

synthFilter.prepare(spec);
synthFilter.reset();

}

void HexFmAudioProcessor::releaseResources()
Expand Down Expand Up @@ -299,6 +305,11 @@ void HexFmAudioProcessor::processBlock (juce::AudioBuffer<float>& buffer, juce::
synth.renderNextBlock(buffer, midiMessages, 0, buffer.getNumSamples());

juce::dsp::AudioBlock<float> block(buffer);
updateFilter();
if(isFilterOn)
{
synthFilter.process(juce::dsp::ProcessContextReplacing<float>(block));
}
fixedFilter.process(juce::dsp::ProcessContextReplacing<float>(block));
}

Expand Down
24 changes: 24 additions & 0 deletions Source/PluginProcessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,13 +81,37 @@ class HexFmAudioProcessor : public juce::AudioProcessor
std::vector<juce::String> releaseIds;
std::vector<juce::String> panIds;
std::vector<std::vector<juce::String>> routingIds;
void updateFilter()
{
filterCutoff = *tree.getRawParameterValue("cutoffParam");
filterResonance = *tree.getRawParameterValue("resonanceParam");
filterIsHighPass = (bool)*tree.getRawParameterValue("filterTypeParam");
isFilterOn = (bool)*tree.getRawParameterValue("filterToggleParam");

if(filterIsHighPass)
{
*synthFilter.state = *juce::dsp::IIR::Coefficients<float>::makeHighPass(lastSampleRate, filterCutoff, filterResonance);
}
else
{
*synthFilter.state = *juce::dsp::IIR::Coefficients<float>::makeLowPass(lastSampleRate, filterCutoff, filterResonance);
}
}

int lfoIndex;
int opIndex;
int voiceIndex;
FmSynth synth;

float filterCutoff;
float filterResonance;
bool filterIsHighPass;
bool isFilterOn;

double lastSampleRate;

juce::dsp::ProcessorDuplicator<juce::dsp::IIR::Filter<float>, juce::dsp::IIR::Coefficients<float>> fixedFilter;
juce::dsp::ProcessorDuplicator<juce::dsp::IIR::Filter<float>, juce::dsp::IIR::Coefficients<float>> synthFilter;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (HexFmAudioProcessor)
};

0 comments on commit 0e4bf4e

Please sign in to comment.