import requests | |
import time | |
from functools import lru_cache | |
class StatusError(Exception): | |
pass | |
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 | |