awacke1 commited on
Commit
2b30c44
Β·
verified Β·
1 Parent(s): 19898c7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +96 -35
app.py CHANGED
@@ -2,8 +2,7 @@ import streamlit as st
2
  import pandas as pd
3
  from datetime import datetime
4
  import cv2
5
- import sounddevice as sd
6
- import wave
7
  import imageio
8
  import av
9
  import moviepy.editor as mp
@@ -34,7 +33,7 @@ st.title("πŸ“ΈπŸŽ™οΈ Capture Craze")
34
  # πŸŽ›οΈ Sidebar config like a spaceship control panel!
35
  with st.sidebar:
36
  st.header("πŸŽšοΈπŸ“Έ Tune-Up Zone")
37
- library_choice = st.selectbox("πŸ“š Pick a Tool", ["OpenCV", "SoundDevice", "ImageIO", "PyAV", "MoviePy"])
38
  resolution = st.select_slider("πŸ“ Snap Size", options=["320x240", "640x480", "1280x720"], value="640x480")
39
  fps = st.slider("⏱️ Speed Snap", 1, 60, 30)
40
 
@@ -98,41 +97,44 @@ with st.expander("1️⃣ πŸ“· OpenCV Fiesta"):
98
  st.image(file_path, caption="πŸ” Edge Lord")
99
  cap.release()
100
 
101
- # 2. SoundDevice - πŸŽ™οΈ Soundwave showdown!
102
- with st.expander("2️⃣ πŸŽ™οΈ SoundDevice Party"):
103
- st.write("πŸ”Š Audio Ace: Sound control ninja!")
104
  st.subheader("πŸ”₯ Top Tricks")
105
 
106
- st.write("🎀🌩️ Record Jam")
107
- if st.button("🎡 Grab Sound", key="sounddevice_1"):
108
- # 🎀🌩️ Records like a storm-chasing bard! | πŸŽ™οΈ sd.rec(44100) - Captures audio like thunder in a bottle!
109
- fs = 44100
110
- duration = 3
111
- recording = sd.rec(int(duration * fs), samplerate=fs, channels=1, dtype='int16')
112
- sd.wait()
113
- file_path = f"sounddevice_rec_{datetime.now().strftime('%Y%m%d_%H%M%S')}.wav"
114
- with wave.open(file_path, 'wb') as wf:
115
- wf.setnchannels(1)
116
- wf.setsampwidth(2)
117
- wf.setframerate(fs)
118
- wf.writeframes(recording.tobytes())
119
- save_to_history("Audio", file_path)
120
- st.audio(file_path)
121
 
122
- st.write("πŸ”ŠπŸ“‘ Device Spy")
123
- if st.button("πŸ” List Gear", key="sounddevice_2"):
124
- # πŸ”ŠπŸ“‘ Spies audio gear like a tech sleuth! | πŸ“‘ sd.query_devices() - Sniffs out sound toys like a pro!
125
- devices = sd.query_devices()
126
- st.write("πŸŽ™οΈ Gear Squad:", devices)
127
-
128
- st.write("πŸŽΆπŸ’Ύ Play Blast")
129
- if st.button("🎧 Quick Play", key="sounddevice_3"):
130
- # πŸŽΆπŸ’Ύ Blasts tunes faster than a DJ remix! | 🎡 sd.play(data) - Drops beats like a party bomb!
131
- fs = 44100
132
- duration = 1
133
- data = np.random.uniform(-1, 1, int(fs * duration)).astype(np.float32)
134
- sd.play(data, fs)
135
- st.write("🎡 Played a funky noise!")
 
 
 
 
 
 
 
 
136
 
137
  # 3. ImageIO - πŸ–ΌοΈ Pixel playtime!
138
  with st.expander("3️⃣ πŸ“Ή ImageIO Bash"):
@@ -275,6 +277,65 @@ with st.expander("5️⃣ πŸ“Ό MoviePy Gala"):
275
  save_to_history("Video", file_path)
276
  st.video(file_path, caption="🀝 Duo Dance")
277
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
278
  # πŸ“‚ Upload zone like a media drop party!
279
  st.header("πŸ“₯πŸŽ‰ Drop Zone")
280
  uploaded_files = st.file_uploader("πŸ“ΈπŸŽ΅πŸŽ₯ Toss Media", accept_multiple_files=True, type=['jpg', 'png', 'mp4', 'wav', 'mp3'])
 
2
  import pandas as pd
3
  from datetime import datetime
4
  import cv2
5
+ from pydub import AudioSegment
 
6
  import imageio
7
  import av
8
  import moviepy.editor as mp
 
33
  # πŸŽ›οΈ Sidebar config like a spaceship control panel!
34
  with st.sidebar:
35
  st.header("πŸŽšοΈπŸ“Έ Tune-Up Zone")
36
+ library_choice = st.selectbox("πŸ“š Pick a Tool", ["OpenCV", "PyDub", "ImageIO", "PyAV", "MoviePy", "JS Audio"])
37
  resolution = st.select_slider("πŸ“ Snap Size", options=["320x240", "640x480", "1280x720"], value="640x480")
38
  fps = st.slider("⏱️ Speed Snap", 1, 60, 30)
39
 
 
97
  st.image(file_path, caption="πŸ” Edge Lord")
98
  cap.release()
99
 
100
+ # 2. PyDub - πŸŽ™οΈ Audio mixing madness!
101
+ with st.expander("2️⃣ πŸŽ™οΈ PyDub Party"):
102
+ st.write("πŸ”Š Audio Ace: Mixmaster vibes!")
103
  st.subheader("πŸ”₯ Top Tricks")
104
 
105
+ st.write("🎀🌩️ Load Jam")
106
+ if st.button("🎡 Load Sound", key="pydub_1"):
107
+ # 🎀🌩️ Grabs audio like a sonic thief! | πŸŽ™οΈ AudioSegment.from_file("sound.wav") - Nabs tracks like a sound bandit!
108
+ uploaded_audio = st.file_uploader("πŸŽ™οΈ Drop a WAV", type=['wav'], key="pydub_load")
109
+ if uploaded_audio:
110
+ sound = AudioSegment.from_file(uploaded_audio)
111
+ file_path = f"pydub_load_{datetime.now().strftime('%Y%m%d_%H%M%S')}.wav"
112
+ sound.export(file_path, format="wav")
113
+ save_to_history("Audio", file_path)
114
+ st.audio(file_path)
 
 
 
 
 
115
 
116
+ st.write("πŸ”ŠπŸ“‘ Export Snap")
117
+ if st.button("🎢 MP3 It", key="pydub_2"):
118
+ # πŸ”ŠπŸ“‘ Spits out tracks like a beat factory! | 🎡 sound.export("out.mp3") - Pumps tunes like a hit machine!
119
+ uploaded_audio = st.file_uploader("πŸŽ™οΈ Drop a WAV", type=['wav'], key="pydub_export")
120
+ if uploaded_audio:
121
+ sound = AudioSegment.from_file(uploaded_audio)
122
+ file_path = f"pydub_mp3_{datetime.now().strftime('%Y%m%d_%H%M%S')}.mp3"
123
+ sound.export(file_path, format="mp3")
124
+ save_to_history("Audio", file_path)
125
+ st.audio(file_path)
126
+
127
+ st.write("πŸŽΆπŸ’Ύ Reverse Blast")
128
+ if st.button("πŸ”„ Flip It", key="pydub_3"):
129
+ # πŸŽΆπŸ’Ύ Flips sound like a time-travel DJ! | 🎧 sound.reverse() - Spins audio back like a retro remix!
130
+ uploaded_audio = st.file_uploader("πŸŽ™οΈ Drop a WAV", type=['wav'], key="pydub_reverse")
131
+ if uploaded_audio:
132
+ sound = AudioSegment.from_file(uploaded_audio)
133
+ reversed_sound = sound.reverse()
134
+ file_path = f"pydub_rev_{datetime.now().strftime('%Y%m%d_%H%M%S')}.wav"
135
+ reversed_sound.export(file_path, format="wav")
136
+ save_to_history("Audio", file_path)
137
+ st.audio(file_path)
138
 
139
  # 3. ImageIO - πŸ–ΌοΈ Pixel playtime!
140
  with st.expander("3️⃣ πŸ“Ή ImageIO Bash"):
 
277
  save_to_history("Video", file_path)
278
  st.video(file_path, caption="🀝 Duo Dance")
279
 
280
+ # 6. JS Audio - 🎡 Browser beats!
281
+ with st.expander("6️⃣ 🎡 JS Audio Jam"):
282
+ st.write("πŸ”Š Web Wizard: Browser-based sound sorcery!")
283
+ st.subheader("πŸ”₯ Top Tricks")
284
+
285
+ # 🎀🌩️ Record audio with MediaRecorder
286
+ record_js = """
287
+ <div>
288
+ <button id="recordBtn" onclick="startRecording()">πŸŽ™οΈ Record</button>
289
+ <button id="stopBtn" onclick="stopRecording()" disabled>⏹️ Stop</button>
290
+ <audio id="audioPlayback" controls></audio>
291
+ </div>
292
+ <script>
293
+ let mediaRecorder;
294
+ let audioChunks = [];
295
+ navigator.mediaDevices.getUserMedia({ audio: true })
296
+ .then(stream => {
297
+ mediaRecorder = new MediaRecorder(stream);
298
+ mediaRecorder.ondataavailable = e => audioChunks.push(e.data);
299
+ mediaRecorder.onstop = () => {
300
+ const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
301
+ const audioUrl = URL.createObjectURL(audioBlob);
302
+ document.getElementById('audioPlayback').src = audioUrl;
303
+ audioChunks = [];
304
+ };
305
+ });
306
+ function startRecording() {
307
+ mediaRecorder.start();
308
+ document.getElementById('recordBtn').disabled = true;
309
+ document.getElementById('stopBtn').disabled = false;
310
+ }
311
+ function stopRecording() {
312
+ mediaRecorder.stop();
313
+ document.getElementById('recordBtn').disabled = false;
314
+ document.getElementById('stopBtn').disabled = true;
315
+ }
316
+ </script>
317
+ """
318
+ st.write("🎀🌩️ Mic Drop")
319
+ st.markdown(record_js, unsafe_allow_html=True)
320
+
321
+ # πŸ”ŠπŸ“‘ Play tone with Web Audio API
322
+ tone_js = """
323
+ <button onclick="playTone()">🎢 Beep!</button>
324
+ <script>
325
+ function playTone() {
326
+ const audioCtx = new (window.AudioContext || window.webkitAudioContext)();
327
+ const oscillator = audioCtx.createOscillator();
328
+ oscillator.type = 'sine';
329
+ oscillator.frequency.setValueAtTime(440, audioCtx.currentTime);
330
+ oscillator.connect(audioCtx.destination);
331
+ oscillator.start();
332
+ setTimeout(() => oscillator.stop(), 500);
333
+ }
334
+ </script>
335
+ """
336
+ st.write("πŸ”ŠπŸ“‘ Tone Snap")
337
+ st.markdown(tone_js, unsafe_allow_html=True)
338
+
339
  # πŸ“‚ Upload zone like a media drop party!
340
  st.header("πŸ“₯πŸŽ‰ Drop Zone")
341
  uploaded_files = st.file_uploader("πŸ“ΈπŸŽ΅πŸŽ₯ Toss Media", accept_multiple_files=True, type=['jpg', 'png', 'mp4', 'wav', 'mp3'])