Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Comando Play De Sox Como Proceso. SOLUCIONADO
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Comando Play De Sox Como Proceso. SOLUCIONADO 
 
Hola a todos.
Estoy intentando usar el comando play del paquete sox, para que reproduzca sonidos en mi aplicación.
El caso es que creo un proceso donde hago que se ejecute play con EXEC y no consigo saber cuando termina el proceso de ejecutarse.
Es una aplicación que habla y el problema es que en momentos se interfieren peticiones para que diga algo, y eso hace que no reproduzca algunas peticiones. La única solución que he encontrado hasta ahora es meter un wait de cierto tiempo, pero no es muy útil al ser frases de diferentes tamaños y que no conozco de antemano.

 Me explico mejor con el código.


Public Reproducir As Process

Public Sub Hablar(texto As String)

  Try Kill "/tmp/a.wav"
  FMain.TxtAVoz.text = texto

  Exec ["pico2wave", "-l", "es-ES", "-w", "/tmp/a.wav", "\"" & texto & "\""] To texto
  Reproducir = Exec ["play", "/tmp/a.wav"]
  Reproducirlo()

End

Public Sub Reproducirlo()

  If Reproducir.Running Then 'Si está en ejecución, espero con el bucle
  
    Reproducirlo()
  
  Else
  
[color=#FF0000]"NUNCA ENTRA AQUÍ" [/color]

  Endif

 

 



 
última edición por celtilander el Miercoles, 22 Junio 2016, 00:10; editado 1 vez 
celtilander - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comando Play De Sox Como Proceso. 
 
Public Sub Reproducirlo()

  If Reproducir.Running Then 'Si está en ejecución, espero con el bucle
  
    Reproducirlo()
  
  Else

Aquí creo que deberías usar wait. Algo así:
Reproducir = Exec ["play", "/tmp/a.wav"]
while reproducir.Running
   wait 0.01
wend
 

Esto comprueba cada centésima de segundo el estado del proceso y deja abierto el bucle para la ejecución de eventos (tecla cancelar o lo que sea)

Espero que te sirva.

Saludos.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comando Play De Sox Como Proceso. 
 
shordi escribió: [Ver mensaje]
Public Sub Reproducirlo()

  If Reproducir.Running Then 'Si está en ejecución, espero con el bucle
  
    Reproducirlo()
  
  Else

Aquí creo que deberías usar wait. Algo así:
Reproducir = Exec ["play", "/tmp/a.wav"]
while reproducir.Running
   wait 0.01
wend
 

Esto comprueba cada centésima de segundo el estado del proceso y deja abierto el bucle para la ejecución de eventos (tecla cancelar o lo que sea)

Espero que te sirva.

Saludos.


Gracias shordi por tu ayuda. Pero eso es precisamente lo que no funciona. Se queda Running todo el rato y no acaba con el proceso. Ya probé ese código y se queda en un bucle sin fin ya que nunca sale del running  
Probé a usar Reproducir.Kill o Reproducir.Close, pero no valen de nada ya que no tengo control para saber cuando acaba la ejecución del play.. A veces ya se me da por pensar si es una especie de bug.
Saludos.

Por cierto, probé smplayer ejecutándolo desde consola con la opción "-close-at-end", que aunque sea un coñazo, ya que abre un gui, tampoco funciona como creo entender debería el "proceso".
Tambien probé con music de gb.sdl.sound según me dijo Julio, pero no se por qué motivo me genera mucho ruido.
 



 
última edición por celtilander el Martes, 21 Junio 2016, 19:25; editado 3 veces 
celtilander - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comando Play De Sox Como Proceso. 
 
...y si te gusta usar las funciones externas de Sox:     whistle

http://www.gambas-it.org/wiki/index..._del_API_di_Sox
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comando Play De Sox Como Proceso. 
 
Hola celtilander, mira si este ejemplo que hice te sirve para lo que queres hacer.

Saludos.

test-0.0.2.tar.gz
Descripción: Ejemplo para reproducir una pista mp3 con mplayer y dar aviso de comienzo y finalización de la reproducción. 
Descargar
Nombre del archivo: test-0.0.2.tar.gz
Tamaño: 11.95 KB
Descargado: 56 veces
test-0.0.2.tar.gz
Descripción: Ejemplo para reproducir una pista mp3 con mplayer y dar aviso de comienzo y finalización de la reproducción. 
Descargar
Nombre del archivo: test-0.0.2.tar.gz
Tamaño: 11.95 KB
Descargado: 56 veces
test-0.0.2.tar.gz
Descripción: Ejemplo para reproducir una pista mp3 con mplayer y dar aviso de comienzo y finalización de la reproducción. 
Descargar
Nombre del archivo: test-0.0.2.tar.gz
Tamaño: 11.95 KB
Descargado: 56 veces

 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comando Play De Sox Como Proceso. 
 
Muchas gracias a todos.
Al final he utilizado el ejemplo de tincho, me pareció más acorde a mis conocimientos.
El caso es que con las pruebas realizadas y una pequeña modificación, está funcionando.

Private wtcStat As Watch
Private strFilePath As String
Private estado As Boolean

Public Sub Hablar(texto As String)

  strFilePath = "/tmp/a.wav"
  estado = True
  Try Kill strFilePath
  FMain.TxtAVoz.text = texto

  Exec ["pico2wave", "-l", "es-ES", "-w", "/tmp/a.wav", "\"" & texto & "\""] To texto
  Exec ["play", strFilePath]

  If Exist(strFilePath) = True Then
    wtcStat = New Watch(strFilePath) As "FileState"
  Endif

  While estado = True
    Wait 1
  Wend

End

Public Sub FileState_Read()

  estado = True

End

Public Sub FileState_Close()

  estado = False

End


Como curiosidad decir que si ajusto en valor de WAIT a menos de 1, se montan las reproducciones...
Y si interesa a alguien dejo la salida que obtengo en una prueba satisfactoria...


/tmp/a.wav:

 File Size: 68.7k     Bit Rate: 256k
  Encoding: Signed PCM    
  Channels: 1 @ 16-bit  
Samplerate: 16000Hz      
Replaygain: off        
  Duration: 00:00:02.14  

In:100%  00:00:02.14 [00:00:00.00] Out:34.3k [      |      ] Hd:0.0 Clip:0    
Done.

/tmp/a.wav:

 File Size: 133k      Bit Rate: 256k
  Encoding: Signed PCM    
  Channels: 1 @ 16-bit  
Samplerate: 16000Hz      
Replaygain: off        
  Duration: 00:00:04.15  

In:100%  00:00:04.15 [00:00:00.00] Out:66.4k [      |      ] Hd:0.0 Clip:0    
Done.

/tmp/a.wav:

 File Size: 72.5k     Bit Rate: 256k
  Encoding: Signed PCM    
  Channels: 1 @ 16-bit  
Samplerate: 16000Hz      
Replaygain: off        
  Duration: 00:00:02.26  

In:100%  00:00:02.26 [00:00:00.00] Out:36.2k [      |      ] Hd:0.0 Clip:0    
Done.

/tmp/a.wav:

 File Size: 72.5k     Bit Rate: 256k
  Encoding: Signed PCM    
  Channels: 1 @ 16-bit  
Samplerate: 16000Hz      
Replaygain: off        
  Duration: 00:00:02.26  

In:100%  00:00:02.26 [00:00:00.00] Out:36.2k [      |      ] Hd:0.0 Clip:0    
Done.

/tmp/a.wav:

 File Size: 72.5k     Bit Rate: 256k
  Encoding: Signed PCM    
  Channels: 1 @ 16-bit  
Samplerate: 16000Hz      
Replaygain: off        
  Duration: 00:00:02.26  

In:100%  00:00:02.26 [00:00:00.00] Out:36.2k [      |      ] Hd:0.0 Clip:0    
Done.

/tmp/a.wav:

 File Size: 72.5k     Bit Rate: 256k
  Encoding: Signed PCM    
  Channels: 1 @ 16-bit  
Samplerate: 16000Hz      
Replaygain: off        
  Duration: 00:00:02.26  

In:100%  00:00:02.26 [00:00:00.00] Out:36.2k [      |      ] Hd:0.0 Clip:0    
Done.

/tmp/a.wav:

 File Size: 72.5k     Bit Rate: 256k
  Encoding: Signed PCM    
  Channels: 1 @ 16-bit  
Samplerate: 16000Hz      
Replaygain: off        
  Duration: 00:00:02.26  

In:100%  00:00:02.26 [00:00:00.00] Out:36.2k [      |      ] Hd:0.0 Clip:0    
Done.

/tmp/a.wav:

 File Size: 72.5k     Bit Rate: 256k
  Encoding: Signed PCM    
  Channels: 1 @ 16-bit  
Samplerate: 16000Hz      
Replaygain: off        
  Duration: 00:00:02.26

 



 
celtilander - 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 Responder A La Peticion De Un Comando... obedlink General 8 Sabado, 23 Marzo 2013, 04:35 Ver último mensaje
sebikul
No hay nuevos mensajes Comando PV: Mostrar Información De Como V... jsbsan Shell Scripting 1 Sabado, 06 Julio 2013, 16:44 Ver último mensaje
shordi
No hay nuevos mensajes Línea De Comando En La Ventana De Consola... Shell General 4 Miercoles, 02 Abril 2014, 10:35 Ver último mensaje
Shell
No hay nuevos mensajes Terminal, Como Enviarle Un Comando tincho Controles/Librerías/Componentes 6 Viernes, 14 Julio 2017, 09:56 Ver último mensaje
vuott
 

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