diff options
| author | Alyssa Milburn | 2012-08-20 21:10:40 +0200 | 
|---|---|---|
| committer | Alyssa Milburn | 2012-08-20 21:14:10 +0200 | 
| commit | b1af75f2c38e1997577599308f75ee0d1299b13e (patch) | |
| tree | ab2de9d6da01246025256c43259416be30e7ecec | |
| parent | bd6751cb4a2cb5f34697392a82e8d5ab35a6a006 (diff) | |
| download | scummvm-rg350-b1af75f2c38e1997577599308f75ee0d1299b13e.tar.gz scummvm-rg350-b1af75f2c38e1997577599308f75ee0d1299b13e.tar.bz2 scummvm-rg350-b1af75f2c38e1997577599308f75ee0d1299b13e.zip  | |
SWORD25: Improve sound persistence.
Keep track of volume/panning state, and don't restart sounds which already
finished playing.
| -rw-r--r-- | engines/sword25/sfx/soundengine.cpp | 18 | 
1 files changed, 13 insertions, 5 deletions
diff --git a/engines/sword25/sfx/soundengine.cpp b/engines/sword25/sfx/soundengine.cpp index 78b2db19eb..69fae3dc4e 100644 --- a/engines/sword25/sfx/soundengine.cpp +++ b/engines/sword25/sfx/soundengine.cpp @@ -239,16 +239,20 @@ void SoundEngine::setSoundVolume(uint handle, float volume) {  	debugC(1, kDebugSound, "SoundEngine::setSoundVolume(%d, %f)", handle, volume);  	SndHandle* sndHandle = findHandle(handle); -	if (sndHandle != NULL) +	if (sndHandle != NULL) { +		sndHandle->volume = volume;  		_mixer->setChannelVolume(sndHandle->handle, (byte)(volume * 255)); +	}  }  void SoundEngine::setSoundPanning(uint handle, float pan) {  	debugC(1, kDebugSound, "SoundEngine::setSoundPanning(%d, %f)", handle, pan);  	SndHandle* sndHandle = findHandle(handle); -	if (sndHandle != NULL) +	if (sndHandle != NULL) { +		sndHandle->pan = pan;  		_mixer->setChannelBalance(sndHandle->handle, (int8)(pan * 127)); +	}  }  void SoundEngine::pauseSound(uint handle) { @@ -324,13 +328,16 @@ bool SoundEngine::canLoadResource(const Common::String &fileName) {  	return fname.hasSuffix(".ogg");  } - -	bool SoundEngine::persist(OutputPersistenceBlock &writer) { +bool SoundEngine::persist(OutputPersistenceBlock &writer) {  	writer.write(_maxHandleId);  	for (uint i = 0; i < SOUND_HANDLES; i++) {  		writer.write(_handles[i].id); +		// Don't restart sounds which already finished playing. +		if (_handles[i].type != kFreeHandle && !_mixer->isSoundHandleActive(_handles[i].handle)) +			_handles[i].type = kFreeHandle; +  		writer.writeString(_handles[i].fileName);  		writer.write((int)_handles[i].sndType);  		writer.write(_handles[i].volume); @@ -374,7 +381,8 @@ bool SoundEngine::unpersist(InputPersistenceBlock &reader) {  		reader.read(layer);  		if (reader.isGood()) { -			playSoundEx(fileName, (SOUND_TYPES)sndType, volume, pan, loop, loopStart, loopEnd, layer, i); +			if (sndType != kFreeHandle) +				playSoundEx(fileName, (SOUND_TYPES)sndType, volume, pan, loop, loopStart, loopEnd, layer, i);  		} else  			return false;  	}  | 
