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 />
lassen. Der Nachteil dabei ist, dass dann keine Ausgabe mehr über die Lautsprecher erfolgt. Die Aus‐<br />
gabe über die Lautsprecher ist aber durchaus sinnvoll um eine Rückmeldung über das übertragene<br />
Audiosignal zu erhalten und somit evtl. auftretende Probleme besser erkennen zu können. Außer‐<br />
dem kann es zu einem Pufferüberlauf kommen, denn dabei werden nur Daten vom Puffer eingele‐<br />
sen, wenn der Wortgrenzendetektor gerade aktiv ist.<br />
Eine Alternative ist es, Daten aus dem PipedInputStream in einen zusätzlichen Puffer zu kopie‐<br />
ren, aus dem die Klasse JAudio dann die Daten lesen kann. Falls der Wortgrenzendetektor inaktiv<br />
ist, können die ankommenden Daten verworfen werden.<br />
Hierzu wird eine eigene Klasse mit dem Namen JAudioInBuffer angelegt. Voraussichtlich wird<br />
für den umgekehrten Prozess, die Umleitung des lokalen Audioeingangs zur Übertragung über VoIP,<br />
eine ähnliche Klasse benötigt, die dann den Namen JAudioOutBuffer erhält. Die Klasse<br />
JAudioInBuffer implementiert einen einfachen Ringpuffer und die notwendigen Methoden um<br />
Daten in den Puffer zu schreiben oder aus dem Puffer zu lesen.<br />
3.4.1.2.2 Grundlagen Ringpuffer<br />
Ein Ringpuffer ist eine Warteschlange nach dem FIFO (First In First Out)‐Prinzip. Er besteht aus einem<br />
Speicherbereich mit einer festen Größe, einem Zeiger, der den Anfang der Nutzdaten markiert, und<br />
einem Zeiger, der das Ende der Nutzdaten markiert.<br />
Schreibvorgang:<br />
64<br />
Abbildung 42: Funktionsweise eines Ringpuffers<br />
Werden Daten in den Puffer geschrieben, so erhöht sich die Endposition. Ist die letzte Speicherzelle<br />
erreicht, so wird als nächstes wieder die erste Speicherzelle verwendet. Ist der Puffer voll belegt, so<br />
werden ältere Daten überschrieben. In diesem Fall erhöht sich auch die Startposition. Die ältesten<br />
Daten gehen dabei verloren.<br />
Lesevorgang:<br />
Beim Lesen der Daten wird bei der Startposition begonnen. Wurde eine Speicherzelle gelesen, dann<br />
erhöht sich die Startposition. Nach der letzten Speicherzelle wird der Vorgang wieder bei der ersten<br />
Speicherzelle fortgesetzt. Wenn die Startposition und die Endposition auf dieselbe Speicherzelle zei‐<br />
gen, so ist der Puffer leer und es können keine weiteren Daten gelesen werden.