197 lines
2.9 KiB
C++
197 lines
2.9 KiB
C++
|
|
#include "fmod_settings.h"
|
||
|
|
|
||
|
|
#include "fmod_channel_emulated.h"
|
||
|
|
#include "fmod_channelpool.h"
|
||
|
|
#include "fmod_memory.h"
|
||
|
|
#include "fmod_output_emulated.h"
|
||
|
|
#include "fmod_soundi.h"
|
||
|
|
#include "fmod_string.h"
|
||
|
|
|
||
|
|
namespace FMOD
|
||
|
|
{
|
||
|
|
|
||
|
|
/*
|
||
|
|
[
|
||
|
|
[DESCRIPTION]
|
||
|
|
|
||
|
|
[PARAMETERS]
|
||
|
|
|
||
|
|
[RETURN_VALUE]
|
||
|
|
FMOD_OK
|
||
|
|
|
||
|
|
[REMARKS]
|
||
|
|
|
||
|
|
[PLATFORMS]
|
||
|
|
Win32, Win64, Linux, Macintosh, XBox, PlayStation 2, GameCube
|
||
|
|
|
||
|
|
[SEE_ALSO]
|
||
|
|
]
|
||
|
|
*/
|
||
|
|
OutputEmulated::OutputEmulated()
|
||
|
|
{
|
||
|
|
FMOD_memset(&mDescription, 0, sizeof(FMOD_OUTPUT_DESCRIPTION_EX));
|
||
|
|
|
||
|
|
mChannel = 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
[
|
||
|
|
[DESCRIPTION]
|
||
|
|
|
||
|
|
[PARAMETERS]
|
||
|
|
|
||
|
|
[RETURN_VALUE]
|
||
|
|
FMOD_OK
|
||
|
|
|
||
|
|
[REMARKS]
|
||
|
|
|
||
|
|
[PLATFORMS]
|
||
|
|
Win32, Win64, Linux, Macintosh, XBox, PlayStation 2, GameCube
|
||
|
|
|
||
|
|
[SEE_ALSO]
|
||
|
|
]
|
||
|
|
*/
|
||
|
|
FMOD_RESULT OutputEmulated::init(int maxchannels)
|
||
|
|
{
|
||
|
|
FMOD_RESULT result;
|
||
|
|
|
||
|
|
if (!mSystem)
|
||
|
|
{
|
||
|
|
return FMOD_ERR_UNINITIALIZED;
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
Create Emulated channels
|
||
|
|
*/
|
||
|
|
if (maxchannels)
|
||
|
|
{
|
||
|
|
int count;
|
||
|
|
|
||
|
|
mChannelPool = mChannelPool3D = FMOD_Object_Alloc(ChannelPool);
|
||
|
|
if (!mChannelPool)
|
||
|
|
{
|
||
|
|
return FMOD_ERR_MEMORY;
|
||
|
|
}
|
||
|
|
|
||
|
|
result = mChannelPool->init(mSystem, this, maxchannels);
|
||
|
|
if (result != FMOD_OK)
|
||
|
|
{
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
|
||
|
|
mChannel = (ChannelEmulated *)FMOD_Memory_Calloc(sizeof(ChannelEmulated) * maxchannels);
|
||
|
|
if (!mChannel)
|
||
|
|
{
|
||
|
|
return FMOD_ERR_MEMORY;
|
||
|
|
}
|
||
|
|
|
||
|
|
for (count = 0; count < maxchannels; count++)
|
||
|
|
{
|
||
|
|
new (&mChannel[count]) ChannelEmulated;
|
||
|
|
CHECK_RESULT(mChannelPool->setChannel(count, &mChannel[count]));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return FMOD_OK;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
[
|
||
|
|
[DESCRIPTION]
|
||
|
|
|
||
|
|
[PARAMETERS]
|
||
|
|
|
||
|
|
[RETURN_VALUE]
|
||
|
|
FMOD_OK
|
||
|
|
|
||
|
|
[REMARKS]
|
||
|
|
|
||
|
|
[PLATFORMS]
|
||
|
|
Win32, Win64, Linux, Macintosh, XBox, PlayStation 2, GameCube
|
||
|
|
|
||
|
|
[SEE_ALSO]
|
||
|
|
]
|
||
|
|
*/
|
||
|
|
FMOD_RESULT OutputEmulated::release()
|
||
|
|
{
|
||
|
|
if (mChannelPool)
|
||
|
|
{
|
||
|
|
mChannelPool->release();
|
||
|
|
mChannelPool = 0;
|
||
|
|
}
|
||
|
|
if (mChannel)
|
||
|
|
{
|
||
|
|
FMOD_Memory_Free(mChannel);
|
||
|
|
mChannel = 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
return Output::release();
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
[
|
||
|
|
[DESCRIPTION]
|
||
|
|
|
||
|
|
[PARAMETERS]
|
||
|
|
|
||
|
|
[RETURN_VALUE]
|
||
|
|
FMOD_OK
|
||
|
|
|
||
|
|
[REMARKS]
|
||
|
|
|
||
|
|
[PLATFORMS]
|
||
|
|
Win32, Win64, Linux, Macintosh, XBox, PlayStation 2, GameCube
|
||
|
|
|
||
|
|
[SEE_ALSO]
|
||
|
|
]
|
||
|
|
*/
|
||
|
|
FMOD_RESULT OutputEmulated::update()
|
||
|
|
{
|
||
|
|
return FMOD_OK;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
[
|
||
|
|
[DESCRIPTION]
|
||
|
|
|
||
|
|
[PARAMETERS]
|
||
|
|
|
||
|
|
[RETURN_VALUE]
|
||
|
|
|
||
|
|
[REMARKS]
|
||
|
|
|
||
|
|
[PLATFORMS]
|
||
|
|
|
||
|
|
[SEE_ALSO]
|
||
|
|
]
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifdef FMOD_SUPPORT_MEMORYTRACKER
|
||
|
|
|
||
|
|
FMOD_RESULT OutputEmulated::getMemoryUsedImpl(MemoryTracker *tracker)
|
||
|
|
{
|
||
|
|
tracker->add(false, FMOD_MEMBITS_OUTPUT, sizeof(*this));
|
||
|
|
|
||
|
|
if (mChannel)
|
||
|
|
{
|
||
|
|
int numchannels = 0;
|
||
|
|
|
||
|
|
if (mChannelPool)
|
||
|
|
{
|
||
|
|
CHECK_RESULT(mChannelPool->getNumChannels(&numchannels));
|
||
|
|
}
|
||
|
|
|
||
|
|
tracker->add(false, FMOD_MEMBITS_CHANNEL, sizeof(ChannelEmulated) * numchannels);
|
||
|
|
}
|
||
|
|
|
||
|
|
return Output::getMemoryUsedImpl(tracker);
|
||
|
|
}
|
||
|
|
|
||
|
|
#endif
|
||
|
|
|
||
|
|
}
|