librosa-like audio analysis for C++ and browsers. Fast, dependency-free, runs anywhere.
- Love librosa, need native speed? → C++ with Eigen3 vectorization
- Audio analysis in the browser? → WebAssembly build (262KB)
- Building a music app? → BPM, key, chords, beats, sections in one library
npm install @libraz/sonare # Coming soon (currently in beta)import { Sonare } from '@libraz/sonare';
const sonare = await Sonare.create();
const bpm = sonare.detectBpm(samples, sampleRate);
const key = sonare.detectKey(samples, sampleRate); // { root: "C", mode: "Major" }
const beats = sonare.detectBeats(samples, sampleRate);#include <sonare/sonare.h>
auto audio = sonare::Audio::from_file("music.mp3");
float bpm = sonare::quick::detect_bpm(audio.data(), audio.size(), audio.sample_rate());
auto key = sonare::quick::detect_key(audio.data(), audio.size(), audio.sample_rate());| Analysis | DSP | Effects |
|---|---|---|
| BPM / Tempo | STFT / iSTFT | HPSS |
| Key Detection | Mel Spectrogram | Time Stretch |
| Beat Tracking | MFCC | Pitch Shift |
| Chord Recognition | Chroma | Normalize |
| Section Detection | CQT / VQT |
libsonare implements librosa-compatible algorithms with identical default parameters. Migration is straightforward.
# librosa
S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128, fmax=8000)// libsonare
auto mel = sonare::MelSpectrogram(sr, 2048, 512, 128, 0, 8000);
auto S = mel.compute(audio);See librosa Compatibility Guide for details.
# Native
make build && make test
# WebAssembly (requires: source /path/to/emsdk/emsdk_env.sh)
make wasm