fix: use iter_samples() to access per-channel output buffers
Co-authored-by: aider (deepseek/deepseek-coder) <aider@aider.chat>
This commit is contained in:
29
src/lib.rs
29
src/lib.rs
@@ -103,12 +103,29 @@ impl Plugin for ClipLauncher {
|
|||||||
|
|
||||||
// Process audio
|
// Process audio
|
||||||
let num_channels = buffer.channels() as usize;
|
let num_channels = buffer.channels() as usize;
|
||||||
let input = buffer.as_slice();
|
let num_frames = buffer.samples() as usize;
|
||||||
let output = buffer.as_mut_slice();
|
let input_slices = buffer.as_slice(); // &[&[f32]]
|
||||||
let num_frames = input.len() / num_channels;
|
|
||||||
|
// Build interleaved input buffer
|
||||||
// Process this block
|
let mut interleaved_input = vec![0.0; num_frames * num_channels];
|
||||||
self.engine.process_audio(input, output, num_frames);
|
for ch in 0..num_channels {
|
||||||
|
for frame in 0..num_frames {
|
||||||
|
interleaved_input[frame * num_channels + ch] = input_slices[ch][frame];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build interleaved output buffer (will be filled by engine)
|
||||||
|
let mut interleaved_output = vec![0.0; num_frames * num_channels];
|
||||||
|
|
||||||
|
self.engine.process_audio(&interleaved_input, &mut interleaved_output, num_frames);
|
||||||
|
|
||||||
|
// Copy back to buffer's output channels
|
||||||
|
for (ch, channel_samples) in buffer.iter_samples().enumerate() {
|
||||||
|
let output = channel_samples.outputs;
|
||||||
|
for frame in 0..num_frames {
|
||||||
|
output[frame] = interleaved_output[frame * num_channels + ch];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Send pending MIDI output events
|
// Send pending MIDI output events
|
||||||
for event in self.pending_midi.drain(..) {
|
for event in self.pending_midi.drain(..) {
|
||||||
|
|||||||
Reference in New Issue
Block a user