sound code refactoring, made sourcescheduler a singleton
git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@3792 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
@@ -76,7 +76,7 @@ void audiomanager::initsound()
|
||||
conoutf("Driver: %s", alGetString(AL_VERSION));
|
||||
|
||||
// allocate OpenAL resources
|
||||
scheduler.init();
|
||||
sourcescheduler::default().init();
|
||||
|
||||
// let the stream get the first source from the scheduler
|
||||
gamemusic = new oggstream();
|
||||
@@ -230,7 +230,7 @@ void audiomanager::soundcleanup()
|
||||
bufferpool.clear();
|
||||
|
||||
// kill scheduler
|
||||
scheduler.reset();
|
||||
sourcescheduler::default().reset();
|
||||
|
||||
// shutdown openal
|
||||
alcMakeContextCurrent(NULL);
|
||||
@@ -736,7 +736,7 @@ COMMANDF(mapsoundreset, ARG_NONE, ()
|
||||
audiomgr.mapsoundreset();
|
||||
});
|
||||
|
||||
VARF(soundchannels, 4, 32, 1024, { if(!audiomgr.nosound) scheduler.init(); });
|
||||
VARF(soundchannels, 4, 32, 1024, { if(!audiomgr.nosound) sourcescheduler::default().init(); });
|
||||
|
||||
VARFP(soundvol, 0, 128, 255,
|
||||
{
|
||||
|
||||
@@ -27,7 +27,7 @@ oggstream::oggstream() : valid(false), isopen(false), src(NULL)
|
||||
reset();
|
||||
|
||||
// grab a source and keep it during the whole lifetime
|
||||
src = scheduler.newsource(SP_HIGHEST, camera1->o);
|
||||
src = sourcescheduler::default().newsource(SP_HIGHEST, camera1->o);
|
||||
if(src)
|
||||
{
|
||||
if(src->valid)
|
||||
@@ -37,7 +37,7 @@ oggstream::oggstream() : valid(false), isopen(false), src(NULL)
|
||||
}
|
||||
else
|
||||
{
|
||||
scheduler.releasesource(src);
|
||||
sourcescheduler::default().releasesource(src);
|
||||
src = NULL;
|
||||
}
|
||||
}
|
||||
@@ -53,7 +53,7 @@ oggstream::~oggstream()
|
||||
{
|
||||
reset();
|
||||
|
||||
if(src) scheduler.releasesource(src);
|
||||
if(src) sourcescheduler::default().releasesource(src);
|
||||
|
||||
if(alIsBuffer(bufferids[0]) || alIsBuffer(bufferids[1]))
|
||||
{
|
||||
|
||||
+5
-3
@@ -154,14 +154,17 @@ public:
|
||||
virtual sbuffer *find(char *name);
|
||||
};
|
||||
|
||||
// manages sources
|
||||
// manages available sources, abstracts audio channels
|
||||
// is a singleton
|
||||
|
||||
class sourcescheduler
|
||||
{
|
||||
public:
|
||||
static sourcescheduler *instance;
|
||||
vector<source *> sources;
|
||||
|
||||
public:
|
||||
sourcescheduler();
|
||||
static sourcescheduler &default(); // singleton access
|
||||
|
||||
void init();
|
||||
void reset();
|
||||
@@ -405,7 +408,6 @@ extern ov_callbacks oggcallbacks;
|
||||
extern int soundvol;
|
||||
extern int audiodebug;
|
||||
|
||||
extern sourcescheduler scheduler; // FIXME
|
||||
extern audiomanager audiomgr;
|
||||
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ location::location(int sound, const worldobjreference &r, int priority) : cfg(NU
|
||||
}
|
||||
|
||||
// obtain source
|
||||
src = scheduler.newsource(priority, r.currentposition());
|
||||
src = sourcescheduler::default().newsource(priority, r.currentposition());
|
||||
// apply configuration
|
||||
if(!src || !src->valid || !src->buffer(cfg->buf->id) || !src->looping(cfg->loop) || !src->gain(cfg->vol/100.0f*((float)gainscale)/100.0f))
|
||||
{
|
||||
@@ -50,7 +50,7 @@ location::location(int sound, const worldobjreference &r, int priority) : cfg(NU
|
||||
|
||||
location::~location()
|
||||
{
|
||||
if(src) scheduler.releasesource(src);
|
||||
if(src) sourcescheduler::default().releasesource(src);
|
||||
if(cfg) cfg->ondetach();
|
||||
if(ref)
|
||||
{
|
||||
|
||||
@@ -14,10 +14,18 @@ VARP(soundscheddistancescore, 0, 5, 1000);
|
||||
VARP(soundschedoldbonus, 0, 100, 1000);
|
||||
VARP(soundschedreserve, 0, 2, 100);
|
||||
|
||||
sourcescheduler *sourcescheduler::instance;
|
||||
|
||||
sourcescheduler::sourcescheduler()
|
||||
{
|
||||
}
|
||||
|
||||
sourcescheduler &sourcescheduler::default()
|
||||
{
|
||||
if(instance==NULL) instance = new sourcescheduler();
|
||||
return *instance;
|
||||
}
|
||||
|
||||
void sourcescheduler::init()
|
||||
{
|
||||
int newchannels = soundchannels - sources.length();
|
||||
@@ -150,5 +158,4 @@ void sourcescheduler::releasesource(source *src)
|
||||
}
|
||||
}
|
||||
|
||||
sourcescheduler scheduler; // FIXME, move to audiomanager
|
||||
|
||||
|
||||
Reference in New Issue
Block a user