File size: 3,394 Bytes
8921405
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import gradio as gr
from typhoon_asr import transcribe

# Global variable to store transcription results
last_transcription = None

def transcribe_audio(audio_path):
    """Transcribe the audio using typhoon_asr"""
    global last_transcription
    
    if not audio_path:
        return "❌ No audio to transcribe. Please record audio first.", ""
    
    try:
        # Show loading message
        status_msg = "πŸ”„ Transcribing audio..."
        
        # Perform transcription (basic only)
        result = transcribe(audio_path)
        last_transcription = result
        transcription_text = result['text'].text
        
        status_msg = "βœ… Transcription completed!"
        return status_msg, transcription_text
        
    except Exception as e:
        error_msg = f"❌ Transcription failed: {str(e)}"
        return error_msg, ""

def clear_transcription():
    """Clear the transcription"""
    global last_transcription
    last_transcription = None
    return "πŸ—‘οΈ Transcription cleared", ""

def audio_recorded(audio_path):
    """Called when audio is recorded - update status and enable button"""
    if audio_path:
        return f"βœ… Audio recorded! Ready to transcribe.", gr.Button(interactive=True)
    else:
        return "❌ No audio recorded", gr.Button(interactive=False)

# Create the Gradio interface
with gr.Blocks(title="Direct Audio Transcription") as demo:
    gr.Markdown("# πŸŽ™οΈ Direct Thai Audio Transcription with Typhoon ASR")
    
    # Audio recording component
    audio_input = gr.Audio(
        sources=["microphone"], 
        type="filepath", 
        label="Record Audio"
    )
    
    # Status display
    status_text = gr.Textbox(
        label="Status", 
        value="Record audio to get started", 
        interactive=False
    )
    
    # Transcription buttons
    gr.Markdown("### Transcription")
    with gr.Row():
        transcribe_btn = gr.Button("Transcribe", variant="primary", interactive=False)
        clear_btn = gr.Button("Clear Result", variant="secondary")
    
    # Transcription result
    transcription_output = gr.Textbox(
        label="Transcription Result",
        lines=10,
        placeholder="Transcription will appear here after recording and clicking transcribe...",
        interactive=False
    )
    
    # Event handlers
    # When audio changes (recorded), update status and enable button
    audio_input.change(
        fn=audio_recorded,
        inputs=[audio_input],
        outputs=[status_text, transcribe_btn]
    )
    
    # Transcription button click
    transcribe_btn.click(
        fn=transcribe_audio,
        inputs=[audio_input],
        outputs=[status_text, transcription_output]
    )
    
    clear_btn.click(
        fn=clear_transcription,
        outputs=[status_text, transcription_output]
    )

if __name__ == "__main__":
    print("Launching Direct Audio Transcription...")
    demo.launch()

# Helper functions to access transcription results
def get_last_transcription():
    """Get the last transcription result"""
    global last_transcription
    return last_transcription

def use_transcription():
    """Example function showing how to use the transcription"""
    if last_transcription:
        print(f"Last transcription: {last_transcription}")
        return last_transcription
    else:
        print("No transcription available")
        return None