Festival: O sintetizador de voz para Linux
Quem disse que o Linux não é capaz de pronunciar textos? Embora este sintetizador de voz suporte apenas inglês e espanhol, vale à pena averiguar os recursos oferecidos por este pacote. Fique impressionado com a flexibilidade operacional do programa. Agora só nos resta torcer para que apareçam colaboradores brasileiros o suficiente para disponibilizar o idioma Português (Brasil).
Parte 3: API em C++
Podemos usar API em C++ declarando as seguintes funções externas:
Em primeiro lugar, devemos inserir o arquivo .h
#include festival/src/include/festival.h
Função de inicialização da biblioteca:
void festival_initialize(int load_init_files,int heapsize);
Função para reprodução de um arquivo texto:
int festival_say_file(const EST_String &filename);
Função para reprodução de strings constantes:
int festival_say_text(const EST_String &text);
Função para leitura de arquivos de comandos:
int festival_load_file(const EST_String &filename);
Função execução comandos:
int festival_eval_command(const EST_String &expr);
Função para gerar Wave:
int festival_text_to_wave(const EST_String &text,EST_Wave &wave);
Veja um simples exemplo:
Em primeiro lugar, devemos inserir o arquivo .h
#include festival/src/include/festival.h
Função de inicialização da biblioteca:
void festival_initialize(int load_init_files,int heapsize);
Função para reprodução de um arquivo texto:
int festival_say_file(const EST_String &filename);
Função para reprodução de strings constantes:
int festival_say_text(const EST_String &text);
Função para leitura de arquivos de comandos:
int festival_load_file(const EST_String &filename);
Função execução comandos:
int festival_eval_command(const EST_String &expr);
Função para gerar Wave:
int festival_text_to_wave(const EST_String &text,EST_Wave &wave);
Veja um simples exemplo:
int main(int argc, char **argv)
{
EST_Wave wave;
int heap_size = 210000;
int load_init_files = 1;
festival_initialize(load_init_files,heap_size);
festival_say_file("/etc/motd");
festival_eval_command("(voice_ked_diphone)");
festival_say_text("hello world");
festival_text_to_wave("hello world",wave);
wave.save("/tmp/wave.wav","riff");
festival_wait_for_spooler();
return 0;
}
{
EST_Wave wave;
int heap_size = 210000;
int load_init_files = 1;
festival_initialize(load_init_files,heap_size);
festival_say_file("/etc/motd");
festival_eval_command("(voice_ked_diphone)");
festival_say_text("hello world");
festival_text_to_wave("hello world",wave);
wave.save("/tmp/wave.wav","riff");
festival_wait_for_spooler();
return 0;
}
Testei e posso afirmar: funciona muuuito bem!
meus parabens!