Text-to-speech (TTS)

Recentemente, em um projeto de pesquisa aqui da Furb no qual participo, desenvolvemos uma API de conversão texto-fala (text-to-speech, ou somente TTS) para o idioma português.  Antes de iniciar o desenvolvimento, fizemos uma pesquisa para encontrar alguma solução de text-to-speech pronta para utilizar em uma aplicação Java. Encontramos alguns softwares de text-to-speech, porém isso não nos interessava, precisavamos de uma API e que tratasse o idioma português do Brasil. Nessa pesquisa, encontramos a JSR-113 – Java Speech API. Parecia ser o melhor caminho a seguir, porém verificamos que existiam poucas implementações dessa especificação freeware e opensource. Analisamos a implementação chamada de FreeTTS desenvolvida em Java, porém notamos uma complexidade exceciva ao montar um simples “Hello World”, sendo que também não tratava o idioma português.

Pensamos em uma API simples, prática e principalmente bem testada. Algo que pudessemos dizer: “Quero que você (a API) converta um texto T em fala.” e ela gerasse um arquivo de audio (.wav por exemplo) contendo a respectiva fala. Dessa forma, a implementação da nossa API (chamada de FurbSpeech) possibilita uma chamada assim:

File audio = new FurbSpeech().text("Rua antônio da veiga").to().speech();

O papel da FurbSpeech é gerar arquivos de texto contendo uma série de símbolos fonéticos, juntamente com sua frequência, duração e amplitude. Um exemplo de arquivos gerado pela nossa biblioteca pode ser visto a seguir:

_ 300
r 120 100 100.0
u 120 100 100.49480791850904
a 105 100 100.95885107720841
am 105 100 101.36327752004667
t 120 100 101.6829419696158
o 120 100 101.89796923871117
n 105 100 101.9949899732081
i 105 100 101.96797189374787
o 105 100 101.81859485365136
d 120 100 101.55614639377585
a 120 100 101.19694428820792
v 120 100 100.76332198410466
e 120 100 100.28224001611973
i 120 100 99.78360973093979
g 105 100 99.29843354462076
a 105 100 98.8568773625153
_ 300
_ 300
_ 300

Para transformar esse arquivos de fonemas em som propriamente dito, utilizamos um sintetizador chamado MBROLA. Ele recebe como entrada um arquivo de fonemas e gera um arquivo de audio no formato WAV.

Ainda não disponibilizamos o código-fonte da API para download, pois ainda não está completamente finalizada e testada devidamente. Porém, se houver interesse, fique a vontade para entrar em contato.

Até a próxima.

Tags: , ,

15 Respostas to “Text-to-speech (TTS)”

  1. FurbSpeech open-source « Germano Fronza Says:

    […] Primeiro post do ano aqui no blog e cá estou para dar uma boa notícia. A biblioteca FurbSpeech foi liberada como um projeto open-source. No momento encontra-se hospedada no code.google sob a […]

  2. Renato Says:

    Olá Germano tudo bem? bom eu sou novo nesta área de speech

    mas estou com um projeto assim: tenho um asterisk e recebo uma ligação
    essa ligação tem que ser repassada por que tem que se fazer uma consulta em um banco de dados digitando o numero do contrato até ai show de bola. mas tem um porém todos os speech tts que encontro os fonemas são la uma coisa muito feia, um ingles desenrolado para portugues, quem ta no telefone não entende nada. queria saber se existe algum modo de fazer isso em portugues mas tipo sem precisar licença eu vi que você gerou uns codigos de frequencia fonéticos, se não estou engando.. então.. pode me dar uns conselhos nisso? preciso de uma linguagem pt-br que seja bem entendido por telefone, por que temos que considerar barulho de onibus, maquinas, pessoas etc… então se não tiver uma boa dicção, não entenderemos nada. eu até pensei em crair meu proprio pacotes de fonemas. quando vi o que você fez. pode me ajudar com isso? antes de tudo isso, queria também lhe parabenizar pelo ótimo trabalho desenvolvido aew. abraço

  3. Germano Says:

    @Renato
    Olá, obrigado pela visita!
    Como não deixastes e-mail para responder, escrevo por aqui e torço para que voltes e leia! rsrs 🙂

    Eu entendo a sua necessidade, pois eu tinha a mesma. Fiz uma busca na web por TTS pt-br, mas não encontrei nada decente. Porém eu cheguei ao sintetizador MBROLA, ele tem dois pacotes de fonemas em PT-BR, e são bem aceitáveis, pelo menos eu e o pessoal do projeto na época havíamos gostado. Acontece que não tinhamos achado nenhuma API para Java que gerasse o arquivo de representação fonética para ser convertido em voz, aí acabei desenvolvendo uma.
    Sugiro a você que baixe o código da API que desenvolvi (http://code.google.com/p/furbspeech/) Você pode importar o projeto no Eclipse e rodar as classes de testes que tem lá, aí você vê se o resultado gerado (arquivos .wav) são aceitáveis pra você! Se não for bom o sucifiente, dá para se aventurar na criação de novos arquivos de fonemas do MBROLA, que inclusive tem ferrramenta e alguma documentação. Esses arquivos contém basicamente a representação sonora de cada fonema (não deve ter absolutamente TODOS os fonemas, mas enfim) da língua portuguesa brasileira. Se você tiver qualquer dúvida em relação ao projeto FurbSpeech ou queira trocar alguma idéia, não hesite em falar comigo. Valeu!

  4. Regiane Says:

    Olá Germano,

    Primeiramente, gostaria de parabenizá-lo pelo projeto de TTS, o FurbSpeech.

    Eu estou desenvolvendo um projeto para ler os rss’s em voz alta para a pessoa com deficiencia visual.

    Eu baixei o seu projeto e configurei no Eclipse Galileo. Deu um pouco de trabalho porque eu precisei instalar o Maven e os pacotes que estavam faltando. Porem agora eu estou com um grande problema, eu não consigo rodar a aplicação. Não sei o que está acontecendo. Se vc puder me dar umas dicas, eu agradeço…. Eu to perdida!!!kkkkk

    Desde já agradeço.

    Regiane

  5. Juliano Says:

    Interessante. Text-to-speech será um plus no meu tcm haha. Eu compilei aqui o projeto pra montar o jar e estou gostando do trabalho. Muito bacana. Só queria agradecer. Penso em fazer algumas mudanças no código mas eu aviso quando for mudar. Abraços

  6. Juliano Says:

    Adicionei um file chooser pra poder escolher o local de saída dos fonemas e do arquivo de audio. xD Mais uma vez obrigado! Abraços

  7. Juliano Says:

    É desencana o filechooser xP

  8. Lana Says:

    Parabéns pelo projeto! Eu baixei e utilizei para teste. Achei muito bem feito e legível o código.

  9. Rafael Rossignol Felipe Says:

    Olá, achei muito interessante, estava pensando em fazer justamente isso que você fez, porém com poucas diferenças, vou testar depois e se eu fizer alguma mudança pertinente no código eu lhe envio.

    A minha idéia é fazer uma engine TTS usavel em java que já sai direto na saída escolhida ou num wav.

  10. Ericson Sarmento Says:

    dá pra usar as outras vozes tambem, como o inglês e o espanhol?

  11. Roberto Says:

    Bom dia Germano, to iniciando em uma projeto que preciso ter conversão de texto para voz, vi seu projeto, mas to precisando de um norte de como usa-lo.Antes testei o freetts achei tranquilo mais as vozes são em inglês.Você teria um tutorial para iniciar usando seu projeto.Caso deseje retorna meu email é roberto2011.junior@gmail.com obrigado .

  12. Anderson Dias Says:

    Ola Germano, encontrei seu projeto no google code e o mesmo veio a calhar pois preciso utilizar um TTS num projeto para a faculdade, mas não consegui rodar um teste no furspeech. Será que voce passaria um tutorial explicando como faço por exemplo um “hello world!”. meu email é andersoninfonet@gmail.com. Aguardo ancioso sua resposta.

  13. celso mateus Says:

    Boa tarde,

    Ola Germano, estou desenvolvendo um programa para faculdade e fiquei muito interessado no seu projeto, baixei as bibliotecas e tudo mais, porem nao consigo realizar um simples “Hello World”, você pode me ajudar por favor enviando um tutorial para meu email: celso.mateus@hotmail.com. Desde já agradeço a atenção.

  14. Luiz Henrique Says:

    oi, Germano!

    Primeiramente gostaria de te dar os parabéns pela API e pelo blog. Estou implementando o jcaptcha sound, mas ele está com o áudio em ingles e pesquisando aqui no google sobre uma integração do freetts para o nosso idioma eu caí no seu blog.

    Vc tem algum tutorial ou exemplo que eu poderia utilizar?

  15. Jessé Santos Says:

    Olá Germano. Parabéns pelo projeto.
    Estou desenvolvendo uma aplicação, e queria usar esse sintetizador para receber uma String e chamar por voz, porém não conseguir fazer funcionar. Poderia me enviar um passo a passo de como configurar seu text-to-speech?
    Agradeço.
    jesse.santos.costa@hotmail.com

Deixe um comentário