-
Notifications
You must be signed in to change notification settings - Fork 0
/
grabadora.py
97 lines (83 loc) · 2.85 KB
/
grabadora.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# Basado en el script de "ProjectGurukul's Voice recorder"
# Librerías necesarias para ejecutar este código
import sounddevice as sd
from tkinter import *
import queue
import soundfile as sf
import threading
from tkinter import messagebox
import os
def next_path(path_pattern):
"""
Encuentra el siguiente archivo que se debe escribir siguiendo un patrón
ejemplo del patrón: path_pattern = 'file-%s.txt':
file-1.txt
file-2.txt
file-3.txt
"""
i = 1
# Hace una búsqueda exponencial
while os.path.exists(path_pattern % i):
i = i * 2
# El resultado está entre (i/2..i]
# llamada a este intervalo (a..b] y lo va estrechando hasta que a + 1 = b
a, b = (i // 2, i)
while a + 1 < b:
c = (a + b) // 2 # mitad del intervalo
a, b = (c, b) if os.path.exists(path_pattern % c) else (a, c)
return path_pattern % b
#Define la interfaz del usuario
voice_rec = Tk()
voice_rec.geometry("150x90")
voice_rec.title("Grabadora Javier Salas")
voice_rec.config(bg="#107dc2")
#contenedor del audio data
q = queue.Queue()
#Declara las variables y las inicializa
recording = False
file_exists = False
#ajusta datos en el contenedor
def callback(indata, frames, time, status):
q.put(indata.copy())
#Funciones para grabar y detener la grabación
def threading_rec(x):
if x == 1:
t1=threading.Thread(target= record_audio)
t1.start()
elif x == 2:
#para detener, se establece la bandera en falso
global recording
recording = False
#Función de grabación
def record_audio():
#Variables globales
global recording
#Establece en True para grabar
recording= True
global file_exists
#Crea el archivo para guardar el audio
d = next_path('notaJSG-%s.wav')
print(d)
notavozfile = d
with sf.SoundFile(notavozfile, mode='w', samplerate=44100,
channels=2) as file:
#Create an input stream to record audio without a preset time
with sd.InputStream(samplerate=44100, channels=2, callback=callback):
while recording == True:
#Set the variable to True to allow playing the audio later
file_exists =True
#write into file
file.write(q.get())
#Label to display app title
title_lbl = Label(voice_rec, text="Notas voz Javier Salas", bg="#107dc2").grid(row=0, column=0, columnspan=3)
#Button to record audio
record_btn = Button(voice_rec, text="Grabar", command=lambda m=1:threading_rec(m))
#Stop button
stop_btn = Button(voice_rec, text="Detener", command=lambda m=2:threading_rec(m))
#Play button
# play_btn = Button(voice_rec, text="Play Recording", command=lambda m=3:threading_rec(m))
#Position buttons
record_btn.grid(row=1,column=1)
stop_btn.grid(row=1,column=0)
# play_btn.grid(row=1,column=2)
voice_rec.mainloop()