|
import streamlit as st |
|
import speech_recognition as sr |
|
from gtts import gTTS |
|
import io |
|
import time |
|
|
|
def transcribe_audio(audio_file): |
|
recognizer = sr.Recognizer() |
|
try: |
|
with open("temp_audio.wav", "wb") as f: |
|
f.write(audio_file.read()) |
|
with sr.AudioFile("temp_audio.wav") as source: |
|
audio = recognizer.record(source) |
|
text = recognizer.recognize_google(audio) |
|
return text |
|
except Exception as e: |
|
st.error(f"Transcription failed: {str(e)}") |
|
return "" |
|
|
|
def text_to_speech(text, target_lang, max_retries=2): |
|
try: |
|
if not text: |
|
return None |
|
lang_map = { |
|
"English": "en", "French": "fr", "Spanish": "es", "German": "de", |
|
"Hindi": "hi", "Chinese": "zh-cn", "Arabic": "ar", "Russian": "ru", "Japanese": "ja" |
|
} |
|
lang_code = lang_map.get(target_lang, "en") |
|
for attempt in range(max_retries): |
|
try: |
|
tts = gTTS(text=text[:200], lang=lang_code, slow=False) |
|
audio_buffer = io.BytesIO() |
|
tts.write_to_fp(audio_buffer) |
|
audio_buffer.seek(0) |
|
if audio_buffer.getbuffer().nbytes > 0: |
|
return audio_buffer |
|
time.sleep(2 ** attempt) |
|
except Exception: |
|
if attempt == max_retries - 1: |
|
return None |
|
return None |
|
except Exception: |
|
return None |