59 lines
1.0 KiB
C++
59 lines
1.0 KiB
C++
|
|
#include "gxsound.hpp"
|
|
#include <fmod.h>
|
|
#include "gxaudio.hpp"
|
|
#include "std.hpp"
|
|
|
|
gxSound::gxSound(gxAudio* a, FSOUND_SAMPLE* s) : audio(a), sample(s), defs_valid(true)
|
|
{
|
|
FSOUND_Sample_GetDefaults(sample, &def_freq, &def_vol, &def_pan, &def_pri);
|
|
}
|
|
|
|
gxSound::~gxSound()
|
|
{
|
|
FSOUND_Sample_Free(sample);
|
|
}
|
|
|
|
void gxSound::setDefaults()
|
|
{
|
|
if (!defs_valid) {
|
|
FSOUND_Sample_SetDefaults(sample, def_freq, def_vol, def_pan, def_pri);
|
|
defs_valid = true;
|
|
}
|
|
}
|
|
|
|
gxChannel* gxSound::play()
|
|
{
|
|
setDefaults();
|
|
return audio->play(sample);
|
|
}
|
|
|
|
gxChannel* gxSound::play3d(const float pos[3], const float vel[3])
|
|
{
|
|
setDefaults();
|
|
return audio->play3d(sample, pos, vel);
|
|
}
|
|
|
|
void gxSound::setLoop(bool loop)
|
|
{
|
|
FSOUND_Sample_SetMode(sample, loop ? FSOUND_LOOP_NORMAL : FSOUND_LOOP_OFF);
|
|
}
|
|
|
|
void gxSound::setPitch(int hertz)
|
|
{
|
|
def_freq = hertz;
|
|
defs_valid = false;
|
|
}
|
|
|
|
void gxSound::setVolume(float volume)
|
|
{
|
|
def_vol = volume * 255.0f;
|
|
defs_valid = false;
|
|
}
|
|
|
|
void gxSound::setPan(float pan)
|
|
{
|
|
def_pan = (pan + 1.0f) * 127.5f;
|
|
defs_valid = false;
|
|
}
|