Dmtlant commited on
Commit
4eea44f
·
verified ·
1 Parent(s): f8251a8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +64 -29
app.py CHANGED
@@ -1,30 +1,65 @@
1
  import streamlit as st
2
- from pydub import AudioSegment
3
- from pydub.utils import make_chunks
4
- import os
5
-
6
- st.title("Простое приложение диктофон")
7
-
8
- # Функции для записи и воспроизведения аудио
9
- def record_audio():
10
- # Используем ffmpeg для записи аудио
11
- filename = "recorded_audio.wav"
12
- os.system(f"ffmpeg -f alsa -i default -t 10 -y {filename}")
13
- return filename
14
-
15
- def play_audio(filename):
16
- audio = AudioSegment.from_wav(filename)
17
- st.audio(audio.raw_data, sample_rate=audio.frame_rate)
18
-
19
- # Кнопки для записи и воспроизведения
20
- if st.button("Записать аудио"):
21
- filename = record_audio()
22
- st.success("Аудио записано!")
23
- with open(filename, "rb") as f:
24
- st.download_button("Скачать аудио", f, file_name=filename)
25
-
26
- if st.button("Воспроизвести аудио"):
27
- if os.path.exists("recorded_audio.wav"):
28
- play_audio("recorded_audio.wav")
29
- else:
30
- st.warning("Сначала нужно записать аудио!")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
+ import numpy as np
3
+ import soundfile as sf
4
+ import tempfile
5
+
6
+ # Функция для сохранения аудио
7
+ def save_audio_file(audio_bytes):
8
+ with tempfile.NamedTemporaryFile(delete=False, suffix='.wav') as tmp_file:
9
+ tmp_file.write(audio_bytes)
10
+ return tmp_file.name
11
+
12
+ # HTML и JavaScript для записи аудио
13
+ html_code = """
14
+ <script>
15
+ let mediaRecorder;
16
+ let audioChunks = [];
17
+
18
+ function startRecording() {
19
+ navigator.mediaDevices.getUserMedia({ audio: true }).then(stream => {
20
+ mediaRecorder = new MediaRecorder(stream);
21
+ mediaRecorder.start();
22
+
23
+ mediaRecorder.ondataavailable = event => {
24
+ audioChunks.push(event.data);
25
+ };
26
+
27
+ mediaRecorder.onstop = () => {
28
+ const audioBlob = new Blob(audioChunks);
29
+ const reader = new FileReader();
30
+ reader.onloadend = function() {
31
+ const audioData = reader.result.split(',')[1]; // base64
32
+ const audioBytes = new Uint8Array(atob(audioData).split('').map(c => c.charCodeAt(0)));
33
+ const xhr = new XMLHttpRequest();
34
+ xhr.open("POST", "/upload", true);
35
+ xhr.setRequestHeader("Content-Type", "application/octet-stream");
36
+ xhr.send(audioBlob);
37
+ audioChunks = [];
38
+ };
39
+ reader.readAsDataURL(audioBlob);
40
+ };
41
+ });
42
+ }
43
+
44
+ function stopRecording() {
45
+ mediaRecorder.stop();
46
+ }
47
+ </script>
48
+
49
+ <button onclick="startRecording()">Start Recording</button>
50
+ <button onclick="stopRecording()">Stop Recording</button>
51
+ """
52
+
53
+ # Streamlit интерфейс
54
+ st.title("Audio Recorder")
55
+
56
+ # Встроенный HTML для записи
57
+ st.markdown(html_code, unsafe_allow_html=True)
58
+
59
+ # Обработка загрузки аудио
60
+ if st.button("Upload Audio"):
61
+ audio_data = st.file_uploader("Upload your audio file", type=["wav", "mp3"])
62
+ if audio_data is not None:
63
+ # Сохранение аудио файла
64
+ audio_file_path = save_audio_file(audio_data.read())
65
+ st.success(f"Audio saved at {audio_file_path}")