dheerapat38's picture
init
8921405 verified
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