31.10.2012 Aufrufe

DIPLOMARBEIT

DIPLOMARBEIT

DIPLOMARBEIT

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

3.4 Verbinden der Komponenten<br />

In der ersten Zeile wird hier der bei der Instanziierung übergebene Verweis auf die Audio‐Ausgabe<br />

(SourceDataLine) festgehalten. Danach wird ein PipedInputStream angelegt, der mit einem<br />

PipedOutputStream verbunden wird. Dadurch entsteht eine sogenannte Pipe 17 . Das ist ein ge‐<br />

pufferter Datenstrom zwischen zwei Prozessen. So kann der Schreib‐ und Leseprozess voneinander<br />

entkoppelt werden. Die Daten werden in den PipedOutputStream geschrieben und können<br />

dann von einem anderen Thread aus dem PipedInputStream gelesen werden.<br />

Des Weiteren findet dort auch eine Umwandlung zwischen den Audioformaten statt:<br />

Das Zielformat ist im ersten und die Quelle im zweiten Parameter angegeben. Damit die Audiodaten<br />

auch korrekt ausgegeben werden können, muss das Format mit dem der Audioausgabe übereins‐<br />

timmen. Das Eingabeformat ist beim verwendeten VoIP‐Clienten üblicherweise 8 Bit ULAW und das<br />

Ausgabeformat 16 Bit PCM. Die Konversion wird von der bereits erwähnten Klasse AudioSystem<br />

durchgeführt, welche ein Bestandteil von Java ist.<br />

Da es sich bei der Klasse AudioOutputStream um eine Ableitung der Klasse OutputStream<br />

handelt, findet man dort auch die write()‐Methoden, welche die Methoden der Oberklasse über‐<br />

schreiben. Es gibt insgesamt drei dieser Methoden, jeweils mit unterschiedlichen Parametern. Es<br />

muss nur die write()‐Methode für ein einzelnes Byte implementiert werden, die anderen können<br />

durch mehrfaches Aufrufen dieser einen Methode nachgeahmt werden 18 . Im Folgenden wird nur die<br />

Methode mit einem Byte als Parameter behandelt.<br />

Vorausgesetzt, die oben erwähnte Pipe wurde erfolgreich erstellt, so wird das Byte b in die Pipe ge‐<br />

schrieben und die konvertierten Daten werden anschließend aus der Pipe gelesen, welche dann auf<br />

der Audiohardware ausgegeben werden:<br />

Diese Stelle ist auch ideal dazu geeignet, die konvertierten Daten für den Spracherkenner abzuzwei‐<br />

gen. Der Datenfluss ist im folgenden Diagramm nochmal zusammenfassend dargestellt:<br />

62<br />

input_stream = AudioSystem.getAudioInputStream(<br />

source_line.getFormat(), audio_input_stream);<br />

output_stream.write(b);<br />

int len = input_stream.read(buff, 0, buff.length);<br />

source_line.write(buff, 0, len);<br />

Abbildung 41: Der Weg der Audiodaten im VoIP‐Clienten<br />

17 engl. für Rohr, Röhre<br />

18 Die Implementierung der anderen write()‐Methoden ist sinnvoll um die Performance zu optimieren.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!