Spaces:
Running
Running
| 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("<i2") | |
| with wave.open(str(source), "wb") as output: | |
| output.setnchannels(1) | |
| output.setsampwidth(2) | |
| output.setframerate(8_000) | |
| output.writeframes(samples.tobytes()) | |
| decoded = AudioDecoder(canonical_sample_rate=16_000, timeout_seconds=5).decode(source) | |
| assert decoded.sample_rate == 16_000 | |
| assert decoded.waveform.dtype == np.float32 | |
| assert decoded.waveform.ndim == 1 | |
| assert decoded.waveform.size == pytest.approx(16_000, abs=2) | |
| assert decoded.metadata.source_sample_rate == 8_000 | |