Raspberry Pi – Python – TTS – voz em formato mp3

Atualizado em: 14/04/2014 – Adicionado link de como fazer a declaração de codificação UTF-8 para Python

Muitas vezes um projeto simples sem display ou monitor gráfico requer algum tipo de indicação, como por exemplo saída de voz.

Existem algumas alternativas que ficam melhores para a língua inglesa, mas para o Portugues do Brasil, até o momento as que eu conheço são as:

– Vozes da NextUp, sendo a mais conhecida a “Voz de Raquel”, tem mais duas novas: a voz de “Felipe” e a de “Luciana”.

Mas estas vozes (aparentemente) estão restritas a o sistema Windows, uma vez que ao pesquisar na net, não encontrei ninguém que tenha feito rodar em Linux. (Também não tenho informação se funciona em MAC).

– Vozes da Espeak, esta funciona em Linux e Windows. Foi portada também para Android, Mac OSX and Solaris.

E tem mais sistemas TTS que tem voz em “brasileiro”, mas as melhores são a da NextUp e do Tradutor do Google.

É aí que está a ideia, para projetos “não comerciais” e que tem pouca informação a ser falada, como por exemplo um projeto academico de um despertador que fala, ou algo do tipo, o sistema online do Google pode falar.

Mas como fazer se o equipamento não tem uma placa de rede, como é o caso da placa Raspberry Pi modelo A?

Talvez a saída seja fazer um backup local.

Como o Raspberry Pi geralmente é programado em Python, segue um código de exemplo, lembrando que este código não poderá ser usado comercialmente:

import os

import datetime

import time

#remove path (clear)

os.system(‘rm -f -r /home/relogio/horas_tmp > /dev/null 2>&1’)

#create path

os.system(‘mkdir -p /home/relogio/horas_tmp > /dev/null 2>&1’)

#remove path (clear)

os.system(‘rm -f -r /home/relogio/horas > /dev/null 2>&1’)

#create path

os.system(‘mkdir -p /home/relogio/horas > /dev/null 2>&1’)

#get audio

os.system(‘clear’)

hora = 0

minuto = 0

os.system(‘mplayer “http://translate.google.com/translate_tts?ie=UTF-8&q=’ + str(hora) + ‘h ‘ + str(minuto) + ‘minutos&tl=pt&total=1&idx=0&textlen=11&prev=input” -ao pcm:file=/home/relogio/horas_tmp/’ + str(hora) + ‘h’ + str(minuto) + ‘.wav -vc dummy -vo null’)

#convert audio

os.system(‘clear’)

hora = 0

minuto = 0

 

os.system(‘lame -m s /home/relogio/horas_tmp/’ + str(hora) + ‘h’ + str(minuto) + ‘.wav -o “/home/relogio/horas/’ + str(hora) + ‘h’ + str(minuto) + ‘.mp3″‘)

Precisa criar um arquivo com nome por exemplo: tts1.py e já estando na pasta do script, para rodar seria:

python tts1.py

Como pode ver no código, depois de concluído os arquivos mp3 ficam na pasta /home/relogio/horas

Para fazer isso funcionar, precisa estar funcionando o sistema de som, o programa ‘mplayer’ e ‘lame’.

sudo apt-get install mplayer lame

E para fazer o script do Python falar:

import os

os.system(‘mpg321 -q ‘ + str(fn) + ‘.mp3’)

Onde mpg321 é o player de musica (ele é mais rápido que o mplayer) e para instalar:

sudo apt-get install mpg321

A opção -q é para não mostrar saídas de informações, já str( ) é para converter o valor em string (pode ser um número)

Sendo fn o valor do nome do arquivo, por exemplo para fazer falar ‘doze horas e 20 minutos’ seria:

import os

fn = “12h20”

os.system(‘mpg321 -q ‘ + str(fn) + ‘.mp3’)

Observe que a principal parte é a do código:

http://translate.google.com/translate_tts?ie=UTF-8&q=texto-a-ser-falado&tl=pt&total=1&idx=0&textlen=11&prev=input

Onde a parte que está entre ‘q=’ e ‘&’, como no exemplo acima ‘texto a ser falado’. Se este código for colado na barra de endereço do navegador (testado no Mozilla) vai falar exatamente isso. O Mozilla também aceita acentuação diretamente na barra de endereços:

Ao digitar com acento :

http://translate.google.com/translate_tts?ie=UTF-8&q=época&tl=pt&total=1&idx=0&textlen=11&prev=input

E ao copiar da barra de endereços depois de falar:

http://translate.google.com/translate_tts?ie=UTF-8&q=%C3%A9poca&tl=pt&total=1&idx=0&textlen=11&prev=input

Observe que o Mozilla converteu o caractere ‘é’ para ‘%C3%A9’. Pode ver na tabela o valor correspondente.

Com isso o sistema de TTS pode falar praticamente qualquer coisa, mas tem uma observação, quanto a acentuação no Python:

O Python geralmente trabalha com codificação UTF-8, e com isso para fazer sair um caractere especial, acima do ASCII 127, tem que fazer uso de recursos adequados, caso contrário o script não vai rodar.

Se por exemplo colocar algum caractere como ‘ç’ ou ‘é’ no código do script do python, mesmo que seja nos comentários vai dar erro.

A acentuação é necessária porque se for fazer um código que tenha palavras acentuadas, ao pedir para o Google, tem que enviar também o caractere da forma certa, e algumas vezes é preciso “acentuar mesmo que a palavra não tenha acento”, porque o TTS traduz apenas os fonemas.

Atualizado em 14/04/2014: Caractere especial no código do Script do Python

Então,

Boa sorte!

 

3 Responses to Raspberry Pi – Python – TTS – voz em formato mp3

  1. Pingback: Raspberry Pi / Linux / Windows / Android – TTS (texto para voz) – Em Portugues Br e com acento | Robson Eletronico

  2. Robson,
    Estou realizando um projeto com meu raspberry utilizando TTS do google, porem escuto o texto falado, ele está sem acentuação e por consequência com uma palavras erradas. Gostaria de saber qual o TTS que você indica para projetos em Portugues.

    No momento meu RPI fala as noticias do “http://www.band.uol.com.br/rss/brasil.xml”, entretanto esta difícil de entender hehehe

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: