Sounds mit DirectX abspielen
Aus Spieleprogrammierer-Wiki
(Unterschied zwischen Versionen)
[unmarkierte Version] | [gesichtete Version] |
Lcp9 (Diskussion | Beiträge) (→3.Laden von DirectSound) |
Lcp9 (Diskussion | Beiträge) (→2.Initalisierung von DirectSound) |
||
(16 dazwischenliegende Versionen von einem Benutzer werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | + | ||
==== <big>1.Voreinstellungen</big> ==== | ==== <big>1.Voreinstellungen</big> ==== | ||
1.DirectX SDK herunterladen. | 1.DirectX SDK herunterladen. | ||
+ | |||
2.Die Includes <dsound.h> und <mmsystem.h> einfügen. | 2.Die Includes <dsound.h> und <mmsystem.h> einfügen. | ||
+ | |||
3.Die libs "winmm.lib","dsound.lib","dxguid" einfügen | 3.Die libs "winmm.lib","dsound.lib","dxguid" einfügen | ||
+ | |||
(das könnt ihr sowohl in den Eigenschaften des Projekts einstellen, sowohl auch mit #pragma comment(lib,"...") einfügen) | (das könnt ihr sowohl in den Eigenschaften des Projekts einstellen, sowohl auch mit #pragma comment(lib,"...") einfügen) | ||
+ | |||
4.Eine Klasse erstellen ( am Besten mit einer header- und einer cpp Datei. ) ( Ich nenne sie 'AUdio' ) | 4.Eine Klasse erstellen ( am Besten mit einer header- und einer cpp Datei. ) ( Ich nenne sie 'AUdio' ) | ||
===== <big>2.Initalisierung von DirectSound</big> ===== | ===== <big>2.Initalisierung von DirectSound</big> ===== | ||
− | Als erstes fügen wir zu unserer Klasse die Funktion | + | Als erstes fügen wir zu unserer Klasse die Funktion <pre> bool DSoundInit(HWND hWnd);</pre> hinzu. |
Als nächstes müssen wir diese Funktion beschreiben: | Als nächstes müssen wir diese Funktion beschreiben: | ||
Zeile 29: | Zeile 33: | ||
Das müssen wir noch in unserer Klassen machen: | Das müssen wir noch in unserer Klassen machen: | ||
− | LPDIRECTSOUND lpDirectSound; | + | <pre>LPDIRECTSOUND lpDirectSound; |
− | LPDIRECTSOUNDBUFFER dsbSound; | + | LPDIRECTSOUNDBUFFER dsbSound;</pre> |
− | Als erstes wird der | + | Als erstes wird der Sound erstellt, und es wird abgefragt, ob es erfolgreich war, dewegen auch bool. |
Wenn es fehlgeschlagen ist dann wird falsch zurückgegeben, so auch bei der zeiten Abfrage. | Wenn es fehlgeschlagen ist dann wird falsch zurückgegeben, so auch bei der zeiten Abfrage. | ||
Wenn es erfolgreich war, wird true zurückgegeben. | Wenn es erfolgreich war, wird true zurückgegeben. | ||
Zeile 38: | Zeile 42: | ||
===== <big>3.Laden von DirectSound</big> ===== | ===== <big>3.Laden von DirectSound</big> ===== | ||
− | Als erstes ergänzen wir die Klasse um die Funktion | + | Als erstes ergänzen wir die Klasse um die Funktion <pre>bool LoadWave(char *filename);</pre>. |
Auch dar wird ein Wert vom Typen bool zurückgegeben. | Auch dar wird ein Wert vom Typen bool zurückgegeben. | ||
Da dieser Teil komplizierter wird, erkläre ich nicht die einzelnen Schritte: | Da dieser Teil komplizierter wird, erkläre ich nicht die einzelnen Schritte: | ||
Zeile 109: | Zeile 113: | ||
===== <big>4.Abspielen von DirectSound</big> ===== | ===== <big>4.Abspielen von DirectSound</big> ===== | ||
− | Als erstes müssen wir unsere Klasse um | + | Als erstes müssen wir unsere Klasse um <pre>void PlayWave();</pre> erweitern. |
Diese Funktion ist sehr kurz und gibt keinen Wert zurück, da die gültigkeit in den vorigen Funktionen abgefragt wird. | Diese Funktion ist sehr kurz und gibt keinen Wert zurück, da die gültigkeit in den vorigen Funktionen abgefragt wird. | ||
Nun schauen wir uns die Funktion an: | Nun schauen wir uns die Funktion an: | ||
− | void AUdio::PlayWave() | + | <pre>void AUdio::PlayWave() |
{ | { | ||
dsbSound->SetCurrentPosition(0); | dsbSound->SetCurrentPosition(0); | ||
dsbSound->Play(0, 0, 0); | dsbSound->Play(0, 0, 0); | ||
− | } | + | }</pre> |
Die Aktuelle Position von dsbSound wird auf Null gesetzt, und der Sound dsbSound wird abgespielt. | Die Aktuelle Position von dsbSound wird auf Null gesetzt, und der Sound dsbSound wird abgespielt. | ||
Zeile 124: | Zeile 128: | ||
Falls man nicht mehr möchte, dass der Sound abgespielt wird, wird er gestoppt. | Falls man nicht mehr möchte, dass der Sound abgespielt wird, wird er gestoppt. | ||
− | Als erstes ergänzen wir unsere Klasse um | + | Als erstes ergänzen wir unsere Klasse um <pre>void StopWave()</pre> |
Auch diese hat keinen Rückgabewert, da sie vom Typ void ist. | Auch diese hat keinen Rückgabewert, da sie vom Typ void ist. | ||
Der code sieht folgendermaßen aus: | Der code sieht folgendermaßen aus: | ||
− | void AUdio::StopWave() | + | <pre>void AUdio::StopWave() |
{ | { | ||
dsbSound->Stop(); | dsbSound->Stop(); | ||
− | } | + | }</pre> |
+ | |||
===== <big>6.Den Sound wieder freigeben</big> ===== | ===== <big>6.Den Sound wieder freigeben</big> ===== | ||
Am Ende des Programms sollte es wieder freigegeben werden. | Am Ende des Programms sollte es wieder freigegeben werden. | ||
− | Dazu ergänzen wir zunächst unsere Klasse um | + | Dazu ergänzen wir zunächst unsere Klasse um <pre>void ReleaseDSound()</pre>. |
Die Funktion ist folgendermaßen aufgebaut: | Die Funktion ist folgendermaßen aufgebaut: | ||
− | void AUdio::ReleaseDSound() | + | <pre>void AUdio::ReleaseDSound() |
{ | { | ||
if (dsbSound != NULL) | if (dsbSound != NULL) | ||
Zeile 151: | Zeile 156: | ||
lpDirectSound = NULL; | lpDirectSound = NULL; | ||
} | } | ||
− | } | + | }</pre> |
Zunächst wird abgefragt, ob der Sound überhaupt existiert, wenn ja wird er wieder freigegeben. | Zunächst wird abgefragt, ob der Sound überhaupt existiert, wenn ja wird er wieder freigegeben. | ||
Zeile 157: | Zeile 162: | ||
===== <big>7.Den Sound benutzen</big> ===== | ===== <big>7.Den Sound benutzen</big> ===== | ||
− | Nach dem erstellen des Windows Fensters sollte der Sound zunächst | + | Nach dem erstellen des Windows Fensters sollte der Sound zunächst initialisiert werden und dann geladen werden: |
− | AUdio Sound; | + | <pre>AUdio Sound; |
if(Sound.DSoundInit(hWnd) == false) | if(Sound.DSoundInit(hWnd) == false) | ||
Zeile 168: | Zeile 173: | ||
{ | { | ||
//Fehlerbehandlung | //Fehlerbehandlung | ||
− | } | + | }</pre> |
Die Variable "Sound" sollte global definiert werden, damit man sie auch in anderen Funktionen, als in der Main Funktion benutzt werden kann. | Die Variable "Sound" sollte global definiert werden, damit man sie auch in anderen Funktionen, als in der Main Funktion benutzt werden kann. | ||
− | Jetzt kann man z.B.: Abfragen, ob die | + | Jetzt kann man z.B.: Abfragen, ob die Taste 1 gedrückt wurde, wenn ja dann: |
− | Sound.PlayWave(); | + | <pre>Sound.PlayWave();</pre> |
Wenn z.B.: Die Taste 2 gedrückt wird soll der Sound aufhören abzuspielen: | Wenn z.B.: Die Taste 2 gedrückt wird soll der Sound aufhören abzuspielen: | ||
− | Sound.StopWave(); | + | <pre>Sound.StopWave();</pre> |
Falls das Programm geschlossen wird muss der Speicherplatz wieder freigegeben werden: | Falls das Programm geschlossen wird muss der Speicherplatz wieder freigegeben werden: | ||
− | Sound.ReleaseDSound(); | + | <pre>Sound.ReleaseDSound();</pre> |
Nun sollte der Sound abspielbar sein. | Nun sollte der Sound abspielbar sein. | ||
Grüße lcp9 | Grüße lcp9 |
Aktuelle Version vom 24. Mai 2014, 10:56 Uhr
Klicke hier, um diese Version anzusehen.