Jayanths9's picture
Create app.py
745ea5f verified
raw
history blame
2.02 kB
import streamlit as st
from streamlit_webrtc import webrtc_streamer, WebRtcMode, ClientSettings
import av
import numpy as np
import wave
import os
st.title("Audio Recorder and Uploader")
# Function to save recorded audio
def save_audio(frames, filename, sample_width, framerate, nchannels):
wf = wave.open(filename, 'wb')
wf.setnchannels(nchannels)
wf.setsampwidth(sample_width)
wf.setframerate(framerate)
wf.writeframes(b''.join(frames))
wf.close()
# Record audio
if st.button("Start Recording"):
webrtc_ctx = webrtc_streamer(
key="key",
mode=WebRtcMode.SENDONLY,
client_settings=ClientSettings(
rtc_configuration={"iceServers": [{"urls": ["stun:stun.l.google.com:19302"]}]},
media_stream_constraints={"audio": True, "video": False},
),
audio_receiver_size=1024,
)
if webrtc_ctx.audio_receiver:
frames = []
sample_width = 2
framerate = 44100
nchannels = 1
while True:
try:
audio_frames = webrtc_ctx.audio_receiver.get_frames(timeout=1)
for frame in audio_frames:
sound_chunk = np.frombuffer(frame.to_ndarray(), dtype=np.int16)
frames.append(sound_chunk.tobytes())
except av.error.BlockingIOError:
break
filename = "recorded_audio.wav"
save_audio(frames, filename, sample_width, framerate, nchannels)
st.audio(filename, format='audio/wav')
# Upload audio
uploaded_file = st.file_uploader("Upload an audio file", type=["wav", "mp3"])
if uploaded_file is not None:
st.audio(uploaded_file, format='audio/wav')
file_details = {"filename": uploaded_file.name, "filetype": uploaded_file.type,
"filesize": uploaded_file.size}
st.write(file_details)
with open(os.path.join("uploads", uploaded_file.name), "wb") as f:
f.write(uploaded_file.getbuffer())
st.success("File uploaded successfully")