Removed: -Feature Contribution: Advanced Audio Processing — ML Noise Suppression, Noise Gate, CompressorAdded: +Noise suppression, noise gate and compressor for microphone audio## Feature Contribution
Show
Noise suppression, noise gate and compressor for microphone audio
Feature Contribution
I've implemented three new audio processing features for the voice system and would like to offer them upstream. The implementation is complete and tested on my self-hosted instance.
Branch:cproudlock:echowire-refactor (diff)
I wasn't able to create a PR directly — if fork PRs are enabled, I'm happy to resubmit as a proper PR.
ML Noise Suppression (RNNoise) — WASM-based neural network that filters background noise (fans, typing, traffic). Uses AudioWorklet for off-main-thread processing at 48kHz with ~13ms latency.
Noise Gate — Mutes the microphone when audio falls below a configurable dB threshold (-100 to 0). Uses hysteresis (separate open/close thresholds) to prevent rapid toggling.
Compressor — DynamicsCompressorNode that evens out loud and quiet audio for more consistent voice levels.
Processing Chain
Raw mic → RNNoise (if enabled) → Noise Gate (if enabled) → Compressor (if enabled) → LiveKit
When all three are disabled, no processor is attached — zero overhead.
Why not @livekit/krisp-noise-filter?
Krisp requires LiveKit Cloud and doesn't work with self-hosted LiveKit. @sapphi-red/web-noise-suppressor provides ready-made AudioWorklet nodes for RNNoise with WASM SIMD auto-detection, making it a drop-in solution for any deployment.
Files Changed
File
Description
pnpm-workspace.yaml
Add @sapphi-red/web-noise-suppressor to catalog
fluxer_app/package.json
Add dependency
fluxer_app/rspack.config.mjs
Copy worklet/WASM files to dist/audio-worklets/
fluxer_app/src/utils/AudioProcessor.tsx
New — TrackProcessor<Track.Kind.Audio> implementation
I've implemented three new audio processing features for the voice system and would like to offer them upstream. The implementation is complete and tested on my self-hosted instance.
Branch:cproudlock:echowire-refactor (diff)
I wasn't able to create a PR directly — if fork PRs are enabled, I'm happy to resubmit as a proper PR.
ML Noise Suppression (RNNoise) — WASM-based neural network that filters background noise (fans, typing, traffic). Uses AudioWorklet for off-main-thread processing at 48kHz with ~13ms latency.
Noise Gate — Mutes the microphone when audio falls below a configurable dB threshold (-100 to 0). Uses hysteresis (separate open/close thresholds) to prevent rapid toggling.
Compressor — DynamicsCompressorNode that evens out loud and quiet audio for more consistent voice levels.
Processing Chain
Raw mic → RNNoise (if enabled) → Noise Gate (if enabled) → Compressor (if enabled) → LiveKit
When all three are disabled, no processor is attached — zero overhead.
Why not @livekit/krisp-noise-filter?
Krisp requires LiveKit Cloud and doesn't work with self-hosted LiveKit. @sapphi-red/web-noise-suppressor provides ready-made AudioWorklet nodes for RNNoise with WASM SIMD auto-detection, making it a drop-in solution for any deployment.
Files Changed
File
Description
pnpm-workspace.yaml
Add @sapphi-red/web-noise-suppressor to catalog
fluxer_app/package.json
Add dependency
fluxer_app/rspack.config.mjs
Copy worklet/WASM files to dist/audio-worklets/
fluxer_app/src/utils/AudioProcessor.tsx
New — TrackProcessor<Track.Kind.Audio> implementation