Posts Tagged ‘Java’

Text-to-speech (TTS)

dezembro 8, 2008

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.