rosa 0.1.0

Audio feature extraction library matching librosa output
Documentation
mod common;

use rosa::matrix::Matrix;

#[test]
fn test_mfcc_matches_librosa() {
    let ref_data = common::load_audio_reference("mfcc.json");

    let mel_rows = ref_data["mel_rows"].as_u64().unwrap() as usize;
    let mel_cols = ref_data["mel_cols"].as_u64().unwrap() as usize;
    let mel_flat: Vec<f64> = serde_json::from_value(ref_data["mel"].clone()).unwrap();
    let mel = Matrix::from_vec(mel_flat, mel_rows, mel_cols);

    let n_mfcc = ref_data["n_mfcc"].as_u64().unwrap() as usize;
    let expected_rows = ref_data["mfcc_rows"].as_u64().unwrap() as usize;
    let expected_cols = ref_data["mfcc_cols"].as_u64().unwrap() as usize;
    let expected: Vec<f64> = serde_json::from_value(ref_data["mfcc"].clone()).unwrap();

    let result = rosa::spectral::mfcc(
        &mel,
        &rosa::spectral::MfccParams {
            n_mfcc,
            ..Default::default()
        },
    );
    assert_eq!(
        result.shape(),
        (expected_rows, expected_cols),
        "mfcc shape mismatch"
    );
    common::assert_approx_eq(result.as_slice(), &expected, 1e-6, "mfcc");
}