143 lines
3.2 KiB
C++
143 lines
3.2 KiB
C++
|
|
#include "std.h"
|
|
#include "bbaudio.h"
|
|
|
|
gxAudio *gx_audio;
|
|
|
|
static inline void debugSound( gxSound *s ){
|
|
if( debug ){
|
|
if( !gx_audio->verifySound( s ) ) RTEX( "Sound does not exist" );
|
|
}
|
|
}
|
|
|
|
static gxSound *loadSound( BBStr *f,bool use_3d ){
|
|
string t=*f;delete f;
|
|
return gx_audio ? gx_audio->loadSound( t,use_3d ) : 0;
|
|
}
|
|
|
|
static gxChannel *playMusic( BBStr *f,bool use_3d ){
|
|
string t=*f;delete f;
|
|
return gx_audio ? gx_audio->playFile( t,use_3d ) : 0;
|
|
}
|
|
|
|
gxSound *bbLoadSound( BBStr *f ){
|
|
return loadSound( f,false );
|
|
}
|
|
|
|
void bbFreeSound( gxSound *sound ){
|
|
if( !sound ) return;
|
|
debugSound( sound );
|
|
gx_audio->freeSound( sound );
|
|
}
|
|
|
|
void bbLoopSound( gxSound *sound ){
|
|
if( !sound ) return;
|
|
debugSound( sound );
|
|
sound->setLoop( true );
|
|
}
|
|
|
|
void bbSoundPitch( gxSound *sound,int pitch ){
|
|
if( !sound ) return;
|
|
debugSound( sound );
|
|
sound->setPitch( pitch );
|
|
}
|
|
|
|
void bbSoundVolume( gxSound *sound,float volume ){
|
|
if( !sound ) return;
|
|
debugSound( sound );
|
|
sound->setVolume( volume );
|
|
}
|
|
|
|
void bbSoundPan( gxSound *sound,float pan ){
|
|
if( !sound ) return;
|
|
debugSound( sound );
|
|
sound->setPan( pan );
|
|
}
|
|
|
|
gxChannel *bbPlaySound( gxSound *sound ){
|
|
if( !sound ) return 0;
|
|
debugSound( sound );
|
|
return sound->play();
|
|
}
|
|
|
|
gxChannel *bbPlayMusic( BBStr *f ){
|
|
return playMusic( f,false );
|
|
}
|
|
|
|
gxChannel *bbPlayCDTrack( int track,int mode ){
|
|
return gx_audio ? gx_audio->playCDTrack( track,mode ) : 0;
|
|
}
|
|
|
|
void bbStopChannel( gxChannel *channel ){
|
|
if( !channel ) return;
|
|
channel->stop();
|
|
}
|
|
|
|
void bbPauseChannel( gxChannel *channel ){
|
|
if( !channel ) return;
|
|
channel->setPaused( true );
|
|
}
|
|
|
|
void bbResumeChannel( gxChannel *channel ){
|
|
if( !channel ) return;
|
|
channel->setPaused( false );
|
|
}
|
|
|
|
void bbChannelPitch( gxChannel *channel,int pitch ){
|
|
if( !channel ) return;
|
|
channel->setPitch( pitch );
|
|
}
|
|
|
|
void bbChannelVolume( gxChannel *channel,float volume ){
|
|
if( !channel ) return;
|
|
channel->setVolume( volume );
|
|
}
|
|
|
|
void bbChannelPan( gxChannel *channel,float pan ){
|
|
if( !channel ) return;
|
|
channel->setPan( pan );
|
|
}
|
|
|
|
int bbChannelPlaying( gxChannel *channel ){
|
|
return channel ? channel->isPlaying() : 0;
|
|
}
|
|
|
|
#ifdef PRO
|
|
gxSound *bbLoad3DSound( BBStr *f ){
|
|
return loadSound( f,true );
|
|
}
|
|
#endif
|
|
|
|
bool audio_create(){
|
|
gx_audio=gx_runtime->openAudio( 0 );
|
|
return true;
|
|
}
|
|
|
|
bool audio_destroy(){
|
|
if( gx_audio ) gx_runtime->closeAudio( gx_audio );
|
|
gx_audio=0;
|
|
return true;
|
|
}
|
|
|
|
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 );
|
|
#ifdef PRO
|
|
rtSym( "%Load3DSound$filename",bbLoad3DSound );
|
|
#endif
|
|
}
|