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: Java, Text-to-speech, tts
janeiro 28, 2009 às 4:43 pm
[…] 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 […]
novembro 16, 2009 às 1:28 am
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
novembro 16, 2009 às 10:19 am
@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!
abril 28, 2010 às 7:16 pm
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
julho 12, 2010 às 3:23 am
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
julho 13, 2010 às 7:32 pm
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
julho 16, 2010 às 3:19 am
É desencana o filechooser xP
setembro 5, 2010 às 4:09 am
Parabéns pelo projeto! Eu baixei e utilizei para teste. Achei muito bem feito e legível o código.
setembro 29, 2010 às 2:03 pm
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.
junho 28, 2011 às 1:33 pm
dá pra usar as outras vozes tambem, como o inglês e o espanhol?
maio 2, 2012 às 2:23 pm
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 .
setembro 3, 2012 às 1:04 am
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.
junho 16, 2014 às 3:29 pm
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.
fevereiro 3, 2016 às 7:38 pm
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?
fevereiro 24, 2017 às 11:43 am
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