Fixing some sound-looping bugs.

This commit is contained in:
Josh Yelon 2007-05-09 03:14:37 +00:00
parent bff3d9ae76
commit 9f89b56c0b

View File

@ -119,7 +119,7 @@ FmodAudioSound(AudioManager *manager, Filename file_name, bool positional) {
// Some WAV files contain a loop bit. This is not handled // Some WAV files contain a loop bit. This is not handled
// consistently. Override it. // consistently. Override it.
_sound->setLoopCount(-1); _sound->setLoopCount(1);
_sound->setMode(FMOD_LOOP_OFF); _sound->setMode(FMOD_LOOP_OFF);
//This is just to collect the defaults of the sound, so we don't //This is just to collect the defaults of the sound, so we don't
@ -205,13 +205,11 @@ stop() {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void FmodAudioSound:: void FmodAudioSound::
set_loop(bool loop) { set_loop(bool loop) {
FMOD_RESULT result; if (loop) {
if ( loop ) { set_loop_count(0);
result = _sound->setMode(FMOD_LOOP_NORMAL);
} else { } else {
result = _sound->setMode(FMOD_LOOP_OFF); set_loop_count(1);
} }
fmod_audio_errcheck("_sound->setMode()", result);
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
@ -221,24 +219,11 @@ set_loop(bool loop) {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
bool FmodAudioSound:: bool FmodAudioSound::
get_loop() const { get_loop() const {
// 0 means loop forever, if (get_loop_count() == 1) {
// >1 means loop that many times return false;
// So _loop_count != 1 means we're looping
FMOD_RESULT result;
FMOD_MODE loopMode;
bool loopState;
result = _sound->getMode( &loopMode );
fmod_audio_errcheck("_sound->getMode()", result);
if ( (loopMode & FMOD_LOOP_NORMAL) != 0 ) {
loopState = true;
} else { } else {
loopState = false; return true;
} }
return (loopState);
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
@ -257,17 +242,23 @@ set_loop_count(unsigned long loop_count) {
//LOCALS //LOCALS
FMOD_RESULT result; FMOD_RESULT result;
int numberOfLoops;
numberOfLoops = (int) loop_count; if (loop_count == 0) {
numberOfLoops = numberOfLoops - 1;
if (numberOfLoops == 0) {
result = _sound->setLoopCount( -1 ); result = _sound->setLoopCount( -1 );
fmod_audio_errcheck("_sound->setLoopCount()", result);
result =_sound->setMode(FMOD_LOOP_NORMAL);
fmod_audio_errcheck("_sound->setMode()", result);
} else if (loop_count == 1) {
result = _sound->setLoopCount( 1 );
fmod_audio_errcheck("_sound->setLoopCount()", result);
result =_sound->setMode(FMOD_LOOP_OFF);
fmod_audio_errcheck("_sound->setMode()", result);
} else { } else {
result = _sound->setLoopCount( numberOfLoops ); result = _sound->setLoopCount( loop_count );
fmod_audio_errcheck("_sound->setLoopCount()", result);
result =_sound->setMode(FMOD_LOOP_NORMAL);
fmod_audio_errcheck("_sound->setMode()", result);
} }
fmod_audio_errcheck("_sound->setLoopCount()", result);
audio_debug("FmodAudioSound::set_loop_count() Sound's loop count should be set to: " << loop_count); audio_debug("FmodAudioSound::set_loop_count() Sound's loop count should be set to: " << loop_count);
} }
@ -279,9 +270,6 @@ set_loop_count(unsigned long loop_count) {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
unsigned long FmodAudioSound:: unsigned long FmodAudioSound::
get_loop_count() const { get_loop_count() const {
audio_debug("FmodAudioSound::get_loop_count() Getting the sound's loop count. ");
FMOD_RESULT result; FMOD_RESULT result;
int loop_count; int loop_count;
unsigned long returnedNumber; unsigned long returnedNumber;
@ -289,11 +277,11 @@ get_loop_count() const {
result = _sound->getLoopCount( &loop_count ); result = _sound->getLoopCount( &loop_count );
fmod_audio_errcheck("_sound->getLoopCount()", result); fmod_audio_errcheck("_sound->getLoopCount()", result);
audio_debug("FmodAudioSound::get_loop_count() returning "<< loop_count); if (loop_count <= 0) {
return 0;
returnedNumber = (unsigned long) loop_count; } else {
return (unsigned long)loop_count;
return loop_count; }
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////