sreepathi-ravikumar commited on
Commit
f44ae64
·
verified ·
1 Parent(s): 8147c82

Update audio_generator.py

Browse files
Files changed (1) hide show
  1. audio_generator.py +38 -12
audio_generator.py CHANGED
@@ -1,8 +1,11 @@
1
  import os
2
  import edge_tts
3
  import asyncio
 
 
4
 
5
  async def generate_edge_audio(text, filename="output_audio.mp3"):
 
6
  try:
7
  communicate = edge_tts.Communicate(text, "en-US-AriaNeural")
8
  await communicate.save(filename)
@@ -11,17 +14,40 @@ async def generate_edge_audio(text, filename="output_audio.mp3"):
11
  raise RuntimeError(f"EdgeTTS error: {str(e)}")
12
 
13
  def generate_audio(text, filename="output_audio.mp3"):
 
 
14
  try:
15
  return asyncio.run(generate_edge_audio(text, filename))
16
- except Exception as e:
17
- # Fallback to ElevenLabs if configured
18
- if os.getenv("ELEVENLABS_API_KEY"):
19
- from elevenlabs import generate, save, voices
20
- try:
21
- voice = voices()[0]
22
- audio = generate(text=text, voice=voice)
23
- save(audio, filename)
24
- return filename
25
- except Exception as e:
26
- raise RuntimeError(f"Both EdgeTTS and ElevenLabs failed: {str(e)}")
27
- raise
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import os
2
  import edge_tts
3
  import asyncio
4
+ from elevenlabs import generate, save, voices
5
+ from elevenlabs.api.error import APIError
6
 
7
  async def generate_edge_audio(text, filename="output_audio.mp3"):
8
+ """Free Microsoft Edge TTS implementation"""
9
  try:
10
  communicate = edge_tts.Communicate(text, "en-US-AriaNeural")
11
  await communicate.save(filename)
 
14
  raise RuntimeError(f"EdgeTTS error: {str(e)}")
15
 
16
  def generate_audio(text, filename="output_audio.mp3"):
17
+ """Hybrid audio generator with fallback logic"""
18
+ # First try EdgeTTS (free)
19
  try:
20
  return asyncio.run(generate_edge_audio(text, filename))
21
+ except Exception as edge_error:
22
+ # If Edge fails, try ElevenLabs if configured
23
+ elevenlabs_key = os.getenv("ELEVENLABS_API_KEY")
24
+ if not elevenlabs_key:
25
+ raise RuntimeError(
26
+ "EdgeTTS failed and no ElevenLabs API key configured. "
27
+ f"Original error: {str(edge_error)}"
28
+ )
29
+
30
+ try:
31
+ # Verify ElevenLabs key
32
+ available_voices = voices()
33
+ if not available_voices:
34
+ raise RuntimeError("No ElevenLabs voices available")
35
+
36
+ audio = generate(
37
+ text=text,
38
+ voice=available_voices[0],
39
+ model="eleven_monolingual_v1",
40
+ api_key=elevenlabs_key
41
+ )
42
+ save(audio, filename)
43
+ return filename
44
+ except APIError as e:
45
+ if "requires a valid API key" in str(e):
46
+ raise RuntimeError("Invalid ElevenLabs API key")
47
+ raise RuntimeError(f"ElevenLabs error: {str(e)}")
48
+ except Exception as e:
49
+ raise RuntimeError(
50
+ f"Both EdgeTTS and ElevenLabs failed. "
51
+ f"Edge error: {str(edge_error)}. "
52
+ f"ElevenLabs error: {str(e)}"
53
+ )