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
|
||||
let num_channels = buffer.channels() as usize;
|
||||
let input = buffer.as_slice();
|
||||
let output = buffer.as_mut_slice();
|
||||
let num_frames = input.len() / num_channels;
|
||||
|
||||
// Process this block
|
||||
self.engine.process_audio(input, output, num_frames);
|
||||
let num_frames = buffer.samples() as usize;
|
||||
let input_slices = buffer.as_slice(); // &[&[f32]]
|
||||
|
||||
// Build interleaved input buffer
|
||||
let mut interleaved_input = vec![0.0; num_frames * num_channels];
|
||||
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
|
||||
for event in self.pending_midi.drain(..) {
|
||||
|
||||
Reference in New Issue
Block a user