Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
Herramienta: Analisis De Voz
Bueno, pues el otro dia os hablé del programita de "Control de voz".... este tiene una grave limitación:
Para reconocer la voz, usa el API de Google, la cual esta limitado (en la version free) por 50 palabras al dia... osea... mi gozo en un pozo... porque no se puede usar para hacer algo útil.
Me he puesto (con la ayuda de Vuott) a hacer algún programa que me ayude a analizar sonidos y asi poder crear patrones para identificar palabras... (o por lo menos esa es la idea)
Asi esta el desarrollo de la 1º versión. Usa un script que encontré para dibujar las ondas, es muy simple... pero por algún sitio hay que empezar.
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
Re: Herramienta: Analisis De Voz
Hola Julio, este tipo de iniciativas es muy interesante, estuve buscando por ahí si no había alguna herramienta que hiciera reconocimiento de voz que sea libre o de código abierto y que se pueda instalar en el pc, y parece que existe la herramienta Sphinx, que es desarrollado en la universidad Carneguie Mellon. http://cmusphinx.sourceforge.net/
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
Re: Herramienta: Analisis De Voz
Hooola jsbsan !
Probé tu applicación y.....
Error:
me da error a la linea que puedes ver en la imagen:
Preguntas:
porque utilizas gnuplot para obtener un archivo imagen del espectogramma del sonido ?
porque utilizas un script para obtener un archivo .dat por Sox ?
Puedes usar simplemente con Shell, usando solo Sox, y el archivo script y el archivo .png del espectogramma del archivo .flac.
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
Re: Herramienta: Analisis De Voz
Vuott:
Citar:
Error: me da error a la linea que puedes ver en la imagen:
Parece que no se ha creado la imagen... ¿tienes instalado sox y gnuplot?
Citar:
porque utilizas gnuplot para obtener un archivo imagen del espectogramma del sonido ?
No estoy obteniendo el espectograma, solo una onda (que es menos información y creo que es lo que me puede servir)
Citar:
Puedes usar simplemente con Shell, usando solo Sox, y el archivo script y el archivo .png del espectogramma del archivo .flac.
Como el script lo tenia ya hecho (lo encontre en otro foro), lo he usado.
Además me gusta más usar script, ya que modifico el archivo de texto del script y no tengo que modificar el programa, por si hago algún pequeño cambio.
No estoy obteniendo el espectograma, solo una onda ...
Podrías utilizar las S.F.E (Sanctissimae Functiones Externae) de la libreria de GStreamer y un pellizco de funciones gamberas (para conocer la duración del archivo audio .flac).
Esta parte podría ser... (he sudado sangre para este codigo!):
' gst_init (int *argc, char **argv[]) ' Initializes the GStreamer library, setting up internal path lists, registering built-in elements, and loading standard plugins. PrivateExtern gst_init(argc AsPointer, argv AsPointer)
' GstElement * gst_parse_launch (const gchar *pipeline_description, GError **error) ' Create a new pipeline based on command line syntax. PrivateExtern gst_parse_launch(description AsString, GError AsPointer)AsPointer
' GstStateChangeReturn gst_element_set_state(GstElement *element, GstState state) ' Sets the state of the element. PrivateExtern gst_element_set_state(gstelement AsPointer, state AsInteger)AsInteger
' void gst_object_unref(gpointer object) ' Decrements the reference count on object. PrivateExtern gst_object_unref(gobject AsPointer)
' Calcula la frecuencia de muestra:
b = SizeOf(gb.Integer) Seek #fl, 18 Do Read #fl, c
i =(i *CInt(2 ^ 8))Or c Dec b LoopUntil b = 0
frequenza =Shr(i, 12) Print"Frecuencia: "; frequenza; " Hertz"
' Calcula los canales:
sposta =Shr(i, 9)
canali =CByte(sposta And 7)+ 1 Print"Canales: "; canali
' Calcula la resolución de bit:
sposta =Shr(i, 4)
bit =CByte(sposta And 31)+ 1 Print"Resolución: "; bit; "-bit"
' Calcula los frame totales:
b = SizeOf(gb.Long) Seek #fl, 18 Do Read #fl, c
l =(l *CInt(2 ^ 8))Or c Dec b LoopUntil b = 0
frame_totali = l AndCLong(&FFFFFFFFF) Print"Frame totales: "; frame_totali
' Calcula la duración del audio: Print"Duración: "; CStr(Date(0, 0, 0, 0, 0, 0, (frame_totali / frequenza)* 1000))
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
Re: Herramienta: Analisis De Voz
jsbsan decidió hacerme estudiar - lacrimis et sanguine - como un colegial el Componente gb.media !
Voy a proponerle este código - solo gambas - para obtener la imagen de la forma de la onda de un file audio de formato FLAC:
(hace falta activar el Componente gb.media)
src =New MediaControl(pl, "filesrc")
src["location"]= archivo_Flac ' "location" es una propiedad del plugin "filesrc"
fpa =New MediaControl(pl, "flacparse")
fde =New MediaControl(pl, "flacdec")
cnv =New MediaControl(pl, "audioconvert")
scp =New MediaControl(pl, "wavescope")
scp["style"]=1' "style" es una propiedad del plugin "wavescope", que aqui ponemos a 1
vid =New MediaControl(pl, "video/x-raw,width=2000,heigth=600,framerate=1/"& duracion &")"
jpg =New MediaFilter(pl, "jpegenc")
jpg["quality"]=50' "quality" es la propiedad del plugin "jpegenc", que aqui ponemos por ejemplo a 50
snk =New MediaControl(pl, "filesink")
snk["location"]="/ruta/del/archivo.jpg"' <---- ruta del archivo imagen jpg final de la forma de onda !
' Juntamos en la pipeline los objetos MediaControl:
src.LinkTo(fpa)
fpa.LinkTo(fde)
fde.LinkTo(cnv)
cnv.LinkTo(scp)
scp.LinkTo(vid)
vid.LinkTo(jpg)
jpg.LinkTo(snk)
' Calcula la frecuencia de muestra:
b = SizeOf(gb.Integer) Seek #fl, 18 Do Read #fl, c
i =(i *CInt(2 ^ 8))Or c Dec b LoopUntil b = 0
frequenza =Shr(i, 12) Print"Frecuencia: "; frequenza; " Hertz"
' Calcula los canales:
sposta =Shr(i, 9)
canali =CByte(sposta And 7)+ 1 Print"Canales: "; canali
' Calcula la resolución de bit:
sposta =Shr(i, 4)
bit =CByte(sposta And 31)+ 1 Print"Resolución: "; bit; "-bit"
' Calcula los frame totales:
b = SizeOf(gb.Long) Seek #fl, 18 Do Read #fl, c
l =(l *CInt(2 ^ 8))Or c Dec b LoopUntil b = 0
frame_totali = l AndCLong(&FFFFFFFFF) Print"Frame totales: "; frame_totali
' Calcula la duración del audio: Print"Duración: "; CStr(Date(0, 0, 0, 0, 0, 0, (frame_totali / frequenza)* 1000))
Fecha y hora actual: Sabado, 27 Abril 2024, 14:54 • Todas las horas son UTC + 1 Hora
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
Lista de permisos
Lista de permisos
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario