aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorbjörn Andersson2012-11-18 17:49:23 +0100
committerTorbjörn Andersson2012-11-18 17:57:01 +0100
commitae823b5c6a31a568072545503dbc5c125d19c391 (patch)
tree8b783f49ee54c9fbff7c8fa16fa46f09b17d8f09
parent34a8b5049e903f33a26b56da5fa32986a023feec (diff)
downloadscummvm-rg350-ae823b5c6a31a568072545503dbc5c125d19c391.tar.gz
scummvm-rg350-ae823b5c6a31a568072545503dbc5c125d19c391.tar.bz2
scummvm-rg350-ae823b5c6a31a568072545503dbc5c125d19c391.zip
SCUMM: Fix regression that caused "pops" in MI1 jungle music
Properly treat rests as rests, not notes. Otherwise, it would try to play a really low note which just came out as a "pop".
-rw-r--r--engines/scumm/player_v3m.cpp9
-rw-r--r--engines/scumm/player_v5m.cpp11
2 files changed, 16 insertions, 4 deletions
diff --git a/engines/scumm/player_v3m.cpp b/engines/scumm/player_v3m.cpp
index db532a9f6e..ad812a53ca 100644
--- a/engines/scumm/player_v3m.cpp
+++ b/engines/scumm/player_v3m.cpp
@@ -168,8 +168,13 @@ bool Player_V3M::getNextNote(int ch, uint32 &samples, int &pitchModifier, byte &
uint16 duration = READ_BE_UINT16(&_channel[ch]._data[_channel[ch]._pos]);
byte note = _channel[ch]._data[_channel[ch]._pos + 2];
samples = durationToSamples(duration);
- pitchModifier = noteToPitchModifier(note, &_channel[ch]._instrument);
- velocity = 127;
+ if (note > 0) {
+ pitchModifier = noteToPitchModifier(note, &_channel[ch]._instrument);
+ velocity = 127;
+ } else {
+ pitchModifier = 0;
+ velocity = 0;
+ }
_channel[ch]._pos += 3;
return true;
}
diff --git a/engines/scumm/player_v5m.cpp b/engines/scumm/player_v5m.cpp
index d59cf9ade2..26cfb0e7c1 100644
--- a/engines/scumm/player_v5m.cpp
+++ b/engines/scumm/player_v5m.cpp
@@ -186,8 +186,15 @@ bool Player_V5M::getNextNote(int ch, uint32 &samples, int &pitchModifier, byte &
uint16 duration = READ_BE_UINT16(&_channel[ch]._data[_channel[ch]._pos]);
byte note = _channel[ch]._data[_channel[ch]._pos + 2];
samples = durationToSamples(duration);
- pitchModifier = noteToPitchModifier(note, &_channel[ch]._instrument);
- velocity = _channel[ch]._data[_channel[ch]._pos + 3];
+
+ if (note > 1) {
+ pitchModifier = noteToPitchModifier(note, &_channel[ch]._instrument);
+ velocity = _channel[ch]._data[_channel[ch]._pos + 3];
+ } else {
+ pitchModifier = 0;
+ velocity = 0;
+ }
+
_channel[ch]._pos += 4;
if (_channel[ch]._pos >= _channel[ch]._length) {