File size: 2,933 Bytes
b325aad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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 for Google Speech Recognition
    language_codes = {
        "English": "en-US",
        "Arabic": "ar-SA",  # Saudi Arabic
        "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  # Let Google auto-detect
    }
    
    try:
        with sr.AudioFile(audio) as source:
            # Adjust for ambient noise
            recognizer.adjust_for_ambient_noise(source)
            audio_data = recognizer.record(source)
        
        # Get selected language code
        selected_language = language_codes.get(language, "en-US")
        
        # Transcribe based on language selection
        if selected_language:
            text = recognizer.recognize_google(audio_data, language=selected_language)
        else:
            # Auto-detect: try Arabic first, then English
            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}"
        
        # Add timestamp and transcription to history
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        new_entry = f"[{timestamp}] [{language}] {text}"
        
        # Update history
        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 "", ""