Infra - Linux

Festival: O Sintetizador de Voz for Linux

Quem disse que o Linux não é capaz pronunciar textos? Embora este sintetizador de voz suporte apenas Ingles e Espanhol, vale a pena averiguar os recursos oferecido por este pacote.

por Alessandro de Oliveira Faria



Quem disse que o Linux não é capaz pronunciar textos? Embora este sintetizador de voz suporte apenas Ingles e Espanhol, vale a pena averiguar os recursos oferecido 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.

Download e Instalação:

Podemos efetuar o download direto com o wget ou selecionar o pacote desejado a partir de uma lista.

wget ftp://ftp.univie.ac.at/systems/linux/suse/i386/9.1/suse/i586/festival-1.4.3-32.i586.rpm

http://rpm.pbone.net/index.php3/stat/4/idpl/1221772/com/festival-1.4.3-32.i586.rpm.html

Apenas para efeito de documentário, logo abaixo o comando de instalação:

# rpm -ivh festival-1.4.3-32.i586.rpm

Executando e testando o sintetizador.

No modo consolo digite festival para entrar no modo interativo de sintetizador. Se todos os passos acima foram concluído com sucesso, iremos obter a seguite tela:

cabelo@linux:~> festival
Festival Speech Synthesis System 1.4.3:release Jan 2003
Copyright (C) University of Edinburgh, 1996-2003. All rights reserved.
For details type `(festival_warranty)"
festival>

Vamos agora ouvir as primeiras palavras do nosso servidor Linux, digitando o comando SayText e a constante a ser pronunciada entre parêntese:

festival> (SayText "Hi Linux System")
#<Utterance 0x403972a8>
festival>

Podemos também reproduzir um texto pré-definido em uma variável. No exemplo logo abaixo, a variável intro está definida em /etc/festival.conf.

festival> (intro)
nil

O modo interativo pode fazer cálculos conforme o exemplo abaixo:

festival> (+ 34 52)
86

Agora vamos sair do festival com o comando (quit) e reproduzir um arquivo texto armazenado no disco:

festival> (quit)
cabelo@linux:~> cd /usr/share/doc/packages/festival
cabelo@linux:/usr/share/doc/packages/festival> ls
addr-mode.scm  benchmark.text  ex1.email  INSTALL     README        th-mode.scm    webdemo.scm
apml.dtd       COPYING         ex1.ogi    intro.text  spintro.text  toksearch.scm

Vamos listar o conteúdo do arquivo intro.text e logo após executar a pronuncia do mesmo.

cabelo@linux:/usr/share/doc/packages/festival> cat intro.text

This is a short introduction to the Festival Speech Synthesis System.
Festival was developed by Alan Black and Paul Taylor, at the Centre
for Speech Technology Research, University of Edinburgh.

Existem duas maneira de reproduzir este arquivo, no modo interativo e console. Para reproduzi-lo no modo interativo, vamos executar o festival novamente e executar o seguinte comando:

cabelo@linux:/usr/share/doc/packages/festival>festival
Festival Speech Synthesis System 1.4.3:release Jan 2003
Copyright (C) University of Edinburgh, 1996-2003. All rights reserved.
For details type `(festival_warranty)"
festival>
festival> (tts "intro.text" nil)
nil
festival>

Agora vamos executar a pronúncia no modo comando do console, assim possibilitando a criação de scripts.

festival> (quit)
cabelo@linux:/usr/share/doc/packages/festival> festival --tts intro.text
cabelo@linux:/usr/share/doc/packages/festival>

Agora para finalizar, vamos gerar um arquivo texto, executar a pronuncia e salva-lo em um arquivo de áudio tipo wave.

cabelo@linux:~> echo "My name is hair." > falar.txt
cabelo@linux:~> text2wave falar.txt -o pronuncia.wav
cabelo@linux:~> playsound pronuncia.wav
Now playing [pronuncia.wav]...
cabelo@linux:~>

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:

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; 
}

Com este documento tomamos conhecimento de mais uma ferramenta no universo Linux.

Alessandro de Oliveira Faria

Alessandro de Oliveira Faria - Sócio-proprietário da empresa NETi TECNOLOGIA fundada em Junho de 1996 (http://www.netitec.com.br), empresa especializada em desenvolvimento de software e soluções biométricas, Consultor Biométrico na tecnologia de reconhecimento facial, atuando na área de tecnologia desde 1986 assim propiciando ao mercado soluções em software nas mais diversas linguagens e plataforma, levando o Linux a sério desde 1998 com desenvolvimento de soluções open-source, membro colaborador da comunidade Viva O Linux, mantenedor da biblioteca open-source de vídeo captura entre outros projetos.