Spaces:
Sleeping
Sleeping
File size: 1,300 Bytes
ec2a0f3 49a7070 ec2a0f3 49a7070 ec2a0f3 a7e740d ec2a0f3 49a7070 a7e740d 49a7070 ec2a0f3 a7e740d ec2a0f3 49a7070 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
'''
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"])
|