spectrs
Fast spectrogram creation library.
Table of Contents
- What It Does
- Installation
- Quick Start
- Features
- Examples
- Colormaps
- Librosa Compatibility
- Performance
- API Reference
What It Does
spectrs is a Rust library for creating spectrograms from audio files. It provides:
- STFT (Short-Time Fourier Transform) spectrograms with power or magnitude scaling
- Mel-scaled spectrograms using HTK or Slaney scales
- Audio I/O for reading WAV files (mono/stereo, 8/16/32-bit)
- Resampling to arbitrary sample rates
- Image export of spectrograms with multiple colormaps (Viridis, Magma, Inferno, Plasma, Gray)
- Compatibility with librosa
Installation
Add spectrs to your project with
cargo add spectrs
or with image export support
cargo add spectrs --features image
Examples
Basic STFT Spectrogram
use read_audio_file_mono;
use ;
let = read_audio_file_mono?;
// Compute magnitude spectrogram
let spec = par_compute_spectrogram;
Mel Spectrogram
use ;
// First compute STFT, then convert to mel
let mel_spec = convert_to_mel;
Save Spectrogram as Image
use ;
// Requires "image" feature
// Use default Viridis colormap (librosa/matplotlib default)
save_spectrogram_image?;
// Or use other colormaps:
// save_spectrogram_image(&mel_spec, "spectrogram.png", Colormap::Magma)?;
// save_spectrogram_image(&mel_spec, "spectrogram.png", Colormap::Inferno)?;
// save_spectrogram_image(&mel_spec, "spectrogram.png", Colormap::Plasma)?;
// save_spectrogram_image(&mel_spec, "spectrogram.png", Colormap::Gray)?;
Single-Threaded Mode
For small files or embedded systems:
use compute_spectrogram;
// Non-parallelized version (lower overhead)
let spec = compute_spectrogram;
Complete Pipeline
use ;
use ;
use ;
// Read and process audio file
let = read_audio_file_mono?;
// Resample to standard rate
let audio = resample?;
// Compute spectrogram
let spec = par_compute_spectrogram;
// Convert to mel
let mel = convert_to_mel;
// Save as image (requires "image" feature)
Colormaps
spectrs supports multiple colormaps for spectrogram visualization, including viridis, magma, inferno, plasma and simply gray. All colormaps implementations are based on the matplotlib colormaps.
Librosa Compatibility
spectrs is designed to replicate librosa's behaviour in the Rust ecosystem. Compatibility tests are part of the test suite, ensuring correlation between librosa's and spectrs' above 99% and relative error on relevant bands < 2%.
Run compatibility tests: