[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