DIPLOMARBEIT
DIPLOMARBEIT
DIPLOMARBEIT
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
3.4 Verbinden der Komponenten<br />
3.4.1.1.3 Datenfluss Sprachserver<br />
Nachdem der Weg der Daten im VoIP‐Client bekannt ist, muss untersucht werden, wie der Sprach‐<br />
server die Audiodaten bezieht. Für die Spracherkennung ist die Klasse Recognizer zuständig. In<br />
der Methode recognize() findet man folgende Zeile:<br />
boolean response = wgd.isUtt(timeout);<br />
Hier wird der Wortgrenzendetektor angewiesen, eine Äußerung aufzuzeichnen. Wie schon bei der<br />
Beschreibung der Komponenten erwähnt, ist es auch die Aufgabe der Klasse WGD, die Audiodaten zu<br />
beziehen.<br />
Die Aufzeichnung wird in der Methode isUtt() der Klasse WGD durch folgenden Aufruf eingeleitet:<br />
jaudio.startRecording();<br />
Mit Hilfe der Methode readSamples()der Klasse JAudio können später Audiodaten gelesen<br />
werden:<br />
buff = jaudio.readSamples();<br />
Die Aufgabe wird hier an die Klasse JAudio weitergereicht. In deren Konstruktor befinden sich diese<br />
Anweisungen:<br />
audioFormat = new AudioFormat(sampleRate, 16, 1, true, true);<br />
DataLine.Info info = new DataLine.Info( TargetDataLine.class,<br />
audioFormat);<br />
[…]<br />
line = (TargetDataLine) AudioSystem.getLine( info );<br />
line.open( audioFormat );<br />
Hier wird die Hardware für die Audioeingabe angesprochen, d. h. der Audioeingang wird geöffnet.<br />
Die Klasse TargetDataLine ist das Gegenstück zu SourceDataLine. Die Referenz auf eine<br />
Instanz von TargetDataLine wird wieder von der Klasse AudioSystem bereitgestellt. Ebenso<br />
wird ein Format übergeben, in dem später die Audiodaten zur Verfügung stehen.<br />
In der Methode readSamples() können anschließend Daten von der Audioquelle gelesen:<br />
numBytesRead = line.read(data, 0, data.length);<br />
Die Variable data ist hier ein Byte‐Array in dem die gelesenen Daten abgespeichert werden.<br />
Damit ist auch bekannt, wie der Sprachserver die Audiodaten bezieht.<br />
3.4.1.2 Umleitung der Daten<br />
3.4.1.2.1 Konzept<br />
Da nun die Datenquelle sowie die neue Datensenke bekannt sind, müssen Überlegungen dazu anges‐<br />
tellt werden, wie man die Daten am besten dorthin umleitet. Eine Möglichkeit wäre, die Klasse<br />
JAudio direkt von dem PipedInputStream aus der Klasse AudioOutputStream lesen zu<br />
63