Como sintetizar voz com o espeak

O espeak é um software de sintetização de voz, com suporte a vários idiomas, disponível para várias plataformas, o que inclui o Mac OS, o Linux e o Windows.
Habilitar a sintetização de voz, na interface gráfica não é um “bicho de sete cabeças”. Usualmente, você encontra estas opções no painel Acessibilidade, no painel de controle de configurações.
ícone speaker de audio e usuários
Contudo, se você deseja fazer um script, com avisos e mensagens verbais/orais para usuários, pode ser necessário fazer uso de outras ferramentas. E, neste post, vou falar do espeak.
Se você usa o Ubuntu 14.04 LTS, ele já vem instalado por padrão.
Há várias outras excelentes opções de sintetização de fala para Linux, mas esta é aquela que você já pode começar a usar agora — isto é, se a sua distro for a versão mais atual do Ubuntu.
Independente da sua plataforma, o texto que segue, serve para todos.

Como transferir um texto para a fala com o espeak

O uso do espeak, basicamente, é muito simples.
Vou começar com alguns exemplos comuns e, depois, vou mostrar sua flexibilidade para trabalhar com situações mais complexas.
Comece com o clássico helloworld:

espeak "Hello World"

Experimente criar um texto, para ser lido no sintetizador:

echo "Sintetização de voz na linha de comando é muito fácil." > exemplo.txt
espeak -f exemplo.txt

Mais pra frente, vamos resolver o problema do “sotaque gringo” do sintetizador.

Como controlar o tom e a velocidade de reprodução do sintetizador

Há dois parâmetros que correspondem a estas duas necessidades.
O espeak é bastante claro na sua sintetização — depois de acostumar o ouvido, as dificuldades de compreensão vão-se embora.
Contudo, é possível melhorar a “dicção” do programa para facilitar as coisas.
Se você quiser, pode alterar o pitch (altura ou tom) da fala ou a velocidade (em palavras por minuto):

  • -p — o ajuste do pitch pode variar entre 0 e 99. O valor padrão é 50.
  • -s — o ajuste da velocidade tem um espectro maior de variação. Faça experiências antes de decidir qual é o mais adequado para você. O valor default é 100.

Veja como funciona em um exemplo:

espeak -p 75 -s 85 -f exemplo.txt

Interpretação da pontuação

Se achar melhor, você pode pedir ao programa para “dizer” a pontuação, em vez de “agir” de acordo com ela.
Para isto, use a opção --punct:

espeak --punct -f exemplo.txt

A opção -k dá tratamento especial às letras maiúsculas (as que iniciam as frases, por exemplo:

  • -k 1 — produz um som discreto a cada vez que passa por uma letra maiúscula.
  • -k 2 — fala “capital” ou “maiúsculo”, a cada vez que passa por uma letra maiúscula.
  • -k valores maiores que 2 — qualquer valor acima de 2, produz um aumento no tom (pitch) conforme o número fornecido.

Experimente:

espeak -k -20 -f exemplo.txt

Para mim, a opção -k -20 funciona bem. E pra você?

Entender voz sintetizada é um processo que requer um pouco de paciência. É um pouco parecido com a adaptação a um sotaque diferente.

Sintetização de voz em português

O exemplo anterior, em português fica assim:

espeak -vpt -k -20 -f exemplo.txt

Você pode listar os arquivos de idiomas presentes no seu sistema, com o comando --voices:

espeak --voices

Eu acho interessante ouvir textos em português, ora com a pronúncia europeia, ora com a pronúncia brasileira.
Faça uma experiência:

echo "O espeak é um software de sintetização de voz, em vários idiomas." > exemplo.txt

Agora execute a sintetização de voz (em português de Portugal) no arquivo “exemplo.txt”:

cat exemplo.txt; espeak -vpt-pt -k -20 -f exemplo.txt

E agora ouça o texto em português do Brasil:

cat exemplo.txt; espeak -vpt-br -k -20 -f exemplo.txt

Você pode fazer o mesmo com um texto em inglês. Por padrão, o espeak traz, pelo menos, 8 variantes do inglês. Veja:

espeak --voices=en
2  en-gb          M  english              en            (en-uk 2)(en 2)
 3  en-uk          M  english-mb-en1       mb/mb-en1     (en 2)
 2  en-us          M  english-us           en-us         (en-r 5)(en 3)
 5  en-sc          M  en-scottish          other/en-sc   (en 4)
 5  en             M  default              default       
 5  en-uk-north    M  english-north        other/en-n    (en-uk 3)(en 5)
 5  en-uk-rp       M  english_rp           other/en-rp   (en-uk 4)(en 5)
 5  en-us          M  us-mbrola-2          mb/mb-us2     (en 7)
 5  en-us          F  us-mbrola-1          mb/mb-us1     (en 8)
 5  en-us          M  us-mbrola-3          mb/mb-us3     (en 8)
 9  en             M  en-german            mb/mb-de4-en  
 9  en             F  en-german-5          mb/mb-de5-en  
 9  en             M  en-greek             mb/mb-gr2-en  
 9  en             M  en-romanian          mb/mb-ro1-en  
 5  en-uk-wmids    M  english_wmids        other/en-wm   (en-uk 9)(en 9)
10  en             M  en-dutch             mb/mb-nl2-en  
10  en             F  en-french            mb/mb-fr4-en  
10  en             M  en-french            mb/mb-fr1-en  
10  en             F  en-hungarian         mb/mb-hu1-en  
10  en             F  en-swedish-f         mb/mb-sw2-en  
 5  en-wi          M  en-westindies        other/en-wi   (en-uk 4)(en 10)
11  en             M  en-afrikaans         mb/mb-af1-en  
11  en             F  en-polish            mb/mb-pl1-en  
11  en             M  en-swedish           mb/mb-sw1-en

Grave um podcast a partir da sintetização e saiba como sussurrar

É possível criar uma arquivo de áudio .wav a partir de um texto, lido pelo sintetizador espeak.
Vamos alterar o exemplo anterior para direcionar a saída do programa para um arquivo de áudio, chamado exemplo.wav:

espeak -vpt-br -k -20 -f exemplo.txt -w exemplo.wav

Agora use o aplay para ouvir o áudio:

aplay exemplo.wav

Para sussurrar, acrescente “whisper”, desta forma:

espeak -k -20 -vpt+whisper -p 75 -s 85 -f exemplo.txt

Não deixe de experimentar a voz feminina, na sintetização:

espeak -k -20 -vpt+f5 -p 75 -s 85 -f exemplo.txt

A opção “f” (female), pode ter outros valores, a depender da sua instalação atual. Experimente valores abaixo de 5.
Divirta-se!

Saytime, o relógio falante no Linux

Saiba como ouvir a hora, no Linux, com um relógio que sintetiza a voz humana.
O saytime informa a hora atual, no seu sistema, oralmente, usando arquivos de áudio pré-gravados e tem flexibilidade para ser configurado.
ícone de alto falante.

Como instalar e usar o saytime

No Ubuntu, no Debian ou em qualquer outra distro derivada, use o apt-get:

sudo apt-get install saytime

Após a instalação, execute o programa:

saytime

Se o seu áudio estiver ativo, vai ouvir uma voz natural masculina, informando a hora.
Se você estiver insatisfeito com o volume, pode dobrar seu valor com -v:

saytime -v 2

O valor 3, triplica; 4, quadruplica etc.
O relógio, por padrão, informa a hora no formato 12h — acrescentando AM ao horário da manhã e PM ao horário da tarde.
Quando a hora e os minutos são “redondos”, o locutor acrescenta “exactly” (exatamente) ao final da frase.
No tópico seguinte, vou mostrar como formatar a saída da hora.

Como formatar a saída do saytime

Os caracteres de formatação são os seguintes:

  • %k — informa a hora no padrão 24 horas.
  • %l — usa o padrão 12 horas.
  • %M — informa os minutos.
  • %S — informa os segundos.
  • %P — frase introdutória. Se você não quiser que o “locutor” comece a dar informação sobre a hora, com um “The time is“, suprima estes caracteres.

O padrão do programa é %P%l%M%S.
Veja um exemplo de formatação para dizer a hora, sem informar minutos e segundos, no formato 24 horas:

saytime -f %k

Acrescente a informação de horas e minutos à saída do saytime:

saytime -f %k%M%S

Como automatizar a informação de hora no sistema

A opção -r envia o programa pros bastidores (background) e passa a informar a cada intervalo de tempo a hora certa pra você.
No exemplo que segue, o saytime irá informar a hora, a cada 6 segundos, com o volume de áudio triplicado (3x), no formato HH:MM (hora e minuto):

saytime -r 6 -v 3 -f %k%M

Se quiser interromper o processo, use o comando pkill:

pkill -9 saytime

Como alterar a voz do saytime

Os arquivos de áudio do saytime ficam armazenados em /usr/share/saytime:

ls /usr/share/saytime
0.au   14.au  19.au  3.au   6.au   and.au      minutes.au  seconds.au
10.au  15.au  1.au   40.au  7.au   exactly.au  oclock.au   the_time_is.au
11.au  16.au  20.au  4.au   8.au   hour.au     oh.au
12.au  17.au  2.au   50.au  9.au   hours.au    pm.au
13.au  18.au  30.au  5.au   am.au  minute.au   second.au

Estes arquivos podem ser substituídos por outros, com os mesmos nomes e os mesmos formatos de áudio (.au).
Recomendo, fazer um backup dos arquivos originais antes —, após o quê, é possível, por exemplo, regravá-los com a sua voz, falando em português.
Supondo que você grave novos arquivos e os armazene no diretório ~/audio/, execute o saytime com a opção -d ~/audio/, para informar ao programa onde buscar seus arquivos de áudio. Veja como fica:

saytime -d ~/audio/

Espero que você se divirta e não perca mais a hora 😉