Mechanismen und Systeme zur Verarbeitung
von Interaktivem 3-D Audio in Echtzeit

Severin S. Todt - XI5392


[ Informatik-Seminar 2002 ] ... [ Top ] ... [ Standardisierung von interaktiven 3-D Audio Systemen ] ... [ Umsetzung eines 3-D Audio Renderers ] ...

Umsetzung eines 3-D Audio Renderers

Die bei der Umsetzung eines 3-D Audio Renderers zu berücksichtigen Aspekte, sind vor der Implementierung klar herauszustellen und zu definieren.
Dazu sind vorab Randbedingungen zu definieren, die Verarbeitungsschritte in einen Ablauf zu bringen und deren Funktionalität zu erläutern.
Großer Aufwand ist, wie sich im Abaluf zeigen wird, für die Steigerung und Erhaltung der angestrebten Performance aufzubringen.

Randbedingungen
Neben den durch die IASIG definierten Mindestanforderungen an interaktive Audio Systeme sind weiter eine Vielzahl von Funktionalitäten zu implementieren, die als Verwaltungsarbeiten deklariert werden können und reibungslosen Audioablauf gewährleitsten.
Die Verwaltungsarbeiten haben zum Ziel, das Stocken eines Audiostromes oder aber gar den Stillstand der Audiowiedergabe zu verhindern.
Wirkt sich bei der Grafikverabreitung eine stockende Verarbeitung deutlich als ruckelndes Bild, bzw. im Extremfall als stehendes Bild aus, so hat dies im Audiobereich weiterreichende Konsequenzen.
Kann durch den Betrachter bei einer stockenden Grafik nach dem Prinzip des Daumenkinos ein durch eine ruckelnde Verarbeitung fehlendes Bild interpoliert werden, so ist dies im Audiobereich nicht möglich.
Ein Stocken in der Audiowiedergabe führt unweigerlich zu einer Zerstörung des Klangbildes und somit zu einer Zerstörung des gewonnen Eindruckes.
Weiter ist es in der Grafik möglich, seine Augen zu schließen, sollte es aufgrund der schlechten Verarbeitung zu Gehirnschmerzen kommen. Ein Schließen von "Ohrenlidern" ist jedoch nicht möglich.

Rendering Pipeline
Die zur Audiowiedergabe notwendigen Schritte sind klar definierte und kapselbare Einheiten, die getrennt voneinander parallel ablaufen können.
Sie können so in einer Verarbeitungspipeline, der Rendering Piepline, angeordnet und gemäß der "Pipelining Technik" zur parallelen Thread Verarbeitung verarbeitet werden.
Als Kernelemente zur Wiedergabe von Audiodaten können folgende Komponenten identifiziert werden:
Eine Rendering Pipeline für eine beliebige Anzahl von Soundquellen würde sich dann wie folgt ergeben :

Rendering Pipeline ohne Effektbearbeitung
Bei der Verarbeitung innerhalb der Rendering Pipeline werden Daten aus gegebenen Quellen in einen Zwischenspeicher gelesen und dort zur weiteren Verabreitung vorrätig gehalten. Aus dem Zwischenspeicher werden die Daten Bufferweise zur Wiedergabe weitergeleitet. Dabei werden die einzelnen Datenströme über die Mixing Komponente auf einen einzigen Datenstrom gemischt und zur Wiedergabe an das Audiodevice weitergeleitet.

Rendering Pipeline mit Effektbearbeitung
Wird die zur Wiedergabe von Audiodaten genutzte Pipeline um die Fähigkeit der Verarbeitung von Soundeffekten erweitert, so sind für jede Soundsource individuell Soundeffekte umzusetzen. Die Realisierung erfolgt dann durch das Einfügen von zusätzlichen Verarbeitungsschritten zur Effektverarbeitung in jedem von einer Soundquelle ausgehenden Pfad.

Rendering Pipeline mit Effektbearbeitung
Unterschieden wird dabei zwischen Effekten, die abhängig von den Eigenschaften der Soundquelle zu berechnen sind (Sound Effekte) und denen die durch die Eigenschaften des Raumes bedingt sind (3-D Effekt).

Funktionsweise der Module in der Rendering Pipeline
Zur Implementierung eines Audiorenderers ist die explizite Funktionalität einer jeden Komponente im Detail zu untersuchen und zu beschreiben.

Lesen der Audiodaten
Das Lesen der Audiodaten ist abhängig von der Datenquelle der Audiodaten zu implementieren.
Als mögliche Datenquellen sind binäre Audiodateien oder ein Live Stream denkbar.

Offline Bearbeitung
Die Offline Bearbeitung beschreibt die Möglichkeit vorhandene Dateien in der Initialisierungsphase komplett in den Arbeitsspeicher zu lesen und dort vorrätig zu halten, um eine reibungslose und unmittelbare Verarbeitung zu gewährleisten.
Beim Lesen der Daten erfolgt das eventuell notwendige Resampling der Audiodaten sowie im Fall von komprimierten Audiodaten die Dekomprimierung dieser Daten.
Der Aufwand zum Speichern richtet sich demnach nach der Dateigröße der binären Audiodaten, der Resamplingrate und dem Dekomprimierungsaufwand.
Nach dem initialen Einlesen der Daten erfolgen während des Anwendungsablaufs keine weiteren Festspeicherzugriffe. Es kann zum Anwendungsablauf auf schnellen Arbeitsspeicher zugegriffen werden.

On the Fly Bearbeitung
Bei der On the Fly Bearbeitung werden die Daten aus einer vorhandenen Binärdatei Stückweise ausgelesen und zur Verarbeitung weitergereicht.
Initial und zum Anwendungsablauf immer wieder, erfolgt das Lesen von Audiodaten in der Größe eines Buffers, das Resamplen der Daten sowie die evtuelle Dekomprimierung.
Während der Anwendung kommt es somit zu ständigen langsamen Festspeicherzugriffen. Je nach Wiedergabefrequenz erfolgt dann alle Wiedergabefrequenz/Buffergröße Sekunden ein Lesezugriff.
Der Speicheraufwand reduziert sich jedoch auf die Größe des Buffers der pro Leseoperation gelesen wird ist jedoch gekoppelt an zusätzlichen Aufwand für das Resampling und die Dekomprimierung.

Live Stream Bearbeitung
Die Live Stream Beabreitung beschreibt die Verarbeitung eines kontinuierlich fortlaufenden Datenstromes.
Initial wird dabei ein Buffer gelesen, resampled und evtl. dekomprimiert.
Die Leseoperationen müssen dabei abhängig vom Datenvolumen des Live Datenstromes ausgeführt werden.
Um keine wichtigen Informationen zu verlieren sind alle Daten des Livestromes zu lesen und zwischenzuspeichern, selbst wenn die Wiedergabe ein wesentlich geringeres Datenvolumen verlangt.
Wenn jedoch das Datenvolumen des Live Streams über dem des Wiedergabestreams liegt, so ist eine Umsetzung des Lesebuffers zum Buffer der zur Weiterverarbeitung weitergeleitet wird notwendig.
Unterscheidet man zwischen dem Zwischenbuffer der aus dem Live Stream gespeist wird und dem Verabreitungsbuffer so wird der Zwischenbuffer durch eine Lesekomponente gefüllt. Eine Resampling Komponente schreibt dann die Zwischenbufferdaten in dem zur Weiterverarbeitung geeigneten Format in den Verarbeitungsbuffer.

Live Stream Buffer Mapping
Wie bei der On the Fly Bearbeitung ist hier ein reduzierter Datenaufwand zu berücksichtigen bei großer Anzahl von Leseoperationen.

Effektverarbeitung
Die Effektverarbeitung erfolgt auf den durch die Lesekomponente gelieferten Buffern.
Bei der Effektberechnung werden die durch die Anwendung gelieferten Soundobjekt-, Hörer- und Raumattribute berücksichtigt.
Nach stets dem gleichen Prinzip erfolgt die Effektbearbeitung abhängig von der Art des anzuwendenden Filters.
Nach dem Lesen des Eingabebuffers werden die Daten manipuliert und als Ausgabebuffer an die nachfolgende Komponente weitergereicht.
Unterscheidbar sind bei der digitalen Audiobearbeitung Filter mit elementarem und lokalem Wirkungsbereich.

Elementare Filter
Elementare Filter arbeiten auf genau einem Sample eines Audiobuffers. Sie arbeiten nicht auf dem Frequenzbereich eines Samples und manipulieren nur den Wertebereich.
Ein klassischer elementarer Filter ist der Gain Filter, der die Intensität eines Samples beeinflußt.

Elementare Filter (hier Gain)

Lokale Filter
Lokale Filter arbeiten im Gegensatz zu den elementaren Filtern auf einer Auswahl von Samples zur Effektbearbeitung.
Sie manipulieren wahlweise Werte- oder Frequenzbereiche eines Audiobuffers.
Als Doppler Shift bekannt, sorgt dieser Filter zum Beispiel für eine Verschiebung der Frequenz eines Audiodatenstromes.

Lokale Filter (hier Doppler Shift)

Mixing der Audiodaten
Beim Mixing der Audiodaten werden beliebig viele Audiodatenströme auf einen einzigen Datenstrom zusammengemischt, um zur Wiedergabe weitergeleitet zu werden.
Das Mischen geschieht als Addition der Wertebereiche der Audiosamples.
Durch eine reine Addition der Wertebereiche kommt es jedoch zu einer Erhöhung der Intensität, die nicht dem gewünschten Klangbild zweier gleichzeitig abgespieleter Soundquellen entspricht. Weiter kann es zu Situationen kommen, in denen der gegebene Grenzwert des Wertebereiches überschritten wird mit undefinierten Folgeerscheinungen.
Zur Vermeidung der Grenzwerterscheinungen sind Normalisierungsverfahren einzusetzen, die für ein Addieren der Wertebereiche im richtigen Verhältnis sorgen und die Einhaltung der Wertbereichsgrenzen garantieren.

Lokale Filter (hier Doppler Shift)
Das hier dargestellte Verfahren, das Abschneiden der über den Wertebereich herausschießenden Werte ist das schnellste jedoch ungenaueste Verfahren mit den größten Qualtitätsverlusten.

Stabilität und Performanceoptimierung
Aus genannten Gründen sind zur Sicherstellung der Performance und Leistungsaoptimierung Mechanismen zu implementieren, die den Reibungslosen und konfliktfreien Betrieb gewährleisten.

Speichersynchronisation
Aus der Rendering Pipeline ergeben sich zwischen zwei benachbarten Verarbeitungskomponenten gemeinsam genutzte Koopel- oder Kommunikationsspeicherbereiche.
Diese Koppelspeicher werden durch die Vorgelagerte Komponente geschrieben und durch die nachfolgende Komponente gelesen.
Zur Vermeidung gleichzeitiger Speicherzugriffe sind die Zugriffe darauf zu synchronieren.
Zur Synchronisation können hier jedoch nicht die Prinzipien von kritischen Abschnitten zum Einsatz kommen.
Aufgrund des Prinzips der Zugriffsbeschränkungen bei der Verwendung kritischer Abschnitte kann es bei langen Zugriffen eines vorlaufenden Prozesses zum Stillstand nachgelagerter Komponente kommen, die eine Unterbrechung der Audiowiedergabe mit den bekannten Konsequenzen zur Folge hätte.
Eine Kopplung über zyklische Speicher verspricht hierbei die sicherste Implementierung mit der Eröffnung weiterer Mechanismen zur Performancesteigerung.

Speichersynchronisation über zyklische Speicher
Bei der Verwendung von zyklischen Speicher ist ein gleichzeitiges Schreiben und Lesen der Koppelspeicher möglich. Das Lesen und Schreiben geschieht dabei an unterschiedlichen fortlaufenden Position im Ringspeicher, so daß ein gleichzeitiges Lesen und Schreiben gleicher Speicherbereiche vermieden werden kann.
Zu beachten bleibt beim Einsatz zyklischer Speicher jedoch weiter der wachsende Speicherbedarf, der sich je nach Größe der zyklischen Speicher vervielfacht. Mit wachsendem Koppelspeicher steigt weiter die Latenz bei der Verabreitung von User Feedback oder anderen Einflüssen auf die Audiowiedergabe.

Kontrollstrukturen zur Stabiliserung der Performance
Neben der Synchronisation der Speicherzugriffe zwischen den einzelnen Komponenten der Rendering Pipeline sind die Durchlaufzeiten der Pipeline fortlaufend zu überwachen und gegenfalls anzupasen, um eine ungestörte Audiowiedergabe zu gewährleisten.
Zur Kontrolle der Durchlaufzeiten können Zeitstempel zum Einsatz kommen.
Einem Buffer wird dabei beim Eintritt in die Rendering Pipeline ein Zeitstempel angehängt, der bei der Audiowiedergabe zu kontrollieren ist. Aus der angestrebten Wiedergabefrequemnz läßt sich die Anzahl zu verarbeitender Buffer pro Sekunde und damit die maximale Durchlaufzeit ermitteln.
Sollte die Durchlaufzeit einen definierten Maximalwert überschreiten, müssen Regelstrukturen beginnen zu arbeiten, die eine Verkürzung der Durchlaufzeit bewirken können.
Eine Verkürzung der Durchlaufzeit kann erreicht werden durch eine Anpassung der Effektverarbeitung.
Bei diesem Mechanismen ist für die Effektkomponente eine Prioritätsliste für Effekte einzuführen.
Anhand der Prioritätsliste wird durch die Regelstruktur die Verarbeitung von Effekten kurzzeitig ausgesetzt, bis die gewünschte Wiedergabefrequenz gewährleistet werden kann.
Erst nachdem die Möglichkeiten der Effektreduzierung ausgeschöpft sind, kann eine Reduzierung der Wiedergabefrequenz als nächstes Instrument zur Performanceoptimierung genutzt werden.
Eine Reduzierung der Wiedergabefrequenz bedingt jedoch einen weiteren Resamplingschritt unmittelbar vor der Wiedergabe. Erst wenn die durch den Resamplingschritt genutzten Resourcen geringer sind als die durch die Reduzierung der Wiedergabefrequenz freiwerdenden, ist diese Möglichkeit als letzter Schritt anzuwenden.
Problematisch bei all den Regelstrukturen bleibt die Reaktionszeit die ein solches Kontroll- und Regelsystem benötigt. Die zyklischen Koppelspeicher verzögern die Feststellung zu hoher Durchlaufzeiten, da Engpässe eventuell zu spät erkannt werden. Es ist denkbar, daß die Ursache für das Performancetief bereits überwunden und somit irrelevant ist. Die zyklischen Speicher sind aus diesem Grund möglichst klein zu wählen.
Beim Auftreten von Performanceengpässen ist jedoch ein gewisses Zeitfenster zur Reaktion einzuplanen, bis die Ursache beseitigt werden kann.
Um einen "Buffer Underrun" zu verhindern sind demnach die zyklischen Speicher jedoch groß zu wählen.
Der Konflikt in der Größe der zyklischen Speicher ist mit einer tollerierbaren Zwischengröße je nach Leistung des Systems zu lösen.

Performancesteigerung durch Hardwareimplementierung
Aufgrund der Komplexität von Filtern und zu berechnenden Effekten sind Hersteller von Audio Devices dazu übergegangen, Funktionalitäten in Hardware zu implementieren.
Aus dem Standard I3DL2 hat sich der offene Standard EAX in den Versionen 1.0 und 2.0 entwickelt, der vom Soundkartenhersteller "Creative Labs" entwickelt wurde aber durch jeden Hersteller implementierbar ist. (offen eben)
Der Soundstandard definiert Properties zu den einzelnen Datenkonstrukten die beim Berechnen von Audioeffekten zu berücksichtigen sind.
Als Listener Property Set haben sich dabei die Properties etabliert, die die Wahrnehmungsbedingungen beim Hörer beschreiben.
Mit ihnen ist es möglich, die Listener Umgebung zu definieren. Die Angabe der Bedingungen im Raum sind ebenso einstellbar wie auch auch die Eigenschaften des Ausbreitungsmediums mit all den damit verbunden Facetten.

EAX Listener Property Set
Neben den Bedingungen der Audiowahrnehmung sind individuell die Eigenschaften jeder Soundquelle festzulegen.
Die Ausbreitungsrichtung, die Leistung wie auch das Beugungsvermögen können bestimmt und somit der Charakter der Soundquelle geprägt werden.

EAX Buffer Property Set
Hardware intern sind die Soundquellen als Buffer implementiert. Die Verarbeitung dieser Buffer wird durch die angegebenen Properties bestimmt.
Die Properties des Listener Property Set werden auf alle internen Audio Buffer angewendet.
Die Repräsentation der Properties in der Anwendung selbst bleibt dem Entwickler überlassen. Die Ansprache der Hardwarefunktion selbst ist dann jedoch im Rahmen der 3-D Audio API umzusetzen, um den 3-D Audio Renderer als Hardware Renderer nutzen zu können.

Leistungsfähigkeit Hardware beschleunigter Audio Devices
Die Leistungsfähigkeit ermöglicht heutzutage die hardwareinterne Bearbeitung des Resampling und Mixing innerhalb der Rendering Pipeline.
Für die Effektbearbeitung ist eine Vielzahl Effekte bereits in Hardware implementiert : Besonders durch die Verwendung der gebotenen Environment und Material Presets ist eine realitäsnahe Simulierung von Umgebungen und Ausbreitungsmodellen in Echtzeit möglich. So sind Pre Sets für z.B. "Kirche" oder "Konzerthalle" und andere verfügbar.

Software Rendering Engine
Werden keine Hardwareimplementierungen genutzt, sind die Funktionalitäten der Rendering Pipeline in Software umzusetzen.
Ein Software Renderer wurde im Rahmen der Diplomarbeit zur Einbindung von mehrkanaligem Audio in virtuelle Umgebungen im Virtual reality Labor der Fachhochschule Wedel implementiert.
Tests haben jedoch schon bei Verarbeitung einzelner Soundquellen ohne Effektbearbeitung mit reiner Positionierung im Raum hohe CPU Lasten verursacht.

Software Renderer Optimierung durch Hardwarenutzung
Da aufgrund des im VR Labor genutzten nicht standardisierten Wiedergabeverfahrens unter Nutzung von 8 Kanälen keine Standard Audiokomponenten genutzt werden können, sind andere Methoden zur Hardwarebschleunigung zu suchen.
Im Rahmen einer Master Thesis wird diese Thematik weiter ausgebaut und evaluiert.
Es wird zu evaluieren sein, ob ein Ansatz gewählt werden kann, der zusätzlich zum Software Renderer für bestimmte Effektverarbeitungsschritte Hardwarekomponenten nutzt.
Denkbar wäre die Auslagerung einzelner Komponenten der Rendering Pipeline auf Hardwarekomponenten.
Als Alternative könnten Teile von Komponenten der Rendering Pipeline ausgelagert und in Hardware gerendert werden, andere dagegen in Software. Dabei wären die Ergebnisse der Bearbeitung an den Hardwarebuffern über den Adressbus wieder abzugreifen.
Bei der Reflektionsberechnung stünden hier z.B. in diesem Beispiel bei drei Eingangskanälen je drei Buffer als Ergebnis für die frühen und späten Reflektionen zur Verfügung die dann weiterverarbeitet werden könnten.

Schaltbild der Hallbearbeitung

[ Top ] ... [ Umsetzung eines 3-D Audio Renderers ] ... [ DirectX als interaktives 3-D Audio System ]