diff --git a/TTS/elevenlabs.py b/TTS/elevenlabs.py index e18bba9..a81779e 100644 --- a/TTS/elevenlabs.py +++ b/TTS/elevenlabs.py @@ -1,42 +1,38 @@ import random -from elevenlabs import generate, save +from elevenlabs import save +from elevenlabs.client import ElevenLabs from utils import settings -voices = [ - "Adam", - "Antoni", - "Arnold", - "Bella", - "Domi", - "Elli", - "Josh", - "Rachel", - "Sam", -] - class elevenlabs: - def __init__(self): - self.max_chars = 2500 - self.voices = voices - - def run(self, text, filepath, random_voice: bool = False): - if random_voice: - voice = self.randomvoice() - else: - voice = str(settings.config["settings"]["tts"]["elevenlabs_voice_name"]).capitalize() - - if settings.config["settings"]["tts"]["elevenlabs_api_key"]: - api_key = settings.config["settings"]["tts"]["elevenlabs_api_key"] - else: - raise ValueError( - "You didn't set an Elevenlabs API key! Please set the config variable ELEVENLABS_API_KEY to a valid API key." - ) - - audio = generate(api_key=api_key, text=text, voice=voice, model="eleven_multilingual_v1") - save(audio=audio, filename=filepath) - - def randomvoice(self): - return random.choice(self.voices) + def __init__(self): + self.max_chars = 2500 + self.client: ElevenLabs = None + + def run(self, text, filepath, random_voice: bool = False): + if self.client is None: + self.initialize() + if random_voice: + voice = self.randomvoice() + else: + voice = str(settings.config["settings"]["tts"]["elevenlabs_voice_name"]).capitalize() + + audio = self.client.generate(text=text, voice=voice, model="eleven_multilingual_v1") + save(audio=audio, filename=filepath) + + def initialize(self): + if settings.config["settings"]["tts"]["elevenlabs_api_key"]: + api_key = settings.config["settings"]["tts"]["elevenlabs_api_key"] + else: + raise ValueError( + "You didn't set an Elevenlabs API key! Please set the config variable ELEVENLABS_API_KEY to a valid API key." + ) + + self.client = ElevenLabs(api_key=api_key) + + def randomvoice(self): + if self.client is None: + self.initialize() + return random.choice(self.client.voices.get_all().voices).voice_name