Erfolgreiche Spieleentwicklung
optimal. Als Alternative zu EAX wurde daher das EFX-Framework (Effect Extension) entwickelt, das eine vergleichbare plattformübergreifende Berechnung von DSP-Soundeffekten in Soft- und Hardware (bei Verwendung einer OpenAL-kompatiblen Soundkarte) ermöglicht.
3.3 OpenAL – plattformunabhängige Alternative zu XAudio 2 und DirectSound
OpenAL (Open Audio Library) wurde als plattformunabhängige Alternative zu DirectSound, einem Bestandteil von DirectX, entworfen. Die ursprüngliche Idee für die Entwicklung stammt aus 1998 von der Firma Loki Software. Gemeinsam mit der Firma Creative Labs [2] wurde 2000 die OpenAL-Spezifikation 1.0 veröffentlicht. Seit der Insolvenz der Firma Loki Software im Jahr 2002 zeichnet sich Creative Labs allein für die Weiterentwicklung der Schnittstelle verantwortlich. Auf der offiziellen OpenAL-Downloadseite [3] finden Sie unter anderem das Installer-Programm für die aktuelle OpenAL-Version 2.0.7.0 ( oalinst ) sowie das zugehörige Software Development Kit ( OpenAL11CoreSDK ). Für den Anfang empfehle ich Ihnen die Einarbeitung in die nachfolgenden OpenAL-SDK-Programmbeispiele:
Playstatic: Abspielen statischer wav -Sounddateien
Playstream: Schrittweises Abspielen (Streaming) von wav -Sounddateien (Stereo)
Playmultichannel: Schrittweises Abspielen (Streaming) von Multichannel-Sounddateien (4 Kanal, 5.1 Kanal, 6.1 Kanal, 7.1 Kanal) im wav -Format
PlayOggVorbis: Schrittweises Abspielen (Streaming) von ogg -Sounddateien (Ogg Vorbis ist eine patentfreie Alternative zum mp3 -Format)
EfxReverb: Einsatz von EFX-Reverb-Effekten (als Alternative zu EAX), um das Klangbild einer Soundquelle an die Umgebung (z. B. kleiner Raum, große Halle, Kirche etc.) anzupassen.
Unter Windows Vista und Windows 7 sind hardwarebeschleunigte Soundberechnungen aufgrund des fehlenden Audio-Hardware-Layers nur noch auf Soundkarten mit nativer OpenAL-Unterstützung möglich. In allen anderen Fällen müssen die Soundeffekte in Software – also von der CPU – berechnet werden. In diesem Fall bietet sich der Einsatz des Software-Renderers OpenAL Soft [4] an, wodurch der Wegfall des Hardware-Layers vollständig kompensiert wird.
Funktionsweise von OpenAL
Vom Aufbau her orientiert sich das OpenAL-API in großen Teilen an seinem grafischen Pendant OpenGL. Alle relevanten Daten werden in speziellen Objekten verwaltet. Legt man nun ein neues OpenAL-Objekt an, erhält man als Rückgabewert die Objekt-ID in Form einer vorzeichenlosen Ganzzahl vom Typ ALuint (gleichbedeutend mit unsigned int ). Verschaffen wir uns nun eine Übersicht über die einzelnen Objekte und ihren jeweiligen Verwendungszweck.
OpenAL-Buffer-Objekte dienen zum Speichern der abzuspielenden Sounddaten. Verwendet man eine Soundkarte mit nativem OpenAL-Support, werden die Buffer-Objekte im Soundspeicher angelegt, und die Verarbeitung der Sounddaten erfolgt hardwarebeschleunigt durch einen speziellen Soundprozessor. In allen anderen Fällen werden die Buffer-Objekte im RAM-Speicher angelegt. Für die Verarbeitung der Sounddaten ist die CPU verantwortlich.
OpenAL-Source-Objekte speichern alle Eigenschaften der verwendeten Soundquellen und dienen zum Abspielen der Soundeffekte. Es bietet sich an, für jeden Soundeffekt eine individuelle Anzahl von Source-Objekten vorzusehen. Für Soundeffekte, die sehr häufig und in großer Zahl parallel abgespielt werden müssen, benötigt man eine entsprechend größere Anzahl als für weniger wichtige Effekte. Nichts wäre schlimmer, als wenn man beispielsweise eine Explosion zwar sehen, nicht jedoch hören kann, weil momentan kein ungenutztes Source-Objekt zur Verfügung steht.
Das OpenAL-Listener-Objekt repräsentiert den Zuhörer (Listener) in der 3-D-Welt. Die komplette Soundkulisse wird relativ zur Position und Orientierung des Zuhörers berechnet, im sogenannten Output Buffer gespeichert und über die Lautsprecher ausgegeben. Ein Listener-Objekt muss nicht explizit deklariert werden. Als statisches Objekt wird es im Zuge der Initialisierung von OpenAL automatisch erzeugt.
3.4 Einfaches Laden und Abspielen einer Audiodatei im wav-Format
Nach der ganzen Theorie ist es nun an der Zeit für ein wenig Praxis. Schauen wir uns also an, wie sich eine OpenAL-Anwendung initialisieren lässt und wie eine Audiodatei im wav -Format abgespielt werden kann. Im ersten Schritt müssen das OpenAL-SDK-Framework und die OpenAL-Anwendung initialisiert werden:
ALFWInit();
ALFWInitOpenAL();
Im zweiten Schritt wird ein
Weitere Kostenlose Bücher