Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Text to Speech con Java e FreeTTS

Un semplice esempio di utilizzo di FreeTTS, una libreria per la creazione di pagine "parlanti"
Un semplice esempio di utilizzo di FreeTTS, una libreria per la creazione di pagine "parlanti"
Link copiato negli appunti

In questo articolo, presentiamo la libreria FreeTTS, sviluppata dalla Carnegie Mellon University, che permette di convertire un testo nel suo corrispondente formato audio. La sigla TTS è il noto acronimo di Text To Speech, letteralmente: "dal Testo alla Voce". Più correttamente si tratta di sintesi vocale, un processo che è scandito da alcune fasi:

  • analisi della struttura del testo - il testo viene analizzato per determinare l'inizio e la fine delle singole frasi facendo particolare attenzione alla punteggiatura
  • processo del testo - il testo viene analizzato per individuare eventuali costrutti del linguaggio, come, ad esempio, abbreviazioni, acronimi e numeri
  • conversione del testo in fonema - ciascuna parola del testo viene convertita nel corrispondente fonema, un'unità sonora che rappresenta la base del linguaggio utilizzato
  • analisi prosodica - in questa fase, viene determinata l'intonazione, il ritmo e l'accento adeguato per ciascuna frase del testo
  • produzione della forma d'onda - i fonemi generati e le informazioni prosodiche, vengono utilizzati per generare la forma d'onda adatta a ciascuna frase del testo

Queste fasi richiedono elaborazioni complesse che possiamo Possiamo ignorare in questo articolo, poiché è la libreria FreeTTS, utilizzando Java Speech API (JSAPI) e altre librerie esterne come Flite, Festival e FestVox, che si occupa di fornirci queste elaborazioni e produrre un audio a partire da un qualunque testo.

FreeTTS è un progetto opensource e la sua licenza, ne permette l'uso e la redistribuzione gratuita senza alcun tipo di restrizione, possiamo scaricarla dal sito ufficiale.

Un caso pratico

I campi di utilizzo del text to speech sono molti e vanno dalla gestione di sportelli vocali, al supporto agli ipovedenti, alle applicazioni mobili.

Nel nostro esempio costruiamo una semplice pagina Web, nella quale l'utente può inserire il proprio testo, e da una servlet, che intercetta il testo e, mediante la libreria FreeTTS, genera l'audio corrispondente.

Al momento, sul sito FreeTTS sono disponibili soltanto 3 voci in lingua inglese. È possibile comunque creare una propria voce utilizzando altre librerie gratuite come FestVox.

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<servlet>
		<display-name>SpeechServlet</display-name>
		<servlet-name>SpeechServlet</servlet-name>
		<servlet-class>it.html.SpeechServlet</servlet-class>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>SpeechServlet</servlet-name>
		<url-pattern>/SpeechServlet</url-pattern>
	</servlet-mapping>
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

</web-app>

Nel file web.xml, definiamo la servlet, SpeechServler, e la home page dell'applicazione, la index.jsp che sarà costituita da un classico form di tipo POST, nel quale inseriamo una textarea, in cui l'utente potrà inserire la frase che desidera far leggere al programma.

index.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>Html.it - FreeTTS Example</title></head>

<body>

	<form action="SpeechServlet" method="post">
		<textarea rows="15" cols="15" name="testo"></textarea>
		<input type="submit" value="Leggi!" />
	</form>

</body>
</html>

SpeechServlet

package it.html;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.speech.freetts.Voice;
import com.sun.speech.freetts.VoiceManager;
import com.sun.speech.freetts.util.Utilities;

public class SpeechServlet extends HttpServlet 
{
  private static final long serialVersionUID = -7063667152016222434L;
  
  protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException 
  {
    Voice voice = VoiceManager.getInstance().getVoice(Utilities.getProperty("voice16kName", "kevin16"));
    voice.allocate();
    voice.speak(req.getParameter("testo"));
    
    res.sendRedirect(res.encodeRedirectURL("index.jsp"));
  }
}

La Servlet è costituita da poche righe di codice, ma molto significative.

Voice voice = VoiceManager.getInstance().getVoice(Utilities.getProperty("voice16kName", "kevin16"));

Il metodo getVoice della classe VoiceManager, restituisce un'istanza dell'oggetto Voice. In questo esempio, richiamiamo la voce kevin16 inclusa di default nella libreria.

voice.allocate();

Il metodo allocate carica la voce in memoria.

voice.speak(req.getParameter("testo"));

Il metodo speak genera ed esegue l'audio corrispondente alla stringa passata in input; nel nostro caso, il testo inserito dall'utente nella textarea.

Figura 1. La pagina Web
La pagine Web

Ti consigliamo anche