opus-rs
A pure-Rust implementation of the Opus audio codec (RFC 6716), ported from the reference C implementation (libopus 1.6).
Status: Production-ready — SILK-only, CELT-only, and Hybrid modes are functional. Stereo encoding (SILK and CELT) is supported.
Features
- Pure Rust — no C dependencies, no unsafe code in the codec core
- SILK encoder & decoder — narrowband (8 kHz), mediumband (12 kHz), wideband (16 kHz)
- CELT encoder & decoder — fullband (48 kHz) with MDCT, PVQ, energy quantization
- Hybrid mode — SILK for low frequencies + CELT for high frequencies
- Range coder — entropy coding with ICDF tables and Laplace distribution
- VAD — voice activity detection
- HP filter — variable-cutoff high-pass filter for VOIP mode
- CBR / VBR — both constant and variable bitrate modes
- LBRR — in-band forward error correction
- Resampler — high-quality resampling (up2, up2_hq)
- Stereo — mid-side encoding for both SILK and CELT
Quick Start
use ;
// Encode
let mut encoder = new.unwrap;
encoder.bitrate_bps = 16000;
encoder.use_cbr = true;
let input = vec!; // 20ms frame at 16kHz
let mut output = vec!;
let bytes = encoder.encode.unwrap;
// Decode
let mut decoder = new.unwrap;
let mut pcm = vec!;
let samples = decoder.decode.unwrap;
Testing
All 156 tests pass, covering MDCT identity, PVQ consistency, SILK/CELT/Hybrid encode/decode roundtrip, resampler tests, and more.
WAV Roundtrip
# Rust encoder/decoder
# Compare with C libopus (requires opusic-sys)
Stereo Tests
Performance
Run all benchmarks:
Run a specific benchmark:
SILK Encoder (Rust, complexity=0)
| Sample Rate | Frame Size | Time per Frame | Throughput |
|---|---|---|---|
| 8 kHz | 20 ms | 13.6 µs | 22.4 MiB/s |
| 16 kHz | 20 ms | 25.2 µs | 24.2 MiB/s |
| 16 kHz | 10 ms | 13.9 µs | 22.0 MiB/s |
SILK vs C Reference (libopus)
| Config | 8kHz/20ms | 16kHz/20ms | 16kHz/10ms |
|---|---|---|---|
| Rust (cx0) | 15.1 µs | 25.2 µs | 13.9 µs |
| C libopus (cx0) | 14.6 µs | 18.3 µs | 11.4 µs |
| C libopus (cx9) | 67.7 µs | 130.8 µs | 66.2 µs |
Rust implementation uses complexity=0 (fast mode). Performance is comparable to C at the same complexity level. C at complexity=9 (default quality) is 4-5x slower.
SILK Core Algorithms
| Function | Time (16kHz WB) | Time (8kHz NB) |
|---|---|---|
| burg_modified_fix | 3.1 µs | — |
| autocorrelation | ~0.5 µs | ~0.2 µs |
| inner product | ~0.2 µs | ~0.1 µs |
| pitch_analysis_core | 7.5 µs | 3.1 µs |
| nsq (voiced) | 8.3 µs | 4.4 µs |
| nsq (unvoiced) | 6.9 µs | 3.5 µs |
License
See COPYING for the original Opus license (BSD-3-Clause).
Links
- RustPBX: https://github.com/restsend/rustpbx
- RustRTC: https://github.com/restsend/rustrtc
- Sip Stack: https://github.com/restsend/rsipstack
- Rust Voice Agent: https://github.com/restsend/active-call