trackembeddingapi / tests /test_decoder.py
kxmWebwe's picture
update
330f477
Raw
History Blame Contribute Delete
1.14 kB
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