diff options
| author | Thierry Crozat | 2011-06-26 18:40:31 +0100 | 
|---|---|---|
| committer | Thierry Crozat | 2011-06-26 18:40:31 +0100 | 
| commit | 55a7bbf86abce9bd44b11fceed7e2a6a8bc49b51 (patch) | |
| tree | e25340279240c4f712999f09814c9cbaa20d8703 | |
| parent | 32392c9430c80d323914ffa91d4f08272396dcd9 (diff) | |
| download | scummvm-rg350-55a7bbf86abce9bd44b11fceed7e2a6a8bc49b51.tar.gz scummvm-rg350-55a7bbf86abce9bd44b11fceed7e2a6a8bc49b51.tar.bz2 scummvm-rg350-55a7bbf86abce9bd44b11fceed7e2a6a8bc49b51.zip  | |
SWORD25: Change unknow handle error into a warning
Also add sanity checks when calling findHandle() in the SoundEngine.
This fixes an issue when functions of SoundEngine are called on a
sound that has already finished playing (the most common
occurrences are calls to isSoundPlaying()).
| -rw-r--r-- | engines/sword25/sfx/soundengine.cpp | 37 | 
1 files changed, 28 insertions, 9 deletions
diff --git a/engines/sword25/sfx/soundengine.cpp b/engines/sword25/sfx/soundengine.cpp index 130383f8ef..7c8a6593aa 100644 --- a/engines/sword25/sfx/soundengine.cpp +++ b/engines/sword25/sfx/soundengine.cpp @@ -174,7 +174,7 @@ SndHandle *SoundEngine::findHandle(uint id) {  			return &_handles[i];  	} -	error("Sound::findHandle(): Unknown handle"); +	warning("Sound::findHandle(): Unknown handle");  	return NULL;  } @@ -224,31 +224,41 @@ uint SoundEngine::playSoundEx(const Common::String &fileName, SOUND_TYPES type,  void SoundEngine::setSoundVolume(uint handle, float volume) {  	debugC(1, kDebugSound, "SoundEngine::setSoundVolume(%d, %f)", handle, volume); -	_mixer->setChannelVolume(findHandle(handle)->handle, (byte)(volume * 255)); +	SndHandle* sndHandle = findHandle(handle); +	if (sndHandle != NULL) +		_mixer->setChannelVolume(sndHandle->handle, (byte)(volume * 255));  }  void SoundEngine::setSoundPanning(uint handle, float pan) {  	debugC(1, kDebugSound, "SoundEngine::setSoundPanning(%d, %f)", handle, pan); -	_mixer->setChannelBalance(findHandle(handle)->handle, (int8)(pan * 127)); +	SndHandle* sndHandle = findHandle(handle); +	if (sndHandle != NULL) +		_mixer->setChannelBalance(sndHandle->handle, (int8)(pan * 127));  }  void SoundEngine::pauseSound(uint handle) {  	debugC(1, kDebugSound, "SoundEngine::pauseSound(%d)", handle); -	_mixer->pauseHandle(findHandle(handle)->handle, true); +	SndHandle* sndHandle = findHandle(handle); +	if (sndHandle != NULL) +		_mixer->pauseHandle(sndHandle->handle, true);  }  void SoundEngine::resumeSound(uint handle) {  	debugC(1, kDebugSound, "SoundEngine::resumeSound(%d)", handle); -	_mixer->pauseHandle(findHandle(handle)->handle, false); +	SndHandle* sndHandle = findHandle(handle); +	if (sndHandle != NULL) +		_mixer->pauseHandle(sndHandle->handle, false);  }  void SoundEngine::stopSound(uint handle) {  	debugC(1, kDebugSound, "SoundEngine::stopSound(%d)", handle); -	_mixer->stopHandle(findHandle(handle)->handle); +	SndHandle* sndHandle = findHandle(handle); +	if (sndHandle != NULL) +		_mixer->stopHandle(sndHandle->handle);  }  bool SoundEngine::isSoundPaused(uint handle) { @@ -262,19 +272,28 @@ bool SoundEngine::isSoundPaused(uint handle) {  bool SoundEngine::isSoundPlaying(uint handle) {  	debugC(1, kDebugSound, "SoundEngine::isSoundPlaying(%d)", handle); -	return _mixer->isSoundHandleActive(findHandle(handle)->handle); +	SndHandle* sndHandle = findHandle(handle); +	if (sndHandle == NULL) +		return false; +	return _mixer->isSoundHandleActive(sndHandle->handle);  }  float SoundEngine::getSoundVolume(uint handle) {  	debugC(1, kDebugSound, "SoundEngine::getSoundVolume(%d)", handle); -	return (float)_mixer->getChannelVolume(findHandle(handle)->handle) / 255.0; +	SndHandle* sndHandle = findHandle(handle); +	if (sndHandle == NULL) +		return 0.f; +	return (float)_mixer->getChannelVolume(sndHandle->handle) / 255.0;  }  float SoundEngine::getSoundPanning(uint handle) {  	debugC(1, kDebugSound, "SoundEngine::getSoundPanning(%d)", handle); -	return (float)_mixer->getChannelBalance(findHandle(handle)->handle) / 127.0; +	SndHandle* sndHandle = findHandle(handle); +	if (sndHandle == NULL) +		return 0.f; +	return (float)_mixer->getChannelBalance(sndHandle->handle) / 127.0;  }  Resource *SoundEngine::loadResource(const Common::String &fileName) {  | 
