Created
November 20, 2012 13:30
-
-
Save anonymous/4117943 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- 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