File size: 1,135 Bytes
330f477
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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