home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 27 / IOPROG_27.ISO / SOFT / CDX.ZIP / Src / Cds / 3DBuffer.cpp next >
Encoding:
C/C++ Source or Header  |  1998-09-14  |  2.0 KB  |  58 lines

  1. //////////////////////////////////////////////////////////////////////////////////
  2. // Project Name:   [ CDS Class Library - CDS.lib ]
  3. // Author:         [ Dan Farley - 97308096@brookes.ac.uk ]
  4. // Source File:    [ CDS_3DBuffer Implementation ]
  5. // Revision:       [ 1.6 ]
  6. //////////////////////////////////////////////////////////////////////////////////
  7. #include "CDS.h"
  8.  
  9. //////////////////////////////////////////////////////////////////////////////////
  10. // CDS_3DBuffer Create
  11. //////////////////////////////////////////////////////////////////////////////////
  12. HRESULT CDS_3DBuffer::Create(CDS_Sound* sound, char* filename, int count)
  13. {
  14.     HRESULT rval;
  15.     LPVOID Audio;
  16.     DWORD Bytes;
  17.     UINT BytesRead;
  18.     DSBUFFERDESC desc;
  19.     int i;
  20.  
  21.     // Create enough space for the buffers
  22.     m_BufferCount = count;
  23.     m_Buffer = new LPDIRECTSOUNDBUFFER[((m_BufferCount-1) * sizeof(LPDIRECTSOUNDBUFFER))];
  24.     if(m_Buffer == NULL) return -1;
  25.  
  26.     // Open the file and get ready to read
  27.     m_WaveFile = new CDS_WaveFile;
  28.     m_WaveFile->Open(filename);
  29.  
  30.     memset(&desc, 0, sizeof(DSBUFFERDESC));
  31.     desc.dwSize = sizeof(DSBUFFERDESC);
  32.     desc.dwFlags = DSBCAPS_STATIC | DSBCAPS_CTRL3D;
  33.     desc.dwBufferBytes = m_WaveFile->m_mmckiData.cksize;
  34.     desc.lpwfxFormat = m_WaveFile->m_pFormat;
  35.  
  36.     rval = sound->GetDS()->CreateSoundBuffer(&desc, &m_Buffer[0], NULL);
  37.     if(rval != DS_OK) goto CREATE_ERROR;
  38.  
  39.     rval = m_Buffer[0]->Lock(0, 0, &Audio, &Bytes, NULL, NULL, DSBLOCK_ENTIREBUFFER);
  40.     if(rval != DS_OK) goto CREATE_ERROR;
  41.  
  42.     // Read the data from the file into the buffer
  43.     BytesRead = m_WaveFile->Read((BYTE*)Audio, Bytes);
  44.  
  45.     rval = m_Buffer[0]->Unlock(Audio, Bytes, NULL, 0);
  46.     if(rval != DS_OK) goto CREATE_ERROR;
  47.  
  48.     for(i = 0; i < m_BufferCount; i++)
  49.         rval = sound->m_DirectSound->DuplicateSoundBuffer(m_Buffer[0], &m_Buffer[i]);
  50.  
  51.     // Obtain the 3D interface
  52.     rval = m_Buffer[0]->QueryInterface(IID_IDirectSound3DBuffer, (LPVOID*)&m_3dBuffer);
  53.     if(rval != S_OK) goto CREATE_ERROR;
  54.  
  55. CREATE_ERROR:
  56.     return rval;
  57. }
  58.