Skip to content

Commit f8990ef

Browse files
committed
ConvolverNode: set buffer/normalize via &mut method
1 parent 854f5a5 commit f8990ef

File tree

3 files changed

+19
-22
lines changed

3 files changed

+19
-22
lines changed

examples/benchmarks.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ fn main() {
335335
*b = (rng.gen_range(0.0..2.) - 1.) * (1. - i as f32 / len).powf(decay)
336336
});
337337

338-
let convolver = context.create_convolver();
338+
let mut convolver = context.create_convolver();
339339
convolver.set_buffer(buffer);
340340
convolver.connect(&context.destination());
341341

examples/convolution.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ fn main() {
4747
let mut src = context.create_buffer_source();
4848
src.set_buffer(audio_buffer);
4949

50-
let convolver = ConvolverNode::new(&context, ConvolverOptions::default());
50+
let mut convolver = ConvolverNode::new(&context, ConvolverOptions::default());
5151

5252
src.connect(&convolver);
5353
convolver.connect(&context.destination());

src/node/convolver.rs

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use std::any::Any;
2-
use std::sync::atomic::{AtomicBool, Ordering};
3-
use std::sync::{Arc, Mutex};
2+
use std::sync::Arc;
43

54
use realfft::{num_complex::Complex, ComplexToReal, RealFftPlanner, RealToComplex};
65

@@ -95,7 +94,7 @@ pub struct ConvolverOptions {
9594
/// let mut src = context.create_buffer_source();
9695
/// src.set_buffer(audio_buffer);
9796
///
98-
/// let convolve = ConvolverNode::new(&context, ConvolverOptions::default());
97+
/// let mut convolve = ConvolverNode::new(&context, ConvolverOptions::default());
9998
/// convolve.set_buffer(impulse_buffer);
10099
///
101100
/// src.connect(&convolve);
@@ -114,9 +113,9 @@ pub struct ConvolverNode {
114113
/// Info about audio node channel configuration
115114
channel_config: ChannelConfig,
116115
/// Perform equal power normalization on response buffer
117-
normalize: AtomicBool,
116+
normalize: bool,
118117
/// The response buffer, nullable
119-
buffer: Mutex<Option<AudioBuffer>>,
118+
buffer: Option<AudioBuffer>,
120119
}
121120

122121
impl AudioNode for ConvolverNode {
@@ -156,14 +155,14 @@ impl ConvolverNode {
156155
channel_config,
157156
} = options;
158157

159-
let node = context.base().register(move |registration| {
158+
let mut node = context.base().register(move |registration| {
160159
let renderer = ConvolverRenderer { inner: None };
161160

162161
let node = Self {
163162
registration,
164163
channel_config: channel_config.into(),
165-
normalize: AtomicBool::new(!disable_normalization),
166-
buffer: Mutex::new(None),
164+
normalize: !disable_normalization,
165+
buffer: None,
167166
};
168167

169168
(node, Box::new(renderer))
@@ -178,9 +177,8 @@ impl ConvolverNode {
178177
}
179178

180179
/// Get the current impulse response buffer
181-
#[allow(clippy::missing_panics_doc)]
182-
pub fn buffer(&self) -> Option<AudioBuffer> {
183-
self.buffer.lock().unwrap().clone()
180+
pub fn buffer(&self) -> Option<&AudioBuffer> {
181+
self.buffer.as_ref()
184182
}
185183

186184
/// Set or update the impulse response buffer
@@ -189,13 +187,13 @@ impl ConvolverNode {
189187
///
190188
/// Panics when the sample rate of the provided AudioBuffer differs from the audio context
191189
/// sample rate.
192-
pub fn set_buffer(&self, mut buffer: AudioBuffer) {
190+
pub fn set_buffer(&mut self, mut buffer: AudioBuffer) {
193191
// resample if necessary
194192
buffer.resample(self.context().sample_rate());
195193
let sample_rate = buffer.sample_rate();
196194

197195
// normalize before padding because the length of the buffer affects the scale
198-
let scale = if self.normalize() {
196+
let scale = if self.normalize {
199197
normalize_buffer(&buffer)
200198
} else {
201199
1.
@@ -219,18 +217,17 @@ impl ConvolverNode {
219217
let convolve = ConvolverRendererInner::new(padded_buffer);
220218

221219
self.registration.post_message(Some(convolve));
222-
223-
*self.buffer.lock().unwrap() = Some(buffer);
220+
self.buffer = Some(buffer);
224221
}
225222

226223
/// Denotes if the response buffer will be scaled with an equal-power normalization
227224
pub fn normalize(&self) -> bool {
228-
self.normalize.load(Ordering::SeqCst)
225+
self.normalize
229226
}
230227

231228
/// Update the `normalize` setting. This will only have an effect when `set_buffer` is called.
232-
pub fn set_normalize(&self, value: bool) {
233-
self.normalize.store(value, Ordering::SeqCst);
229+
pub fn set_normalize(&mut self, value: bool) {
230+
self.normalize = value;
234231
}
235232
}
236233

@@ -504,7 +501,7 @@ mod tests {
504501
src.set_buffer(input);
505502
src.start();
506503

507-
let conv = ConvolverNode::new(&context, ConvolverOptions::default());
504+
let mut conv = ConvolverNode::new(&context, ConvolverOptions::default());
508505
if let Some(ir) = impulse_resp {
509506
conv.set_buffer(AudioBuffer::from(vec![ir.to_vec()], sample_rate));
510507
}
@@ -592,7 +589,7 @@ mod tests {
592589

593590
let context = OfflineAudioContext::new(1, 128, ctx_sample_rate);
594591

595-
let conv = ConvolverNode::new(&context, ConvolverOptions::default());
592+
let mut conv = ConvolverNode::new(&context, ConvolverOptions::default());
596593
let ir = vec![1.; 128];
597594
let ir_buffer = AudioBuffer::from(vec![ir], ir_sample_rate);
598595
conv.set_buffer(ir_buffer);

0 commit comments

Comments
 (0)