Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Herramienta: Analisis De Voz
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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.


Link



Por si alguien le interesa el tema y quire aportar sus conocimientos (yo en el tema de sonido estoy pez)...aqui os dejo la descarga del código fuente

https://drive.google.com/drive/fold...bms?usp=sharing

Nota:
Necesitais tener instalado los siguientes programas:
sox
gnuplot
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Herramienta: Analisis De Voz 
 
sin duda que es muy interesante,

se me ocurre que reconozca el patrón de  la palabra apágate, guau que como seria eso, y al confirmar eso que lance el comando de apagado del pc.

saludos
 




===================
Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
 
v3ctor - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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/

Saludos.
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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:
 error_1474842998_601018


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.

Ejemplo:

Shell "sox '/ruta/del/archivo.flac' '/ruta/del/archivo.dat'"

Shell "sox '/ruta/del/archivo.flac' -n spectrogram -o '/ruta/del/archivo.png'"

 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Herramienta: Analisis De Voz 
 
jsbsan escribió: [Ver mensaje]
Parece que no se ha creado la imagen... ¿tienes instalado sox y gnuplot?

Me hace falta gnuplot.    


jsbsan escribió: [Ver mensaje]
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!):

Library "libgstreamer-1.0"

Private Enum GST_STATE_VOID_PENDING = 0, GST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING
 
' gst_init (int *argc, char **argv[])
' Initializes the GStreamer library, setting up internal path lists, registering built-in elements, and loading standard plugins.
Private Extern gst_init(argc As Pointer, argv As Pointer)

' GstElement * gst_parse_launch (const gchar *pipeline_description, GError **error)
' Create a new pipeline based on command line syntax.
Private Extern gst_parse_launch(description As String, GError As Pointer) As Pointer

' GstStateChangeReturn gst_element_set_state(GstElement *element, GstState state)
' Sets the state of the element.
Private Extern gst_element_set_state(gstelement As Pointer, state As Integer) As Integer
 
' void gst_object_unref(gpointer object)
' Decrements the reference count on object.
Private Extern gst_object_unref(gobject As Pointer)


Private Procedure Crea_Onda_Flac(archivo_Flac As String)   ' archivo_Flac = "/ruta/del/archivo.flac"
 
 Dim audio As Pointer
 Dim duracion As String
 
  duracion = Duracion_Flac(archivo_Flac)

  gst_init(0, 0)
  
  audio = gst_parse_launch("uridecodebin uri=file://" & archivo_Flac & " ! audioconvert ! wavescope ! " &
                           "video/x-raw, width=2000, framerate=1/" & duracion &
                           " ! jpegenc quality=20 ! filesink location=/tmp/waveform.jpg", 0)
          
  gst_element_set_state(audio, GST_STATE_PLAYING)
  
  Sleep 1
  
  gst_object_unref(audio)
        
End


Private Function Duracion_Flac(fileFlac As String) As String   ' Para obtener la duración del archivo .flac

  Dim fl As File
  Dim i, sposta As Integer
  Dim b, c, canali, bit As Byte
  Dim l, frame_totali, frequenza As Long

    Print "File 'Flac':   "; fileFlac
  
    fl = Open fileFlac For Read
    
' 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
    Loop Until 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
    Loop Until b = 0
    frame_totali = l And CLong(&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))
    
    fl.Close
    
    Return CStr(frame_totali \ frequenza)

End

 



 
última edición por vuott el Martes, 27 Septiembre 2016, 09:13; editado 4 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Herramienta: Analisis De Voz 
 
Vuott:

Citar:
(he sudado sangre para este codigo!):

Gracias, por tu trabajo y aporte  
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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)

Library "libc:6"

' void exit (int __status)
' Terminate program execution with STATUS.
Private Extern exit_C(i As Integer) As Integer Exec "exit"


Private Procedure Crea_Onda_Flac(archivo_Flac As String) ' archivo_Flac = "/ruta/del/archivo.flac"

Dim duracion As String
Dim pl As MediaPipeline
Dim src, fpa, fde, cnv, scp, vid, jpg, snk As MediaControl

duracion = Duracion_Flac(archivo_Flac)

  pl = New MediaPipeline
  
  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)
  
   pl.State = Media.Playing
   pl.Play()
   Sleep 5
  
   exit_C(0)

End


Private Function Duracion_Flac(fileFlac As String) As String ' Para obtener la duración del archivo .flac

Dim fl As File
Dim i, sposta As Integer
Dim b, c, canali, bit As Byte
Dim l, frame_totali, frequenza As Long

Print "File 'Flac': "; fileFlac

fl = Open fileFlac For Read

' 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
Loop Until 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
Loop Until b = 0
frame_totali = l And CLong(&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))

fl.Close

Return CStr(frame_totali \ frequenza)

End

 



 
última edición por vuott el Jueves, 29 Septiembre 2016, 22:04; editado 3 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Como Crear Una Barra De Herramienta Ricardo Prieto Controles/Librerías/Componentes 7 Lunes, 14 Diciembre 2015, 17:34 Ver último mensaje
Ricardo Prieto
No hay nuevos mensajes Reconocimiento De Imagenes Analisis Pixeles codificador General 10 Domingo, 27 Marzo 2016, 01:32 Ver último mensaje
codificador
No hay nuevos mensajes Kompare: Analisis De Un Archivo Patch (par... jsbsan Videotutoriales 6 Lunes, 15 May 2017, 10:47 Ver último mensaje
tincho
No hay nuevos mensajes Herramienta ncdu para consola jguardon Mundo Linux 4 Lunes, 15 Enero 2018, 15:54 Ver último mensaje
jguardon
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
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



  

 

cron