MCPcopy Create free account
hub / github.com/BillyDM/Firewheel / convolve_block

Method convolve_block

crates/firewheel-nodes/src/convolution.rs:358–398  ·  view source on GitHub ↗
(
        &mut self,
        buffers: &mut ProcBuffers,
        range: Range<usize>,
        extra: &mut ProcExtra,
    )

Source from the content-addressed store, hash-verified

356 ProcessStatus::outputs_modified_with_silence_mask(info.in_silence_mask)
357 } else {
358 buffers.check_for_silence_on_outputs(DEFAULT_MIN_AMP)
359 }
360 }
361}
362
363impl ConvolutionProcessor {
364 fn convolve_block(
365 &mut self,
366 buffers: &mut ProcBuffers,
367 range: Range<usize>,
368 extra: &mut ProcExtra,
369 ) {
370 let frames = range.end - range.start;
371
372 let mut scratch_buffers = extra.scratch_buffers.all_mut();
373 let (wet_gain_buffer, wet_declick_buffer) = scratch_buffers.split_first_mut().unwrap();
374 let wet_declick_buffer = &mut wet_declick_buffer[0];
375
376 self.gain
377 .process_into_buffer(&mut wet_gain_buffer[0..frames]);
378 self.declick.process_into_gain_buffer(
379 &mut wet_declick_buffer[0..frames],
380 false,
381 &extra.declick_values,
382 DeclickFadeCurve::EqualPower3dB,
383 );
384
385 for ((conv, input), output) in self
386 .convolver
387 .iter_mut()
388 .zip(buffers.inputs.iter())
389 .zip(buffers.outputs.iter_mut())
390 {
391 conv.process(&input[range.clone()], &mut output[range.clone()])
392 .unwrap();
393
394 for ((out_s, &g1), &g2) in output[range.clone()]
395 .iter_mut()
396 .zip(wet_gain_buffer.iter())
397 .zip(wet_declick_buffer.iter())
398 {
399 *out_s *= g1 * g2;
400 }
401 }

Callers 1

processMethod · 0.80

Calls 6

all_mutMethod · 0.80
process_into_bufferMethod · 0.45
processMethod · 0.45
cloneMethod · 0.45
settleMethod · 0.45

Tested by

no test coverage detected