Spaces:
Running
Running
| import asyncio | |
| import os | |
| import tempfile | |
| import time | |
| CANDIDATES = [ | |
| ("tts_models/en/ljspeech/speedy-speech", None), | |
| ("tts_models/en/ljspeech/vits", None), | |
| ("tts_models/en/ljspeech/glow-tts", None), | |
| ("tts_models/en/ljspeech/tacotron2-DDC", None), | |
| ("tts_models/en/ljspeech/fast_pitch", None), | |
| ("tts_models/en/vctk/vits", "AUTO_SPEAKERS"), | |
| ("tts_models/en/sam/tacotron-DDC", None), | |
| ("tts_models/en/blizzard2013/capacitron-t2-c50", None), | |
| ("tts_models/en/jenny/jenny", None), | |
| ] | |
| TEST_TEXT = "Hello, this is a short interview voice quality sample." | |
| async def synth_once(tts, speaker=None): | |
| fd, path = tempfile.mkstemp(suffix=".wav") | |
| os.close(fd) | |
| t0 = time.perf_counter() | |
| try: | |
| kwargs = {"text": TEST_TEXT, "file_path": path} | |
| if speaker: | |
| kwargs["speaker"] = speaker | |
| await asyncio.to_thread(lambda: tts.tts_to_file(**kwargs)) | |
| elapsed = time.perf_counter() - t0 | |
| size = os.path.getsize(path) | |
| return True, elapsed, size, None | |
| except Exception as e: | |
| return False, 0.0, 0, str(e) | |
| finally: | |
| if os.path.exists(path): | |
| os.remove(path) | |
| async def run(): | |
| from TTS.api import TTS | |
| for model_name, speaker_mode in CANDIDATES: | |
| print(f"MODEL {model_name}") | |
| try: | |
| t_load = time.perf_counter() | |
| tts = await asyncio.to_thread(lambda: TTS(model_name=model_name, progress_bar=False, gpu=False)) | |
| print(f" LOAD_OK {time.perf_counter() - t_load:.2f}s") | |
| if speaker_mode == "AUTO_SPEAKERS": | |
| speakers = list(getattr(tts, "speakers", []) or []) | |
| if not speakers: | |
| print(" NO_SPEAKERS_FOUND") | |
| ok, elapsed, size, err = await synth_once(tts) | |
| if ok: | |
| print(f" SYNTH_OK elapsed={elapsed:.2f}s bytes={size}") | |
| else: | |
| print(f" SYNTH_FAIL {err}") | |
| else: | |
| print(f" SPEAKER_COUNT {len(speakers)}") | |
| test_speakers = speakers[:12] | |
| for spk in test_speakers: | |
| ok, elapsed, size, err = await synth_once(tts, speaker=spk) | |
| if ok: | |
| print(f" SPEAKER_OK {spk} elapsed={elapsed:.2f}s bytes={size}") | |
| else: | |
| print(f" SPEAKER_FAIL {spk} err={err}") | |
| else: | |
| ok, elapsed, size, err = await synth_once(tts) | |
| if ok: | |
| print(f" SYNTH_OK elapsed={elapsed:.2f}s bytes={size}") | |
| else: | |
| print(f" SYNTH_FAIL {err}") | |
| except Exception as e: | |
| print(f" LOAD_FAIL {e}") | |
| asyncio.run(run()) | |