ACE-Music-Studio / tests /test_post_process.py
techfreakworm's picture
feat(post): add demucs stems, lufs normalisation, mp3 export
b260242 unverified
raw
history blame
1.91 kB
"""L2 tests for post-processing — Demucs and ffmpeg are mocked."""
from __future__ import annotations
from pathlib import Path
from unittest.mock import MagicMock
import post_process as pp
def test_separate_stems_returns_four_paths(tmp_path, monkeypatch):
src = tmp_path / "song.wav"
src.write_bytes(b"RIFF" + b"\0" * 100)
fake_sep = MagicMock()
fake_sep.separate_audio_file.return_value = {
"vocals": tmp_path / "vocals.wav",
"drums": tmp_path / "drums.wav",
"bass": tmp_path / "bass.wav",
"other": tmp_path / "other.wav",
}
for k in ("vocals", "drums", "bass", "other"):
(tmp_path / f"{k}.wav").write_bytes(b"RIFF" + b"\0" * 100)
monkeypatch.setattr(pp, "_get_demucs", lambda: fake_sep)
stems = pp.separate_stems(src)
assert set(stems.keys()) == {"vocals", "drums", "bass", "other"}
for p in stems.values():
assert Path(p).exists()
def test_normalise_lufs_invokes_pyloudnorm(monkeypatch, tmp_path):
src = tmp_path / "in.wav"
src.write_bytes(b"RIFF" + b"\0" * 100)
captured = {}
def fake_norm(in_path, out_path, target_lufs):
captured.update({"in": in_path, "out": out_path, "target": target_lufs})
Path(out_path).write_bytes(b"RIFF")
monkeypatch.setattr(pp, "_pyloudnorm_normalise", fake_norm)
out = pp.normalise_lufs(src, target_lufs=-14.0)
assert captured["target"] == -14.0
assert Path(out).exists()
def test_to_mp3_invokes_ffmpeg(monkeypatch, tmp_path):
src = tmp_path / "in.wav"
src.write_bytes(b"RIFF")
captured = {}
def fake_run(cmd, **kw):
captured["cmd"] = cmd
Path(cmd[-1]).write_bytes(b"ID3")
return MagicMock(returncode=0)
monkeypatch.setattr(pp.subprocess, "run", fake_run)
out = pp.to_mp3(src, bitrate_kbps=320)
assert Path(out).exists()
assert "320k" in " ".join(captured["cmd"])