Usando "SAPI.SpVoice" para falar e como interromper?

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Usando "SAPI.SpVoice" para falar e como interromper?

Mensagem por clodoaldomonteiro »

A função abaixo fala uma frase passada a ela até acabar ou com um tempo estipulado.
Pergunto, como fazer para parar de falar quando o operador pressionar qualquer tecla?

Código: Selecionar todos

Function FalaTexto( cTexto, nTipo )
   Local oVoice, oVoices, i, cDesc

   oVoice := TOleAuto():New("SAPI.SpVoice")

   oVoices := oVoice:GetVoices()
   For i := 0 To oVoices:Count - 1
      cDesc := oVoices:Item(i):GetDescription()
      IF "Daniel" $ Upper(cDesc) .OR. "Maria" $ Upper(cDesc) .OR. "PORTUGUES" $ Upper(cDesc)
         oVoice:Voice := oVoices:Item(i)
         Exit
      Endif
   Next

   oVoice:Rate := 3
   oVoice:Volume := 100

   If !Empty(oVoice)
      If nTipo <> Nil
         oVoice:Speak(cTexto, nTipo)
         oVoice:WaitUntilDone(8000)   // Espera até 8 segundos para terminar
      Else
         oVoice:Speak(cTexto)
      Endif
   Else
      //? "Erro ao inicializar a SAPI"
   Endif
   
   oVoice := NIL

Return Nil
Desde já agradeço a atenção.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usando "SAPI.SpVoice" para falar e como interromper?

Mensagem por JoséQuintas »

Pensei em perguntar pro copilot, a IA do Windows, mas você deve ter ela por aí.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Usando "SAPI.SpVoice" para falar e como interromper?

Mensagem por clodoaldomonteiro »

Pesquisei com o GPT e nada.

Seria algo para interromper a fala ao teclar ESC ou outra tecla, neste item de acessibilidade que estou colocando no meu sistema de Contabilidade.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usando "SAPI.SpVoice" para falar e como interromper?

Mensagem por JoséQuintas »

Sim, tenho isso como opcional no aplicativo, e sei que o troço pode começar a falar sem parar.
Na prática, tem até limite disso.
Cheguei a colocar como multithread, pra aumentar o limite, mas chega uma hora que até erro acontece.
Nunca coloquei em prática.
Também seria uma bagunça, conforme o ambiente de trabalho.

Talvez criar uma rotina intermediária.
Nessa rotina, falar uma parte de cada vez, e ir acumulando em array o que falta.
No caso do ESC, limpar o array causaria não falar mais nada.

Mas quebrar texto em lugar errado poderia causar interpretação errada.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder