import requests import time from functools import lru_cache class StatusError(Exception): pass @lru_cache(maxsize=None) def synthesis(text, speaker): url = f"https://api.tts.quest/v3/voicevox/synthesis?text={text}&speaker={speaker}" resp = requests.get(url) resp.raise_for_status() data = resp.json() is_ready = check_audio_status(data["audioStatusUrl"]) if not is_ready: raise StatusError("Unexpected status") resp = requests.get(data["mp3DownloadUrl"]) return resp.content def check_audio_status(url): is_ready = False while not is_ready: resp = requests.get(url) resp.raise_for_status() data = resp.json() is_ready = data["isAudioReady"] time.sleep(1) return is_ready