g) Wann benötigt man zwingend
DirectXAudio für die Audiowiedergabe?. |
Das „X“ in DirectX steht als Platzhalter für die
einzelnen Komponenten, die DirectX 8.1 enthält. Dies sind in der aktuellen
Version 8.1 die folgenden sechs:
Name |
Beschreibung |
DirectX Graphics |
API für die gesamte Grafikprogrammierung, also 2D und
3D Früher: Trennung in DirectDraw: bietet 2D-Zeichenfunktionen, die direkt auf
der Hardware arbeiten Direct3D: bietet 3D-Zeichenfunktionen. Als Grundlage
dient DirectDraw |
DirectX Audio |
API für die gesamte Audioprogrammierung Früher: Trennung in DirectSound: ermöglicht die Wave-Aufnahme, -mix
und (umständliche) Wiedergabe DirectMusic: einfache und umfangreiche Steuerung von
MIDI, DLS und Wave (ohne Wave-Wiedergabe). Dazu gehört der DirectMusicProducer |
DirectShow |
Aufnahme
und Wiedergabe von Multimedia Streams (z.B. MPEG, DVD-Video) |
DirectPlay |
Regelt die Netzwerkkommunikation (z.B. für
Multiplayer-Spiele) |
DirectInput |
Ermöglicht den Zugriff auf Eingabegeräte (Joystick,
Mouse, Lenkräder, Force-Feedback, etc.) |
DirectSetup |
Überprüft DirectX-Komponenten im Betriebssystem und
installiert bei Bedarf Updates |
Während die ersten Versionen von DirectX die
Funktionalität von Windows nicht erweiterten, sondern in erster Linie nur den
direkten Hardware-Zugriff boten, gehen die aktuellen Versionen weit über die
normale Windows-Funktionalität hinaus. Bereits 3D-Grafik gehört nicht mehr zu
den Standardfunktionen, von Force-Feedback-Geräten ganz zu schweigen.
Die folgende Tabelle gibt einen Überblick über die
Entwicklung von DirectX:
Version |
Inhalt |
1.0 |
Enthielt DirectDraw, DirectInput, DirectPlay, und
DirectSound |
2.0 |
Ergänzung um Direct3D |
3.0 |
Erweiterung von DirectInput, Ergänzung um
DirectSound3D und MMX-Unterstützung |
3.0a,b |
Fehlerbeseitigungen |
5.0 |
Erweiterung u.a. um DirectX Setup, den Media
Layer, Vertex Buffers, Force Feedback, 3D-Audio Hardware Beschleunigung,
Multimonitor Unterstützung in Windows 98 |
5.2 |
Erweiterung um DirectPlay und
Fehlerbeseitigungen |
6.0 |
Erweiterung um viele 3D-Grafikfeatures
(Single-pass Multitexturing, Bump Mapping, Texture Compression und Stencil
Buffer), 3DNow-Unterstützung |
6.1 |
Erweiterung um DirectMusic |
7.0 |
Erweiterung um viele 3D-Features (Vertex
Blending, Cubic Environment Mapping, u.a.), Einführung der TnLHAL,
Verbesserung des 3D-Sounds, Unterstützung von DLS2, ab jetzt volle
Unterstützung von Visual Basic |
8.0 |
Vereinheitlichte Grafik-und Audioschnittstelle
(DirectX Graphics und DirectX Audio), neue 3D-Grafik-Features |
8.1 |
Erweiterung von DirectMusicProducer, DirectShow,
DirectX Graphics |
9.0 (beta) |
Erhebliche Erweiterung von DirectGraphics |
Etwa alle 10 Monate veröffentlicht Microsoft eine neue
DirectX-Generation mit meist erheblich erweitertem, aber auch umstrukturiertem
Umfang. Aktuell ist die Version 8.1. Die Beta 9.0 ist gerade erschienen.
Neben den DirectX-Treibern für die Anwender gibt es das
DirectX-SDK (Software Development Kit) für die Anwendungsentwickler. Es stellt
die Programmierschnittstellen zur Verfügung.
DirectX und das DirectX-SDK können von der
Microsoft-Homepage gratis heruntergeladen
Die aktuelle DirectX-Version ist erhältlich für Windows 98, Windows ME,
Windows 2000, Windows XP. Windows 95 wird nur bis DirectX 8.0a unterstützt,
Windows NT4.0 nur in DirectX 3.0. Windows CE unterstützt zum Teil DirectX.
Damit verwendet z.B. auch Segas Spieleconsole Dreamcast, welche auf dem Betriebssystem Windows CE aufsetzt, eine
spezielle Version von DirectX6.0 für ihre Spiele.[2]
Auch Microsofts XBox verwendet die DirectX-Schnittstellen.
Alle bisherigen Versionen von DirectX sind
abwärtskompatibel. Allerdings sind gegebenfalls neue Gerätetreiber für die zu
unterstützende Hardware zu installieren. Programmiertechnisch ist auch die feste
Codierung einer DirectX-Version möglich. Das heißt, dass eine Anwendung nur bei
einer bestimmten DirectX-Version funktioniert. Dieses Feature macht allerdings
aufgrund der Abwärtskompatibilität wenig Sinn.
DirectX wird fest ins Betriebssystem integriert. Es kann
nach der ersten Installation nicht wieder deinstalliert werden.
Folgende Programmiersprachen unterstützen DirectX:
MS
Visual C und C++ |
Ursprünglich
war DirectX nur hierfür geplant |
Borland
C++ |
Mit
den korrekten Compiler-Einstellungen funktioniert DirectX auch hier. |
MS Visual Basic |
Seit
DirectX 7.0 volle Unterstützung für Visual Basic |
Borland
Delphi |
Unter
www.delphi-jedi.org,
http://www.directx-for-delphi.de/ und http://www.minfos.de/selfdxd/ gibt es sehr
viele DirectX-Module für Delphi herunterzuladen. Siehe dazu auch die Serie
„Spieleprogrammierung unter Delphi“ in der c’t 1999-2001. |
Smalltalk
MT |
Unter
www.mvps.org/directx/smalltalk/index.htm wird
beschrieben wie man unter Smalltalk MT DirectX verwenden kann |
Java |
Es
gibt ein Microsoft SDK für Java[3],
welches einige DirectX-Funktionen unter Windows zur Verfügung stellt. Dies
widerspricht allerdings der Plattform-Unabhängigkeit von Java. |
Die Programmierung von DirectX erfolgt objekt-orientiert,
wobei das Microsoft Component Objects Model (COM) verwendet wird.
„Message-based musical data“ |
Der gesamte
Musikdatenfluß innerhalb von DirectMusic erfolgt in Form von Nachrichten
(“Messages”) |
Wiedergabe
beliebiger Audiodaten über eine einheitliche Schnittstelle |
Verschiedene
Audioformate (Waveformaudio in verschiedenen Sampleraten, MIDI, DLS2) können
auf die gleiche Art und Weise abgespielt werden. |
Musik, die
nicht in Form von Samples gespeichert ist, kann über MIDI oder DLS2
ausgegeben werden. Bei letzterem wird aus mitgelieferten Samples für
verschiedene Musikinstrumente ein Musikstück auf Grundlage von Notendaten und
Instrumentenzuordnungen auf jedem PC gleichklingend und sehr realistisch wiedergegeben |
|
Dynamische
Musikerzeugung |
Musik kann „on
the fly“ zur Laufzeit zusammengesetzt und damit quasi komponiert werden. |
Klangerzeugung
über einen Synthesizer |
MIDI- und
DLS2-Daten werden im Synthesizer aufbereitet |
DirectMusic
Producer |
Er ist ein
mächtiges Werkzeug zur Bearbeitung und Erzeugung von DirectMusic-kompatiblen
Musikdatenströmen, insbesondere bzgl. der dynamischen Musikerzeugung. |
Aufnahme von
Waveform-Audio |
Selbsterklärend |
Wiedergabe von
Waveform-Audio |
dito. |
Soundeffekte
(u.a. Hall, Echo) |
dito. |
Positionierung
von Soundquellen im 3D-Raum |
dito. |
Finaler
Soundmix |
Zusammenmischen
aller Audiospuren |
Property Sets |
Hardware-Hersteller
können ihren Geräten spezielle Features über Property Sets geben und in
DirectX integrieren |
Um unter Windows Sound abspielen zu können, benötigt man
nicht DirectX Audio. So kann man z.B. mit der Standard Windows Multimedia
Bibliothek (MMSystem.lib bzw. winmm.lib) eine Wave-Datei mit ein bis drei
Zeilen-Code abspielen[6]:
MStream
:= TMemoryStream.Create;
MStream.LoadFromFile(„Musik.wav“);
sndPlaySound(Mstream.Memory,
SND_MEMORY or SND_ASYNC);
oder gar nur:
sndPlaySound(„Bounce.wav“,
NULL, 0);
Um das gleiche Ergebnis bis zur Version DirectX 8 zu
erzeugen, brauchte man einige 100 Zeilen Code. Mittels DirectSound muß zunächst
der Code für das Laden der Wav-Dateien selbstgeschrieben werden, dann ein
Soundpuffer erzeugt und später in diesen hineingeschrieben werden.
Seit Version 8.0 bietet die Komponente DirectMusic
vereinfachte Abspielroutinen an, welche diesen Code auf immerhin 20 Zeilen reduzieren. Allerdings sind zusätzlich
noch etliche Zeilen an Kommentar erforderlich, um den Überlick zu behalten. Die
aktuelle DirectSound-Version benötigt etwa 100 Zeilen Code um das Ergebnis zu
erzeugen.
Für diesen Fall ist DirectX Audio also sicherlich nicht
sinnvoll. Besteht die Aufgabe aber darin, gleichzeitig zwei zeitlich leicht
versetzte Sounds abzuspielen, reicht das Multimedia-System nicht mehr aus. Dies
wird in vielen Multimedia-Anwendungen und insbesondere in Spielen der Regelfall
sein, da sich dort der Soundtrack häufig aus einer Hintergrund-Musik und vielen
gleichzeitig abgespielten Geräuschen zusammensetzt. Allein durch ein
schnellfeuerndes Gewehr sind häufig 3-4 Spuren gleichzeitig belegt.
DirectX
wird außerdem für zusätzliche Effekte wie Hall oder Echo, für 3D-Audio und für
die dynamische Musikerzeugung benötigt.
[1] siehe dazu auch www.microsoft.com/windows/directx/productinfo/sysreqs/default.asp
[4] MIDI: Musical
Instrument Digital Interface
[5] DLS2: Downloadable
Sounds Level 2
[6] siehe Sauer, Technik der
Spieleprogrammierung