Jouer un son (64 Ko)
Création de l'objet DirectSound

   Quand vous travaillez avec DirectSound, la première chose à faire consiste à créer l'objet DirectSound. Cet objet propose des méthodes pour créer et gérer ses objets enfants, telles les sons en 3D ou non. Chaque objet enfant possède, de son côté, des méthodes qui peuvent servir à accéder à d'autres fonctionnalités de DirectSound. L'objet DirectSound fournit aussi des méthodes qui permettent de connaître les capacités du système hôte, de déterminer la quantité de mémoire de la carte son disponible la position des haut-parleurs...

HRESULT WINAPI DirectSoundCreate8

Paramètre Description
GUID FAR *lpGUID Pointeur vers le GUID du périphérique, ou bien NULL si c'est le périphérique par défaut.
LPDIRECTSOUND *ppDS Adresse du pointeur qui sera initialisé par l'appel.
lUnknown FAR *pUnkOuter Inutilisé pour l'instant; doit être mis à NULL.


LPDIRECTSOUND8 lpDS;

if(FAILED(DirectSoundCreate8(NULL, &lpDS, NULL))
  MessageBox(hWnd, "Impossible de créer l'objet DirectSound.",
                   "Erreur", MB_OK);
Niveau coopératif

   Vous devez appeler cette méthode juste après la création de l'objet DirectSound. Cela aura pour effet de lier DirectSound à une fenêtre et de définir la manière dont le périphérique son sera partagé par votre application et par les autres applications.

HRESULT IDirectSound::SetCooperativelevel

Paramètre Description
HWND hWnd Handel de la fenêtre de votre application.
DWORD dwFlags Un ou plusieurs des indicateurs donnés dans le tableau ci-dessous.

Valeurs possibles pour le paramètre dwFlags de IDirectSound::SetCooperativelevel :

Niveau Avantages Inconvénients
DDSCL_NORMAL Coopération maximale avec les autres applications. Impossible de modifier le format principal, on est donc limité au format de sortie par défaut de DirectSound.
DDSCL_PRIORITY Permet de modifier le format principal. Vous risquez de modifier le format de sortie d'une autre application.
DDSCL_EXCLUSIVE Accorde l'usage exclusif du périphérique; les applications en arrière-plan seront donc muettes Les autres applications sont muettes
DDSCL_WRITEPRIMARY Accorde l'accès au tampon principal pour faire du mixage personnalisé. Exige un pilote DirectSound. Impossible de jouer des tampons secondaires. Les autres applications perdent leurs tampons


//Définit le niveau coopératif en mode PRIORITY.
if(FAILED(lpDS->SetCooperativeLevel(hwnd, DSSCL_PRIORITY))
  MessageBox(hWnd, "Impossible de définir le niveau coopératif.",
                   "Erreur", MB_OK);
Tampon

   L’objet DirectSoundBuffer représente un flux continu de données, on pourrait représenter un tampon acoustique en une forme circulaire, dès que la lecture (ou l’écriture) du buffer arrive à la fin il revient au début.

   Les tampons acoustiques peuvent se diviser en 2 catégories générales. Le tampon audio primaire représente le contenu du tampon étant en train d’être exécuté sur la carte audio. Les tampons audio secondaires représentent des flux indépendants en train d’être mixés sur le tampon primaire.

HRESULT IDirectSound::CreateSoundBuffer

Paramètre Description
LPCDSBUFFERDESC lpcDSBufferDesc Pointeur vers une structure DSBUFFERDESC décrivant le tampon à créer.
LPLPDIRECTSOUNDBUFFER lplpDirectSoundBuffer Adresse d'un pointeur qui sera initialisé afin de pointer vers le tampon crée.
lUnknown FAR *pUnkOuter Inutilisé; doit valoir NULL.


DSBUFFERDESC bufdesc;
ZeroMemory(&bufdesc, sizeof(bufdesc));
bufdesc.dwSize  = sizeof(DSBUFFERDESC);
bufdesc.dwFlags = DSBCAPS_PRIMARYBUFFER;

if(FAILED(lpDS->CreateSoundBuffer(&bufdesc, &pDSBPrimary, NULL)))
  MessageBox(hWnd, "Impossible de créer le tampon audio primaire.",
                   "Erreur", MB_OK);