Sinistra <- Libnet, programmazione C e Packet Shaping - Indice Generale - Copertina - Librerie matematiche del CERN -> Destra

Sistemi Liberi


Emacs + Festival

Emacs, lo GNU parlante

di Tito Rizzo

L'articolo...

In questo articolo si cerca di fornire un'introduzione al programma di sintetizzazione vocale Festival ed alle possibilità di integrarlo con Emacs/Emacspeak per ottenere un completo desktop audio utilizzando unicamente software libero e gratuito. Una particolare attenzione è riservata all'opportunità di aggiungere a Festival il supporto per la lingua italiana.



Festival

Festival è un software TTS (text-to-speech) in grado di trasformare del testo in voce sviluppato dal Centre for Speech Technology Research dell'Università di Edimburgo. Il sistema base è distribuito sotto una licenza definita di tipo X11, che riprende cioè la licenza elaborata dal MIT per il sistema X Window (http://www.opensource.org/licenses/mit-license.php). Altre parti, come alcune voci e relativi dizionari, sono libere solo per uso non commerciale.

La home page del progetto è http://www.cstr.ed.ac.uk/projects/festival.html. Pacchetti precompilati in formato .rpm o .deb sono generalmente già inclusi nei CD/DVD delle principali distribuzioni di GNU/Linux. L'installazione non presenta quindi alcuna difficoltà ed è possibile che Festival sia già presente nel proprio sistema.

Per avviare Festival è sufficiente aprire una finestra di comandi (shell), digitare festival e premere [Invio]; ci si troverà quindi di fronte all'interprete dei comandi del programma:

$ festival
Festival Speech Synthesis System 1.95:beta July 2004
Copyright (C) University of Edinburgh, 1996-2004. All rights reserved.
For details type `(festival_warranty)'
festival>

Per uscire dall'interprete dei comandi di Festival, bisogna premere Ctrl+D oppure digitare (quit).

Per testare il funzionamento del programma si può digitare:

festival> (intro)

Se la scheda sonora è correttamente configurata ed il volume non è a zero, si dovrebbe sentire un messaggio audio, in inglese, di presentazione del software. Se tutto è a posto si possono tentare altri esperimenti.

È possibile passare a Festival una frase qualsiasi come parametro, racchiudendola tra doppi apici, mediante il comando SayText:

festival> (SayText "Do you know what tomorrow is, Kitty?")
#<Utterance 0x410dc7d8>
festival>

È possibile redirigere anche il contenuto di un file di testo verso Festival per ottenerne la sintesi:

festival> (tts "unfile.txt" nil)
nil
festival>

Queste stesse operazioni si possono effettuare direttamente da shell:

$ echo "hello mum" | festival --tts
$ festival --tts unfile.txt

Festival supporta l'inglese come lingua principale per la sintesi vocale; è possibile sostituirla con la lingua spagnola o con quella con inflessione americana.

Le voci normalmente distribuite con Festival sono: la voce maschile inglese (voice_rab_diphone), la voce maschile americana (voice_ked_diphone) e la voce maschile spagnola (voice_el_diphone).

Ulteriori voci inglesi, americane, spagnole e tedesche, stavolta anche in versione femminile, più alcuni file necessari al loro funzionamento, si possono prelevare da http://cslu.cse.ogi.edu/tts/download/. Da notare che per installare queste voci è necessario ricompilare Festival e quindi disporre dei relativi sorgenti.

Ecco come impostare una voce differente, per esempio quella spagnola:

festival> (voice_el_diphone)
el_diphone
festival> (SayText "Esta luz, este fuego que devora")
#<Utterance 0x41041168>
festival> 

Con Festival viene fornito lo script text2wave, che permette si trasformare un file di testo in un file audio wav. L'utilizzo di base è questo (digitare text2wave -h per visualizzare una schermata di aiuto):

$ text2wave unfile.txt -o unfile.wav

Festival è stato concepito specificamente come ambiente per lo sviluppo di nuove tecniche di sintesi. Questa rapida presa di contatto serve solo a permetterne un utilizzo basilare; per maggiori ragguagli si può consultare proficuamente la documentazione fornita con il programma. L'aspetto che qui ci interessa approfondire è l'utilità di Festival come sistema text-to-speech adatto a essere incluso in altri progetti, che richiedano un output vocale.

(SayText "`O sole mio!")

Festival che parla inglese o spagnolo è certamente divertente e anche istruttivo ma per poterlo sfruttare appieno è necessario fare in modo che parli anche italiano.

Da qualche tempo ciò è diventato possibile grazie al lavoro dello IFM Development Team presso lo ISTC-SPFD CNR e lo ITC-irst. Il sito ufficiale del progetto è parecchio confusionario. Ad ogni modo, i file necessari sono disponibili anche su questo sito di Sourceforge sotto forma di un unico pacchetto Italian-FESTIVAL.zip.

All'interno del pacchetto, sono presenti questi file:

Stando alle istruzioni di installazione, i file .zip si dovrebbero scompattare nella directory radice di Festival. Questo va bene se Festival è stato installato dai sorgenti, quindi con un percorso tipo /usr/local/festival/festival e una sottodirectory /usr/local/festival/festival/lib, che è quella che i nostri file andranno a cercare; in tal caso è sufficiente spostarsi in /usr/local/festival e da qui decomprimere i file con unzip.

Se Festival è stato invece installato da pacchetti precompilati, sarà opportuno decomprimere i vari pacchetti .zip in una directory a propria scelta, ad esempio nella propria home, quindi fare cd $HOME/festival/lib e copiare le tre sottodirectory dicts/, italian_scm/ e voices/ all'interno della directory delle librerie di Festival; nel caso di Fedora, ad esempio, dovrebbe trattarsi di /usr/share/festival.

Dato che questi script e moduli servono a permettere l'utilizzo da parte di Festival delle voci italiane sviluppate per il sintetizzatore Mbrola, sarà necessario installare anche la versione di Mbrola per Linux (pacchetti .rpm o .deb si possono trovare qui), oltre ad almeno una delle due voci italiane: quella femminile, it4-010926.zip, e quella maschile, it3-010304.zip

L'installazione di Mbrola è molto semplice e non è il caso di descriverla. Le due voci andranno decompresse nelle rispettive directory: voices/italian/lp_mbrola/ per la voce femminile e voices/italian/pc_mbrola per quella maschile. A questo punto si può lanciare Festival e provare a sintetizzare qualche frase in italianissimo idioma, dopo aver digitato uno dei due comandi (voice_lp_mbrola) o (voice_pc_mbrola).

Se si vuole che Festival selezioni automaticamente la voce italiana si può modificare il file voices.scm (la voce che compare per prima nella lista sarà quella predefinita):

(defvar default-voice-priority-list 
 '(pc_mbrola
 lp_mbrola
 kal_diphone
 cmu_us_bdl_arctic_hts

Oppure si può inserire nel file di configurazione globale siteinit.scm o nel proprio file personale $HOME/.festivalrc, la riga:

(set! voice_default 'voice_lp_mbrola)

La parola a Emacs

Festival può essere agevolmente usato tramite l'interfaccia di Emacs. A questo scopo con Festival viene fornito lo script festival.el, che deve essere copiato in una directory in cui Emacs possa trovarlo, per esempio /usr/share/emacs/site-lisp/, quindi si devono aggiungere al file .emacs, presente nella propria home, le righe:

(autoload 'say-minor-mode "festival" "Menu for using Festival." t)
(say-minor-mode t)

festival.el mette a disposizione un nuovo minor mode che aggiunge un menù Say con opzioni per riprodurre come voce una porzione di testo, un intero buffer, per selezionare una determinata voce, ecc. Un elenco dei vari comandi disponibili si ottiene anche digitando M-x festival-[TAB]', dove M indica il tasto Meta, solitamente corrispondente al tasto Alt nella parte sinistra della tastiera.

Da notare che le voci elencate nel menù non corrispondono necessariamente alle voci effettivamente supportate dalla propria installazione di Festival. Per aggiungere o eliminare voci dal menù, è necessaria una modifica manuale di festival.el. Modificandolo per esempio in questo modo, si potranno rendere disponibili nel menu le voci italiane:

 78 (defun festival-pc () 
 79 (interactive)
 80 (festival-send-command '(voice_pc_mbrola)))
 81 (defun festival-lp () 
 82 (interactive)
 83 (festival-send-command '(voice_lp_mbrola)))
 
 . .....................................................................
 
 201 (setq say-lang-menu (make-sparse-keymap "Select language"))
 202 (fset 'say-lang-menu (symbol-value 'say-lang-menu))
 203 (define-key say-lang-menu [say-lang-italia1] '("Italian pc" . festival-pc))
 204 (define-key say-lang-menu [say-lang-italia2] '("Italian lp" . festival-lp))
 205 (define-key say-lang-menu [say-lang-spain1] '("Spanish el" . festival-spanish))

Flite

Flite è un progetto basato su Festival e sviluppato dalla Carnegie Mellon University. Si tratta di software libero, anch'esso distribuito sotto una licenza tipo X11. A differenza di Festival, che è scritto in C++, Flite è scritto in ANSI C, il che dovrebbe garantire una maggiore portabilità. Non è concepito come piattaforma di ricerca e sviluppo per la sintetizzazione vocale, ma si propone semplicemente come motore di sintesi vocale piccolo e leggero, adatto all'impiego anche su dispositivi come i PDA e simili.

I sorgenti di Flite possono essere scaricati da http://www.speech.cs.cmu.edu/flite/. È comunque preferibile installare Flite tramite i pacchetti binari, ad esempio con # apt-get install flite se si usa Debian. Un pacchetto .tgz per Slackware è disponibile su ftp://ftp.holmesgrown.com/slackware-packages/.

Una volta installato, Flite può essere lanciato da linea di comando, con l'indicazione di una stringa di testo:

$ flite "hello chum"

o

$ flite -t "hello chum"

oppure di un file da sintetizzare:

$ flite miofile.txt

o

$ flite -f miofile.txt

È anche possibile reindirizzare l'output su un file:

$ flite -f proclaim.txt -o proclaim.wav

Emacspeak + Flite + Eflite

Emacspeak è un sottoinsieme di Emacs per produrre output vocale. Per fare questo, Emacspeak si deve appoggiare a un qualche sintetizzatore hardware o software.

Eflite è un server vocale che permette l'interazione tra Emacspeak e Flite.

Una volta installati tutti i programmi necessari (Emacspeak, Flite, Eflite), è necessario impostare la variabile ambientale $DTK_PROGRAM tramite il comando:

$ export DTK_PROGRAM=/usr/local/bin/eflite

che può essere incluso nel file /etc/profile per rendere la variabile permanente. Il percorso di Eflite può essere ovviamente differente),

A questo punto si provi a lanciare Emacspeak. Salvo errori ed omissioni, Emacspeak dovrebbe iniziare immediatamente a chiacchierare, affermando la sua piena funzionalità. Si potrà notare come ogni lettera, parola o comando digitato all'interno di Emacspeak, venga immediatamente ripetuto a voce.

La qualità dell'audio non è, a dire il vero, eccezionale. Si tenga comunque presente che lo sviluppo di Eflite non ha ancora raggiunto uno stadio di sufficiente maturità. Per una migliore comprensione del parlato si può provare a rallentare la velocità di riproduzione con Ctrl-e d 2.

Al momento Flite supporta unicamente la lingua inglese. Se sul sistema è presente Festival, con relativa voce italiana, anche in Emacspeak si può avviare un processo di sintesi di Festival (M-x festival-start-process) e selezionare la voce italiana per leggere del testo, ecc.

Al momento Emacspeak rappresenta probabilmente il progetto più avanzato di desktop audio per i non vedenti e per le persone con seri deficit visivi.

Il modo in cui Emacspeak organizza lo schermo, come un unico spazio rettangolare, eventualmente suddiviso in finestre che si affiancano senza sovrapporsi, corrisponde piuttosto bene all'idea che i non vedenti hanno dello schermo di un computer.

Con Emacspeak si può gestire la posta, navigare, scrivere e leggere (o meglio ascoltare) le opere letterarie preferite. Sul sito del Progetto Gutenberg sono disponibili gratuitamente, in varie lingue, più di 15.000 opere letterarie, di saggistica, ecc., generalmente archiviate come normali file di testo. Il file dell'opera che ci interessa può dunque essere agevolmente aperto all'interno di Emacspeak e sintetizzato, per esempio, con il comando M-x festival-say-buffer.

Note finali

Non è certamente necessario ribadire ulteriormente quale importanza abbiano tutti i progetti indirizzati a migliorare l'accessibilità di GNU/Linux. Una utile visione d'insieme viene fornita dallo Accessibility-HOWTO.

Sul sito del GLUX è disponibile un elenco, purtroppo non molto aggiornato, di risorse relative a Software libero e disabilità.

Un progetto recente che vale la pena citare è KTTS (KDE Test-to-Speech), un sottosistema di sintesi vocale per il desktop KDE in grado di appoggiarsi a vari motori di sintesi vocale, tra i quali appunto Festival e Flite.




L'autore

Tito Rizzo trova nell'utilizzo di GNU/Linux (ma anche di NetBSD) e del Software Libero un sacco di ottime occasioni per capire, non solo l'informatica, ma più in generale il mondo.



Sinistra <- Libnet, programmazione C e Packet Shaping - Indice Generale - Copertina - Librerie matematiche del CERN -> Destra