From 8eb2075fc87b2b2770fd857b53448ae29548f069 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 6 Jan 2026 03:29:46 +0000 Subject: [PATCH 1/2] Revert "fix: Tie native bridge monitoring to arm state for DAW-like behavior" This reverts commit 0f3d59b1641df6ad33bafe225d94678f2dab71a2. --- native-bridge/src/audio/engine.rs | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/native-bridge/src/audio/engine.rs b/native-bridge/src/audio/engine.rs index 4202d80..f028477 100644 --- a/native-bridge/src/audio/engine.rs +++ b/native-bridge/src/audio/engine.rs @@ -1083,21 +1083,15 @@ impl AudioEngine { // Get monitoring state - use atomic flag for monitoring_enabled (never fails!) let mon_vol = f32::from_bits(monitoring_volume.load(Ordering::Relaxed)); let monitoring_enabled = is_monitoring.load(Ordering::Relaxed); - // Read arm and mute state from processing_state - // Both affect whether we should monitor: must be armed AND not muted - let (is_armed, is_muted) = if let Ok(state) = processing_state.try_read() { - (state.track_state.is_armed, state.track_state.is_muted) + let is_muted = if let Ok(state) = processing_state.try_read() { + state.track_state.is_muted } else { - // Default: armed=true (let audio through), muted=false (let audio through) - // This prevents audio dropout if lock is briefly contested - (true, false) + false // Default to not muted - let audio through }; // Local monitoring: apply volume, pan, and push to output // Note: Effects were already applied above (before browser stream) - // Monitoring requires: armed AND monitoring enabled AND not muted - // This matches DAW behavior where disarming a track stops input monitoring - let should_monitor = is_armed && monitoring_enabled && !is_muted; + let should_monitor = monitoring_enabled && !is_muted; if should_monitor { // Apply volume and pan for local monitoring From 3587b90da55b58ed7e7052b6ec81d37190d23145 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 6 Jan 2026 03:37:56 +0000 Subject: [PATCH 2/2] chore: Add is_armed to UpdateTrackState logging for debugging This helps trace arm state changes through the native bridge to diagnose issues where re-arming a track doesn't restore audio. --- native-bridge/src/protocol/server.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/native-bridge/src/protocol/server.rs b/native-bridge/src/protocol/server.rs index 2409c74..c9e7f91 100644 --- a/native-bridge/src/protocol/server.rs +++ b/native-bridge/src/protocol/server.rs @@ -584,8 +584,8 @@ impl BridgeServer { BrowserMessage::UpdateTrackState { state: track_state, .. } => { - info!("UpdateTrackState received: monitoring_enabled={:?}, is_muted={:?}, volume={:?}", - track_state.monitoring_enabled, track_state.is_muted, track_state.volume); + info!("UpdateTrackState received: is_armed={:?}, monitoring_enabled={:?}, is_muted={:?}, volume={:?}", + track_state.is_armed, track_state.monitoring_enabled, track_state.is_muted, track_state.volume); let app = self.state.lock().await; app.audio_engine.update_track_state(track_state); None