From 05f014441907e0172477d7f52e6828b9d065df9f Mon Sep 17 00:00:00 2001 From: Rob Watson Date: Thu, 10 Sep 2020 18:48:14 +0200 Subject: [PATCH] Update atomic variable once per buffer, not once per frame --- src/player.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/player.rs b/src/player.rs index e20547e..391ca01 100644 --- a/src/player.rs +++ b/src/player.rs @@ -115,13 +115,16 @@ impl Player { .build_output_stream( config, move |output: &mut [T], _| { + let frames = output.chunks_mut(num_channels); + let mut idx = idx.fetch_add(frames.len(), Ordering::Relaxed); + for frame in output.chunks_mut(num_channels) { - let i = idx.fetch_add(1, Ordering::Relaxed); for (j, sample) in frame.iter_mut().enumerate() { let buffer = &audio_data.buffers[j]; - let value: T = Sample::from::(&buffer[i]); + let value: T = Sample::from::(&buffer[idx]); *sample = value; } + idx += 1; } }, err_fn,