''' generates voice using play.ht api returns a url of the generated mp3 ''' import requests import sseclient from loguru import logger import os import helpers from pprint import pprint import json from tenacity import retry, wait_random_exponential, stop_after_attempt url = "https://play.ht/api/v2/tts" user_id = os.environ["PLAYHT_USERID"] api_key = os.environ["PLAYHT_SECRETKEY"] headers = { "accept": "text/event-stream", "content-type": "application/json", "AUTHORIZATION": f"Bearer {api_key}", "X-USER-ID": user_id } valid_voices = ["dylan"] ''' generate new saying with play.ht ''' def say_new(text, voice="dylan"): payload = { "quality": "medium", "output_format": "mp3", "speed": 1, "sample_rate": 24000, "text": text, "voice": voice } response = requests.post(url, stream=True, headers=headers, json=payload) stream_url = response.headers["content-location"] resp = requests.get(stream_url, stream=True, headers=headers) client = sseclient.SSEClient(resp) for event in client.events(): if event.data: #pprint(event.data) if helpers.is_valid_json(event.data): # play.ht api is unrealiable e = json.loads(event.data) if e["stage"] == "complete": return(e["url"])