25.01 Sag „Hello World“

Heutzutage wird moderne und barrierefreie Technik immer wichtiger. Ein Teil davon ist die Sprachausgabe in Programmen und das damit verbundene Vorlesen von Texten durch den Computer. Vor allem wenn dynamische Texte vorgelesen werden sollen, kommen Entwickler ins Straucheln, da diese nicht mehr einfach als Audio-Datei dem Programm mitgegeben werden können. JSAPI bietet hier für die Java-Plattform Abhilfe. Es handelt sich hierbei um eine Text-To-Speech-Engine, die eine Sprachausgabe von dynamischen Texten ermöglicht.

Zuerst muss festgestellt werden, dass Sun die Implementierung der JSAPI nicht selbst liefert. Das heißt, dass Sie bei der Verwendung auf die Implementation eines dritten Herstellers zurückgreifen müssen. Eine Auflistung solcher Implementierungen finden Sie in den JSAPI FAQ von Sun. Wir werden uns in diesem Kapitel hauptsächlich mit der FreeTTS-Implementierung auseinandersetzen. Aber auch die anderen Implementierungen werde ich Ihnen zu einem späteren Zeitpunkt kurz vorstellen. In diesem Kapitel beschäftigen wir uns jedoch lediglich mit einem einfachen „Hello World“, gesprochen von FreeTTS.

Konfiguration von FreeTTS

Wie bei jedem anderen externen Programmteil auch, müssen Sie die benötigten JARs herunterladen und in den Classpath Ihrer Anwendung einbinden. Sie können FreeTTS direkt von sourceforge.net herunterladen. Das Projektverzeichnis finden Sie hier. Laden Sie sich hierbei die Binaries (Stand 09.03.2009: freetts-1.2.2-bin.zip) herunter. Sobald Sie das Archiv entpackt haben, finden Sie dort im Verzeichnis lib die Dateien freetts.jar, en_us.jar, cmulex.jar und cum_us_kal.jar. Diese müssen Sie für unser heutiges Beispiel als einzige in den Classpath aufnehmen und einbinden.

Sag „Hello World“

Ihr Programm zum Reden zu bewegen, ist nun denkbar einfach. Lediglich diese paar Zeilen Code sind notwendig:

package de.jbb;

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

public class SayHelloWorld {

  public static void main(String[] args) {

    VoiceManager voiceManager = VoiceManager.getInstance();
    Voice voice = voiceManager.getVoice("kevin16");

    voice.allocate();

    voice.speak("Good morning Java World! It's a great day to speak some words.");

    voice.deallocate();
  }
}

Wenn Sie alles richtig gemacht haben, ertönt nun beim Ausführen des Programms der Text „Good morning Java World! It’s a great day to speak some words.“ aus Ihrem Lautsprecher.

Sehen wir uns den Quellcode an. Zuerst benötigen wir einen VoiceManager, der für die Handhabung der unterschiedlichen Stimmen zuständig ist. Über den Methodenaufruf getVoice(String) erhalten wir ein Objekt des Typs Voice, welches die eigentliche Stimme repräsentiert. Sie können sich mit folgenden Code alle verfügbaren Stimmen aufzeigen lassen:

VoiceManager voiceManager = VoiceManager.getInstance();
Voice[] voices = voiceManager.getVoices();
for (int i = 0; i < voices.length; i++) {
  System.out.println(voices[i].getName());
}

Natürlich lassen sich auch weitere Stimmen einbinden. Dies lernen Sie in einem späteren Kapitel.

Als nächstes muss das Lexikon, welches der Stimme zugeordnet ist, mitsamt der Sprachausgabe geladen werden. Dies geschieht mit dem Aufruf voice.allocate. Die nächste Zeile sollte selbsterklärend sein. Mit voice.speak(String) wird der übergebene Text vorgelesen. Zum Schluss müssen die geladenen Daten wieder freigegeben werden. Dies geschieht über voice.deallocate.

Deutsche Sprachausgabe?

Natürlich können Sie FreeTTS auch deutsche Sätze vorlesen lassen. Die sind aber nicht sonderlich gut verständlich und haben alle einen englischen Akzent. Dies liegt daran, dass FreeTTS erst einmal nur für die englische Sprachausgabe gedacht ist. Andere Speech-To-Text-Engines beherrschen aber durchaus auch andere Sprachen als Englisch. Es ist auch möglich FreeTTS eine andere Sprache beizubringen. Dies ist aber nicht gerade trivial, weshalb wir darauf ebenfalls zu einem späteren Zeitpunkt eingehen werden.

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.