From 04abbfb6434664d6caece9a0eb764a570b334102 Mon Sep 17 00:00:00 2001 From: ShootingStarDragons Date: Thu, 19 Feb 2026 21:45:06 +0900 Subject: [PATCH 1/2] chore: make StreamConfig Copyable --- src/host/alsa/mod.rs | 2 +- src/host/asio/stream.rs | 3 ++- src/host/audioworklet/mod.rs | 2 -- src/host/emscripten/mod.rs | 2 +- src/host/wasapi/device.rs | 4 ++-- src/host/webaudio/mod.rs | 2 +- src/lib.rs | 2 +- 7 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/host/alsa/mod.rs b/src/host/alsa/mod.rs index 71d738633..47a1582aa 100644 --- a/src/host/alsa/mod.rs +++ b/src/host/alsa/mod.rs @@ -406,7 +406,7 @@ impl Device { channel: handle, sample_format, num_descriptors, - conf: conf.clone(), + conf: *conf, period_samples, period_frames, silence_template, diff --git a/src/host/asio/stream.rs b/src/host/asio/stream.rs index 5999f8d52..dbe02fa9c 100644 --- a/src/host/asio/stream.rs +++ b/src/host/asio/stream.rs @@ -88,6 +88,7 @@ impl Device { // Set the input callback. // This is most performance critical part of the ASIO bindings. let config = config.clone(); + let config = *config; let callback_id = driver.add_callback(move |callback_info| unsafe { // If not playing return early. if !playing.load(Ordering::SeqCst) { @@ -323,7 +324,7 @@ impl Device { let playing = Arc::clone(&stream_playing); let asio_streams = self.asio_streams.clone(); - let config = config.clone(); + let config = *config; let callback_id = driver.add_callback(move |callback_info| unsafe { // If not playing, return early. if !playing.load(Ordering::SeqCst) { diff --git a/src/host/audioworklet/mod.rs b/src/host/audioworklet/mod.rs index 547bd1dba..ec9e8c674 100644 --- a/src/host/audioworklet/mod.rs +++ b/src/host/audioworklet/mod.rs @@ -193,8 +193,6 @@ impl DeviceTrait for Device { return Err(BuildStreamError::StreamConfigNotSupported); } - let config = config.clone(); - let stream_opts = web_sys::AudioContextOptions::new(); stream_opts.set_sample_rate(config.sample_rate as f32); diff --git a/src/host/emscripten/mod.rs b/src/host/emscripten/mod.rs index 99f07f0bf..bf0425caa 100644 --- a/src/host/emscripten/mod.rs +++ b/src/host/emscripten/mod.rs @@ -378,7 +378,7 @@ fn set_timeout( .expect("The function was somehow not a function"), time, &stream.into(), - &((*config).clone()).into(), + &(*config).into(), &Closure::once_into_js(move || sample_format), &buffer_size_frames.into(), ) diff --git a/src/host/wasapi/device.rs b/src/host/wasapi/device.rs index 9c46099e9..450efcf55 100644 --- a/src/host/wasapi/device.rs +++ b/src/host/wasapi/device.rs @@ -773,7 +773,7 @@ impl Device { playing: false, max_frames_in_buffer, bytes_per_frame: waveformatex.nBlockAlign, - config: config.clone(), + config: *config, sample_format, }) } @@ -877,7 +877,7 @@ impl Device { playing: false, max_frames_in_buffer, bytes_per_frame: waveformatex.nBlockAlign, - config: config.clone(), + config: *config, sample_format, }) } diff --git a/src/host/webaudio/mod.rs b/src/host/webaudio/mod.rs index 4ca7a291f..5d7901600 100644 --- a/src/host/webaudio/mod.rs +++ b/src/host/webaudio/mod.rs @@ -410,7 +410,7 @@ impl DeviceTrait for Device { Ok(Stream { ctx, on_ended_closures, - config: config.clone(), + config: *config, buffer_size_frames, }) } diff --git a/src/lib.rs b/src/lib.rs index 5252671ff..6875b9702 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -393,7 +393,7 @@ impl wasm_bindgen::convert::FromWasmAbi for BufferSize { ), wasm_bindgen )] -#[derive(Clone, Debug, Eq, PartialEq)] +#[derive(Clone, Debug, Eq, PartialEq, Copy)] pub struct StreamConfig { pub channels: ChannelCount, pub sample_rate: SampleRate, From d3158d749e68cae180661c1ae8cd586d391483ca Mon Sep 17 00:00:00 2001 From: Roderick van Domburg Date: Mon, 23 Feb 2026 21:40:13 +0100 Subject: [PATCH 2/2] docs: log StreamConfig implementing Copy --- CHANGELOG.md | 1 + src/host/asio/stream.rs | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b09200a95..bf1459936 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `DeviceBusy` error variant to `SupportedStreamConfigsError`, `DefaultStreamConfigError`, and `BuildStreamError` for retryable device access errors (EBUSY, EAGAIN). +- `StreamConfig` now implements `Copy`. - **PulseAudio**: New host for Linux and some BSDs using the PulseAudio API. ### Changed diff --git a/src/host/asio/stream.rs b/src/host/asio/stream.rs index dbe02fa9c..bc6348efc 100644 --- a/src/host/asio/stream.rs +++ b/src/host/asio/stream.rs @@ -87,7 +87,6 @@ impl Device { // Set the input callback. // This is most performance critical part of the ASIO bindings. - let config = config.clone(); let config = *config; let callback_id = driver.add_callback(move |callback_info| unsafe { // If not playing return early.