Post by Gio » 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
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).
[quote="VadoJMS"]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.[/quote]
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.
[quote]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.[/quote]
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]#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[/code]
:arrow: Execute o script acima e tecle [c]a[/c] várias vezes sem segurar. Depois, segure o [c]a[/c] e veja o que acontece em cada caso.
A opção [c]0x3[/c] é 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).