|
|
@ -95,9 +95,21 @@ void ReverbAudioProcessor::prepareToPlay (double sampleRate, int samplesPerBlock
|
|
|
|
// Use this method as the place to do any pre-playback
|
|
|
|
// Use this method as the place to do any pre-playback
|
|
|
|
// initialisation that you need..
|
|
|
|
// initialisation that you need..
|
|
|
|
verb.reset();
|
|
|
|
verb.reset();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
juce::IIRFilter* one_l = new juce::IIRFilter();
|
|
|
|
|
|
|
|
juce::IIRFilter* one_r = new juce::IIRFilter();
|
|
|
|
|
|
|
|
juce::IIRFilter* two_l = new juce::IIRFilter();
|
|
|
|
|
|
|
|
juce::IIRFilter* two_r = new juce::IIRFilter();
|
|
|
|
|
|
|
|
juce::IIRFilter* three_l = new juce::IIRFilter();
|
|
|
|
|
|
|
|
juce::IIRFilter* three_r = new juce::IIRFilter();
|
|
|
|
|
|
|
|
|
|
|
|
filter_l = new juce::IIRFilter();
|
|
|
|
filters_l.push_back(one_l);
|
|
|
|
filter_r = new juce::IIRFilter();
|
|
|
|
filters_l.push_back(two_l);
|
|
|
|
|
|
|
|
filters_l.push_back(three_l);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
filters_r.push_back(one_r);
|
|
|
|
|
|
|
|
filters_r.push_back(two_r);
|
|
|
|
|
|
|
|
filters_r.push_back(three_r);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -168,14 +180,18 @@ void ReverbAudioProcessor::processBlock (juce::AudioBuffer<float>& buffer, juce:
|
|
|
|
num_samples);
|
|
|
|
num_samples);
|
|
|
|
|
|
|
|
|
|
|
|
setup_filter();
|
|
|
|
setup_filter();
|
|
|
|
filter_l->processSamples(channel_one, num_samples);
|
|
|
|
for (int i = 0; i < 3; i++) {
|
|
|
|
filter_r->processSamples(channel_two, num_samples);
|
|
|
|
filters_l[i]->processSamples(channel_one, num_samples);
|
|
|
|
|
|
|
|
filters_r[i]->processSamples(channel_two, num_samples);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//filter_l->processSamples(channel_one, num_samples);
|
|
|
|
|
|
|
|
//filter_r->processSamples(channel_two, num_samples);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (auto i = 0; i < num_samples; i++) {
|
|
|
|
for (auto i = 0; i < num_samples; i++) {
|
|
|
|
*buffer.getWritePointer(0, i) = (*buffer.getReadPointer(0, i)) * out->get();
|
|
|
|
*buffer.getWritePointer(0, i) = (*buffer.getReadPointer(0, i)) * out->get();
|
|
|
|
*buffer.getWritePointer(1, i) = (*buffer.getReadPointer(1, i)) * out->get();
|
|
|
|
*buffer.getWritePointer(1, i) = (*buffer.getReadPointer(1, i)) * out->get();
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -183,20 +199,46 @@ void ReverbAudioProcessor::processBlock (juce::AudioBuffer<float>& buffer, juce:
|
|
|
|
void ReverbAudioProcessor::setup_filter()
|
|
|
|
void ReverbAudioProcessor::setup_filter()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
juce::IIRCoefficients coef = juce::IIRCoefficients();
|
|
|
|
juce::IIRCoefficients coef = juce::IIRCoefficients();
|
|
|
|
if (lofi) {
|
|
|
|
if (lofi->get()) {
|
|
|
|
filter_l->setCoefficients(coef.makeBandPass(sample_rate, tone_val->get() * 24000));
|
|
|
|
for (int i = 0; i < 3; i++) {
|
|
|
|
filter_r->setCoefficients(coef.makeBandPass(sample_rate, tone_val->get() * 24000));
|
|
|
|
//filters_l[i]->reset();
|
|
|
|
|
|
|
|
//filters_r[i]->reset();
|
|
|
|
} else {
|
|
|
|
|
|
|
|
if (tone_val->get() == 0.5) {
|
|
|
|
|
|
|
|
filter_l->makeInactive();
|
|
|
|
|
|
|
|
filter_r->makeInactive();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
filter_l->makeInactive();
|
|
|
|
|
|
|
|
filter_r->makeInactive();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
filters_l[0]->setCoefficients(coef.makeBandPass(sample_rate, tone_val->get() * 24000));
|
|
|
|
|
|
|
|
filters_r[0]->setCoefficients(coef.makeBandPass(sample_rate, tone_val->get() * 24000));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 1; i < 3; i++) {
|
|
|
|
|
|
|
|
filters_r[i]->makeInactive();
|
|
|
|
|
|
|
|
filters_l[i]->makeInactive();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
for (int i = 0; i < 3; i++) {
|
|
|
|
|
|
|
|
//filters_l[i]->reset();
|
|
|
|
|
|
|
|
//filters_r[i]->reset();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
filters_l[0]->setCoefficients(coef.makeHighPass(sample_rate, 85.0));
|
|
|
|
|
|
|
|
filters_r[0]->setCoefficients(coef.makeHighPass(sample_rate, 85.0));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
float expanded_freq = 0;
|
|
|
|
|
|
|
|
if (tone_val->get() == 0.5) {
|
|
|
|
|
|
|
|
expanded_freq = 12000.0;
|
|
|
|
|
|
|
|
} else if (tone_val->get() < 0.5) {
|
|
|
|
|
|
|
|
expanded_freq = (tone_val->get() * 2) * (12000 - 5000) + 5000; // need to expand the normalized range
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
expanded_freq = ((tone_val->get() - 0.5) * 2) * (20000 - 12000) + 12000; // need to expand the normalized range
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
filters_l[1]->setCoefficients(coef.makeLowPass(sample_rate, expanded_freq));
|
|
|
|
|
|
|
|
filters_r[1]->setCoefficients(coef.makeLowPass(sample_rate, expanded_freq));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//filters_l[2]->setCoefficients(coef.makePeakFilter(sample_rate, 6000, 0.4, 1));
|
|
|
|
|
|
|
|
//filters_r[2]->setCoefficients(coef.makePeakFilter(sample_rate, 6000, 0.4, 1));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
filters_l[2]->makeInactive(); // band boost for later?
|
|
|
|
|
|
|
|
filters_r[2]->makeInactive();
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|