31.10.2012 Aufrufe

DIPLOMARBEIT

DIPLOMARBEIT

DIPLOMARBEIT

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!