Spaces:
Running
Running
Update utils.py
Browse files
utils.py
CHANGED
@@ -102,3 +102,33 @@ def transcribe_audio(file_path):
|
|
102 |
except Exception as e:
|
103 |
logging.error(f"Error transcribing audio: {str(e)}")
|
104 |
return f"Error transcribing audio: {str(e)}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
except Exception as e:
|
103 |
logging.error(f"Error transcribing audio: {str(e)}")
|
104 |
return f"Error transcribing audio: {str(e)}"
|
105 |
+
|
106 |
+
def generate_audio_mp3(text, speaker):
|
107 |
+
groq_client = Groq(api_key=os.environ.get("GROQ_API_KEY"))
|
108 |
+
response = groq_client.chat.completions.create(
|
109 |
+
messages=[{"role": "system", "content": f"Generate a realistic voice for {speaker}: {text}"}],
|
110 |
+
model="llama-3.3-70b-versatile",
|
111 |
+
max_tokens=512,
|
112 |
+
temperature=0.6
|
113 |
+
)
|
114 |
+
|
115 |
+
speech_text = response.choices[0].message.content.strip()
|
116 |
+
temp_audio = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3")
|
117 |
+
|
118 |
+
try:
|
119 |
+
temp_audio.write(speech_text.encode('utf-8'))
|
120 |
+
temp_audio.close()
|
121 |
+
|
122 |
+
audio_test = AudioSegment.from_file(temp_audio.name, format="mp3")
|
123 |
+
if len(audio_test) == 0:
|
124 |
+
raise ValueError("Generated MP3 file is empty or corrupted.")
|
125 |
+
|
126 |
+
return temp_audio.name
|
127 |
+
|
128 |
+
except Exception as e:
|
129 |
+
logging.error(f"Failed to generate MP3 file: {str(e)}")
|
130 |
+
|
131 |
+
silent_audio = AudioSegment.silent(duration=2000)
|
132 |
+
fallback_mp3 = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3")
|
133 |
+
silent_audio.export(fallback_mp3.name, format="mp3")
|
134 |
+
return fallback_mp3.name
|