6.) 3D-Sound unter DirectXAudio[1]


... [ Seminar: Startseite ] ... [ Interaktionsmodelle ] ... [ Interaktive Musik ] ...

Übersicht: 3D-Sound unter DirectXAudio

a) Generell 28

b) Die Soundquelle. 28

c) Der Zuhörer 29



a) Generell

3D-Audio ist eine sehr CPU-lastige Anwendung, die nur zu empfehlen ist, wenn die Soundkarte Hardware-Mixing unterstützt oder keine weiteren aufwändigen Berechnungen in der CPU durchgeführt werden müssen. DirectXAudio unterstützt nur die Ausgabe von 3D-Audio über zwei Lautsprecher. Um mit diesen Mitteln einen 3-dimensionalen Klangeindruck zu simulieren, werden verschiedene akustische Phänomene verwendet:

 

Lautstärke

Je weiter sich ein Ton vom Ohr entfernt, desto leiser wird er wahrgenommen. Dieser Zusammenhang wird als Roll-Off-Faktor bezeichnet.

Intensitätsunterschiede

Ein Sound von Rechts ist im rechten Ohr lauter als im linken Ohr

Laufzeitunterschiede („Interaurale Zeitdifferenz“)

Ein Sound von Rechts kommt im rechten Ohr ungefähr 1 ms früher an als im linken Ohr

Dämpfen der Schalls (insbes. der hohen Frequenzen)

Ein Ton von hinten klingt durch das nach vorne geöffnete Ohr gedämpfter als von vorne. Ein Ton von hinten rechts wird für das linke Ohr zusätzlich noch durch den Kopf gedämpft.

Dopplereffekt

Erhöhen oder Erniedrigen der Frequenz bei einer sich bewegenden Geräuschquelle

 

Am genauesten ist eine solche 3D-Umsetzung mit einer head-related transfer function („HRTF“), die den menschlichen Hörapparat sehr genau nachmodelliert. Dieser sehr rechenintensive Algorithmus ist in DirectX allerdings aus Performancegründen nur sehr rudimentär implementiert. Einige Soundkartenhersteller bieten allerdings bereits eine Hardwarebeschleunigung an.

Der 3D-Sound unter DirectXAudio klingt insgesamt nicht sehr überzeugend und weit entfernt von einem 3D-Multikanal-System mit mindestens 4 Lautsprechern.

 

b) Die Soundquelle

Soundquellen können in DirectX im Raum mittels eines 3DSoundBuffers über die einfache Funktion SetPosition(x,y,z) in einem karthesischen Koordinatensystem platziert werden. Die Soundquelle kann dann im Raum mittels SetVelocity(x,y,z) als Beschleunigung relativ zum Nullpunkt des Koordinatensystems oder des Zuhörers verschoben werden.

Jede Soundquelle kann entweder einen Schalltrichter haben oder in alle Richtungen ausstrahlen.

Grafik: MS DirectX8.1 SDK: Schalltrichter

 

Mittels SetMaxDistance bzw. SetMinDistance ist es zudem möglich, dass eine Soundquelle ab einer bestimmten Distanz nicht noch leiser bzw. noch lauter wird. Durch die Angabe dieser Distanz wird zum einen später benötigte Rechenzeit eingespart, außerdem gibt es keine Übersteuerungen durch zu dicht am Hörer liegende Signalquellen.

 Quelle: MS DirectX SDK 8.1: Minimum and Maximum Distances

 

 

c) Der Zuhörer

Der Zuhörer wird genau wie die Soundquelle als ein sich evtl. bewegendes Objekt (ein sog. Listener-Object) im Raum platziert mit SetPosition(x,y,z,) und SetVelocity(x,y,z).

Das Listener-Object hat zudem folgende Eigenschaften:

-         Dopplereffekt: gibt an wie stark sich der Dopplereffekt auswirken soll (relativ zum realen Dopplereffekt)

-         Roll-Off-Factor: Abschwächung des Geräuschpegels in Abhängigkeit von der Entfernung zum Hörer

-         Orientierung: Orientierung des Kopfes mittels eines Top-Vektors und eines Front-Vektors. In der nachstehenden Grafik zeigt der Top-Vektor nach oben. Er ermöglicht das Kippen des Kopfes. Der Front-Vektor zeigt in die Richtung, in die die Nasenspitze des Hörers zeigt.

 

Quelle:  Sauer,Technik der Spieleprogrammierung

 



[1] siehe dazu insbesondere auch Sauer, Technik der Spieleprogrammierung


... [ Seminar: Startseite ] ... [ Interaktionsmodelle ] ... [ 3D-Sound unter DirectXAudio ] ... [ Interaktive Musik ] ...