DeepFilterNet3 Streaming Core ML
A stateful, fixed-shape Core ML conversion of DeepFilterNet3 for real-time 48 kHz speech enhancement on Apple platforms. It consumes one 480-sample (10 ms) hop at a time and exposes all recurrent state explicitly.
This repository is the default model source for the DeepFilterNetCoreML Swift product. It is self-contained: the Core ML graph, matching MLX weights/configuration, and normalization state are versioned together.
Origin
- Original project: Rikorose/DeepFilterNet
- Paper: DeepFilterNet: Perceptually Motivated Real-Time Speech Enhancement
- Swift runtime and conversion: kylehowells/DeepFilterNet-mlx
- Conversion script:
Scripts/Conversion/convert_deepfilternet_to_coreml.py
Runtime contract
| Property | Value |
|---|---|
| Sample rate | 48,000 Hz |
| Input hop | 480 samples / 10 ms |
| Fixed algorithmic delay | 1,440 samples / 30 ms |
| Core ML graph | DeepFilterNet3-Streaming.mlpackage |
| Recurrent state | Explicit inputs and outputs |
The fixed 30 ms delay is separate from model execution time and application audio buffering.
Validation
The validated Swift streaming path measured 0.999993 correlation to the official PyTorch CLI output. A fresh end-to-end run from the original stereo source, including Swift downmix/resampling, measured 0.999969 correlation and 42.13 dB signal-to-error ratio. On the development Apple Silicon Mac, unpaced steady per-hop Core ML compute was 0.264 ms and the 52.13-second validation clip processed in 1.494 seconds (34.9x real time). Performance and paced callback latency vary by device, operating system, and concurrent load.
Swift usage
import DeepFilterNetCoreML
let enhancer = try await DeepFilterNetCoreMLStreamer.load(
configuration: .init(variant: .deepFilterNet3)
)
let enhancedHop = try enhancer.processHop(input480Samples)
let tail = try enhancer.flush()
The default loader downloads this repository through swift-huggingface. Applications can instead provide .local(...) or .bundle(...) as the model source.
Files
DeepFilterNet3-Streaming.mlpackage: stateful one-hop Core ML graph.auxiliary.npz: validated normalization state.config.jsonandmodel.safetensors: matching model configuration and DSP/filterbank data used by the Swift runtime.LICENSE-APACHEandLICENSE-MIT: upstream dual-license terms.
License
DeepFilterNet is available under Apache-2.0 or MIT at your option. This repository preserves both upstream license files. See the original project for full attribution.
- Downloads last month
- -