From 445f8b10a2cf0d445091ca666b51a3ecb4b6b811 Mon Sep 17 00:00:00 2001 From: Roderick van Domburg Date: Wed, 13 Aug 2025 17:11:43 +0200 Subject: [PATCH] refactor: clean up Rodio fallback handling --- playback/src/audio_backend/rodio.rs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/playback/src/audio_backend/rodio.rs b/playback/src/audio_backend/rodio.rs index ff3dce96..a17ea5f3 100644 --- a/playback/src/audio_backend/rodio.rs +++ b/playback/src/audio_backend/rodio.rs @@ -193,11 +193,18 @@ fn create_sink( AudioFormat::S16 => cpal::SampleFormat::I16, }; - let stream = rodio::OutputStreamBuilder::default() - .with_device(cpal_device) + let stream = match rodio::OutputStreamBuilder::default() + .with_device(cpal_device.clone()) .with_config(&config.config()) .with_sample_format(sample_format) - .open_stream_or_fallback()?; + .open_stream() + { + Ok(exact_stream) => exact_stream, + Err(e) => { + warn!("unable to create Rodio output, falling back to default: {e}"); + rodio::OutputStreamBuilder::from_device(cpal_device)?.open_stream_or_fallback()? + } + }; let sink = rodio::Sink::connect_new(stream.mixer()); Ok((sink, stream)) @@ -209,12 +216,6 @@ pub fn open(host: cpal::Host, device: Option, format: AudioFormat) -> Ro host.id().name() ); - let mut format = format; - if format != AudioFormat::S16 && format != AudioFormat::F32 { - error!("Rodio currently only supports F32 and S16 formats, falling back to S16"); - format = AudioFormat::S16; - } - let (sink, stream) = create_sink(&host, device, format).unwrap(); debug!("Rodio sink was created");