diff --git a/source/lib/res/sound.cpp b/source/lib/res/sound.cpp new file mode 100755 index 0000000000..9bac588246 --- /dev/null +++ b/source/lib/res/sound.cpp @@ -0,0 +1,73 @@ +/* +* sound.cpp +* Author: Graeme Kerry - graeme@wildfiregames.com +* Last Modified: 01/06/2004 +* +* Contents: implementation of sound fx resource functions +*/ + +#include +#include + +#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; +} \ No newline at end of file diff --git a/source/lib/res/sound.h b/source/lib/res/sound.h new file mode 100755 index 0000000000..bf22336841 --- /dev/null +++ b/source/lib/res/sound.h @@ -0,0 +1,13 @@ +/* Sound FX +* Graeme Kerry - graeme@wildfiregames.com +*/ + +#ifndef __SOUND_H__ +#define __SOUND_H__ + +#include "types.h" +#include "h_mgr.h" + +extern Handle sound_load(const char* filename); + +#endif \ No newline at end of file