Skip to content

Instantly share code, notes, and snippets.

Created November 20, 2012 13:30
Show Gist options
  • Save anonymous/4117943 to your computer and use it in GitHub Desktop.
Save anonymous/4117943 to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
#!/usr/bin/python
#Redes neuronales
#7mo Semestre de ITS UANL
#Cecy Urbina, Ramon Gzz, Roberto Mtz
#Interfaz grafica para la entrada de audio, donde el usuario leera un texto
#mientras se graba en un archivo de audio.
from Tkinter import *
import random
import pyaudio
import wave
import sys
import time
import audio
import numpy as np
from scipy.io import wavfile
class Grabadora:
'''Clase que graba el audio de la lectura del texto,
con tres funciones, iniciar, terminar y grabar
'''
def __init__(self):
self.chunk = 1024
self.format = pyaudio.paInt16
self.channels = 1
self.rate = 44100
self.record_seconds = 5
self.p = pyaudio.PyAudio()
self.audio = []
self.stream = self.p.open(format = self.format,
channels = self.channels,
rate = self.rate,
input = True,
frames_per_buffer = self.chunk)
def iniciar(self):
'''Se prepara el archivo para comenzar a grabar y
se graba los segundos indicados
'''
print "* Empezando a grabar . . ."
self.all = []
for i in range(0, self.rate / self.chunk * self.record_seconds):
data = self.stream.read(self.chunk)
self.all.append(data)
def terminar(self, nombre):
'''Se prepara el archivo final y se guarda
en el formato wav con el nombre de temporal
'''
print u'* Terminando'
self.stream.close()
self.p.terminate()
# escribo los datos en el wav
data = ''.join(self.all)
WAVE_OUTPUT_FILENAME = ""+nombre+".wav"
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(self.channels)
wf.setsampwidth(self.p.get_sample_size(self.format))
wf.setframerate(self.rate)
wf.writeframes(data)
wf.close()
def grabar(self, nombre):
'''llama a las funciones para iniciar y
terminar la grabacion
'''
self.iniciar()
self.terminar(nombre)
class Interfaz:
'''Interfaz grafica que muestra el texto que se va a leer
con el boton para comenzar a grabar y para cancelar
'''
def __init__(self, master):
self.master = master
self.frame = Frame(self.master)
self.frame.pack()
self.name = ""
#texto que aparecera para leer
self.texto = Text(self.frame)
self.texto.insert(INSERT, self.leerArchivo())
self.texto.configure(state='disabled', padx=15, pady=15, height=10)
self.texto.grid(row=0, column=0, columnspan=2, sticky=W+E+N+S, padx=15, pady=15)
#para introducir el nombre del usuario
self.e = Entry(self.frame)
self.e.grid(row=1, column=0, columnspan=2, sticky=W+E+N+S,padx=300, pady=15)
#boton que comenzara la grabacion
self.hi_there = Button(self.frame, text="COMENZAR", fg="blue", command=self.grabar)
self.hi_there.grid(row=2,padx=15, pady=15)
#boton para terminar la grabacion
self.button = Button(self.frame, text="CANCELAR", fg="red", command=self.frame.quit)
#self.button = Button(self.frame, text="CANCELAR", fg="red", command=self.error)
self.button.grid(row=2,column=1, padx=15, pady=15)
def grabar(self):
'''graba el archivo wav de audio
'''
time.sleep(1)
grabadora = Grabadora()
self.name = self.e.get()
print self.name
grabadora.grabar(self.name)
datos = self.obtener_datos()
###escribe los datos en un archivo dependiendo del usuario
f = open("datos_entradas", "w")
for i in range(len(datos)):
f.write("%f, " % datos[i])
if self.name == 'cecy':
f.write("0, 0")
elif self.name == "roberto":
f.write("0, 1")
elif self.name == "ramon":
f.write("1, 0")
else:
f.write("1, 1")
f.close()
time.sleep(2)
self.exito()
def error(self):
'''Muestra pantalla de error
'''
x = self.frame.winfo_width()
y = self.frame.winfo_height()
self.frame.destroy()
self.frame = Frame(self.master, width=x, height=y)
self.canvas = Canvas(self.frame, width=x, height=y, bg="white")
self.canvas.create_text(390, 55, text="No identificado", fill="black", font=("Helvectica","15"))
self.canvas.create_text(300, 25, text="Intentalo otra vez!", fill="black", font=("Helvectica","40"))
self.canvas.create_text(125, 200, text=":-(", fill="grey", font=("Helvectica", "200"))
self.frame.pack()
self.canvas.pack(fill=BOTH)
def exito(self):
'''Muestra pantalla de exito
'''
x = self.frame.winfo_width()
y = self.frame.winfo_height()
self.frame.destroy()
self.frame = Frame(self.master, width=x, height=y)
self.canvas = Canvas(self.frame, width=x, height=y, bg="white")
self.canvas.create_text(390, 55,text="Identificado exitosamente", fill="black", font=("Helvectica","15"))
self.canvas.create_text(400, 25,text="Bienvenido!", fill="black", font=("Helvectica","40"))
self.canvas.create_text(125, 200, text=":-)", fill="grey", font=("Helvectica", "200"))
self.frame.pack()
self.canvas.pack(fill=BOTH)
#time.sleep(2)
#self.error()
def leerArchivo(self):
'''lee una archivo de los disponibles
'''
eleccion = random.randint(1, 7)
archivo_elegido = "lecturas/"+str(eleccion)+".txt"
print archivo_elegido
f = open(archivo_elegido, "r")
completo = f.read()
return completo
def obtener_datos(self):
'''manda llamar las funciones del archivo
audio.py, que analiza
'''
a=wavfile.read(""+self.name+".wav")
m = np.fft.fft(a[1])
t = np.arange(110081)
amplitud = audio.ampl_tiempo(a)
frecuencia = audio.frec(amplitud)
audio.spect(amplitud)
datos = audio.mel(frecuencia, amplitud)
return datos
def main():
root = Tk()
App = Interfaz(root)
root.title("Lectura de texto para entrenamiento de la red neuronal")
root.mainloop()
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment