Spaces:
Build error
Build error
import json | |
import requests | |
class ElevenLabsAPI: | |
def __init__(self, api_key): | |
self.api_key = api_key | |
self.url_base = 'https://api.elevenlabs.io/v1/' | |
self.get_voices() | |
def get_voices(self): | |
'''Get the list of voices available''' | |
url = self.url_base + 'voices' | |
headers = {'accept': 'application/json'} | |
if self.api_key: | |
headers['xi-api-key'] = self.api_key | |
response = requests.get(url, headers=headers) | |
self.voices = {voice['name']: voice['voice_id'] for voice in response.json()['voices']} | |
return self.voices | |
def get_remaining_characters(self): | |
'''Get the number of characters remaining''' | |
url = self.url_base + 'user' | |
headers = {'accept': '*/*', 'xi-api-key': self.api_key, 'Content-Type': 'application/json'} | |
response = requests.get(url, headers=headers) | |
if response.status_code == 200: | |
sub = response.json()['subscription'] | |
return sub['character_limit'] - sub['character_count'] | |
else: | |
raise Exception(response.json()['detail']['message']) | |
def generate_voice(self, text, character, filename, stability=0.2, clarity=0.1): | |
'''Generate a voice''' | |
if character not in self.voices: | |
print(character, 'is not in the array of characters: ', list(self.voices.keys())) | |
voice_id = self.voices[character] | |
url = f'{self.url_base}text-to-speech/{voice_id}/stream' | |
headers = {'accept': '*/*', 'xi-api-key': self.api_key, 'Content-Type': 'application/json'} | |
data = json.dumps({"model_id": "eleven_multilingual_v2", "text": text, "stability": stability, "similarity_boost": clarity}) | |
response = requests.post(url, headers=headers, data=data) | |
if response.status_code == 200: | |
with open(filename, 'wb') as f: | |
f.write(response.content) | |
return filename | |
else: | |
message = response.text | |
raise Exception(f'Error in response, {response.status_code} , message: {message}') | |