@@ -125,8 +125,32 @@ bool PluginProcessor::isBusesLayoutSupported(const BusesLayout &layouts) const {
125125 return true ;
126126}
127127
128- void PluginProcessor::processBlock (juce::AudioBuffer<float > &buffer,
129- juce::MidiBuffer &) {
128+ void PluginProcessor::processBlock (juce::AudioBuffer<float > &buffer, juce::MidiBuffer &) {
129+ if (bypass_ref_.load (std::memory_order::relaxed) < .5f ) {
130+ processBlockInternal<false >(buffer);
131+ } else {
132+ processBlockInternal<true >(buffer);
133+ }
134+ }
135+
136+ void PluginProcessor::processBlock (juce::AudioBuffer<double > &buffer, juce::MidiBuffer &) {
137+ if (bypass_ref_.load (std::memory_order::relaxed) < .5f ) {
138+ processBlockInternal<false >(buffer);
139+ } else {
140+ processBlockInternal<true >(buffer);
141+ }
142+ }
143+
144+ void PluginProcessor::processBlockBypassed (juce::AudioBuffer<float > &buffer, juce::MidiBuffer &) {
145+ processBlockInternal<true >(buffer);
146+ }
147+
148+ void PluginProcessor::processBlockBypassed (juce::AudioBuffer<double > &buffer, juce::MidiBuffer &) {
149+ processBlockInternal<true >(buffer);
150+ }
151+
152+ template <bool IsBypassed>
153+ void PluginProcessor::processBlockInternal (juce::AudioBuffer<float > &buffer) {
130154 juce::ScopedNoDenormals no_denormals;
131155 double_in_pointers[0 ] = double_in_buffer[0 ].data ();
132156 double_in_pointers[1 ] = double_in_buffer[1 ].data ();
@@ -143,20 +167,25 @@ void PluginProcessor::processBlock(juce::AudioBuffer<float> &buffer,
143167 static_cast <size_t >(buffer.getNumSamples ()));
144168 }
145169
146- if (bypass_ref_. load (std::memory_order::relaxed) < . 5f ) {
170+ if constexpr (!IsBypassed ) {
147171 for (size_t chan = 0 ; chan < static_cast <size_t >(std::min (4 , buffer.getNumChannels ())); ++chan) {
148172 zldsp::vector::copy (buffer.getWritePointer (static_cast <int >(chan)),
149173 double_out_pointers1[chan], static_cast <size_t >(buffer.getNumSamples ()));
150174 }
151175 } else {
176+ double_controller_.processBypassDelay (double_in_pointers, static_cast <size_t >(buffer.getNumSamples ()));
177+ for (size_t chan = 0 ; chan < 2 ; ++chan) {
178+ zldsp::vector::copy (buffer.getWritePointer (static_cast <int >(chan)),
179+ double_in_pointers[chan], static_cast <size_t >(buffer.getNumSamples ()));
180+ }
152181 for (auto i = getTotalNumInputChannels (); i < getTotalNumOutputChannels (); ++i) {
153182 buffer.clear (i, 0 , buffer.getNumSamples ());
154183 }
155184 }
156185}
157186
158- void PluginProcessor::processBlock (juce::AudioBuffer< double > &buffer,
159- juce::MidiBuffer & ) {
187+ template < bool IsBypassed>
188+ void PluginProcessor::processBlockInternal ( juce::AudioBuffer< double > &buffer ) {
160189 juce::ScopedNoDenormals no_denormals;
161190 double_in_pointers[0 ] = buffer.getWritePointer (0 );
162191 double_in_pointers[1 ] = buffer.getWritePointer (1 );
@@ -169,12 +198,13 @@ void PluginProcessor::processBlock(juce::AudioBuffer<double> &buffer,
169198 static_cast <size_t >(buffer.getNumSamples ()));
170199 }
171200
172- if (bypass_ref_. load (std::memory_order::relaxed) < . 5f ) {
201+ if constexpr (!IsBypassed ) {
173202 for (size_t chan = 0 ; chan < static_cast <size_t >(std::min (4 , buffer.getNumChannels ())); ++chan) {
174203 zldsp::vector::copy (buffer.getWritePointer (static_cast <int >(chan)),
175204 double_out_pointers1[chan], static_cast <size_t >(buffer.getNumSamples ()));
176205 }
177206 } else {
207+ double_controller_.processBypassDelay (double_in_pointers, static_cast <size_t >(buffer.getNumSamples ()));
178208 for (auto i = getTotalNumInputChannels (); i < getTotalNumOutputChannels (); ++i) {
179209 buffer.clear (i, 0 , buffer.getNumSamples ());
180210 }
0 commit comments