Sounds mit DirectX abspielen

Aus Spieleprogrammierer-Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
[unmarkierte Version][gesichtete Version]
(3.Laden von DirectSound)
(2.Initalisierung von DirectSound)
 
(16 dazwischenliegende Versionen von einem Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
== <big>Sounds mit DirectX abspielen</big> ==
+
 
 
==== <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 "bool DSoundInit(HWND hWnd);" hinzu.
+
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 Douns erstellt, und es wird abgefragt, ob es erfolgreich war, dewegen auch bool.
+
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 "bool LoadWave(char *filename);".
+
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 "void PlayWave();" erweitern.
+
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 "void StopWave()"
+
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 "void ReleaseDSound()".
+
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 initlaisiert werden und dann geladen werden:
+
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 Tase 1 gedrückt wurde, wenn ja dann:
+
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.

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Werkzeuge