home *** CD-ROM | disk | FTP | other *** search
/ Game Audio Programming / GameAudioProgramming.iso / Game_Audio / audio_sdk / src / AudioLib / Utilities.cpp < prev    next >
C/C++ Source or Header  |  2002-06-26  |  8KB  |  260 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 "Audio.h"
  13.  
  14. using namespace Audio;
  15.  
  16.  
  17.  
  18.  
  19. //------------------------------------------------------------------------//
  20. CreateAudioStream::CreateAudioStream(IAudioStream*& pStream)
  21. {
  22.     m_pStream = 0;
  23.     if(AudioMgr()->CreateAudioStream(pStream))
  24.         m_pStream = pStream;
  25. }
  26.  
  27.  
  28. //------------------------------------------------------------------------//
  29. CreateAudioStream::~CreateAudioStream()
  30. {
  31.     SAFE_RELEASE(m_pStream);
  32. }
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39. //-----------------------------------------------------------------------------
  40. // Name: ConvertAnsiStringToWide()
  41. // Desc: This is a UNICODE conversion utility to convert a CHAR string into a
  42. //       WCHAR string. cchDestChar defaults -1 which means it 
  43. //       assumes strDest is large enough to store strSource
  44. //-----------------------------------------------------------------------------
  45. void Audio::ConvertAnsiStringToWide( WCHAR* wstrDestination, const CHAR* strSource, 
  46.                                      int cchDestChar )
  47. {
  48.     if( wstrDestination==NULL || strSource==NULL )
  49.         return;
  50.  
  51.     if( cchDestChar == -1 )
  52.         cchDestChar = strlen(strSource)+1;
  53.  
  54.     MultiByteToWideChar( CP_ACP, 0, strSource, -1, 
  55.                          wstrDestination, cchDestChar-1 );
  56.  
  57.     wstrDestination[cchDestChar-1] = 0;
  58. }
  59.  
  60.  
  61.  
  62.  
  63. //-----------------------------------------------------------------------------
  64. // Name: ConvertWideStringToAnsi()
  65. // Desc: This is a UNICODE conversion utility to convert a WCHAR string into a
  66. //       CHAR string. cchDestChar defaults -1 which means it 
  67. //       assumes strDest is large enough to store strSource
  68. //-----------------------------------------------------------------------------
  69. void Audio::ConvertWideStringToAnsi( CHAR* strDestination, const WCHAR* wstrSource, 
  70.                                      int cchDestChar )
  71. {
  72.     if( strDestination==NULL || wstrSource==NULL )
  73.         return;
  74.  
  75.     if( cchDestChar == -1 )
  76.         cchDestChar = wcslen(wstrSource)+1;
  77.  
  78.     WideCharToMultiByte( CP_ACP, 0, wstrSource, -1, strDestination, 
  79.                          cchDestChar-1, NULL, NULL );
  80.  
  81.     strDestination[cchDestChar-1] = 0;
  82. }
  83.  
  84.  
  85.  
  86.  
  87. //-----------------------------------------------------------------------------
  88. // Name: ConvertGenericStringToAnsi()
  89. // Desc: This is a UNICODE conversion utility to convert a TCHAR string into a
  90. //       CHAR string. cchDestChar defaults -1 which means it 
  91. //       assumes strDest is large enough to store strSource
  92. //-----------------------------------------------------------------------------
  93. void Audio::ConvertGenericStringToAnsi( CHAR* strDestination, const TCHAR* tstrSource, 
  94.                                         int cchDestChar )
  95. {
  96.     if( strDestination==NULL || tstrSource==NULL || cchDestChar == 0 )
  97.         return;
  98.  
  99. #ifdef _UNICODE
  100.     ConvertWideStringToAnsi( strDestination, tstrSource, cchDestChar );
  101. #else
  102.     if( cchDestChar == -1 )
  103.     {
  104.         strcpy( strDestination, tstrSource );
  105.     }
  106.     else
  107.     {
  108.         strncpy( strDestination, tstrSource, cchDestChar );
  109.         strDestination[cchDestChar-1] = '\0';
  110.     }
  111. #endif
  112. }
  113.  
  114.  
  115.  
  116.  
  117. //-----------------------------------------------------------------------------
  118. // Name: ConvertGenericStringToWide()
  119. // Desc: This is a UNICODE conversion utility to convert a TCHAR string into a
  120. //       WCHAR string. cchDestChar defaults -1 which means it 
  121. //       assumes strDest is large enough to store strSource
  122. //-----------------------------------------------------------------------------
  123. void Audio::ConvertGenericStringToWide( WCHAR* wstrDestination, const TCHAR* tstrSource, 
  124.                                         int cchDestChar )
  125. {
  126.     if( wstrDestination==NULL || tstrSource==NULL || cchDestChar == 0 )
  127.         return;
  128.  
  129. #ifdef _UNICODE
  130.     if( cchDestChar == -1 )
  131.     {
  132.         wcscpy( wstrDestination, tstrSource );
  133.     }
  134.     else
  135.     {
  136.         wcsncpy( wstrDestination, tstrSource, cchDestChar );
  137.         wstrDestination[cchDestChar-1] = L'\0';
  138.     }
  139. #else
  140.     Audio::ConvertAnsiStringToWide( wstrDestination, tstrSource, cchDestChar );
  141. #endif
  142. }
  143.  
  144.  
  145.  
  146.  
  147. //-----------------------------------------------------------------------------
  148. // Name: ConvertAnsiStringToGeneric()
  149. // Desc: This is a UNICODE conversion utility to convert a CHAR string into a
  150. //       TCHAR string. cchDestChar defaults -1 which means it 
  151. //       assumes strDest is large enough to store strSource
  152. //-----------------------------------------------------------------------------
  153. void Audio::ConvertAnsiStringToGeneric( TCHAR* tstrDestination, const CHAR* strSource, 
  154.                                         int cchDestChar )
  155. {
  156.     if( tstrDestination==NULL || strSource==NULL || cchDestChar == 0 )
  157.         return;
  158.         
  159. #ifdef _UNICODE
  160.     ConvertAnsiStringToWide( tstrDestination, strSource, cchDestChar );
  161. #else
  162.     if( cchDestChar == -1 )
  163.     {
  164.         strcpy( tstrDestination, strSource );
  165.     }
  166.     else
  167.     {
  168.         strncpy( tstrDestination, strSource, cchDestChar );
  169.         tstrDestination[cchDestChar-1] = '\0';
  170.     }
  171. #endif
  172. }
  173.  
  174.  
  175.  
  176.  
  177. //-----------------------------------------------------------------------------
  178. // Name: ConvertAnsiStringToGeneric()
  179. // Desc: This is a UNICODE conversion utility to convert a WCHAR string into a
  180. //       TCHAR string. cchDestChar defaults -1 which means it 
  181. //       assumes strDest is large enough to store strSource
  182. //-----------------------------------------------------------------------------
  183. void Audio::ConvertWideStringToGeneric( TCHAR* tstrDestination, const WCHAR* wstrSource, 
  184.                                         int cchDestChar )
  185. {
  186.     if( tstrDestination==NULL || wstrSource==NULL || cchDestChar == 0 )
  187.         return;
  188.  
  189. #ifdef _UNICODE
  190.     if( cchDestChar == -1 )
  191.     {
  192.         wcscpy( tstrDestination, wstrSource );
  193.     }
  194.     else
  195.     {
  196.         wcsncpy( tstrDestination, wstrSource, cchDestChar );
  197.         tstrDestination[cchDestChar-1] = L'\0';
  198.     }
  199. #else
  200.     Audio::ConvertWideStringToAnsi( tstrDestination, wstrSource, cchDestChar );
  201. #endif
  202. }
  203.  
  204.  
  205.  
  206. //------------------------------------------------------------------------//
  207. VarAdjust::VarAdjust()
  208. {
  209.     Clear();
  210. }
  211.  
  212.  
  213. //------------------------------------------------------------------------//
  214. void VarAdjust::Clear()
  215. {
  216.     m_fStartTime = 1.0f;
  217.     m_fEndTime = 1.0f;
  218.     m_fStartVal = 1.0f;
  219.     m_fEndVal = 1.0f;
  220.     m_bFirstCheck = false;
  221. }
  222.  
  223.  
  224. //------------------------------------------------------------------------//
  225. void VarAdjust::Init(float fStartVal, float fEndVal, float fTime)
  226. {
  227.     m_fStartTime = float(timeGetTime()) / 1000.0f;
  228.     m_fEndTime = m_fStartTime + fTime;
  229.     m_fStartVal = fStartVal;
  230.     m_fEndVal = fEndVal;
  231.     m_bFirstCheck = true;
  232. }
  233.  
  234.  
  235.  
  236. //------------------------------------------------------------------------//
  237. float VarAdjust::GetVar()
  238. {
  239.     float fPercent = Clamp<float>((((float(timeGetTime()) / 1000.0f) - m_fStartTime) / (m_fEndTime - m_fStartTime)), 0.0f, 1.0f);
  240.     float fVolume = m_fStartVal + (fPercent * (m_fEndVal - m_fStartVal));
  241.     return fVolume;
  242. }
  243.  
  244.  
  245. //------------------------------------------------------------------------//
  246. bool VarAdjust::IsFinished()
  247. {
  248.     // This ensures that the variable will always return true at least one iteration,
  249.     // preventing a situation where the variable will not quite reach its target
  250.     // destination, if this is checked for before doing the calculations via the
  251.     // GetVar() function.
  252.     if(m_bFirstCheck)
  253.     {
  254.         m_bFirstCheck = false;
  255.         return false;
  256.     }
  257.     return ((float(timeGetTime()) / 1000.0f) >= m_fEndTime);
  258. }
  259.  
  260.