mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 02:42:49 -04:00
Fixing some sound-looping bugs.
This commit is contained in:
parent
bff3d9ae76
commit
9f89b56c0b
@ -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;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
Loading…
x
Reference in New Issue
Block a user