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"])