"""受け取り方。ZIPでも音声ファイル単体でも、同じように扱えること。""" import struct import sys import wave import zipfile from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parents[1])) import pipeline as pl # noqa: E402 def make_wav(path: Path, seconds: float = 0.2) -> Path: path.parent.mkdir(parents=True, exist_ok=True) with wave.open(str(path), "wb") as f: f.setnchannels(1) f.setsampwidth(2) f.setframerate(16000) f.writeframes(b"".join( struct.pack(" 0 head = out.read_bytes()[:3] assert head == b"ID3" or head[:2] in (b"\xff\xfb", b"\xff\xf3") # mp3の目印 def test_元の音質を落とさない(tmp_path): """聞き取りやすさを優先。周波数もチャンネル数も元のまま。""" src = make_wav(tmp_path / "元.wav", seconds=1.0) out = pl.to_playback(src, tmp_path / "再生用.mp3") assert out is not None assert abs(pl.probe_duration(out) - pl.probe_duration(src)) < 0.2 # 長さが変わらない def test_すでにmp3ならそのまま使う(tmp_path): """変換を重ねるほど音は悪くなるので、作り直さない。""" src = pl.to_playback(make_wav(tmp_path / "元.wav", seconds=1.0), tmp_path / "元.mp3") out = pl.to_playback(src, tmp_path / "再生用.mp3") assert out is not None assert out.read_bytes() == src.read_bytes() # 中身がそのまま