ver0.1
This commit is contained in:
45
tests/test_audio_wav_normalize.py
Normal file
45
tests/test_audio_wav_normalize.py
Normal file
@@ -0,0 +1,45 @@
|
||||
"""PCM 归一化与 WAV 封装。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import array
|
||||
|
||||
import pytest
|
||||
|
||||
from app.services.audio_wav import (
|
||||
WavDecodeError,
|
||||
normalize_pcm_s16le_for_baidu,
|
||||
pcm_s16le_to_wav_bytes,
|
||||
wav_bytes_to_pcm16k_mono_s16le,
|
||||
)
|
||||
|
||||
|
||||
def test_normalize_boosts_quiet_pcm() -> None:
|
||||
samples = array.array("h", [50, -80, 30] * 500)
|
||||
pcm = samples.tobytes()
|
||||
out = normalize_pcm_s16le_for_baidu(pcm)
|
||||
arr = array.array("h")
|
||||
arr.frombytes(out)
|
||||
assert max(abs(x) for x in arr) > max(abs(x) for x in samples)
|
||||
|
||||
|
||||
def test_normalize_skips_loud_pcm() -> None:
|
||||
samples = array.array("h", [15000, -14000])
|
||||
pcm = samples.tobytes()
|
||||
out = normalize_pcm_s16le_for_baidu(pcm)
|
||||
assert out == pcm
|
||||
|
||||
|
||||
def test_pcm_wav_roundtrip_is_valid_wav() -> None:
|
||||
pcm = array.array("h", [100, -200, 300] * 100).tobytes()
|
||||
wav = pcm_s16le_to_wav_bytes(pcm)
|
||||
back = wav_bytes_to_pcm16k_mono_s16le(wav)
|
||||
assert len(back) == len(pcm)
|
||||
assert max(abs(x) for x in array.array("h", back)) >= max(
|
||||
abs(x) for x in array.array("h", pcm)
|
||||
)
|
||||
|
||||
|
||||
def test_pcm_s16le_to_wav_empty_raises() -> None:
|
||||
with pytest.raises(WavDecodeError):
|
||||
pcm_s16le_to_wav_bytes(b"")
|
||||
Reference in New Issue
Block a user