Ott 012008
 

Come implementare un sistema di sintesi vocale per dare una voce al vostro sito. 

In un progetto che ho affrontato di recente, mi si richiedeva di creare un personaggio animato parlante in lingua italiana.
Questo portava ovviamente a dover risolvere una serie di problematiche:

  1. trovare un sistema di sintesi vocale in Italiano.
  2. trovare un metodo per “servire” i file audio sintetizzati, possibilmente utilizzando una quantità di banda molto limitata.
  3. Integrare i sottosistemi.

1) La sintesi vocale

Partendo da una piattaforma LINUX la scelta di sistemi TTS (true time speech) è abbastanza ampia.
Purtroppo tale scelta si riduce notevolmente ricercando TTS che supportino in maniera decente la lingua italiana.
Dopo alcune ricerche sono approdato su un progetto italiano del CNR il cui scopo era fornire voci italiane al popolare “festival”.
Il sito è il seguente : http://www2.pd.istc.cnr.it/TTS/It-FESTIVAL.htm
Purtroppo tale progetto non sembra più mantenuto, ma dopo numerose vicissitudini (la piattaforma di riferimento originale era windows) sono riuscito ad installare quanto proposto e dare una voce italiana a festival.
La qualità non e la stessa dei prodotti commerciali (cfr loquendo), ma è più che sufficiente a rendere intelligibile il testo sintetizzato.
Purtroppo il modulo MBROLA non è free, ma può essere utilizzato per usi non commerciali.

2) La parte WEB

Come si possono servire i file audio in una pagina HTML in maniera più “cross browser” possibile ed utilizzando poca banda?
Dopo vari deludenti tentativi atti a conglobare l’oggetto audio nel codice html, mi sono imbattuto nel progetto open source SoundManager.
Tale progetto fornisce un’iterfaccia Javascript che consente di eseguire file audio attraverso un piccolo file Flash.
La libreria fornita è molto completa e permette di utilizzare metodi asincroni. In tal modo è persino possibile creare eventi legati temporalmente all’esecuzione del file audio.
Questo mi è stato utile per creare l’animazione del viso del personaggio sincronizzata con le parole pronunciate.
SoundManager è compatibile con il formato mp3 e questo permette il raggiungimento dell’ultimo requisito richiesto cioè la riduzione della banda utilizzata.

3) L’integrazione

Sorge ora il problema di come integrare i due sottosistemi.
Per cominciare Festival fornisce un singolo file audio in formato .wav per ogni singola frase pronunciata.
Assumendo che le frasi da dire vengano inserite in un form web e passate con metodo POST, con un semplice script è possibile raccogliere il testo e passarlo a Festival per la sintesi.
Il risultato è una serie di file .wav numerati con numerazione crescente.
Pensando ad un ambiente “trafficato” con più utenti collegati al servizio ho deciso di creare dinamicamente delle cartelle nel cui nome era presente l’identificativo della sessione per evitare che un personaggio andasse a pronunciare le frasi postate da un altro utente.
A questo punto è necessario convertire tutti i file in mp3.
In LINUX questo risultato può essere ottenuto con varie utiliti tra cui LAME.
Dopo la conversione non resta che passare il tutto alla pagina HTML ed al SoundManager.

Riassumendo i passaggi sono i seguenti:
________     ________     ________     _________________
|Form Web|–>|Festival|–>|Lame mp3|–>|SoundManager Web |
———-   ———-   ———    ——————

Per vedere (ed ascoltare) il sistema funzionante potete provare l’esempio nell’apposita sezione.

Nella realtà il progetto comprendeva anche l’interfacciametno con un sistema di intelligenza artificiale per far si che il personaggio virtuale desse risposte “intelligenti”, ma questa è un’altra storia e… con ogni probabilità un altro articolo!