Dmtlant commited on
Commit
97148d9
·
verified ·
1 Parent(s): 3eee80b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +42 -64
app.py CHANGED
@@ -1,65 +1,43 @@
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}")
 
1
  import streamlit as st
2
+ import sounddevice as sd
3
+ from scipy.io.wavfile import write
4
+ import time
5
+
6
+ # Настройки диктофона
7
+ SAMPLE_RATE = 44100 # Частота дискретизации
8
+ CHANNELS = 2 # Количество каналов (стерео)
9
+
10
+ # Функция для записи аудио
11
+ def record_audio(filename):
12
+ # Запись аудио
13
+ recording = sd.rec(frames=None, samplerate=SAMPLE_RATE, channels=CHANNELS)
14
+ st.write("Идет запись...")
15
+
16
+ # Ожидание окончания записи
17
+ while True:
18
+ time.sleep(0.1)
19
+ if st.button("Остановить запись", key=f"stop_{filename}"):
20
+ break
21
+
22
+ sd.stop() # Остановка записи
23
+ st.write("Запись завершена.")
24
+
25
+ # Сохранение записи в файл
26
+ write(filename, SAMPLE_RATE, recording)
27
+ st.write(f"Файл '{filename}' сохранен.")
28
+
29
+ # Пользовательский интерфейс Streamlit
30
+ st.title("Диктофон")
31
+
32
+ if st.button("Начать запись"):
33
+ # Генерация уникального имени файла
34
+ filename = f"recording_{int(time.time())}.wav"
35
+ record_audio(filename)
36
+
37
+ # Воспроизведение записи
38
+ st.audio(filename)
39
+
40
+ # Отображение списка сохраненных записей
41
+ st.subheader("Сохраненные записи:")
42
+ for filename in st.session_state.get("recordings", []):
43
+ st.audio(filename)