Migração da versão 3.6

A versão 4.1 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 os binários da versão 4.1. 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.1.

Versão 3.6 Versão 4.1
  • 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

Interfaces de programação

Versão 3.6 Versão 4.1
  • tts_inicializa
  • tts_inic_config
TTS_Initialize
tts_finaliza TTS_Terminate
tts_alocaCanal TTS_CreateSession
tts_desalocaCanal TTS_ReleaseSession
  • tts_sintetizaTexto_fm
  • tts_sintetizaTexto_mm
TTS_TextToSpeech + TTS_CopyAudio
  • tts_sintetizaTexto_ff
  • tts_sintetizaTexto_mf
TTS_TextToSpeech + TTS_SaveAudio
  • tts_sintetizaSentenca_fm
  • tts_sintetizaSentenca_mm
TTS_TextToSpeechStream + TTS_CopyAudio
  • tts_sintetizaSentenca_ff
  • tts_sintetizaSentenca_mf
TTS_TextToSpeechStream + TTS_SaveAudio
  • tts_libera_m
  • tts_libera_f
TTS_Free
tts_versao TTS_GetEngineInfo
tts_ajustaConfiguracaoSintese
tts_obtemConfiguracaoSintese
tts_mensagemErro TTS_GetLastError

Exemplo de uso

A função de 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.

  • 3.6
  • 4.1
long result;
result = tts_inic_config ("/opt/ctf");
TTS_RETURN result;
result = TTS_Initialize("/opt/cpqd/tts", "/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.1 do produto suporta múltiplas vozes, a função de criação de sessões TTS_CreateSession possui um argumento onde a aplicação pode indicar uma voz padrão.

  • 3.6
  • 4.1
long canal;
canal = tts_alocaCanal();
TTS_HANDLE session;
TTS_CreateSession("rosana-highquality", &session);

Recuperar valores de parâmetros de configuração era feito através de uma estrutura na versão 3.6. A nova versão fornece os valores individualmente através de funções destinadas a tipos de dados específicos.

  • 3.6
  • 4.1
// imprime a taxa de amostragem

_tts_config_sintese configSintese;
tts_obtemConfigSintese(canal, configSintese);
printf("Sample rate: %d Hz\n", configSintese.taxaAmostragem);
// imprime a taxa de amostragem

float value;
TTS_GetFloatParameter(session, TTS_PARAM_SAMPLE_RATE, &value);
printf("Sample rate: %d Hz\n", value);

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.1
// altera o formato de saída para PCM Linear 8000 KHz Mono

configSintese.codificacaoAudio = TTS_LINEAR_8;
configSintese.taxaAmostragem = TTS_KHZ_8;
configSintese.numeroCanaisAudio = 1;
configSintese.cabecalhoArquivo = TTS_SEM_CAB;
configSintese.cabecalhoMemoria = TTS_SEM_CAB;
tts_ajustaConfigSintese(canal, configSintese);
// altera o formato de saída para PCM Linear 8000 KHz Mono

TTS_SetStringParameter(session, TTS_PARAM_ENCODER, "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: TTS_TextToSpeech e TTS_TextToSpeechStream. Na versão 4.1 o áudio pode ser obtido pela função TTS_CopyAudio ou salvo em disco com a função TTS_SaveAudio.

  • 3.6
  • 4.1
// converte texto em fala e obtém o áudio em memória

char *buffer_voz;
tamanho = tts_sintetizaTexto_mm(canal, "Olá mundo!", &buffer_voz);
// converte texto em fala e obtém o áudio em memória

// primeiro convertemos o texto em fala
TTS_TextToSpeech(session, "Olá mundo!");

// depois copiamos o áudio para uma região de memória
uint32_t length;
uint8_t *buffer;
TTS_GetAudioLength(session, &length);
buffer = (uint8_t*) malloc(length);
TTS_CopyAudio(session, 0, length, buffer, &length);