Adicionando idioma pt_BR do MBROLA ao FreeTTS

Dá-lhe, GUJ!

Meu projeto de conclusão de curso da faculdade inclui sintetização de voz (texto para fala - TTS) usando a JSAPI - Java Speech… Consegui construir a classe para ler o que eu quiser e só tenho um último problema agora: a lingua portuguesa! Já está disponível a coleção de difonemas para o idioma português brasileiro (pt_BR) do MBROLA e até já a baixei, mas não consigo usá-la no FreeTTS com a minha classe java, só consigo fazer ler com difonema Inglês, que já veio no .jar do FreeTTS que baixei…
Algum fera pode me ajudar aí?

Um abraço!

Opa fala blz!?!?

pow cara … to passando o mesmo problema … eu to usando o FreeTTS via implementação do JCaptcha … tá funcionando tudo certo só queria trocar a voz tambem … mas não consigo nem achar o jar do MBrola … vc conseguiu algum avanço ?? vou mandar meus codigos:


package captcha;

import com.octo.captcha.component.sound.soundconfigurator.FreeTTSSoundConfigurator;
import com.octo.captcha.component.sound.soundconfigurator.SoundConfigurator;
import com.octo.captcha.component.sound.wordtosound.FreeTTSWordToSound;
import com.octo.captcha.component.word.worddecorator.SpellerWordDecorator;
import com.octo.captcha.component.word.wordgenerator.RandomWordGenerator;
import com.octo.captcha.component.word.wordgenerator.WordGenerator;
import com.octo.captcha.engine.sound.ListSoundCaptchaEngine;
import com.octo.captcha.sound.speller.SpellerSoundFactory;

public class EngineSom extends ListSoundCaptchaEngine {

    protected void buildInitialFactories() {

              WordGenerator words = new RandomWordGenerator("12345678");

              SoundConfigurator configurator = new FreeTTSSoundConfigurator("kevin16",
                      "com.sun.speech.freetts.en.us.cmu_us_kal.KevinVoiceDirectory", 1.0f, 100, 110);
              FreeTTSWordToSound wordToSound = new FreeTTSWordToSound(configurator, 4, 4);

              SpellerWordDecorator decorator = new SpellerWordDecorator(", ");
              this.addFactory(new SpellerSoundFactory(words, wordToSound, decorator));
          }
}
package captcha;

import com.octo.captcha.service.sound.DefaultManageableSoundCaptchaService;
import com.octo.captcha.service.sound.SoundCaptchaService;

public class Captcha {

	private SoundCaptchaService service;
	private static Captcha instance = new Captcha();

	public Captcha() {
		DefaultManageableSoundCaptchaService serv = new DefaultManageableSoundCaptchaService();
		serv.setCaptchaEngine(new EngineSom());
		service = serv;
	}

	public static Captcha getInstance() {
		return instance;
	}

	public SoundCaptchaService getService() {
		return service;
	}

}
package captcha;

import java.io.File;
import java.io.IOException;

import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.swing.JOptionPane;

import com.octo.captcha.service.CaptchaServiceException;

public class CaptchaTest {

	private static final String NOME_ARQUIVO = "teste.wav";

	public static void main(String[] args) {

		File audioFile = new File(NOME_ARQUIVO);
				
		AudioInputStream challengeSound;

		try {
			challengeSound = Captcha.getInstance().getService()
					.getSoundChallengeForID("teste");
			
			AudioSystem.write(challengeSound, AudioFileFormat.Type.WAVE, audioFile);

			String resposta = JOptionPane.showInputDialog("Digite a mensagem");
			
			Boolean captchaOk = Captcha.getInstance().getService().validateResponseForID("teste", 
	            		resposta);
				
			if (captchaOk) {
				System.out.print("Desafio correto");
			} else {
				System.out.print("Desafio incorreto");				
			}
		} catch (CaptchaServiceException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Ae pessoal, to usando o sintizador de voz Freetts no meu projeto, porém só tem audio em inglês. Também já baixei do MBROLA o audio portugues mas não consigo usar …
Alguem ae fez algo do tipo?

vlw

Ola amigo,

Estou na mesma furada. Pelo que pude pesquisar(http://freetts.sourceforge.net/docs/index.php#voices_available), não existe nada pronto que possibilite ao FreeTTS adicionar novas linguas além das 3 originais (us_1, us_2 e us_3). O problema é que a mbrola.jar (que está no /lib do freetts) só dá suporte a essas 3 linguas. Literalmente eh um array de Voice com 3 posicoes - nada dinamico. Eu descompilei a classe MbrolaVoiceDirectory.java de dentro do .jar e modifiquei p/ que ela aceite br_2 alem das 3 originais e ele encontrou a linguagem no java -Dmbrola.base=/mbrola -jar lib/mbrola.jar. Ja é um avanço, mas apesar de nao dar erro e o programa rodar normalmente, nenhum som sai nos speakers.

Existem 3 possibilidades:

  1. Alguem reescrever todo o mbrola.jar (tem umas 7 classes la dentro) - Eu ainda não verifiquei se isso é legal. Pode ser que a licença de uso cancele essa opcão.
  2. Arranjar uma voz de festvox e converter p/ freetts(http://freetts.sourceforge.net/docs/index.php#How_do_I_add_support_for_a_voice_with) - o resultado final tem q ser um .jar - e boa sorte… o trabalho é duro;
  3. Usar SAPI5(o formato de voz q vc tem nas opcoes de acessibilidade do Windows) e pagar uma licença do JSAPI (http://www.cloudgarden.com/) p/ conseguir trabalhar com o formato no java.

Eu nao conheco tanto assim de sintetizacao de voz p/ fazer a primeira, nao tenho paciencia p/ a segunda e na terceira, alem de custar $$$, o codigo fica uma nojeira (tirando como base os exemplos que vem na versão trial)… estamos ferrados! :frowning:

Eu estou pensando em abandonar o freetts… alguem conhece outra API q aceite mbrola?

Abracos,

DR

[quote=DavidRibeiro]Ola amigo,

Estou na mesma furada. Pelo que pude pesquisar(http://freetts.sourceforge.net/docs/index.php#voices_available), não existe nada pronto que possibilite ao FreeTTS adicionar novas linguas além das 3 originais (us_1, us_2 e us_3). O problema é que a mbrola.jar (que está no /lib do freetts) só dá suporte a essas 3 linguas. Literalmente eh um array de Voice com 3 posicoes - nada dinamico. Eu descompilei a classe MbrolaVoiceDirectory.java de dentro do .jar e modifiquei p/ que ela aceite br_2 alem das 3 originais e ele encontrou a linguagem no java -Dmbrola.base=/mbrola -jar lib/mbrola.jar. Ja é um avanço, mas apesar de nao dar erro e o programa rodar normalmente, nenhum som sai nos speakers.

Existem 3 possibilidades:

  1. Alguem reescrever todo o mbrola.jar (tem umas 7 classes la dentro) - Eu ainda não verifiquei se isso é legal. Pode ser que a licença de uso cancele essa opcão.
  2. Arranjar uma voz de festvox e converter p/ freetts(http://freetts.sourceforge.net/docs/index.php#How_do_I_add_support_for_a_voice_with) - o resultado final tem q ser um .jar - e boa sorte… o trabalho é duro;
  3. Usar SAPI5(o formato de voz q vc tem nas opcoes de acessibilidade do Windows) e pagar uma licença do TalkingJava SDK (http://www.cloudgarden.com/) p/ conseguir trabalhar com o formato no java.

Eu nao conheco tanto assim de sintetizacao de voz p/ fazer a primeira, nao tenho paciencia p/ a segunda e na terceira, alem de custar $$$, o codigo fica uma nojeira (tirando como base os exemplos que vem na versão trial)… estamos ferrados! :frowning:

Eu estou pensando em abandonar o freetts… alguem conhece outra API q aceite mbrola?

Abracos,

DR
[/quote]

cara, então complicou =\ não sei o que fazer, estava querendo colocar isso no meu projeto, ja consegui, mas tudo em ingles como falei, e em portugues não consegui, eu até achei o jar pt_br no mbrola mas nada de conseguir colocar dentro hehehe se você tiver alguma novidade avisa ae blz?
Vlw!

Alguma novidade quanto ao FreeTTS?
Estou pensando em usar ele no meu TCC, qual é a avaliação de vcs? Existem outras ferramentas?

Fala galera, sei que este tópico ta um pouco antigo, porém gostaria de saber se alguém teve avanço. Sei do seguinte, é preciso definir um bando de dados de fone, pode ser arquivo texto, outro de fonema, etc, etc, se alguém ainda tiver interesse neste projeto, estou trabalhando nele, basta mandar msg. Abraços

Olá, eu pesquisei sobre isso faz um tempo, e retornei agora.
Pelo que entendo, o mbrola é um sintetizador de voz que "fala fonemas" e não linguagem escrita.

Fonemas pra quem não sabe são as "silabas faladas" de qqr língua.
Em algumas línguas as regras ortográficas correspondem quase 100% aos fonemas, porém o nosso querido português é bem diferente disso.

Uma solução que pensei há um tempo, é pegar um dicionario de palavras que contém seus respectivos fonemas (um banco de dados)
qqr dicionario possui isso, vejam o exemplo:
porta fonema-> por.ta
cilindro fonema-> ci.lin.dro

alguns fonemas utilizam até uns caracteres especiais, a ideia seria pegar um dicionario com seu correspondente escrito->fonema
e transformar numa sequencia de fonemas que o mbrola entenda

Tenho vontade de ter um tts em português legal como o mbrola pra utilizar em java, mas da um certo trabalho fazer isso.

Também existe um script em perl que meio q substitui algumas silabas escritas e transforma uma palavra em fonemas, mas não funciona 100% (pensei em transformar esse script em java e melhora-lo)

Olá,

Tópico antigo mais acredito que o assunto é sempre útil.
Depois de pesquisar muito achei o projeto furbspeech no google code
Ele justamente converte o texto para fonema em português para uso com o mbrola, fiz alguns testes e gostei bastante do resultado

https://code.google.com/p/furbspeech/

Como faço para usar ests lib? Porque não encontrei nenhum .jar dentro.

Preciso ter o FreeTTs tambem ou não?

[quote=Allan Barcelos]Como faço para usar ests lib? Porque não encontrei nenhum .jar dentro.

Preciso ter o FreeTTs tambem ou não?
[/quote]

https://code.google.com/p/furbspeech/wiki/PageName indica como construir o jar.