deepfilternet3-worker-test_push_local_wasm
v1.0.4
Published
Custom audio processor with DeepFilterNet3 noise filtering integrated with LiveKit client
Maintainers
Readme
LiveKit DeepFilterNet3 Noise Filter
DeepFilterNet3-based noise suppression designed to plug into LiveKit’s TrackProcessor API.
Install
yarn add livekit-deepfilternet3-noise-filterPeer dependency expected at runtime: livekit-client.
Quick start (LiveKit TrackProcessor)
import { DeepFilterNoiseFilter } from 'livekit-deepfilternet3-noise-filter';
import { Room, LocalAudioTrack } from 'livekit-client';
const room = new Room();
await room.connect('wss://your-livekit-server', '<token>');
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const mic = stream.getAudioTracks()[0];
const localAudioTrack = await LocalAudioTrack.create(mic);
const processor = DeepFilterNoiseFilter({ enabled: true, sampleRate: 48000, frameSize: 480 });
await localAudioTrack.setProcessor(processor);
await room.localParticipant.publishTrack(localAudioTrack);
// Toggle bypass
await processor.setEnabled(false);
await processor.setEnabled(true);
// Adjust suppression level (0..100)
processor.setSuppressionLevel(75);
// Cleanup
await processor.destroy();Browser requirements
SharedArrayBuffer requires:
Cross-Origin-Opener-Policy: same-originCross-Origin-Embedder-Policy: require-corp
Our dev server sets these for test/sample.html.
Also exported (advanced)
DeepFilterNet3Processor: low-level control over Worker + AudioWorklet graph.
import { DeepFilterNet3Processor } from 'livekit-deepfilternet3-noise-filter';
const df3 = new DeepFilterNet3Processor({ sampleRate: 48000, frameSize: 480, enableNoiseReduction: true });
await df3.initialize();
const ac = new AudioContext({ sampleRate: 48000 });
const node = await df3.createAudioWorkletNode(ac);
df3.setNoiseSuppressionEnabled(true);
df3.setSuppressionLevel(60);
df3.destroy();Build
yarn
yarn buildOutputs:
dist/index.esm.js,dist/index.jsdist/worker/worker.js(Dedicated Worker)dist/worker/audio-processor.js(AudioWorklet)dist/pkg/*(WASM glue + df_bg.wasm)dist/deepfilternet3/DeepFilterNet3_onnx.tar.gz(model)
Model source
The included model archive DeepFilterNet3_onnx.tar.gz is downloaded from the DeepFilterNet project:
Please refer to the upstream repository for licensing and updates.
Building assets from source (contributors)
To regenerate the WASM package and copy resources from the upstream project:
git clone https://github.com/Rikorose/DeepFilterNet/
cd DeepFilterNet
bash scripts/build_wasm_package.sh
# Copy WASM glue into this repo's pkg/
cp -r libdf/pkg ../livekit-deepfilternet3-noise-filter/pkg
# Copy DF3 model archive into this repo's deepfilternet3/
cp models/DeepFilterNet3_onnx.tar.gz ../livekit-deepfilternet3-noise-filter/deepfilternet3/
cd ../livekit-deepfilternet3-noise-filterNotes:
- Ensure the destination paths match this repo's layout (
pkg/anddeepfilternet3/). - After copying, run
yarn build.
Local React example
A minimal Vite + React app is included under examples/react-app to verify the built package works in a browser with SharedArrayBuffer.
- Build the library so
dist/exists:
yarn build- Install example deps (links local package automatically via
file:../..):
yarn --cwd examples/react-app- Run the example dev server (sets COOP/COEP headers):
yarn example:devThen open http://localhost:5173, grant mic permission, and you should hear processed audio. Use the Enable checkbox and Level slider to adjust suppression.
Optional:
yarn example:build
yarn example:preview