home *** CD-ROM | disk | FTP | other *** search
/ Game Audio Programming / GameAudioProgramming.iso / Game_Audio / audio_sdk / src / AudioLib / DLS.cpp < prev    next >
C/C++ Source or Header  |  2002-09-10  |  3KB  |  157 lines

  1. /***********************************************************\
  2. Copyright (C) James Boer, 2002. 
  3. All rights reserved worldwide.
  4.  
  5. This software is provided "as is" without express or implied
  6. warranties. You may freely copy and compile this source into
  7. applications you distribute provided that the copyright text
  8. below is included in the resulting source code, for example:
  9. "Portions Copyright (C) James Boer, 2002"
  10. \***********************************************************/
  11.  
  12. #include "DLS.h"
  13. #include "AudioCommon.h"
  14. #include "AudioMgr.h"
  15.  
  16. using namespace Audio;
  17.  
  18. IMPLEMENT_POOL(DLS);
  19.  
  20. //------------------------------------------------------------------------//
  21. DLS::DLS()
  22. {
  23.     FN("DLS::DLS()");
  24.     Clear();
  25. }
  26.  
  27.  
  28. //------------------------------------------------------------------------//
  29. DLS::~DLS()
  30. {
  31.     FN("DLS::~DLS()");
  32.     Term();
  33. }
  34.  
  35.  
  36. //------------------------------------------------------------------------//
  37. void DLS::Clear()
  38. {
  39.     FN("DLS::Clear()");
  40.     m_bInitialized = false;
  41.     m_pCollection = NULL;
  42.     m_Init.Clear();
  43.     m_iRefCount = 0;
  44. }
  45.  
  46.  
  47.  
  48. //------------------------------------------------------------------------//
  49. bool DLS::Init(const DLSInit& init)
  50. {
  51.     FN("DLS::Init()");
  52.     // Make sure the objects have been created first
  53.     assert(DXAudioMgr()->Performance(true));
  54.  
  55.     // Set the audio definition
  56.     m_Init = init;
  57.     m_bInitialized = true;
  58.     return true;
  59. }
  60.  
  61.  
  62. //------------------------------------------------------------------------//
  63. void DLS::Term()
  64. {
  65.     FN("DLS::Term()");
  66.     Unload();
  67.     Clear();
  68. }
  69.  
  70.  
  71. //------------------------------------------------------------------------//
  72. bool DLS::Load()
  73. {
  74.     FN("DLS::Load()");
  75.     if(IsLoaded())
  76.         return true;
  77.  
  78.  
  79.     IAudioStream* pStream;
  80.     CreateAudioStream cas(pStream);
  81.     if(!pStream)
  82.         return false;
  83.     
  84.     HRESULT hr = pStream->Open(m_Init.m_sFileName);
  85.     if(FAILED(hr))
  86.         return Error::Handle("Failed to open segment file %s.", m_Init.m_sFileName.c_str());
  87.     
  88.     DMUS_OBJECTDESC      ObjDesc;
  89.     ObjDesc.dwSize = sizeof(DMUS_OBJECTDESC);
  90.     ObjDesc.guidClass = CLSID_DirectMusicCollection;
  91.     ObjDesc.dwValidData = DMUS_OBJ_CLASS | DMUS_OBJ_STREAM;
  92.     ObjDesc.pStream = pStream;
  93.  
  94.     hr = DXAudioMgr()->Loader()->GetObject(
  95.             &ObjDesc, 
  96.             IID_IDirectMusicCollection8, 
  97.             (void**) &m_pCollection );
  98.     if(FAILED(hr))
  99.     {
  100.         Unload();
  101.         return Error::Handle("Could not load DLS file %s", m_Init.m_sFileName.c_str());
  102.     }
  103.  
  104.     return true;
  105. }
  106.  
  107.  
  108. //------------------------------------------------------------------------//
  109. bool DLS::Unload()
  110. {
  111.     FN("DLS::Unload()");
  112.     if(!IsLoaded())
  113.         return true;
  114.  
  115.     if(m_pCollection)
  116.     {
  117.         DXAudioMgr()->Loader()->ReleaseObjectByUnknown(m_pCollection);
  118.     }
  119.     SAFE_RELEASE(m_pCollection);
  120.     return true;
  121. }
  122.  
  123.  
  124.  
  125. //------------------------------------------------------------------------//
  126. bool DLS::Lock()
  127. {
  128.     FN("DLS::Lock()");
  129.     if(!IsLoaded() && !Load())
  130.         return false;
  131.     m_iRefCount++;
  132.     return true;
  133. }
  134.  
  135.  
  136. //------------------------------------------------------------------------//
  137. bool DLS::Unlock()
  138. {
  139.     FN("DLS::Unlock()");
  140.     if(IsLoaded() && !Unload())
  141.         return false;
  142.     m_iRefCount--;
  143.     return true;
  144. }
  145.  
  146.  
  147. //------------------------------------------------------------------------//
  148. void DLS::Destroy()
  149. {
  150.     FN("DLS::Destroy()");
  151.     Term();
  152.     DestroyObject(this);
  153. }
  154.  
  155.  
  156.  
  157.