File: test_audio.py

package info (click to toggle)
python-wyoming 1.8.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 376 kB
  • sloc: python: 3,025; makefile: 3
file content (48 lines) | stat: -rw-r--r-- 1,545 bytes parent folder | download
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
"""Test audio utilities."""

import io
import wave

from wyoming.audio import AudioChunk, AudioChunkConverter, wav_to_chunks


def test_chunk_converter() -> None:
    """Test audio chunk converter."""
    converter = AudioChunkConverter(rate=16000, width=2, channels=1)
    input_chunk = AudioChunk(
        rate=48000,
        width=4,
        channels=2,
        audio=bytes(1 * 48000 * 4 * 2),  # 1 sec
    )

    output_chunk = converter.convert(input_chunk)
    assert output_chunk.rate == 16000
    assert output_chunk.width == 2
    assert output_chunk.channels == 1
    assert len(output_chunk.audio) == 1 * 16000 * 2 * 1  # 1 sec


def test_wav_to_chunks() -> None:
    """Test WAV file to audio chunks."""
    with io.BytesIO() as wav_io:
        wav_write: wave.Wave_write = wave.open(wav_io, "wb")
        with wav_write:
            wav_write.setframerate(16000)
            wav_write.setsampwidth(2)
            wav_write.setnchannels(1)
            wav_write.writeframes(bytes(1 * 16000 * 2 * 1))  # 1 sec

        wav_io.seek(0)
        wav_bytes = wav_io.getvalue()

    with io.BytesIO(wav_bytes) as wav_io:
        wav_read: wave.Wave_read = wave.open(wav_io, "rb")
        chunks = list(wav_to_chunks(wav_read, samples_per_chunk=1000))
        assert len(chunks) == 16
        for chunk in chunks:
            assert isinstance(chunk, AudioChunk)
            assert chunk.rate == 16000
            assert chunk.width == 2
            assert chunk.channels == 1
            assert len(chunk.audio) == 1000 * 2  # 1000 samples