[Scummvm-git-logs] scummvm master -> b3a4a6249a03f607d12c4f8d6d9f95678aa49756

elasota noreply at scummvm.org
Tue Mar 14 03:56:02 UTC 2023


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
b3a4a6249a VCRUISE: Set 3D sound volume and balance atomically to avoid artifacts if the mix happens between the two calls.


Commit: b3a4a6249a03f607d12c4f8d6d9f95678aa49756
    https://github.com/scummvm/scummvm/commit/b3a4a6249a03f607d12c4f8d6d9f95678aa49756
Author: elasota (ejlasota at gmail.com)
Date: 2023-03-13T23:55:44-04:00

Commit Message:
VCRUISE: Set 3D sound volume and balance atomically to avoid artifacts if the mix happens between the two calls.

Changed paths:
    engines/vcruise/audio_player.cpp
    engines/vcruise/audio_player.h
    engines/vcruise/runtime.cpp


diff --git a/engines/vcruise/audio_player.cpp b/engines/vcruise/audio_player.cpp
index 92ecd64aa9c..abe704aa929 100644
--- a/engines/vcruise/audio_player.cpp
+++ b/engines/vcruise/audio_player.cpp
@@ -75,6 +75,13 @@ void AudioPlayer::setBalance(int8 balance) {
 	_mixer->setChannelBalance(_handle, balance);
 }
 
+void AudioPlayer::setVolumeAndBalance(byte volume, int8 balance) {
+	Common::StackLock lock(_mixer->mutex());
+
+	_mixer->setChannelVolume(_handle, volume);
+	_mixer->setChannelBalance(_handle, balance);
+}
+
 void AudioPlayer::stop() {
 	if (_isPlaying) {
 		_mixer->stopHandle(_handle);
diff --git a/engines/vcruise/audio_player.h b/engines/vcruise/audio_player.h
index 59ae343172d..ed919b6a761 100644
--- a/engines/vcruise/audio_player.h
+++ b/engines/vcruise/audio_player.h
@@ -47,6 +47,7 @@ public:
 
 	void setVolume(byte volume);
 	void setBalance(int8 balance);
+	void setVolumeAndBalance(byte volume, int8 balance);
 
 private:
 	Common::Mutex _mutex;
diff --git a/engines/vcruise/runtime.cpp b/engines/vcruise/runtime.cpp
index ae804aaed58..efd20aad458 100644
--- a/engines/vcruise/runtime.cpp
+++ b/engines/vcruise/runtime.cpp
@@ -1821,8 +1821,7 @@ void Runtime::triggerSound(bool looping, uint soundID, uint volume, int32 balanc
 			snd.player->play(snd.effectiveVolume, snd.effectiveBalance);
 		} else {
 			// Adjust volume and balance at least
-			snd.player->setVolume(snd.effectiveVolume);
-			snd.player->setBalance(snd.effectiveBalance);
+			snd.player->setVolumeAndBalance(snd.effectiveVolume, snd.effectiveBalance);
 		}
 	} else {
 		snd.player.reset(new AudioPlayer(_mixer, looping ? snd.loopingStream.staticCast<Audio::AudioStream>() : snd.stream.staticCast<Audio::AudioStream>()));
@@ -1889,10 +1888,8 @@ void Runtime::update3DSounds() {
 
 		if (changed) {
 			VCruise::AudioPlayer *player = snd.player.get();
-			if (player) {
-				player->setVolume(snd.effectiveVolume);
-				player->setBalance(snd.effectiveBalance);
-			}
+			if (player)
+				player->setVolumeAndBalance(snd.effectiveVolume, snd.effectiveBalance);
 		}
 	}
 }




More information about the Scummvm-git-logs mailing list