1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
/*
$Id: setupmikmod.cpp,v 1.6 2002/01/22 10:14:04 mbn Exp $
------------------------------------------------------------------------
ClanLib, the platform independent game SDK.
This library is distributed under the GNU LIBRARY GENERAL PUBLIC LICENSE
version 2. See COPYING for details.
For a total list of contributers see CREDITS.
------------------------------------------------------------------------
*/
#include "API/MikMod/streamed_mikmod_sample.h"
#include "resourcetype_module.h"
#include "API/MikMod/setupmikmod.h"
static CL_RegisterResourceType<CL_ResourceData_Module> *restype_module = NULL;
static int ref_count = 0;
/*
* This structure is the ClanLib driver for MikMod. It's a "standard" driver
* since it re-uses lots of functions from libMikMod, indeed the big
* ClanLib-specific stuff is the update function, which is mapped to
* CL_Streamed_MikModSample_Session::clanMikMod_Update
*/
MDRIVER drv_clanlib = {
NULL,
"clanMikMod driver",
"0.1",
255,
255,
"clanmikmod",
NULL, // Command line
CL_Streamed_MikModSample_Session::clanMikMod_IsPresent, // IsPresent
VC_SampleLoad,
VC_SampleUnload,
VC_SampleSpace,
VC_SampleLength,
VC_Init,
VC_Exit,
NULL, // Reset
VC_SetNumVoices,
VC_PlayStart,
VC_PlayStop,
CL_Streamed_MikModSample_Session::clanMikMod_Update,
NULL, // Pause
VC_VoiceSetVolume,
VC_VoiceGetVolume,
VC_VoiceSetFrequency,
VC_VoiceGetFrequency,
VC_VoiceSetPanning,
VC_VoiceGetPanning,
VC_VoicePlay,
VC_VoiceStop,
VC_VoiceStopped,
VC_VoiceGetPosition,
VC_VoiceRealVolume
};
void CL_SetupMikMod::init(bool register_resources_only)
{
ref_count++;
if (ref_count > 1) return;
restype_module = new CL_RegisterResourceType<CL_ResourceData_Module>("module");
/* Register the loaders we want to use: */
MikMod_RegisterAllLoaders();
/* Register the drivers we want to use: */
MikMod_RegisterDriver(&drv_clanlib);
#if LIBMIKMOD_VERSION >= ((3 << 16) | (1 << 8) | (7))
MikMod_Init("");
#else
MikMod_Init();
#endif
md_mode |= DMODE_INTERP;
// disable the reverb
md_reverb=0;
/*
* OK, now we kind of ignore the "register_resources_only"
* parameter. Indeed, MikMod_Init seems to be required for
* the module loader to be able to work. However, it's not
* a big problem since MikMod_Init() does not require any
* peculiar hardware and/or settings, the hardware being
* accessed through clanSound anyway. In fact, MikMod is
* only used to read modules and transform them into raw
* sound. Then clanSound handles everything else. So
* register_resources_only is of no use in this function,
* but is kept for API consistency.
*/
// if (register_resources_only) return;
}
void CL_SetupMikMod::deinit()
{
ref_count--;
if (ref_count > 0) return;
MikMod_Exit();
if (restype_module) delete restype_module;
restype_module = NULL;
}
|