from dotenv import load_dotenv | |
from elevenlabs.client import ElevenLabs | |
from elevenlabs import play | |
from app.core.logging import LoggerMixin | |
import os | |
import io | |
load_dotenv() | |
class TTSService(LoggerMixin): | |
def __init__(self): | |
self.api_key = os.getenv("ELEVEN_LABS_API_KEY") | |
if not self.api_key: | |
self.logger.error("ELEVEN_LABS_API_KEY not found in environment variables") | |
raise ValueError("ELEVEN_LABS_API_KEY is required") | |
self.client = ElevenLabs(api_key=self.api_key) | |
def convert_text_to_speech(self, text: str) -> bytes: | |
"""Convert text to speech using ElevenLabs""" | |
audio_stream = self.client.text_to_speech.convert( | |
text=text, | |
voice_id="JBFqnCBsd6RMkjVDRZzb", | |
model_id="eleven_multilingual_v2", | |
output_format="mp3_44100_128", | |
) | |
# Convert the generator to bytes | |
buffer = io.BytesIO() | |
for chunk in audio_stream: | |
buffer.write(chunk) | |
return buffer.getvalue() | |