From e12c2e8877db8a049e48be2bde4c59dcfa25fc4d Mon Sep 17 00:00:00 2001 From: Skyler Lehmkuhl Date: Sat, 25 Jan 2025 18:48:34 -0500 Subject: [PATCH] Require user interaction to start audio --- lightningbeam-core/src/audio.rs | 23 ++++++++++++++++++----- lightningbeam-core/src/lib.rs | 6 ++++++ src/main.js | 21 +++++++++++++++++++++ src/pkg/lightningbeam_core.d.ts | 2 ++ src/pkg/lightningbeam_core.js | 17 +++++++++++++++-- src/pkg/lightningbeam_core_bg.wasm | Bin 135753 -> 137627 bytes src/pkg/lightningbeam_core_bg.wasm.d.ts | 1 + 7 files changed, 63 insertions(+), 7 deletions(-) diff --git a/lightningbeam-core/src/audio.rs b/lightningbeam-core/src/audio.rs index 9dc806f..3904192 100644 --- a/lightningbeam-core/src/audio.rs +++ b/lightningbeam-core/src/audio.rs @@ -3,6 +3,11 @@ use cpal::{Sample}; use std::sync::{Arc, Mutex}; use crate::{TrackManager, Timestamp, Duration, SampleCount, AudioOutput, PlaybackState}; +#[derive(PartialEq)] +enum AudioState { + Suspended, + Running, +} // #[cfg(feature = "wasm")] // use wasm_bindgen::prelude::*; @@ -13,6 +18,7 @@ pub struct CpalAudioOutput { track_manager: Option>>, _stream: Option, playback_state: PlaybackState, + audio_state: AudioState, timestamp: Arc>, chunk_size: usize, sample_rate: u32, @@ -26,6 +32,7 @@ impl CpalAudioOutput { track_manager: None, _stream: None, playback_state: PlaybackState::Stopped, + audio_state: AudioState::Suspended, timestamp: Arc::new(Mutex::new(Timestamp::from_seconds(0.0))), chunk_size: 0, sample_rate: 44100, // Default sample rate, updated later @@ -110,11 +117,6 @@ impl AudioOutput for CpalAudioOutput { .ok_or_else(|| "No output device available")?; let supported_config = device.default_output_config()?; self._stream = Some(self.build_stream::(&device, supported_config)?); - if let Some(stream) = self._stream.as_ref() { - stream.play().unwrap(); - } else { - eprintln!("Stream is not initialized!"); - } Ok(()) } @@ -126,6 +128,17 @@ impl AudioOutput for CpalAudioOutput { fn stop(&mut self) { self.playback_state = PlaybackState::Stopped; } + + fn resume(&mut self) -> Result<(), anyhow::Error> { + if self.audio_state == AudioState::Suspended { + if let Some(stream) = &self._stream { + stream.play()?; + self.audio_state = AudioState::Running; + log::info!("Audio resumed"); + } + } + Ok(()) + } fn register_track_manager(&mut self, track_manager: Arc>) { self.track_manager = Some(track_manager); diff --git a/lightningbeam-core/src/lib.rs b/lightningbeam-core/src/lib.rs index b99a592..85d5020 100644 --- a/lightningbeam-core/src/lib.rs +++ b/lightningbeam-core/src/lib.rs @@ -95,6 +95,7 @@ pub trait AudioOutput { fn start(&mut self) -> Result<(), Box>; fn play(&mut self, start_timestamp: Timestamp); fn stop(&mut self); + fn resume(&mut self) -> Result<(), anyhow::Error>; fn register_track_manager(&mut self, track_manager: Arc>); fn get_timestamp(&mut self) -> Timestamp; fn set_chunk_size(&mut self, chunk_size: usize); @@ -218,6 +219,11 @@ impl CoreInterface { let mut track_manager = self.track_manager.lock().unwrap(); track_manager.stop(); } + pub fn resume_audio(&mut self) -> Result<(), JsValue> { + // Call this on user gestures if audio gets suspended + self.cpal_audio_output.resume() + .map_err(|e| JsValue::from_str(&format!("Failed to resume audio: {}", e))) + } pub fn add_sine_track(&mut self, frequency: f32) -> Result<(), String> { if frequency.is_nan() || frequency.is_infinite() || frequency <= 0.0 { return Err(format!("Invalid frequency: {}", frequency)); diff --git a/src/main.js b/src/main.js index bb0bd79..d27025f 100644 --- a/src/main.js +++ b/src/main.js @@ -8419,5 +8419,26 @@ async function testAudio() { coreInterface.init() coreInterface.play(0.0) console.log(coreInterface) + + let audioStarted = false; + const startCoreInterfaceAudio = () => { + if (!audioStarted) { + try { + coreInterface.resume_audio(); + audioStarted = true; + console.log("Started CoreInterface Audio!") + } catch (err) { + console.error("Audio resume failed:", err); + } + } + + // Remove the event listeners to prevent them from firing again + document.removeEventListener("click", startCoreInterfaceAudio); + document.removeEventListener("keydown", startCoreInterfaceAudio); + }; + + // Add event listeners for mouse click and key press + document.addEventListener("click", startCoreInterfaceAudio); + document.addEventListener("keydown", startCoreInterfaceAudio); } testAudio() \ No newline at end of file diff --git a/src/pkg/lightningbeam_core.d.ts b/src/pkg/lightningbeam_core.d.ts index 87d6b82..34d7254 100644 --- a/src/pkg/lightningbeam_core.d.ts +++ b/src/pkg/lightningbeam_core.d.ts @@ -7,6 +7,7 @@ export class CoreInterface { init(): void; play(timestamp: number): void; stop(): void; + resume_audio(): void; add_sine_track(frequency: number): void; get_timestamp(): number; get_tracks(): JsTrack[]; @@ -30,6 +31,7 @@ export interface InitOutput { readonly coreinterface_init: (a: number) => void; readonly coreinterface_play: (a: number, b: number) => void; readonly coreinterface_stop: (a: number) => void; + readonly coreinterface_resume_audio: (a: number, b: number) => void; readonly coreinterface_add_sine_track: (a: number, b: number, c: number) => void; readonly coreinterface_get_timestamp: (a: number) => number; readonly coreinterface_get_tracks: (a: number, b: number) => void; diff --git a/src/pkg/lightningbeam_core.js b/src/pkg/lightningbeam_core.js index 0ef6268..cc982c5 100644 --- a/src/pkg/lightningbeam_core.js +++ b/src/pkg/lightningbeam_core.js @@ -288,6 +288,19 @@ export class CoreInterface { stop() { wasm.coreinterface_stop(this.__wbg_ptr); } + resume_audio() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.coreinterface_resume_audio(retptr, this.__wbg_ptr); + var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); + var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); + if (r1) { + throw takeObject(r0); + } + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } /** * @param {number} frequency */ @@ -549,8 +562,8 @@ function __wbg_get_imports() { const ret = false; return ret; }; - imports.wbg.__wbindgen_closure_wrapper99 = function(arg0, arg1, arg2) { - const ret = makeMutClosure(arg0, arg1, 40, __wbg_adapter_18); + imports.wbg.__wbindgen_closure_wrapper87 = function(arg0, arg1, arg2) { + const ret = makeMutClosure(arg0, arg1, 31, __wbg_adapter_18); return addHeapObject(ret); }; imports.wbg.__wbindgen_debug_string = function(arg0, arg1) { diff --git a/src/pkg/lightningbeam_core_bg.wasm b/src/pkg/lightningbeam_core_bg.wasm index 720d4342d669742e7235e3d6708f3ce00d567c41..1a0b9fad1e0042ae6a68d1084b2083f7d7b332d8 100644 GIT binary patch delta 31387 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 delta 30120 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 number; export const coreinterface_init: (a: number) => void; export const coreinterface_play: (a: number, b: number) => void; export const coreinterface_stop: (a: number) => void; +export const coreinterface_resume_audio: (a: number, b: number) => void; export const coreinterface_add_sine_track: (a: number, b: number, c: number) => void; export const coreinterface_get_timestamp: (a: number) => number; export const coreinterface_get_tracks: (a: number, b: number) => void;