| import speech_recognition as sr
|
| from datetime import datetime
|
|
|
| def transcribe_audio(audio, language, history):
|
| recognizer = sr.Recognizer()
|
|
|
| if audio is None:
|
| return history, ""
|
|
|
|
|
| language_codes = {
|
| "English": "en-US",
|
| "Arabic": "ar-SA",
|
| "Arabic (Egypt)": "ar-EG",
|
| "Arabic (UAE)": "ar-AE",
|
| "Arabic (Lebanon)": "ar-LB",
|
| "Arabic (Saudi Arabia)": "ar-SA",
|
| "Arabic (Kuwait)": "ar-KW",
|
| "Arabic (Qatar)": "ar-QA",
|
| "Arabic (Jordan)": "ar-JO",
|
| "Auto-detect": None
|
| }
|
|
|
| try:
|
| with sr.AudioFile(audio) as source:
|
|
|
| recognizer.adjust_for_ambient_noise(source)
|
| audio_data = recognizer.record(source)
|
|
|
|
|
| selected_language = language_codes.get(language, "en-US")
|
|
|
|
|
| if selected_language:
|
| text = recognizer.recognize_google(audio_data, language=selected_language)
|
| else:
|
|
|
| try:
|
| text = recognizer.recognize_google(audio_data, language="ar-SA")
|
| detected_lang = "Arabic"
|
| except:
|
| text = recognizer.recognize_google(audio_data, language="en-US")
|
| detected_lang = "English"
|
|
|
| text = f"[{detected_lang}] {text}"
|
|
|
|
|
| timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
| new_entry = f"[{timestamp}] [{language}] {text}"
|
|
|
|
|
| if history:
|
| updated_history = history + "\n" + new_entry
|
| else:
|
| updated_history = new_entry
|
|
|
| return updated_history, text
|
|
|
| except sr.UnknownValueError:
|
| error_msg = "Could not understand audio"
|
| timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
| new_entry = f"[{timestamp}] [{language}] ERROR: {error_msg}"
|
|
|
| if history:
|
| updated_history = history + "\n" + new_entry
|
| else:
|
| updated_history = new_entry
|
|
|
| return updated_history, error_msg
|
|
|
| except sr.RequestError as e:
|
| error_msg = f"Could not request results; {e}"
|
| timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
| new_entry = f"[{timestamp}] [{language}] ERROR: {error_msg}"
|
|
|
| if history:
|
| updated_history = history + "\n" + new_entry
|
| else:
|
| updated_history = new_entry
|
|
|
| return updated_history, error_msg
|
|
|
| def clear_history():
|
| return "", "" |