Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions crates/kira/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ symphonia = { version = "0.5.4", optional = true, default-features = false }
triple_buffer = "8.1.1"

[target.'cfg(not(target_arch = "wasm32"))'.dependencies.cpal]
version = "0.16.0"
version = "0.17.0"
optional = true

[target.'cfg(target_arch = "wasm32")'.dependencies.cpal]
version = "0.16.0"
version = "0.17.0"
optional = true
features = ["wasm-bindgen"]

Expand Down
4 changes: 2 additions & 2 deletions crates/kira/src/backend/cpal/desktop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,8 @@ impl Backend for CpalBackend {
} else {
device.default_output_config()?.config()
};
let sample_rate = config.sample_rate.0;

let sample_rate = config.sample_rate;
let buffer_size = config.buffer_size;

Ok((
Expand Down
31 changes: 16 additions & 15 deletions crates/kira/src/backend/cpal/desktop/stream_manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ impl StreamManagerController {
/// in the case of device changes or disconnections.
pub(super) struct StreamManager {
state: State,
device_name: String,
device_id: String,
sample_rate: u32,
custom_device: bool,
buffer_size: BufferSize,
Expand Down Expand Up @@ -89,8 +89,8 @@ impl StreamManager {
std::thread::spawn(move || {
let mut stream_manager = StreamManager {
state: State::Idle { renderer },
device_name: device_name(&device),
sample_rate: config.sample_rate.0,
device_id: device_id(&device),
sample_rate: config.sample_rate,
custom_device,
buffer_size,
};
Expand Down Expand Up @@ -147,7 +147,7 @@ impl StreamManager {
while let Ok(error) = unhandled_stream_error_consumer.pop() {
match error {
// check for device disconnection
StreamError::DeviceNotAvailable => {
StreamError::DeviceNotAvailable | StreamError::StreamInvalidated => {
self.stop_stream();
if let Ok((device, mut config)) = default_device_and_config() {
// TODO: gracefully handle errors that occur in this function
Expand All @@ -160,7 +160,7 @@ impl StreamManager {
.unwrap();
}
}
StreamError::BackendSpecific { err: _ } => {}
StreamError::BackendSpecific { err: _ } | StreamError::BufferUnderrun => {}
}
match handled_stream_error_producer.push(error) {
Ok(()) => {}
Expand All @@ -176,9 +176,9 @@ impl StreamManager {
#[cfg(not(target_os = "macos"))]
if !self.custom_device {
if let Ok((device, mut config)) = default_device_and_config() {
let device_name = device_name(&device);
let sample_rate = config.sample_rate.0;
if device_name != self.device_name || sample_rate != self.sample_rate {
let device_id = device_id(&device);
let sample_rate = config.sample_rate;
if device_id != self.device_id || sample_rate != self.sample_rate {
self.stop_stream();
*unhandled_stream_error_consumer = self
.start_stream(&device, &mut config, num_stream_errors_discarded.clone())
Expand All @@ -202,12 +202,12 @@ impl StreamManager {
panic!("trying to start a stream when the stream manager is not idle");
};
config.buffer_size = self.buffer_size; // this won't change anything if the buffer size is BufferSize::Default
let device_name = device_name(device);
let sample_rate = config.sample_rate.0;
let device_id = device_id(device);
let sample_rate = config.sample_rate;
if sample_rate != self.sample_rate {
renderer.on_change_sample_rate(sample_rate);
}
self.device_name = device_name;
self.device_id = device_id;
self.sample_rate = sample_rate;
let (mut renderer_wrapper, renderer_consumer) = SendOnDrop::new(renderer);
let (mut unhandled_stream_error_producer, unhandled_stream_error_consumer) =
Expand Down Expand Up @@ -266,10 +266,11 @@ fn default_device_and_config() -> Result<(Device, StreamConfig), Error> {
Ok((device, config))
}

fn device_name(device: &Device) -> String {
device
.name()
.unwrap_or_else(|_| "device name unavailable".to_string())
fn device_id(device: &Device) -> String {
match device.id() {
Ok(id) => format!("{}", id),
Err(_) => "device id unavailable".to_string(),
}
}

fn process_renderer(
Expand Down
2 changes: 1 addition & 1 deletion crates/kira/src/backend/cpal/wasm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ impl Backend for CpalBackend {
} else {
device.default_output_config()?.config()
};
let sample_rate = config.sample_rate.0;
let sample_rate = config.sample_rate;
Ok((
Self {
state: SendWrapper::new(State::Uninitialized { device, config }),
Expand Down
1 change: 1 addition & 0 deletions crates/kira/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ and compile times for games.
#![cfg_attr(docsrs, feature(doc_cfg))]
#![allow(clippy::collapsible_if)]
#![allow(clippy::collapsible_else_if)]
#![allow(clippy::doc_lazy_continuation)]
#![allow(clippy::large_enum_variant)]
#![allow(clippy::enum_variant_names)]
#![warn(clippy::todo)]
Expand Down