cpu-tts / tests /test_melo_engine.py
grimshaw's picture
Improve storage fallback and UI source editor
0a81ef3 verified
Raw
History Blame Contribute Delete
1.75 kB
from types import SimpleNamespace
import wave
import numpy as np
from app.services.melo_engine import MeloEngine
class FakeMeloModel:
def __init__(self) -> None:
self.hps = SimpleNamespace(
data=SimpleNamespace(
spk2id={
"EN-Default": 0,
"EN-US": 1,
"EN-BR": 2,
"EN_INDIA": 3,
"EN-AU": 4,
}
)
)
def tts_to_file(
self, text: str, speaker_id: int, output_path: str, speed: float = 1.0
) -> None:
assert text
assert speaker_id >= 0
assert speed > 0
pcm = (np.zeros(2400, dtype=np.float32) * 32767.0).astype(np.int16)
with wave.open(output_path, "wb") as wav_file:
wav_file.setnchannels(1)
wav_file.setsampwidth(2)
wav_file.setframerate(24000)
wav_file.writeframes(pcm.tobytes())
def test_melo_voice_bindings_expose_en_aliases() -> None:
engine = MeloEngine(tts_factory=FakeMeloModel)
aliases = {row["alias"] for row in engine.list_voice_bindings()}
assert aliases >= {"default", "us", "india"}
def test_melo_supports_expected_voices() -> None:
engine = MeloEngine(tts_factory=FakeMeloModel)
assert engine.supports_voice("us") is True
assert engine.supports_voice("unknown") is False
def test_melo_synthesize_returns_waveform() -> None:
engine = MeloEngine(tts_factory=FakeMeloModel)
result = engine.synthesize(
text="hello",
voice="us",
speed=1.0,
quality="balanced",
model_name="melo-en",
lang="en",
)
assert result.sample_rate == 24000
assert result.waveform.ndim == 1