80 lines
1.5 KiB
C++
80 lines
1.5 KiB
C++
#include "Stdafx.h"
|
|
#include "SoundManager2D.h"
|
|
|
|
CSoundManager2D::CSoundManager2D()
|
|
{
|
|
}
|
|
|
|
CSoundManager2D::~CSoundManager2D()
|
|
{
|
|
}
|
|
|
|
bool CSoundManager2D::Initialize()
|
|
{
|
|
CSoundBase::Initialize();
|
|
|
|
if (ms_DIGDriver)
|
|
return true;
|
|
|
|
ms_DIGDriver = AIL_open_digital_driver(44100, 16, 2, 0);
|
|
|
|
for (int i = 0; i < INSTANCE_MAX_COUNT; ++i)
|
|
ms_Instances[i].Initialize();
|
|
/* ms_DIGDriver = AIL_open_digital_driver(44100,
|
|
(DIG_F_STEREO_16 & DIG_F_16BITS_MASK) ? 16 : 8,
|
|
(DIG_F_STEREO_16 & DIG_F_16BITS_MASK) ? 2 : 1,
|
|
0);
|
|
*/
|
|
return true;
|
|
}
|
|
|
|
void CSoundManager2D::Destroy()
|
|
{
|
|
for (int i = 0; i < INSTANCE_MAX_COUNT; ++i)
|
|
ms_Instances[i].Destroy();
|
|
|
|
if (ms_DIGDriver != NULL)
|
|
{
|
|
AIL_close_digital_driver(ms_DIGDriver);
|
|
ms_DIGDriver = NULL;
|
|
}
|
|
|
|
CSoundBase::Destroy();
|
|
}
|
|
|
|
ISoundInstance * CSoundManager2D::GetInstance(const char * c_pszFileName)
|
|
{
|
|
DWORD dwFileCRC = GetFileCRC(c_pszFileName);
|
|
TSoundDataMap::iterator itor = ms_dataMap.find(dwFileCRC);
|
|
|
|
CSoundData * pkSoundData;
|
|
|
|
if (itor == ms_dataMap.end())
|
|
pkSoundData = AddFile(dwFileCRC, c_pszFileName); // CSoundBase::AddFile
|
|
else
|
|
pkSoundData = itor->second;
|
|
|
|
assert(pkSoundData != NULL);
|
|
|
|
static DWORD k = 0;
|
|
|
|
DWORD start = k++;
|
|
DWORD end = start + INSTANCE_MAX_COUNT;
|
|
|
|
while (start < end)
|
|
{
|
|
CSoundInstance2D * pkInst = &ms_Instances[start % INSTANCE_MAX_COUNT];
|
|
|
|
if (pkInst->IsDone())
|
|
{
|
|
if (!pkInst->SetSound(pkSoundData))
|
|
TraceError("CSoundManager2D::GetInstance (filename: %s)", c_pszFileName);
|
|
return (pkInst);
|
|
}
|
|
|
|
++start;
|
|
}
|
|
|
|
return NULL;
|
|
}
|