Spaces:
Sleeping
Sleeping
Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
from streamlit_webrtc import webrtc_streamer, WebRtcMode, ClientSettings
|
3 |
+
import av
|
4 |
+
import numpy as np
|
5 |
+
import wave
|
6 |
+
import os
|
7 |
+
|
8 |
+
st.title("Audio Recorder and Uploader")
|
9 |
+
|
10 |
+
# Function to save recorded audio
|
11 |
+
def save_audio(frames, filename, sample_width, framerate, nchannels):
|
12 |
+
wf = wave.open(filename, 'wb')
|
13 |
+
wf.setnchannels(nchannels)
|
14 |
+
wf.setsampwidth(sample_width)
|
15 |
+
wf.setframerate(framerate)
|
16 |
+
wf.writeframes(b''.join(frames))
|
17 |
+
wf.close()
|
18 |
+
|
19 |
+
# Record audio
|
20 |
+
if st.button("Start Recording"):
|
21 |
+
webrtc_ctx = webrtc_streamer(
|
22 |
+
key="key",
|
23 |
+
mode=WebRtcMode.SENDONLY,
|
24 |
+
client_settings=ClientSettings(
|
25 |
+
rtc_configuration={"iceServers": [{"urls": ["stun:stun.l.google.com:19302"]}]},
|
26 |
+
media_stream_constraints={"audio": True, "video": False},
|
27 |
+
),
|
28 |
+
audio_receiver_size=1024,
|
29 |
+
)
|
30 |
+
|
31 |
+
if webrtc_ctx.audio_receiver:
|
32 |
+
frames = []
|
33 |
+
sample_width = 2
|
34 |
+
framerate = 44100
|
35 |
+
nchannels = 1
|
36 |
+
|
37 |
+
while True:
|
38 |
+
try:
|
39 |
+
audio_frames = webrtc_ctx.audio_receiver.get_frames(timeout=1)
|
40 |
+
for frame in audio_frames:
|
41 |
+
sound_chunk = np.frombuffer(frame.to_ndarray(), dtype=np.int16)
|
42 |
+
frames.append(sound_chunk.tobytes())
|
43 |
+
except av.error.BlockingIOError:
|
44 |
+
break
|
45 |
+
|
46 |
+
filename = "recorded_audio.wav"
|
47 |
+
save_audio(frames, filename, sample_width, framerate, nchannels)
|
48 |
+
st.audio(filename, format='audio/wav')
|
49 |
+
|
50 |
+
# Upload audio
|
51 |
+
uploaded_file = st.file_uploader("Upload an audio file", type=["wav", "mp3"])
|
52 |
+
|
53 |
+
if uploaded_file is not None:
|
54 |
+
st.audio(uploaded_file, format='audio/wav')
|
55 |
+
file_details = {"filename": uploaded_file.name, "filetype": uploaded_file.type,
|
56 |
+
"filesize": uploaded_file.size}
|
57 |
+
st.write(file_details)
|
58 |
+
with open(os.path.join("uploads", uploaded_file.name), "wb") as f:
|
59 |
+
f.write(uploaded_file.getbuffer())
|
60 |
+
st.success("File uploaded successfully")
|