aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilippos Karapetis2010-06-03 22:00:50 +0000
committerFilippos Karapetis2010-06-03 22:00:50 +0000
commitddf7449b00d15c5419c667f9df553053e8dc0cec (patch)
tree61e07a218c34038d7178cf49d8528254faf28db2
parent1973bd5a71fc2847b123e0f1d769220210eceba4 (diff)
downloadscummvm-rg350-ddf7449b00d15c5419c667f9df553053e8dc0cec.tar.gz
scummvm-rg350-ddf7449b00d15c5419c667f9df553053e8dc0cec.tar.bz2
scummvm-rg350-ddf7449b00d15c5419c667f9df553053e8dc0cec.zip
Added code to get which channels are used by a sound. Also, fixed a crash when using Sierra's GM patches, a regression from commit #49391.
svn-id: r49415
-rw-r--r--engines/sci/resource.h2
-rw-r--r--engines/sci/resource_audio.cpp5
2 files changed, 7 insertions, 0 deletions
diff --git a/engines/sci/resource.h b/engines/sci/resource.h
index f722ca5768..6d9da3c200 100644
--- a/engines/sci/resource.h
+++ b/engines/sci/resource.h
@@ -512,6 +512,7 @@ public:
Track *getDigitalTrack();
int getChannelFilterMask(int hardwareMask, bool wantsRhythm);
byte getInitialVoiceCount(byte channel);
+ bool isChannelUsed(byte channel) { return _usedChannels[channel]; }
private:
SciVersion _soundVersion;
@@ -519,6 +520,7 @@ private:
Track *_tracks;
Resource *_innerResource;
ResourceManager *_resMan;
+ bool _usedChannels[16];
};
} // End of namespace Sci
diff --git a/engines/sci/resource_audio.cpp b/engines/sci/resource_audio.cpp
index b626a25989..6dfd190d97 100644
--- a/engines/sci/resource_audio.cpp
+++ b/engines/sci/resource_audio.cpp
@@ -151,6 +151,7 @@ void ResourceManager::addNewGMPatch(const Common::String &gameId) {
if (!gmPatchFile.empty() && Common::File::exists(gmPatchFile)) {
ResourceSource *psrcPatch = new ResourceSource;
psrcPatch->source_type = kSourcePatch;
+ psrcPatch->resourceFile = 0;
psrcPatch->location_name = gmPatchFile;
processPatch(psrcPatch, kResourceTypePatch, 4);
}
@@ -467,6 +468,9 @@ SoundResource::SoundResource(uint32 resNumber, ResourceManager *resMan, SciVersi
byte *dataEnd;
Channel *channel, *sampleChannel;
+ for (int i = 0; i < 16; i++)
+ _usedChannels[i] = false;
+
switch (_soundVersion) {
case SCI_VERSION_0_EARLY:
case SCI_VERSION_0_LATE:
@@ -556,6 +560,7 @@ SoundResource::SoundResource(uint32 resNumber, ResourceManager *resMan, SciVersi
channel->data = resource->data + READ_LE_UINT16(data + 2) + 2;
channel->size = READ_LE_UINT16(data + 4) - 2; // Not counting channel header
channel->number = *(channel->data - 2);
+ _usedChannels[channel->number] = true;
channel->poly = *(channel->data - 1);
channel->time = channel->prev = 0;
if (channel->number == 0xFE) { // Digital channel