From 11d271c5b736e6ad4971324afae9061fef9f1907 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Sat, 29 Aug 2026 11:27:15 -0400 Subject: [PATCH] Fixed mute and deafen --- src-tauri/src/commands/audio.rs | 19 +++++++++++++------ src-tauri/src/commands/config.rs | 6 ++---- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src-tauri/src/commands/audio.rs b/src-tauri/src/commands/audio.rs index 916ab3b..049a848 100644 --- a/src-tauri/src/commands/audio.rs +++ b/src-tauri/src/commands/audio.rs @@ -46,6 +46,7 @@ pub struct VoiceState { #[derive(Default)] pub struct VoiceStateInner { pub session: Mutex>, + pub backend_config: Arc>, } pub struct VoiceSession { @@ -532,10 +533,7 @@ pub fn connect_to_vc( producer_in: Arc::clone(&shared_producer_in), consumer_out: Arc::clone(&shared_consumer_out), - backend_config: Arc::new(Mutex::new(BackendConfig { - is_muted: false, - is_deaf: false, - })), + backend_config: Arc::clone(&voice_state.inner.backend_config), }; session.setup_input(config.input_device_name.clone(), Arc::clone(&state_inner))?; @@ -641,6 +639,7 @@ pub fn connect_to_vc( let shutdown = shutdown.clone(); let cipher = cipher.clone(); let backend_config = session.backend_config.clone(); + let consumer_out = session.consumer_out.clone(); thread::spawn(move || { let mut packets: BTreeMap> = BTreeMap::new(); @@ -651,9 +650,17 @@ pub fn connect_to_vc( let mut next_frame_time = Instant::now(); while !shutdown.load(Ordering::Relaxed) { - let is_deaf = { backend_config.lock().unwrap().is_deaf }; + let (is_muted, is_deaf) = { + let cfg = backend_config.lock().unwrap(); + (cfg.is_muted, cfg.is_deaf) + }; - if is_deaf { + if is_muted || is_deaf { + // Drop any audio already buffered for playback so that on + // unmute/undeafen we don't replay stale audio from the past. + if let Ok(mut cons) = consumer_out.lock() { + cons.clear(); + } packets.clear(); is_prebuffering = true; diff --git a/src-tauri/src/commands/config.rs b/src-tauri/src/commands/config.rs index c8d672f..5befd49 100644 --- a/src-tauri/src/commands/config.rs +++ b/src-tauri/src/commands/config.rs @@ -103,7 +103,7 @@ pub fn get_config(app: AppHandle, state: State) -> Result, config: BackendConfig, ) -> Result<(), String> { - if let Some(v) = &mut *voice_state.inner.session.lock().unwrap() { - *v.backend_config.lock().unwrap() = config - } + *voice_state.inner.backend_config.lock().unwrap() = config; Ok(()) }