// constructor
SGSoundMgr::SGSoundMgr() :
_working(false),
+ _active(false),
_changed(true),
_volume(0.0),
_device(NULL),
}
}
-// suspend the sound manager
+// stop the sound manager
void SGSoundMgr::stop() {
if (_working) {
_working = false;
+ _active = false;
// clear any OpenAL buffers before shutting down
buffer_map_iterator buffers_current;
_buffers.erase( buffers_current );
}
- _context = alcGetCurrentContext();
- _device = alcGetContextsDevice(_context);
- alcMakeContextCurrent(NULL);
alcDestroyContext(_context);
alcCloseDevice(_device);
}
}
void SGSoundMgr::suspend() {
- if (_working) {
+ if (_active) {
sample_group_map_iterator sample_grp_current = _sample_groups.begin();
sample_group_map_iterator sample_grp_end = _sample_groups.end();
for ( ; sample_grp_current != sample_grp_end; ++sample_grp_current ) {
SGSampleGroup *sgrp = sample_grp_current->second;
sgrp->suspend();
}
+ _active = false;
}
}
+void SGSoundMgr::resume() {
+ if (!_active) {
+ sample_group_map_iterator sample_grp_current = _sample_groups.begin();
+ sample_group_map_iterator sample_grp_end = _sample_groups.end();
+ for ( ; sample_grp_current != sample_grp_end; ++sample_grp_current ) {
+ SGSampleGroup *sgrp = sample_grp_current->second;
+ sgrp->resume();
+ }
+ _active = true;
+ }
+}
void SGSoundMgr::bind ()
{
// run the audio scheduler
void SGSoundMgr::update_late( double dt ) {
- if (_working && dt != 0.0) {
- alcSuspendContext(_context);
-
+ if (_active) {
sample_group_map_iterator sample_grp_current = _sample_groups.begin();
sample_group_map_iterator sample_grp_end = _sample_groups.end();
for ( ; sample_grp_current != sample_grp_end; ++sample_grp_current ) {
testForALError("update");
_changed = false;
}
- alcProcessContext(_context);
}
}
-
-void
-SGSoundMgr::resume ()
-{
- if (_working) {
- sample_group_map_iterator sample_grp_current = _sample_groups.begin();
- sample_group_map_iterator sample_grp_end = _sample_groups.end();
- for ( ; sample_grp_current != sample_grp_end; ++sample_grp_current ) {
- SGSampleGroup *sgrp = sample_grp_current->second;
- sgrp->resume();
- }
- }
-}
-
-
-// add a sampel group, return true if successful
+// add a sample group, return true if successful
bool SGSoundMgr::add( SGSampleGroup *sgrp, const string& refname )
{
sample_group_map_iterator sample_grp_it = _sample_groups.find( refname );
# include <OpenAL/al.h>
# include <OpenAL/alc.h>
# include <OpenAL/alut.h>
-#elif defined(_WIN32)
-# include <al.h>
-# include <alc.h>
-# include <AL/alut.h>
#else
# include <AL/al.h>
# include <AL/alc.h>
*/
inline bool is_working() const { return _working; }
+ /**
+ * Set the sound manager to a working condition.
+ */
+ inline void activate() { _active = true; }
+
+ /**
+ * Test is the sound manager is in an active and working condition.
+ * @return true is the sound manager is active
+ */
+ inline bool is_active() const { return (_working && _active); }
+
/**
* Register a sample group to the sound manager.
* @para sgrp Pointer to a sample group to add
static int _alut_init;
bool _working;
+ bool _active;
bool _changed;
float _volume;