|
from shortGPT.api_utils.eleven_api import ElevenLabsAPI |
|
from shortGPT.audio.voice_module import VoiceModule |
|
|
|
|
|
class ElevenLabsVoiceModule(VoiceModule): |
|
def __init__(self, api_key, voiceName, checkElevenCredits=False): |
|
self.api_key = api_key |
|
self.voiceName = voiceName |
|
self.remaining_credits = None |
|
self.eleven_labs_api = ElevenLabsAPI(self.api_key) |
|
self.update_usage() |
|
if checkElevenCredits and self.get_remaining_characters() < 1200: |
|
raise Exception(f"Your ElevenLabs API KEY doesn't have enough credits ({self.remaining_credits} character remaining). Minimum required: 1200 characters (equivalent to a 45sec short)") |
|
super().__init__() |
|
|
|
def update_usage(self): |
|
self.remaining_credits = self.eleven_labs_api.get_remaining_characters() |
|
return self.remaining_credits |
|
|
|
def get_remaining_characters(self): |
|
return self.remaining_credits if self.remaining_credits else self.eleven_labs_api.get_remaining_characters() |
|
|
|
def generate_voice(self, text, outputfile): |
|
if self.get_remaining_characters() >= len(text): |
|
file_path =self.eleven_labs_api.generate_voice(text=text, character=self.voiceName, filename=outputfile) |
|
self.update_usage() |
|
return file_path |
|
else: |
|
raise Exception(f"You cannot generate {len(text)} characters as your ElevenLabs key has only {self.remaining_credits} characters remaining") |
|
|