from pathlib import Path import wave import numpy as np import pytest from openmusic_analysis.audio.decoder import AudioDecoder from openmusic_analysis.errors import AudioDecodeError def test_decoder_rejects_invalid_audio(tmp_path: Path): source = tmp_path / "invalid.mp3" source.write_bytes(b"not an audio file") with pytest.raises(AudioDecodeError): AudioDecoder(timeout_seconds=5).decode(source) def test_decoder_produces_canonical_mono_float32_pcm(tmp_path: Path): source = tmp_path / "valid.wav" samples = (np.sin(np.linspace(0, 10, 8_000)) * 20_000).astype("