AI-RVC / tests /test_audio_metrics.py
mason369's picture
Release v1.2.1
a9536c4 verified
import sys
import unittest
from pathlib import Path
import numpy as np
REPO_ROOT = Path(__file__).resolve().parents[1]
if str(REPO_ROOT) not in sys.path:
sys.path.insert(0, str(REPO_ROOT))
class ReferenceAudioMetricTests(unittest.TestCase):
def test_si_sdr_is_scale_invariant_but_sdr_is_not(self):
from lib.audio_metrics import signal_distortion_ratio, scale_invariant_signal_distortion_ratio
sr = 16000
t = np.arange(sr, dtype=np.float32) / sr
reference = np.sin(2 * np.pi * 220 * t).astype(np.float32)
scaled = 2.0 * reference
self.assertGreater(scale_invariant_signal_distortion_ratio(reference, scaled), 100.0)
self.assertLess(signal_distortion_ratio(reference, scaled), 0.1)
def test_reference_stem_metrics_rank_clean_estimate_above_noisy_estimate(self):
from lib.audio_metrics import evaluate_reference_stems
sr = 16000
t = np.arange(sr, dtype=np.float32) / sr
lead = 0.18 * np.sin(2 * np.pi * 220 * t).astype(np.float32)
backing = 0.04 * np.sin(2 * np.pi * 330 * t + 0.4).astype(np.float32)
noise = 0.03 * np.sin(2 * np.pi * 910 * t).astype(np.float32)
clean = evaluate_reference_stems(
references={"lead": lead, "backing": backing},
estimates={"lead": lead, "backing": backing},
)
noisy = evaluate_reference_stems(
references={"lead": lead, "backing": backing},
estimates={"lead": lead + noise, "backing": backing - noise},
)
self.assertGreater(clean["mean_si_sdr"], noisy["mean_si_sdr"] + 20.0)
self.assertGreater(clean["stems"]["lead"]["si_sdr"], noisy["stems"]["lead"]["si_sdr"])
self.assertGreater(clean["stems"]["backing"]["sdr"], noisy["stems"]["backing"]["sdr"])
if __name__ == "__main__":
unittest.main()