subprocess2 / audio_generator.py
sreepathi-ravikumar's picture
Update audio_generator.py
f44ae64 verified
raw
history blame
1.95 kB
import os
import edge_tts
import asyncio
from elevenlabs import generate, save, voices
from elevenlabs.api.error import APIError
async def generate_edge_audio(text, filename="output_audio.mp3"):
"""Free Microsoft Edge TTS implementation"""
try:
communicate = edge_tts.Communicate(text, "en-US-AriaNeural")
await communicate.save(filename)
return filename
except Exception as e:
raise RuntimeError(f"EdgeTTS error: {str(e)}")
def generate_audio(text, filename="output_audio.mp3"):
"""Hybrid audio generator with fallback logic"""
# First try EdgeTTS (free)
try:
return asyncio.run(generate_edge_audio(text, filename))
except Exception as edge_error:
# If Edge fails, try ElevenLabs if configured
elevenlabs_key = os.getenv("ELEVENLABS_API_KEY")
if not elevenlabs_key:
raise RuntimeError(
"EdgeTTS failed and no ElevenLabs API key configured. "
f"Original error: {str(edge_error)}"
)
try:
# Verify ElevenLabs key
available_voices = voices()
if not available_voices:
raise RuntimeError("No ElevenLabs voices available")
audio = generate(
text=text,
voice=available_voices[0],
model="eleven_monolingual_v1",
api_key=elevenlabs_key
)
save(audio, filename)
return filename
except APIError as e:
if "requires a valid API key" in str(e):
raise RuntimeError("Invalid ElevenLabs API key")
raise RuntimeError(f"ElevenLabs error: {str(e)}")
except Exception as e:
raise RuntimeError(
f"Both EdgeTTS and ElevenLabs failed. "
f"Edge error: {str(edge_error)}. "
f"ElevenLabs error: {str(e)}"
)