Migração da versão 3.6

A versão 4.x do CPqD Texto Fala introduziu uma nova arquitetura de software, oferecendo mais funcionalidades e uma API mais moderna. Como consequência, aplicações que utilizam as versões 3.6 não são diretamente compatíveis com o pacote JAR da versão 4.x. Desenvolvedores precisam adaptar suas aplicações para utilizar o novo CPqD Texto Fala.

Arquivo de configuração

A tabela abaixo apresenta a relação de equivalência entre os parâmetros de configuração do CPqD Texto Fala versão 3.6 e 4.x.

Versão 3.6 Versão 4.x
  • pathTTS
  • pathReport
Parâmetro de inicialização
pathDat General.VoicePath
Não suporta múltiplas vozes
  • codificacaoAudio
  • taxaAmostragem
  • numeroCanaisAudio
  • cabecalhoArquivo
  • cabecalhoMemoria
Audio.Encoder
volume Audio.Volume
ritmo Audio.Rate
entonacao Audio.Pitch
codificacaoTexto Detectado automaticamente
Não suportado Text.SSML
pausaInicial Audio.BeginSilence
pausaFinal Audio.EndSilence
logTextos Log.Level

Equivalência entre APIs em Java

Comparação e equivalência entre as funções das APIs em Java das versões 3.x e 4.x.

Versão 3.6 Versão 4.x
Jctf SynthesisEngine
JctfCanal SynthesisSession
Jctf.inicializa() Construtor da classe SynthesisEngine
Jctf.finaliza()  
alocaCanal() SynthesisEngine.createSession()
desalocaCanal() SynthesisSession.release()
  • Jctf.sintetizaTextoFM()
  • Jctf.sintetizaTextoMM()
SynthesisSession.textToSpeech() + SynthesisSession.getAudio()
  • Jctf.sintetizaTextoFF()
  • Jctf.sintetizaTextoMF()
SynthesisSession.textToSpeech() + SynthesisSession.saveAudio()
  • Jctf.JctfSentencaFM()
  • Jctf.JctfSentencaMM()
SynthesisSession.textToSpeechStream() + SynthesisSession.getAudio()
  • Jctf.JctfSentencaFF()
  • Jctf.JctfSentencaMF()
SynthesisSession.textToSpeechStream() + SynthesisSession.saveAudio()
Jctf.getVersion SynthesisEngine.getEngineInfo()
Jctf.setConfig
Jctf.getConfig
JctfException SynthesisException

Exemplos de uso

A inicialização recebeu um argumento a mais para indicar o local onde estão os arquivos de log. Na versão 3.6 o local dos arquivos de log era especificado no arquivo de configuração.

  • Inicializa o CPqD Texto Fala
  • 3.6
  • 4.x
Jctf app = new Jctf("/opt/ctf");
app.inicializa();
SynthesisEngine engine = new SynthesisEngine("/opt/cpqd/tts/engine/libcpqdtts.so",
    "/opt/cpqd/tts/engine", "/var/log");

Os canais de síntese passaram a ser denominados de sessões, um conceito mais genérico e aderente ao jargão de desenvolvimento de software. Além disso, como a versão 4.x do produto suporta múltiplas vozes, o método de criação de sessões possui um argumento onde a aplicação pode indicar uma voz padrão.

  • 3.6
  • 4.x
JctfCanal canal = app.alocaCanal();
SynthesisSession session = engine.createSession("rosana-highquality");

Recuperar valores de parâmetros de configuração era feito através de uma classe na versão 3.6. A nova versão fornece os valores individualmente através de métodos específicos.

  • 3.6
  • 4.x
JctfConfig config = app.getConfig(canal);
System.out.println ("Sample rate: " + config.getTaxaAmostragem() + " Hz");
System.out.println ("Sample rate: " + session.getRate() + " Hz");

A definição de parâmetros de configuração também passou a usar funções individuais ao invés de uma estrutura.

  • 3.6
  • 4.x
config.setCodificacaoAudio(TTS_LINEAR_8);
config.setTaxaAmostragem(TTS_KHZ_8);
config.setNumeroCanaisAudio(1);
config.setCabecalhoArquivo(TTS_SEM_CAB);
config.setCabecalhoMemoria(TTS_SEM_CAB);
app.setConfig(canal, config);
session.setEncoderName("pcm/8000/8/1");

As diversas funções para efetuar síntese de fala da versão 3.6 foram substituídas por apenas duas função na nova versão: textToSpeech e textToSpeechStream. Na versão 4 o áudio pode obtido ser pelo método getAudio ou salvo em disco com a função saveAudio.

  • 3.6
  • 4.x
JctfSintese buffer_audioMM = app.sintetizaTextMM(canal "Olá mundo!");
session.textToSpeech("Olá mundo!");
byte[] buffer = session.getAudio();

Por fim, é importante liberar as sessões que não estão mais em uso. Lembre-se que o número de sessões é um recurso limitado. Consulte o método createSession para maiores detalhes.

  • 3.6
  • 4.x
app.desalocaCanal(canal);
session.release();