Jayanths9 commited on
Commit
745ea5f
1 Parent(s): bfa76d4

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +60 -0
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")