mod common;
use rosa::onset::{onset_detect, onset_strength};
#[test]
fn test_onset_strength_matches_librosa() {
let ref_data = common::load_audio_reference("onset.json");
let sr = ref_data["sample_rate"].as_u64().unwrap() as f64;
let expected: Vec<f64> = serde_json::from_value(ref_data["onset_strength"].clone()).unwrap();
let wav = common::wav_path("20_Pink Noise mono 500Hz_2kHz -20dBFS 48k.wav");
let (samples, _) = common::read_wav_mono(&wav);
let params = rosa::onset::OnsetStrengthParams::new(sr);
let result = onset_strength(&samples, ¶ms);
assert_eq!(
result.len(),
expected.len(),
"onset_strength length mismatch: got {}, expected {}",
result.len(),
expected.len()
);
common::assert_approx_eq(&result, &expected, 1e-4, "onset_strength");
}
#[test]
fn test_onset_detect_matches_librosa() {
let ref_data = common::load_audio_reference("onset.json");
let sr = ref_data["sample_rate"].as_u64().unwrap() as f64;
let expected: Vec<usize> = serde_json::from_value(ref_data["onset_detect"].clone()).unwrap();
let wav = common::wav_path("20_Pink Noise mono 500Hz_2kHz -20dBFS 48k.wav");
let (samples, _) = common::read_wav_mono(&wav);
let params = rosa::onset::OnsetStrengthParams::new(sr);
let envelope = onset_strength(&samples, ¶ms);
let result = onset_detect(&envelope, sr, 512, true, false);
assert_eq!(
result,
expected,
"onset_detect mismatch:\ngot: {:?}\nexpected: {:?}",
&result[..result.len().min(20)],
&expected[..expected.len().min(20)]
);
}
#[test]
fn test_onset_detect_backtrack_matches_librosa() {
let ref_data = common::load_audio_reference("onset.json");
let sr = ref_data["sample_rate"].as_u64().unwrap() as f64;
let expected: Vec<usize> =
serde_json::from_value(ref_data["onset_detect_backtrack"].clone()).unwrap();
let wav = common::wav_path("20_Pink Noise mono 500Hz_2kHz -20dBFS 48k.wav");
let (samples, _) = common::read_wav_mono(&wav);
let params = rosa::onset::OnsetStrengthParams::new(sr);
let envelope = onset_strength(&samples, ¶ms);
let result = onset_detect(&envelope, sr, 512, true, true);
assert_eq!(
result,
expected,
"onset_detect_backtrack mismatch:\ngot: {:?}\nexpected: {:?}",
&result[..result.len().min(20)],
&expected[..expected.len().min(20)]
);
}