Files
BlitzNext/Runtime/lib/bbaudio.cpp
T

183 lines
3.2 KiB
C++
Raw Normal View History

2019-01-18 15:55:06 +01:00
#include "bbaudio.hpp"
2019-01-18 21:26:57 +01:00
#include <gxchannel.hpp>
#include <gxsound.hpp>
2014-01-31 08:23:00 +13:00
2019-01-18 17:04:17 +01:00
gxAudio* gx_audio;
2014-01-31 08:23:00 +13:00
2019-01-18 21:26:57 +01:00
#ifdef _DEBUG
2019-01-18 17:04:17 +01:00
static inline void debugSound(gxSound* s)
{
if (debug) {
if (!gx_audio->verifySound(s))
ThrowRuntimeException("Sound does not exist");
2014-01-31 08:23:00 +13:00
}
}
2019-01-18 21:26:57 +01:00
#else
#define debugSound
#endif
2014-01-31 08:23:00 +13:00
2019-01-18 17:04:17 +01:00
static gxSound* loadSound(BBStr* f, bool use_3d)
{
2019-01-18 21:26:57 +01:00
std::string t = *f;
2019-01-18 17:04:17 +01:00
delete f;
return gx_audio ? gx_audio->loadSound(t, use_3d) : 0;
2014-01-31 08:23:00 +13:00
}
2019-01-18 17:04:17 +01:00
static gxChannel* playMusic(BBStr* f, bool use_3d)
{
2019-01-18 21:26:57 +01:00
std::string t = *f;
2019-01-18 17:04:17 +01:00
delete f;
return gx_audio ? gx_audio->playFile(t, use_3d) : 0;
2014-01-31 08:23:00 +13:00
}
2019-01-18 17:04:17 +01:00
gxSound* bbLoadSound(BBStr* f)
{
return loadSound(f, false);
2014-01-31 08:23:00 +13:00
}
2019-01-18 17:04:17 +01:00
void bbFreeSound(gxSound* sound)
{
if (!sound)
return;
debugSound(sound);
gx_audio->freeSound(sound);
2014-01-31 08:23:00 +13:00
}
2019-01-18 17:04:17 +01:00
void bbLoopSound(gxSound* sound)
{
if (!sound)
return;
debugSound(sound);
sound->setLoop(true);
2014-01-31 08:23:00 +13:00
}
2019-01-18 17:04:17 +01:00
void bbSoundPitch(gxSound* sound, int pitch)
{
if (!sound)
return;
debugSound(sound);
sound->setPitch(pitch);
2014-01-31 08:23:00 +13:00
}
2019-01-18 17:04:17 +01:00
void bbSoundVolume(gxSound* sound, float volume)
{
if (!sound)
return;
debugSound(sound);
sound->setVolume(volume);
2014-01-31 08:23:00 +13:00
}
2019-01-18 17:04:17 +01:00
void bbSoundPan(gxSound* sound, float pan)
{
if (!sound)
return;
debugSound(sound);
sound->setPan(pan);
2014-01-31 08:23:00 +13:00
}
2019-01-18 17:04:17 +01:00
gxChannel* bbPlaySound(gxSound* sound)
{
if (!sound)
return 0;
debugSound(sound);
2014-01-31 08:23:00 +13:00
return sound->play();
}
2019-01-18 17:04:17 +01:00
gxChannel* bbPlayMusic(BBStr* f)
{
return playMusic(f, false);
2014-01-31 08:23:00 +13:00
}
2019-01-18 17:04:17 +01:00
gxChannel* bbPlayCDTrack(int track, int mode)
{
return gx_audio ? gx_audio->playCDTrack(track, mode) : 0;
2014-01-31 08:23:00 +13:00
}
2019-01-18 17:04:17 +01:00
void bbStopChannel(gxChannel* channel)
{
if (!channel)
return;
2014-01-31 08:23:00 +13:00
channel->stop();
}
2019-01-18 17:04:17 +01:00
void bbPauseChannel(gxChannel* channel)
{
if (!channel)
return;
channel->setPaused(true);
2014-01-31 08:23:00 +13:00
}
2019-01-18 17:04:17 +01:00
void bbResumeChannel(gxChannel* channel)
{
if (!channel)
return;
channel->setPaused(false);
2014-01-31 08:23:00 +13:00
}
2019-01-18 17:04:17 +01:00
void bbChannelPitch(gxChannel* channel, int pitch)
{
if (!channel)
return;
channel->setPitch(pitch);
2014-01-31 08:23:00 +13:00
}
2019-01-18 17:04:17 +01:00
void bbChannelVolume(gxChannel* channel, float volume)
{
if (!channel)
return;
channel->setVolume(volume);
2014-01-31 08:23:00 +13:00
}
2019-01-18 17:04:17 +01:00
void bbChannelPan(gxChannel* channel, float pan)
{
if (!channel)
return;
channel->setPan(pan);
2014-01-31 08:23:00 +13:00
}
2019-01-18 17:04:17 +01:00
int bbChannelPlaying(gxChannel* channel)
{
2014-01-31 08:23:00 +13:00
return channel ? channel->isPlaying() : 0;
}
2019-01-18 17:04:17 +01:00
gxSound* bbLoad3DSound(BBStr* f)
{
return loadSound(f, true);
2014-01-31 08:23:00 +13:00
}
2019-01-18 17:04:17 +01:00
bool audio_create()
{
gx_audio = gx_runtime->openAudio(0);
2014-01-31 08:23:00 +13:00
return true;
}
2019-01-18 17:04:17 +01:00
bool audio_destroy()
{
if (gx_audio)
gx_runtime->closeAudio(gx_audio);
gx_audio = 0;
2014-01-31 08:23:00 +13:00
return true;
}
2019-01-18 17:04:17 +01:00
void audio_link(void (*rtSym)(const char*, void*))
{
rtSym("%LoadSound$filename", bbLoadSound);
rtSym("FreeSound%sound", bbFreeSound);
rtSym("LoopSound%sound", bbLoopSound);
rtSym("SoundPitch%sound%pitch", bbSoundPitch);
rtSym("SoundVolume%sound#volume", bbSoundVolume);
rtSym("SoundPan%sound#pan", bbSoundPan);
rtSym("%PlaySound%sound", bbPlaySound);
rtSym("%PlayMusic$midifile", bbPlayMusic);
rtSym("%PlayCDTrack%track%mode=1", bbPlayCDTrack);
rtSym("StopChannel%channel", bbStopChannel);
rtSym("PauseChannel%channel", bbPauseChannel);
rtSym("ResumeChannel%channel", bbResumeChannel);
rtSym("ChannelPitch%channel%pitch", bbChannelPitch);
rtSym("ChannelVolume%channel#volume", bbChannelVolume);
rtSym("ChannelPan%channel#pan", bbChannelPan);
rtSym("%ChannelPlaying%channel", bbChannelPlaying);
rtSym("%Load3DSound$filename", bbLoad3DSound);
2014-01-31 08:23:00 +13:00
}