muslib

Audio analysis and synthesis in Rust, checked against Essentia.

Aspiring to be a Swiss army knife of audio.

HobbiesLibrary, CLIRust, Python bindingsv0.2.2, AGPL-3.0-or-later

$ cargo add muslib

What it is

muslib is a Rust library for music synthesis and processing, inspired by Essentia. It comes as a crate, a Python package and a command line tool, and is licensed AGPL like Essentia.

ModuleWhat
HPCP, Chromagramharmonic pitch class profile, and HPCP over time
FFT, IFFTtransforms
mixerload audio files as mono tracks, write 16-bit WAV
convertresampling and peak normalization
encodeOgg Opus in pure Rust
synthsimple waveforms

Loading reads WAV, FLAC, Ogg Vorbis and Matroska/WebM and averages channels into mono unless .channel(index) picks one. Opus output takes 8, 12, 16, 24 or 48 kHz input at 6–512 kbit/s.

How it is checked

Outputs are compared against Essentia itself: an opt-in test suite runs a live Essentia install as an oracle. The examples directory carries Rust and Python comparisons too. The GitLab pipeline runs tests, clippy and benchmarks, and builds wheels for release tags.

Use

use muslib::convert::{normalize_peak, resample};
use muslib::encode::OggOpusWriter;
use muslib::mixer::Loader;

let loaded = Loader::<f32>::new().files(["a.wav", "b.wav"]).load()?;
let mut data = resample(loaded.data(), loaded.sample_rate(), 48000)?;
normalize_peak(&mut data, -1.0)?;
OggOpusWriter::new().file("voice.ogg").bitrate(48000).write(&data)?;

The same from the command line:

cargo install muslib --features cli
muslib convert --rate 48000 --normalize -1 --bitrate 48000 --output voice.ogg a.wav b.wav

Python: pip install muslib (3.11+). Pre-built binaries are on the releases page.