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