terça-feira, 13 de maio de 2014

Convertendo texto em voz com API do google

Olá Galera!

Depois de um tempo grande sem postagem, venho novamente aqui para mais uma.
Hoje esta sendo muito utilizada uma API do google chamada GOOGLETTS (text to speech). Essa API converte o texto passado em voz, logicamente não é aquela voz esperada por todos, porém, quebra o galho em alguns casos.
Utilizaremos um script em AGI para enviar o texto para conversão através do asterisk, o script e mais exemplos podem ser encontrados neste site: http://zaf.github.io/asterisk-googletts/. Vamos la:

Precisaremos das seguinte dependências:

- Perl
- perl-libwww
- sox
- mpg123

para quem usa Debian, basta dar um apt-get install nome-dependencia

Além das dependências acima, precisaremos de acesso a internet para a conversão que será feita pelo google.

Instalação:

Baixe o arquivo googletts.agi, descompacte e salve no diretório /var/lib/asterisk/agi-bin e de permissão de execução para o mesmo --> chmod a+x googletss.agi.
Existe algumas configurações que podemos fazer neste arquivo, como por exemplo, mudar o diretório padrão (/tmp) que ele salva as gravações, assim, toda vez que um texto idêntico for passado, ele não precisa fazer a aquisição ao google, tendo em vista que o áudio já esta salvo no diretório. Além disso, podemos mudar a linguagem padrão para pt_BR... porém, por hora não precisamos fazer isto e não entrarei nestes detalhes.

Criando contexto no asterisk:

Vamos criar um contexto no asterisk chamado "google-speech" e fazer nossa lógica nele.

[google-speech]
;convertendo texto em voz
exten => 1234,1,Answer() ;;Atendendo canal
exten => 1234,n,agi(googletts.agi,"Testando conversor de texto em voz.",pt_BR)  ;; passando texto e a linguagem que queremos o retorno.

no exemplo acima, apenas atendemos a ligação e enviamos a aquisição ao AGI passando de parâmetros o texto que será convertido e a linguagem que será retornado a "voz".

Agora vamos ver um exemplo simples IVR Dinâmico:

[ivr]
exten => s,1,Answer()
exten => s,n,Set(TIMEOUT(digit)=5)
exten => s,n,agi(googletts.agi,"Bem vindo ao Meu menu de voz interativa.",pt_BR)
        ;;Aguardando Dígito:
exten => s,n(start),agi(googletts.agi,"Por favor, digite um número.",pt_BR,any) 
exten => s,n,WaitExten()

exten => _X,1,agi(googletts.agi,"Você digitou o número ${EXTEN}. Tente outra vez.",pt_BR,any)
exten => _X,n,WaitExten()

exten => i,1,agi(googletts.agi,"Dígito Inválido.",pt_BR)
exten => i,n,goto(s,start)

exten => t,1,agi(googletts.agi,"Você não digitou nenhum número.",pt_BR)
exten => t,n,goto(s,start)

exten => h,1,Hangup()

É isso ai pessoal, esse exemplo é bem simples e não precisa de muita explicação, o que ele faz:

- Atende o canal
- Mensagem de boas vindas
- Mensagem para digitar um número
- aguardar dígito
- Dizer qual o número discado.

Exemplo simples e direto tirado direto do site oficial mencionado acima.

Espero que ajude

Até a próxima, valeu!!