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);
|