Dmtlant commited on
Commit
c890329
1 Parent(s): fda39ae

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +38 -43
app.py CHANGED
@@ -1,52 +1,47 @@
1
  import streamlit as st
2
- import sounddevice as sd
3
- import numpy as np
4
  import wave
5
- import io
6
- from scipy.io.wavfile import write
7
-
8
- # Функция для записи аудио
9
- def record_audio(duration, samplerate=44100):
10
- st.write("🎙️ Идёт запись...")
11
- audio_data = sd.rec(int(duration * samplerate), samplerate=samplerate, channels=2, dtype='int16')
12
- sd.wait() # Ждём завершения записи
 
 
 
 
 
 
 
 
 
 
 
 
13
  st.write("✅ Запись завершена!")
14
- return audio_data
15
 
16
- # Функция для сохранения аудио в WAV файл
17
- def save_audio_to_wav(audio_data, samplerate=44100):
18
- # Создаём поток в памяти
19
- wav_io = io.BytesIO()
20
- write(wav_io, samplerate, audio_data) # Сохраняем в поток
21
- wav_io.seek(0) # Возвращаем курсор в начало
22
- return wav_io
23
 
24
- # Интерфейс Streamlit
25
- st.title("🎙️ Простой диктофон")
26
- st.write("Этот диктофон позволяет записывать аудио и сохранять его на вашем устройстве.")
 
 
 
27
 
28
- # Ползунок для выбора длины записи
29
- duration = st.slider("Длительность записи (секунды)", min_value=1, max_value=60, value=5)
30
 
31
- # Переменная для хранения записи
32
- if "audio_data" not in st.session_state:
33
- st.session_state.audio_data = None
34
 
35
- # Кнопка для начала записи
36
  if st.button("Начать запись"):
37
- audio_data = record_audio(duration)
38
- st.session_state.audio_data = audio_data # Сохраняем запись в сессии
39
-
40
- # Проверяем, есть ли записанные данные
41
- if st.session_state.audio_data is not None:
42
- # Преобразуем запись в WAV и отображаем аудиоплеер
43
- audio_wav = save_audio_to_wav(st.session_state.audio_data)
44
- st.audio(audio_wav, format="audio/wav")
45
-
46
- # Кнопка для сохранения файла
47
- st.download_button(
48
- label="Сохранить запись",
49
- data=audio_wav,
50
- file_name="recorded_audio.wav",
51
- mime="audio/wav"
52
- )
 
1
  import streamlit as st
2
+ import pyaudio
 
3
  import wave
4
+
5
+ # Параметры записи
6
+ FORMAT = pyaudio.paInt16
7
+ CHANNELS = 2
8
+ RATE = 44100
9
+ CHUNK = 1024
10
+
11
+ # Функция записи
12
+ def record_audio(duration, output_file="output.wav"):
13
+ audio = pyaudio.PyAudio()
14
+ stream = audio.open(format=FORMAT, channels=CHANNELS,
15
+ rate=RATE, input=True,
16
+ frames_per_buffer=CHUNK)
17
+ st.write("🎙️ Запись...")
18
+ frames = []
19
+
20
+ for _ in range(0, int(RATE / CHUNK * duration)):
21
+ data = stream.read(CHUNK)
22
+ frames.append(data)
23
+
24
  st.write("✅ Запись завершена!")
 
25
 
26
+ # Остановка записи
27
+ stream.stop_stream()
28
+ stream.close()
29
+ audio.terminate()
 
 
 
30
 
31
+ # Сохранение файла
32
+ with wave.open(output_file, 'wb') as wf:
33
+ wf.setnchannels(CHANNELS)
34
+ wf.setsampwidth(audio.get_sample_size(FORMAT))
35
+ wf.setframerate(RATE)
36
+ wf.writeframes(b''.join(frames))
37
 
38
+ return output_file
 
39
 
40
+ # Streamlit интерфейс
41
+ st.title("🎙️ Простой диктофон на PyAudio")
42
+ duration = st.slider("Длительность записи (секунды)", 1, 60, 5)
43
 
 
44
  if st.button("Начать запись"):
45
+ output_file = record_audio(duration)
46
+ st.audio(output_file, format="audio/wav")
47
+ st.success(f"Файл сохранён: {output_file}")