home *** CD-ROM | disk | FTP | other *** search
/ Graphics Programming Black Book (Special Edition) / BlackBook.bin / disk1 / source / chapterj / lj-1.c next >
Text File  |  1997-06-18  |  1KB  |  41 lines

  1. // try to create a primary buffer and set its format, to configure
  2. // the hardware
  3. #include <windows.h>
  4. #include <dsound.h>
  5.  
  6. LPDIRECTSOUNDBUFFER SetSoundHWFormat (LPDIRECTSOUND pDS,
  7.    int channels, int bits_per_sample, int samples_per_sec)
  8. {
  9.    DSBUFFERDESC         dsbuf;
  10.    WAVEFORMATEX         format;
  11.    LPDIRECTSOUNDBUFFER  pDSPBuf;
  12.  
  13.    memset (&format, 0, sizeof(format));
  14.    format.wFormatTag = WAVE_FORMAT_PCM;
  15.    format.nChannels = channels;
  16.    format.wBitsPerSample = bits_per_sample;
  17.    format.nSamplesPerSec = samples_per_sec;
  18.    format.nBlockAlign = format.nChannels*format.wBitsPerSample / 8;
  19.    format.cbSize = 0;
  20.    format.nAvgBytesPerSec = format.nSamplesPerSec*format.nBlockAlign;
  21.  
  22.    memset (&dsbuf, 0, sizeof(dsbuf));
  23.    dsbuf.dwSize = sizeof(DSBUFFERDESC);
  24.    dsbuf.dwFlags = DSBCAPS_PRIMARYBUFFER;
  25.    dsbuf.dwBufferBytes = 0;
  26.    dsbuf.lpwfxFormat = NULL;
  27.  
  28.    if (pDS->lpVtbl->CreateSoundBuffer(pDS, &dsbuf, &pDSPBuf, NULL) ==
  29.        DS_OK)
  30.    {
  31.       if (pDSPBuf->lpVtbl->SetFormat (pDSPBuf, &format) == DS_OK)
  32.          return pDSPBuf; // succeeded in configuring hardware
  33.       else
  34.          return NULL;    // didn't succeed in configuring hardware
  35.    }
  36.    else
  37.    {
  38.       return NULL;   // couldn't create a primary buffer
  39.    }
  40. }
  41.