Acessibilidade [1] - Visão - Conhecer O Teclado Topic is solved

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

VadoJMS
Posts: 28
Joined: 20 Oct 2017, 17:36

Acessibilidade [1] - Visão - Conhecer O Teclado

24 Apr 2018, 13:00

Boa tarde.

Alguém conhece algum programa que pronuncia o nome das teclas quando pressionadas?
Por exemplo: teclo a tecla “a” e ela é dita pelo programa.
Preciso de um software que inclua todas as teclas do teclado, não somente as letras do alfabeto.
E principalmente que seja possível configurar para que eu possa adicionar outras teclas, renomear e alterar com vozes de outros idiomas.

Ou seria possível fazer isso através do AutoHotKey?
Associar comandos a áudios de sintetizadores pronunciando as teclas, já gravados, em pastas do meu PC[?]...
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Acessibilidade [1] - Visão - Conhecer O Teclado

24 Apr 2018, 16:03

Boa tarde VadoJMS.

As versões recentes do Windows em Português têm suporte nativo para Text-To-Speech (Texto-Para-Fala ou TTS). Uma das formas de criar uma conexão é através de um objeto COM, tecnologia suportada pelo AutoHotkey.

Code: Select all

Texto_Para_Voz := ComObjCreate("SAPI.SpVoice")
Texto_Para_Voz.volume := 100
Texto_Para_Voz.Speak("Olá, sou a assistente de voz da microsoft.")
Texto_Para_Voz.Speak("Se você estiver usando uma versão do Windows em português, deve compreender esta mensagem falada.")
VadoJMS
Posts: 28
Joined: 20 Oct 2017, 17:36

Re: Acessibilidade [1] - Visão - Conhecer O Teclado

24 Apr 2018, 16:54

Boa noite, Gio.

Preciso que as teclas sejam ditas, não o texto que está escrito na tela.
Pressiono “b” o programa diz: “b”. Pressiono “Shift” o programa diz: “Shift” e assim por diante.
Acredito que você compreendeu esse ponto, só estou explicitando para não ter engano.

Veja se eu entendi:
Esse código que você enviou “se comunica” com o programa de voz padrão do Windows, sendo assim, o que é escrito dentro dos parenteses com aspas será dito?
Se for mesmo isso, como eu faço para associar as teclas ao que será dito pelo programa de voz padrão do Windows?

Tecla “Page Up” pressionada. Programa diz: “Page Up”.
Como eu faço isso no script?


ADENDO

Quero deixar claro que se eu não estiver entendido tudo errado e for mesmo conforme o que disse acima já é uma ótima forma de suprir essa necessidade.
No entanto, gostaria de saber se existem mais opções de vozes no Windows. Podendo variar entre masculino e feminino, além dos tons.
Pois se não for possível, ficará enfadonho conviver eternamente com aquela mesma voz sempre que pressionar as teclas.
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Acessibilidade [1] - Visão - Conhecer O Teclado

24 Apr 2018, 18:38

VadoJMS wrote:Esse código que você enviou “se comunica” com o programa de voz padrão do Windows, sendo assim, o que é escrito dentro dos parenteses com aspas será dito?
Se for mesmo isso, como eu faço para associar as teclas ao que será dito pelo programa de voz padrão do Windows?
Você pode usar hotkeys para fazer isso. Basta criar uma lista de hotkeys que seja completa (com todas as teclas do seu teclado), e colocar um comando de voz em cada uma correspondente à pronúncia daquela tecla.

O código abaixo mostra como fazer isso para as teclas a, b, Page Up e Shift. Você pode verificar como foram feitas essas quatro e acresentar no código as outras hotkeys conforme seja necessário. A lista completa de nomes de hotkeys pode ser consultada neste link.

Code: Select all

Texto_Para_Voz := ComObjCreate("SAPI.SpVoice")
Texto_Para_Voz.volume := 100
Return

~a::
Texto_Para_Voz.Speak("a")
Return

~b::
Texto_Para_Voz.Speak("b")
Return

~pgup::
Texto_Para_Voz.Speak("Pg á pi")
Return

~Shift::
Texto_Para_Voz.Speak("Shift")
Return
:arrow: Veja que no código acima eu coloquei a assistente de voz para dizer "pg á pi" na hotkey correspondente. Fiz isso porque o objetivo é aproximar a pronúncia e não a escrita. Também é digno de menção que usei o modificador de hotkeys ~ nas hotkeys. Ele serve para que quando a hotkey seja chamada, o sinal de tecla não seja bloqueado (ou seja, seja enviado normalmente à tela ativa).
gostaria de saber se existem mais opções de vozes no Windows. Podendo variar entre masculino e feminino, além dos tons.
Existem sim, mas isso varia muito dependendo da versão do Windows. Na minha (Windows 8.1 Single Language), só há três opções, sendo que uma é para falar em espanhol, a outra em português e a outra em inglês, e todas as vozes são femininas. Algumas versões têm também voz masculina ou então opções diferentes. Você pode ver as opções disponíveis e mudar a voz entre elas mudando diretamente as configurações padrões de texto para fala do Windows. Você também pode escolher entre as opções diretamente no código do script. Para fazer isso é só acrescentar a linha a seguir antes do primeiro return. Mude o número no parâmetro do método Item() para escolher entre as várias opções disponíveis.

Code: Select all

Texto_Para_Voz.GetVoices().Item(2)
VadoJMS
Posts: 28
Joined: 20 Oct 2017, 17:36

Re: Acessibilidade [1] - Visão - Conhecer O Teclado

24 Apr 2018, 20:38

Muito bom, Gio!

Conferi aqui e na minha versão têm as vozes: Maria, Daniel e Zira.
Engraçado, apesar de trocar no Windows e escolher uma voz apenas, o script ativa duas outras vozes femininas para cada tecla.
Vou fuçar mais para ver se eu consigo resolver.

O empecilho que me desapontou foi a velocidade. :(
Tem como tirar essa pausa de três segundos?

Teclo: “a” ouço depois de três segundos, teclo outra tecla ai só depois de mais três segundos que eu consigo ouvir...
Seria perfeito se eu pudesse clicar “a” e se a tecla ainda estiver pressionada permanecer “aaaa” até soltar.
Acompanhar o ritmo da digitação, sabe?
“a”, “b”, “Delete”, etc. Serem lidas direto sem essas pausas.
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Acessibilidade [1] - Visão - Conhecer O Teclado  Topic is solved

24 Apr 2018, 21:46

VadoJMS wrote:Muito bom, Gio!

Conferi aqui e na minha versão têm as vozes: Maria, Daniel e Zira.
Engraçado, apesar de trocar no Windows e escolher uma voz apenas, o script ativa duas outras vozes femininas para cada tecla.
Vou fuçar mais para ver se eu consigo resolver.
Não entedi. Uma tecla só está ativando duas falas, é isso? Se for, verifique se não têm dois scripts rodando juntos ou coisa parecida.
O empecilho que me desapontou foi a velocidade. :(
Tem como tirar essa pausa de três segundos?

Teclo: “a” ouço depois de três segundos, teclo outra tecla ai só depois de mais três segundos que eu consigo ouvir...
Seria perfeito se eu pudesse clicar “a” e se a tecla ainda estiver pressionada permanecer “aaaa” até soltar.
Acompanhar o ritmo da digitação, sabe?
“a”, “b”, “Delete”, etc. Serem lidas direto sem essas pausas.
Dá pra tirar a pausa e também dá pra acelerar a fala da assistente, mas há ressalvas no que você perguntou. É importante ter em mente que várias chamadas de "a" seguidas em um curto espaço de tempo NÃO é a mesma coisa que uma chamada "aaaaa". Tendo dito isto, como as duas coisas podem ser feitas, acho que o que você quer é algo próximo do script abaixo.

Code: Select all

#SingleInstance, Force
SetBatchLines, -1

Texto_Para_Voz := ComObjCreate("SAPI.SpVoice")
Texto_Para_Voz.volume := 100
Texto_Para_Voz.Rate := 7
Texto_Para_Voz.WaitUntilDone(-1) 
Return

~a::
If ((A_TimeSincePriorHotkey < 100) AND (A_TimeSincePriorHotkey > 0) AND (A_PriorHotkey = A_ThisHotkey))
{
	Texto_Para_Voz.Speak("aaaaaaaaaaaaaaaaaa", 0x2)
}
else
{
	Texto_Para_Voz.Speak("a", 0x3)
}
Return

~b::
If ((A_TimeSincePriorHotkey < 100) AND (A_TimeSincePriorHotkey > 0) AND (A_PriorHotkey = A_ThisHotkey))
{
	Texto_Para_Voz.Speak("bbbbbbbbbbbbbbbbb", 0x2)
}
else
{
	Texto_Para_Voz.Speak("b", 0x3)
}
Return

~pgup::
If ((A_TimeSincePriorHotkey < 100) AND (A_TimeSincePriorHotkey > 0) AND (A_PriorHotkey = A_ThisHotkey))
{
	Texto_Para_Voz.Speak("Ppppppppppppp", 0x2)
}
else
{
	Texto_Para_Voz.Speak("Pg á pi", 0x3)
}
Return

~Shift::
If ((A_TimeSincePriorHotkey < 100) AND (A_TimeSincePriorHotkey > 0) AND (A_PriorHotkey = A_ThisHotkey))
{
	Texto_Para_Voz.Speak("xixixixixixixixixi", 0x2)
}
else
{
	Texto_Para_Voz.Speak("Shift", 0x3)
}
Return
:arrow: Execute o script acima e tecle a várias vezes sem segurar. Depois, segure o a e veja o que acontece em cada caso.

A opção 0x3 é a opção que elimina a pausa entre chamadas. Ela funciona basicamente assim: quando você faz uma chamada, qualquer chamada anterior é imeditamente cancelada e uma nova chamada é imediatamente iniciada. O problema é que se isso ocorrer muito rápido (como quando segura a tecla), não vai dar tempo da assistente sequer iniciar o som, e portanto, não vai sair nada a não ser na primeira (antes do segurar começar a ter efeito) e na última chamada (porque nenhuma chamada há para cancelar a última). Portanto, criei algumas condicionais para chamar "aaaaaaaaaaaa" com pausa (ou seja, sem cancelamento), no lugar de simplesmente "a" sem pausa, quando o script detectar que as chamadas foram feitas muito rapidamente (duas chamadas em menos de um décimo de segundo).
VadoJMS
Posts: 28
Joined: 20 Oct 2017, 17:36

Re: Acessibilidade [1] - Visão - Conhecer O Teclado

25 Apr 2018, 12:51

EXCELENTE! :bravo:

Mais uma vez obrigado, Gio. :dance:

Code: Select all

Texto_Para_Voz.GetVoices().Item(2)
Somente essa linha de comando que acabou não funcionando no script, estranho. :thumbdown: :eh:
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Acessibilidade [1] - Visão - Conhecer O Teclado

25 Apr 2018, 15:32

VadoJMS wrote:EXCELENTE! :bravo:

Mais uma vez obrigado, Gio. :dance:

Code: Select all

Texto_Para_Voz.GetVoices().Item(2)
Somente essa linha de comando que acabou não funcionando no script, estranho. :thumbdown: :eh:
Realmente, havia um erro nessa linha. A linha correta é a linha abaixo e deve ser colocada logo antes do primeiro return. Altere o número indicado para escolher entre as opções disponíveis de voz (se tiverem 3, serão os números 0, 1 e 2. Lembrando que escolher um número que não existe gerará um erro).

Code: Select all

Texto_Para_Voz.Voice := Texto_Para_Voz.GetVoices().Item(1)
:arrow: Outra coisa, no código do último post eu fiz alguns testes e é melhor substituir a opção 0x1 por 0x2 nas chamadas com várias letras (pois isso impede que as chamadas se acumulem e ela fique falando "aaaaa" muito tempo depois de você soltar a letra). Vou atualizar isso no código daquele post.
VadoJMS
Posts: 28
Joined: 20 Oct 2017, 17:36

Re: Acessibilidade [1] - Visão - Conhecer O Teclado

27 Apr 2018, 04:32

Code: Select all

Texto_Para_Voz.Voice := Texto_Para_Voz.GetVoices().Item(1)
Agora tudo deu certo, Gio.
Também agradeço pela dica de substituir 0x1 por 0x2 nas chamadas com várias letras.

:superhappy:

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 14 guests