[Scummvm-git-logs] scummvm master -> d06126591e87404d26592f80d5650cabd2eed627
djsrv
dservilla at gmail.com
Wed Jul 28 05:52:01 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:
d06126591e DIRECTOR: Create consts for min and max sampled sound menus
Commit: d06126591e87404d26592f80d5650cabd2eed627
https://github.com/scummvm/scummvm/commit/d06126591e87404d26592f80d5650cabd2eed627
Author: djsrv (dservilla at gmail.com)
Date: 2021-07-28T01:52:03-04:00
Commit Message:
DIRECTOR: Create consts for min and max sampled sound menus
Fewer magic numbers. I also replaced the _sampleSounds hashmap with a
constant-size array.
Changed paths:
engines/director/lingo/lingo-builtins.cpp
engines/director/sound.cpp
engines/director/sound.h
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index c9fc1d0d34..25edcd51a7 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1951,7 +1951,7 @@ void LB::b_puppetSound(int nargs) {
int submenu = g_lingo->pop().asInt();
int menu = g_lingo->pop().asInt();
- if (menu <= 9 || menu >= 16)
+ if (menu < kMinSampledMenu || menu > kMaxSampledMenu)
warning("LB::puppetSound: menu number is not available");
sound->setPuppetSound(SoundID(kSoundExternal, menu, submenu), 1);
diff --git a/engines/director/sound.cpp b/engines/director/sound.cpp
index 106506aeb7..0affc4333d 100644
--- a/engines/director/sound.cpp
+++ b/engines/director/sound.cpp
@@ -263,10 +263,13 @@ bool DirectorSound::isChannelValid(uint8 soundChannel) {
}
void DirectorSound::loadSampleSounds(uint type) {
- if (_sampleSounds.contains(type))
+ if (type < kMinSampledMenu || type > kMaxSampledMenu) {
+ warning("DirectorSound::loadSampleSounds: Invalid menu number %d", type);
return;
+ }
- _sampleSounds[type] = Common::Array<AudioDecoder *>();
+ if (!_sampleSounds[type - kMinSampledMenu].empty())
+ return;
// trying to load external sample sounds
// lazy loading
@@ -310,18 +313,19 @@ void DirectorSound::loadSampleSounds(uint type) {
SNDDecoder *ad = new SNDDecoder();
ad->loadExternalSoundStream(*csndData);
- _sampleSounds[type].push_back(ad);
+ _sampleSounds[type - kMinSampledMenu].push_back(ad);
}
delete csndData;
}
void DirectorSound::unloadSampleSounds() {
- for (Common::HashMap<uint, Common::Array<AudioDecoder *> >::iterator it = _sampleSounds.begin(); it != _sampleSounds.end(); ++it)
- for (uint i = 0; i < it->_value.size(); i++)
- delete it->_value[i];
-
- _sampleSounds.clear();
+ for (uint i = 0; i < kNumSampledMenus; i++) {
+ for (uint j = 0; j < _sampleSounds[i].size(); j++) {
+ delete _sampleSounds[i][j];
+ }
+ _sampleSounds[i].clear();
+ }
}
void DirectorSound::playExternalSound(uint16 menu, uint16 submenu, uint8 soundChannel) {
@@ -332,11 +336,17 @@ void DirectorSound::playExternalSound(uint16 menu, uint16 submenu, uint8 soundCh
if (isChannelActive(soundChannel) && checkLastPlaySound(soundChannel, soundId))
return;
- if (!_sampleSounds.contains(menu))
+ if (menu < kMinSampledMenu || menu > kMaxSampledMenu) {
+ warning("DirectorSound::playExternalSound: Invalid menu number %d", menu);
+ return;
+ }
+
+ Common::Array<AudioDecoder *> &menuSounds = _sampleSounds[menu - kMinSampledMenu];
+ if (menuSounds.empty())
loadSampleSounds(menu);
- if (1 <= submenu && submenu <= _sampleSounds[menu].size()) {
- playStream(*(_sampleSounds[menu][submenu - 1]->getAudioStream()), soundChannel);
+ if (1 <= submenu && submenu <= menuSounds.size()) {
+ playStream(*(menuSounds[submenu - 1]->getAudioStream()), soundChannel);
setLastPlaySound(soundChannel, soundId);
} else {
warning("DirectorSound::playExternalSound: Could not find sound %d %d", menu, submenu);
diff --git a/engines/director/sound.h b/engines/director/sound.h
index 5d002574e0..9052a70ae2 100644
--- a/engines/director/sound.h
+++ b/engines/director/sound.h
@@ -48,6 +48,10 @@ struct FadeParams {
startVol(sv), targetVol(tv), totalTicks(tt), startTicks(st), lapsedTicks(0), fadeIn(f) {}
};
+const uint16 kMinSampledMenu = 10;
+const uint16 kMaxSampledMenu = 15;
+const uint16 kNumSampledMenus = kMaxSampledMenu - kMinSampledMenu + 1;
+
struct ExternalSoundID {
uint16 menu;
uint16 submenu;
@@ -156,7 +160,7 @@ private:
bool _enable;
- Common::HashMap<uint, Common::Array<AudioDecoder *> > _sampleSounds;
+ Common::Array<AudioDecoder *> _sampleSounds[kNumSampledMenus];
public:
DirectorSound(Window *window);
More information about the Scummvm-git-logs
mailing list