diff --git a/crates/kira/src/effect.rs b/crates/kira/src/effect.rs index cb70603c..24d76c00 100644 --- a/crates/kira/src/effect.rs +++ b/crates/kira/src/effect.rs @@ -37,7 +37,7 @@ pub trait EffectBuilder { #[allow(unused_variables)] pub trait Effect: Send { /// Called when the effect is first sent to the renderer. - fn init(&mut self, sample_rate: u32) {} + fn init(&mut self, sample_rate: u32, internal_buffer_size: usize) {} /// Called when the sample rate of the renderer is changed. fn on_change_sample_rate(&mut self, sample_rate: u32) {} diff --git a/crates/kira/src/effect/reverb.rs b/crates/kira/src/effect/reverb.rs index 37c1e2f5..d7623d3f 100644 --- a/crates/kira/src/effect/reverb.rs +++ b/crates/kira/src/effect/reverb.rs @@ -126,7 +126,7 @@ impl Reverb { } impl Effect for Reverb { - fn init(&mut self, sample_rate: u32) { + fn init(&mut self, sample_rate: u32, _internal_buffer_size: usize) { self.init_filters(sample_rate); } diff --git a/crates/kira/src/track/main.rs b/crates/kira/src/track/main.rs index 534f1c51..610b6c67 100644 --- a/crates/kira/src/track/main.rs +++ b/crates/kira/src/track/main.rs @@ -20,12 +20,13 @@ pub(crate) struct MainTrack { sounds: ResourceStorage>, effects: Vec>, temp_buffer: Vec, + internal_buffer_size: usize, } impl MainTrack { pub fn init_effects(&mut self, sample_rate: u32) { for effect in &mut self.effects { - effect.init(sample_rate); + effect.init(sample_rate, self.internal_buffer_size); } } diff --git a/crates/kira/src/track/main/builder.rs b/crates/kira/src/track/main/builder.rs index befdce64..1c0bacae 100644 --- a/crates/kira/src/track/main/builder.rs +++ b/crates/kira/src/track/main/builder.rs @@ -154,6 +154,7 @@ impl MainTrackBuilder { sounds, effects: self.effects, temp_buffer: vec![Frame::ZERO; internal_buffer_size], + internal_buffer_size, }; let handle = MainTrackHandle { set_volume_command_writer, diff --git a/crates/kira/src/track/send.rs b/crates/kira/src/track/send.rs index 82e5c682..35689ad0 100644 --- a/crates/kira/src/track/send.rs +++ b/crates/kira/src/track/send.rs @@ -33,12 +33,13 @@ pub(crate) struct SendTrack { set_volume_command_reader: CommandReader>, effects: Vec>, input: Vec, + internal_buffer_size: usize, } impl SendTrack { pub fn init_effects(&mut self, sample_rate: u32) { for effect in &mut self.effects { - effect.init(sample_rate); + effect.init(sample_rate, self.internal_buffer_size); } } diff --git a/crates/kira/src/track/send/builder.rs b/crates/kira/src/track/send/builder.rs index d4716cd7..101b5834 100644 --- a/crates/kira/src/track/send/builder.rs +++ b/crates/kira/src/track/send/builder.rs @@ -185,6 +185,7 @@ impl SendTrackBuilder { set_volume_command_reader, effects: self.effects, input: vec![Frame::ZERO; internal_buffer_size], + internal_buffer_size, }; let handle = SendTrackHandle { id, diff --git a/crates/kira/src/track/sub.rs b/crates/kira/src/track/sub.rs index f4ecc16b..f75d3adb 100644 --- a/crates/kira/src/track/sub.rs +++ b/crates/kira/src/track/sub.rs @@ -54,6 +54,7 @@ pub(crate) struct Track { spatial_data: Option, playback_state_manager: PlaybackStateManager, temp_buffer: Vec, + internal_buffer_size: usize, } impl Track { @@ -75,7 +76,7 @@ impl Track { pub fn init_effects(&mut self, sample_rate: u32) { for effect in &mut self.effects { - effect.init(sample_rate); + effect.init(sample_rate, self.internal_buffer_size); } for (_, sub_track) in &mut self.sub_tracks { sub_track.init_effects(sample_rate); diff --git a/crates/kira/src/track/sub/builder.rs b/crates/kira/src/track/sub/builder.rs index 47b3e583..e3d2a8cf 100644 --- a/crates/kira/src/track/sub/builder.rs +++ b/crates/kira/src/track/sub/builder.rs @@ -261,6 +261,7 @@ impl TrackBuilder { spatial_data: None, playback_state_manager: PlaybackStateManager::new(None), temp_buffer: vec![Frame::ZERO; internal_buffer_size], + internal_buffer_size, }; let handle = TrackHandle { renderer_shared, diff --git a/crates/kira/src/track/sub/spatial_builder.rs b/crates/kira/src/track/sub/spatial_builder.rs index db98f9fe..dd241c00 100644 --- a/crates/kira/src/track/sub/spatial_builder.rs +++ b/crates/kira/src/track/sub/spatial_builder.rs @@ -314,6 +314,7 @@ impl SpatialTrackBuilder { }), playback_state_manager: PlaybackStateManager::new(None), temp_buffer: vec![Frame::ZERO; internal_buffer_size], + internal_buffer_size, }; let handle = SpatialTrackHandle { renderer_shared, diff --git a/crates/kira/tests/change_sample_rate.rs b/crates/kira/tests/change_sample_rate.rs index d7b466f1..024fc502 100644 --- a/crates/kira/tests/change_sample_rate.rs +++ b/crates/kira/tests/change_sample_rate.rs @@ -21,7 +21,7 @@ struct TestEffect { } impl Effect for TestEffect { - fn init(&mut self, sample_rate: u32) { + fn init(&mut self, sample_rate: u32, _internal_buffer_size: usize) { self.sample_rate.store(sample_rate, Ordering::SeqCst); }