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

dreammaster dreammaster at scummvm.org
Sat Apr 3 04:19:58 UTC 2021


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:
ce22f46e8a AGS: Respect ScummVM volume controls


Commit: ce22f46e8a6375006fa25146e5d067493a9763a6
    https://github.com/scummvm/scummvm/commit/ce22f46e8a6375006fa25146e5d067493a9763a6
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2021-04-02T21:18:11-07:00

Commit Message:
AGS: Respect ScummVM volume controls

I experimented, but couldn't get the AGS in-game volume
controls to map to the ScummVM volume controls. The reason
being that the games frequently set the volume during their
startup, sometimes multiple times. The best I could do was
set up the different sound types in AGS to use the
Audio::Mixer::SoundType enum, so that any ScummVM volume
control will be respected in addition to the AGS volumes.

Changed paths:
    engines/ags/ags.cpp
    engines/ags/engine/ac/global_audio.cpp
    engines/ags/engine/media/audio/audio.cpp
    engines/ags/engine/media/audio/soundclip.cpp
    engines/ags/engine/media/audio/soundclip.h


diff --git a/engines/ags/ags.cpp b/engines/ags/ags.cpp
index d9597ba513..dbbd0d729b 100644
--- a/engines/ags/ags.cpp
+++ b/engines/ags/ags.cpp
@@ -170,6 +170,7 @@ Common::Error AGSEngine::run() {
 	if (_GP(usetup).disable_exception_handling)
 #endif
 	{
+		syncSoundSettings();
 		AGS3::initialize_engine(startup_opts);
 
 		// Do shutdown stuff
diff --git a/engines/ags/engine/ac/global_audio.cpp b/engines/ags/engine/ac/global_audio.cpp
index 10c39762b0..8e3bc2f788 100644
--- a/engines/ags/engine/ac/global_audio.cpp
+++ b/engines/ags/engine/ac/global_audio.cpp
@@ -539,6 +539,10 @@ static bool play_voice_clip_on_channel(const String &voice_name) {
 	}
 
 	if (speechmp3 != nullptr) {
+		SoundClipWaveBase *clip = dynamic_cast<SoundClipWaveBase *>(speechmp3);
+		if (clip)
+			clip->_soundType = Audio::Mixer::kSpeechSoundType;
+
 		if (!speechmp3->play()) {
 			// not assigned to a channel, so clean up manually.
 			//speechmp3->destroy();
diff --git a/engines/ags/engine/media/audio/audio.cpp b/engines/ags/engine/media/audio/audio.cpp
index 1a228e44f9..ed415b046d 100644
--- a/engines/ags/engine/media/audio/audio.cpp
+++ b/engines/ags/engine/media/audio/audio.cpp
@@ -66,6 +66,21 @@ SOUNDCLIP *AudioChannelsLock::GetChannelIfPlaying(int index) {
 }
 
 SOUNDCLIP *AudioChannelsLock::SetChannel(int index, SOUNDCLIP *ch) {
+	SoundClipWaveBase *wavClip = dynamic_cast<SoundClipWaveBase *>(ch);
+	if (wavClip) {
+		switch (index) {
+		case SCHAN_SPEECH:
+			wavClip->_soundType = Audio::Mixer::kSpeechSoundType;
+			break;
+		case SCHAN_MUSIC:
+			wavClip->_soundType = Audio::Mixer::kMusicSoundType;
+			break;
+		default:
+			wavClip->_soundType = Audio::Mixer::kSFXSoundType;
+			break;
+		}
+	}
+
 	// TODO: store clips in smart pointers
 	if (_GP(audioChannels)[index] == ch)
 		Debug::Printf(kDbgMsg_Warn, "WARNING: channel %d - same clip assigned", index);
diff --git a/engines/ags/engine/media/audio/soundclip.cpp b/engines/ags/engine/media/audio/soundclip.cpp
index 2bd9bda831..d097f01b13 100644
--- a/engines/ags/engine/media/audio/soundclip.cpp
+++ b/engines/ags/engine/media/audio/soundclip.cpp
@@ -61,7 +61,7 @@ void SoundClipWaveBase::poll() {
 }
 
 int SoundClipWaveBase::play() {
-	_mixer->playStream(Audio::Mixer::kSFXSoundType, &_soundHandle, _stream,
+	_mixer->playStream(_soundType, &_soundHandle, _stream,
 		-1, 255, 0, DisposeAfterUse::NO);
 	return 1;
 }
diff --git a/engines/ags/engine/media/audio/soundclip.h b/engines/ags/engine/media/audio/soundclip.h
index e66c15e540..7976441f18 100644
--- a/engines/ags/engine/media/audio/soundclip.h
+++ b/engines/ags/engine/media/audio/soundclip.h
@@ -167,6 +167,7 @@ struct SoundClipWaveBase : public SOUNDCLIP {
 	Audio::AudioStream *_stream;
 	Audio::SoundHandle _soundHandle;
 	SoundClipState _state;
+	Audio::Mixer::SoundType _soundType = Audio::Mixer::kPlainSoundType;
 
 	SoundClipWaveBase(Audio::AudioStream *stream, int volume, bool repeat = false);
 	~SoundClipWaveBase() override { destroy(); }




More information about the Scummvm-git-logs mailing list