0ad/source/lib/res/sound.cpp
janwas c7a84e84be added precompiled.h everywhere
This was SVN commit r392.
2004-06-03 18:38:14 +00:00

80 lines
1.2 KiB
C++
Executable File

/*
* sound.cpp
* Author: Graeme Kerry - graeme@wildfiregames.com
* Last Modified: 01/06/2004
*
* Contents: implementation of sound fx resource functions
*/
#include "precompiled.h"
#include <stdio.h>
#include <fmod.h>
#include "h_mgr.h"
#include "sound.h"
#include "lib.h"
#ifdef _MSC_VER
#pragma comment(lib, "fmodvc.lib")
#endif
//define control block
struct Sound
{
FSOUND_SAMPLE* clip;
int channel;
};
//build its vtbl
H_TYPE_DEFINE(Sound)
static void Sound_init(Sound* s, va_list args)
{
s->channel = -1;
}
static int Sound_reload(Sound* s, const char* filename)
{
//only load if clip is empty
if(s->clip == NULL)
s->clip = FSOUND_Sample_Load(FSOUND_FREE,filename,FSOUND_LOOP_OFF | FSOUND_STEREO,0,0);
//check if clip loaded successfully
if(s->clip != NULL)
return 0;
else
return -1;
}
static void Sound_dtor(Sound* s)
{
FSOUND_Sample_Free(s->clip);
}
Handle sound_load(const char* filename)
{
return h_alloc(H_Sound,filename,0,0);
}
int sound_free(Handle& h)
{
return h_free(h,H_Sound);
}
int sound_play(const Handle h)
{
H_DEREF(h,Sound,s);
s->channel = FSOUND_PlaySound(FSOUND_FREE,s->clip);
return 0;
}
int sound_stop(const Handle h)
{
H_DEREF(h,Sound,s);
if(s->channel != -1)
FSOUND_StopSound(s->channel);
return 0;
}