Spaces:
Sleeping
Sleeping
''' | |
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"]) | |