diff --git a/services/analysis-engine/tests/test_pitch_tracker.py b/services/analysis-engine/tests/test_pitch_tracker.py index 84731c81..9e1c9970 100644 --- a/services/analysis-engine/tests/test_pitch_tracker.py +++ b/services/analysis-engine/tests/test_pitch_tracker.py @@ -207,3 +207,30 @@ def test_pitch_tracker_confidence_returns_low() -> None: result = tracker._compute_confidence(voiced_probs, voiced_flag, y) assert result == "low" + + +def test_pitch_tracker_nan_f0() -> None: + """Test when pyin returns NaN for voiced f0 values.""" + tracker = PitchTracker() + y = np.random.randn(22050) + + with patch( + "librosa.pyin", + return_value=(np.array([np.nan, np.nan]), np.array([True, True]), np.array([1.0, 1.0])), + ): + result = tracker.track(y, sr=22050) + assert result["lowest_note"] is None + assert result["highest_note"] is None + assert result["confidence"] == "low" + + +def test_pitch_tracker_low_avg_prob() -> None: + """Test when average voicing probability is less than 0.2.""" + tracker = PitchTracker() + y = np.random.randn(22050) + + with patch("librosa.pyin", return_value=(np.array([440.0]), np.array([True]), np.array([0.1]))): + result = tracker.track(y, sr=22050) + assert result["lowest_note"] is None + assert result["highest_note"] is None + assert result["confidence"] == "low"