[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