diff --git a/native-bridge/src/effects/chain.rs b/native-bridge/src/effects/chain.rs index 58d421b5..6e17bdcb 100644 --- a/native-bridge/src/effects/chain.rs +++ b/native-bridge/src/effects/chain.rs @@ -331,6 +331,7 @@ impl EffectsChain { // 10. De-Esser - tame sibilance (especially for vocals) if self.settings.de_esser.enabled { self.de_esser.process(samples, sr); + self.metering.de_esser_reduction = self.de_esser.get_reduction(); } // 11. Transient Shaper - attack/sustain control diff --git a/native-bridge/src/effects/types.rs b/native-bridge/src/effects/types.rs index 681f2424..0619da17 100644 --- a/native-bridge/src/effects/types.rs +++ b/native-bridge/src/effects/types.rs @@ -818,6 +818,7 @@ impl Default for LimiterSettings { pub struct EffectsMetering { pub noise_gate_open: bool, pub compressor_reduction: f32, // dB + pub de_esser_reduction: f32, // dB pub limiter_reduction: f32, // dB } diff --git a/native-bridge/src/protocol/server.rs b/native-bridge/src/protocol/server.rs index 2409c742..8b30c693 100644 --- a/native-bridge/src/protocol/server.rs +++ b/native-bridge/src/protocol/server.rs @@ -136,6 +136,7 @@ impl BridgeServer { let _ = tx.try_send(AppEvent::EffectsMetering { noise_gate_open: effects_metering.noise_gate_open, compressor_reduction: effects_metering.compressor_reduction, + de_esser_reduction: effects_metering.de_esser_reduction, limiter_reduction: effects_metering.limiter_reduction, }); diff --git a/native-bridge/src/tui/app.rs b/native-bridge/src/tui/app.rs index 8085b060..c7dc8e9e 100644 --- a/native-bridge/src/tui/app.rs +++ b/native-bridge/src/tui/app.rs @@ -17,6 +17,7 @@ pub enum AppEvent { EffectsMetering { noise_gate_open: bool, compressor_reduction: f32, + de_esser_reduction: f32, limiter_reduction: f32, }, /// Network state changed @@ -193,6 +194,7 @@ pub struct App { // Effects metering pub noise_gate_open: bool, pub compressor_reduction: f32, + pub de_esser_reduction: f32, pub limiter_reduction: f32, // Effects chain @@ -266,6 +268,7 @@ impl App { noise_gate_open: false, compressor_reduction: 0.0, + de_esser_reduction: 0.0, limiter_reduction: 0.0, effects, @@ -384,9 +387,10 @@ impl App { self.frames_processed += 1; } - AppEvent::EffectsMetering { noise_gate_open, compressor_reduction, limiter_reduction } => { + AppEvent::EffectsMetering { noise_gate_open, compressor_reduction, de_esser_reduction, limiter_reduction } => { self.noise_gate_open = noise_gate_open; self.compressor_reduction = compressor_reduction; + self.de_esser_reduction = de_esser_reduction; self.limiter_reduction = limiter_reduction; } AppEvent::NetworkState { connected, mode, peer_count, latency_ms, packet_loss } => { diff --git a/native-bridge/src/tui/ui.rs b/native-bridge/src/tui/ui.rs index 4648ec22..056099c6 100644 --- a/native-bridge/src/tui/ui.rs +++ b/native-bridge/src/tui/ui.rs @@ -171,6 +171,11 @@ fn draw_audio_panel(f: &mut Frame, app: &App, area: Rect) { format!("-{:.1}dB", app.compressor_reduction), Style::default().fg(Color::Yellow), ), + Span::raw(" De-Ess: "), + Span::styled( + format!("-{:.1}dB", app.de_esser_reduction), + Style::default().fg(if app.de_esser_reduction > 6.0 { Color::Red } else { Color::Cyan }), + ), Span::raw(" Limiter: "), Span::styled( format!("-{:.1}dB", app.limiter_reduction),