From ff76b93b9d89178e7d83ce3a144fa262ed2200af Mon Sep 17 00:00:00 2001 From: Skyler Lehmkuhl Date: Fri, 31 Jan 2025 07:12:12 -0500 Subject: [PATCH] improve detection --- lightningbeam-core/src/audio.rs | 45 ++++++++++++++++++----------- src/pkg/lightningbeam_core.js | 2 +- src/pkg/lightningbeam_core_bg.wasm | Bin 168521 -> 168773 bytes 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/lightningbeam-core/src/audio.rs b/lightningbeam-core/src/audio.rs index 92d157d..a81867a 100644 --- a/lightningbeam-core/src/audio.rs +++ b/lightningbeam-core/src/audio.rs @@ -57,6 +57,9 @@ impl StutterDetector { scheduling_threshold: AtomicU32::new(1200), // 1.2 stored in fixed point } } + pub fn reset(&mut self) { + *self = Self::new(); + } fn get_scheduling_threshold(&self) -> f32 { self.scheduling_threshold.load(Ordering::Relaxed) as f32 / 1000.0 } @@ -201,7 +204,7 @@ impl CpalAudioOutput { history.iter().sum::() / history.len() as u32 } }; - + // log::info!("Average delay: {:?}", avg_delay); // Determine stutter @@ -246,50 +249,58 @@ impl CpalAudioOutput { err_fn, None, )?; - + // Update current buffer size after stream creation let detector = self.stutter_detector.lock().unwrap(); detector.current_buffer_size.store(clamped_buffer_size, Ordering::Relaxed); Ok(stream) } - + fn recreate_stream(&mut self) -> Result<(), Box> { // Stop and destroy old stream first if let Some(old_stream) = self._stream.take() { - old_stream.pause()?; - // Explicitly drop the stream - drop(old_stream); + old_stream.pause()?; + // Explicitly drop the stream + drop(old_stream); } - + // Add a small delay to ensure resources are freed (especially important in WASM) #[cfg(not(target_arch = "wasm32"))] std::thread::sleep(std::time::Duration::from_millis(50)); #[cfg(target_arch = "wasm32")] { - use wasm_bindgen_futures::spawn_local; - use gloo_timers::future::sleep; - spawn_local(async { - sleep(std::time::Duration::from_millis(50)).await; - }); + use wasm_bindgen_futures::spawn_local; + use gloo_timers::future::sleep; + spawn_local(async { + sleep(std::time::Duration::from_millis(50)).await; + }); } - + // Recreate stream with current configuration let host = cpal::default_host(); let device = host.default_output_device() - .ok_or_else(|| "No output device available")?; + .ok_or_else(|| "No output device available")?; let supported_config = device.default_output_config()?; + { + let mut detector = self.stutter_detector.lock().unwrap(); + let desired_buffer_size = detector.desired_buffer_size.load(Ordering::Relaxed); + detector.reset(); + detector.desired_buffer_size.store(desired_buffer_size, Ordering::Relaxed); + } + // let mut history = detector.delay_history.lock().unwrap(); + self._stream = Some(self.build_stream::(&device, supported_config)?); // Restart playback if needed if self.audio_state == AudioState::Running { - self._stream.as_ref().unwrap().play()?; + self._stream.as_ref().unwrap().play()?; } - + Ok(()) -} + } } impl AudioOutput for CpalAudioOutput { diff --git a/src/pkg/lightningbeam_core.js b/src/pkg/lightningbeam_core.js index 42bafa0..d18ce67 100644 --- a/src/pkg/lightningbeam_core.js +++ b/src/pkg/lightningbeam_core.js @@ -624,7 +624,7 @@ function __wbg_get_imports() { const ret = false; return ret; }; - imports.wbg.__wbindgen_closure_wrapper207 = function(arg0, arg1, arg2) { + imports.wbg.__wbindgen_closure_wrapper208 = function(arg0, arg1, arg2) { const ret = makeMutClosure(arg0, arg1, 82, __wbg_adapter_20); return addHeapObject(ret); }; diff --git a/src/pkg/lightningbeam_core_bg.wasm b/src/pkg/lightningbeam_core_bg.wasm index e80499dbcd8a5f2cdbc91ca3eebdcc41165815b9..dc07e5d5c195929c53305ba401a6bc45e7559205 100644 GIT binary patch delta 21602 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 delta 21229 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