VoiceChat / app.py
shukdevdatta123's picture
Update app.py
4a48709 verified
raw
history blame
2.01 kB
import streamlit as st
from tempfile import NamedTemporaryFile
from audiorecorder import audiorecorder
from whispercpp import Whisper
from pydub import AudioSegment
import io
# Initialize whisper.cpp
w = Whisper('tiny')
def inference(audio_segment):
# Convert AudioSegment to WAV format in memory
with NamedTemporaryFile(suffix=".wav", delete=False) as temp:
# Export AudioSegment to raw bytes in WAV format
audio_segment.export(temp.name, format="wav")
temp.close() # Ensure the file is written and closed before passing it to Whisper
result = w.transcribe(temp.name)
text = w.extract_text(result)
return text[0]
# Streamlit UI setup
with st.sidebar:
audio = audiorecorder("Click to send voice message", "Recording... Click when you're done", key="recorder")
st.title("Echo Bot with Whisper")
# Initialize chat history
if "messages" not in st.session_state:
st.session_state.messages = []
# Display chat messages from history on app rerun
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# React to user input
if (prompt := st.chat_input("Your message")) or len(audio):
# If it's coming from the audio recorder transcribe the message with whisper.cpp
if len(audio) > 0:
# Convert audio (from audiorecorder) to AudioSegment
audio_segment = AudioSegment.from_file(io.BytesIO(audio), format="wav")
prompt = inference(audio_segment)
# Display user message in chat message container
st.chat_message("user").markdown(prompt)
# Add user message to chat history
st.session_state.messages.append({"role": "user", "content": prompt})
response = f"Echo: {prompt}"
# Display assistant response in chat message container
with st.chat_message("assistant"):
st.markdown(response)
# Add assistant response to chat history
st.session_state.messages.append({"role": "assistant", "content": response})