import streamlit as st from streamlit_webrtc import webrtc_streamer, WebRtcMode, ClientSettings import numpy as np import io import wave import requests from audio_to_text import audio_to_text import streamlit.components.v1 as components # Initialize Streamlit app layout st.title("Microphone Input in Streamlit") # Load the custom component audio_recorder_html = """ """ # Embed the JavaScript and HTML in Streamlit components.html(audio_recorder_html, height=300) # Retrieve the audio data from the component (if available) audio_data = st.query_params().get("value") def audio_callback(frame): # Get raw audio data from the frame audio_data = frame.to_ndarray().astype(np.int16) # Convert audio to text transcription = audio_to_text(audio_data) # Display the transcription st.write("Transcription:", transcription) API_URL = "https://eaa0-34-74-179-199.ngrok-free.app/generate" # Optionally, send the transcription to an API headers = { "Content-Type": "application/json" } payload = { "prompt": transcription } response = requests.post(API_URL, json=payload, headers=headers) if response.status_code == 200: st.write("Assistant:", response.json()) else: st.write("Error:", response.status_code, response.text) webrtc_ctx = webrtc_streamer( key="audio-only", mode=WebRtcMode.SENDRECV, rtc_configuration={"iceServers": [{"urls": ["stun:stun1.l.google.com:19302"]}]}, media_stream_constraints={ "audio": True, "video": False }, audio_frame_callback=audio_callback ) # Placeholder for capturing audio if webrtc_ctx.state.playing: st.write("Microphone is active. Speak into the microphone...") else: st.write("Click to start microphone input.")