vakodiya's picture
Update app.py
336a7dd verified
raw
history blame
2.04 kB
import streamlit as st
from streamlit_webrtc import webrtc_streamer, WebRtcMode, ClientSettings
import numpy as np
import io
import wave
import requests
from audio_processor import process_audio
# Initialize Streamlit app layout
st.title("Microphone Input in Streamlit")
def audio_callback(frame):
# Get raw audio data from the frame
audio_data = frame.to_ndarray().astype(np.int16)
# Save audio data to a WAV file
with io.BytesIO() as wav_buffer:
with wave.open(wav_buffer, 'wb') as wav_file:
wav_file.setnchannels(1) # Mono
wav_file.setsampwidth(2) # 16-bit
wav_file.setframerate(16000) # Sample rate
wav_file.writeframes(audio_data.tobytes())
wav_buffer.seek(0)
audio_bytes = wav_buffer.read()
# Convert audio to text
transcription = process_audio(audio_bytes)
# 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,
client_settings=ClientSettings(
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.")