[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