73 lines
1.2 KiB
C++
73 lines
1.2 KiB
C++
|
/*
|
||
|
* sound.cpp
|
||
|
* Author: Graeme Kerry - graeme@wildfiregames.com
|
||
|
* Last Modified: 01/06/2004
|
||
|
*
|
||
|
* Contents: implementation of sound fx resource functions
|
||
|
*/
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <fmod.h>
|
||
|
|
||
|
#include "h_mgr.h"
|
||
|
#include "sound.h"
|
||
|
#include "lib.h"
|
||
|
|
||
|
//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;
|
||
|
}
|