@@ -21,6 +21,10 @@ void Constellation::prepare(const juce::dsp::ProcessSpec& spec)
2121
2222 delay.prepare (spec);
2323 dampingFilter.prepare (spec);
24+ dcFilter.prepare (spec);
25+
26+ dcFilter.setType (juce::dsp::FirstOrderTPTFilterType::highpass);
27+ dcFilter.setCutoffFrequency (20 .0f );
2428
2529 // prepare lfo
2630 lfoParameters.frequency_Hz = 0.25 ;
@@ -60,32 +64,34 @@ void Constellation::processBlock(juce::AudioBuffer<float>& buffer, juce::MidiBuf
6064 lfoOutput = lfo[channel].renderAudioOutput ();
6165
6266 // input + damped feedback into delay
63- delay.pushSample (channel, channelData[sample] + ( dampingFilter.processSample (channel, channelFeedback[channel]) * mParameters .decayTime ));
67+ delay.pushSample (channel, channelData[sample] + dcFilter. processSample (channel, dampingFilter.processSample (channel, channelFeedback[channel]) * mParameters .decayTime ));
6468 dampingFilter.snapToZero ();
69+ dcFilter.snapToZero ();
6570
6671 // reset channelData, then sum outputs to channel
6772 channelData[sample] = 0 .0f ;
6873 for (int delOut = 0 ; delOut < 4 ; ++delOut)
6974 {
70- channelData[sample] += delay.getSampleAtDelay (channel, channelOutDelayTimes[channel][delOut] * mSamplesPerMs ) / 2 .828f ;
75+ channelData[sample] += delay.getSampleAtDelay (channel, channelOutDelayTimes[channel][delOut] * mSamplesPerMs ) / 2 .0f ;
7176 }
7277
7378 // reset feedback, then add delay taps
7479 channelFeedback[channel] = 0 .0f ;
75- for (int delFb = 0 ; delFb < 16 ; ++delFb )
80+ for (int delTime = 0 ; delTime < 16 ; ++delTime )
7681 {
7782 float selectedLfo { 0 .0f };
7883
79- if (delFb % 4 == 0 )
84+ if (delTime % 4 == 0 )
8085 selectedLfo = lfoOutput.quadPhaseOutput_neg ;
81- else if (delFb % 3 == 0 )
86+ else if (delTime % 3 == 0 )
8287 selectedLfo = lfoOutput.invertedOutput ;
83- else if (delFb % 2 == 0 )
88+ else if (delTime % 2 == 0 )
8489 selectedLfo = lfoOutput.quadPhaseOutput_pos ;
8590 else
8691 selectedLfo = lfoOutput.normalOutput ;
8792
88- channelFeedback[channel] += delay.getSampleAtDelay (channel, (feedbackDelayTimes[delFb] * mSamplesPerMs * mParameters .roomSize ) + (selectedLfo * 32 .0f )) / 13 .0f ;
93+ // modulate from +/- 32 to +/- 64; does not turn fully off to allow for longer tails
94+ channelFeedback[channel] += delay.getSampleAtDelay (channel, (feedbackDelayTimes[delTime] * mSamplesPerMs * mParameters .roomSize ) + (selectedLfo * (mParameters .modDepth * 32 .0f + 32 .0f ))) / 7 .0f ;
8995 }
9096 }
9197 }
@@ -102,6 +108,9 @@ ReverbProcessorParameters& Constellation::getParameters() { return mParameters;
102108void Constellation::setParameters (const ReverbProcessorParameters& params)
103109{
104110 if (!(params == mParameters ))
111+ {
105112 mParameters = params;
113+ mParameters .roomSize = scale (mParameters .roomSize , 0 .0f , 1 .0f , 0 .25f , 4 .0f );
114+ }
106115}
107116
0 commit comments