[Scummvm-git-logs] scummvm master -> fb7e7539d4ba735ea5ad30e189a6380d4874667e

NMIError noreply at scummvm.org
Tue Feb 4 19:38:17 UTC 2025


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
7e85388a25 AGOS: Fix MIDI track queueing not working
fb7e7539d4 SCUMM: Fix excessive MIDI messages


Commit: 7e85388a250309744b7fdd731d536f27e2c91d30
    https://github.com/scummvm/scummvm/commit/7e85388a250309744b7fdd731d536f27e2c91d30
Author: Coen Rampen (crampen at gmail.com)
Date: 2025-02-04T20:38:07+01:00

Commit Message:
AGOS: Fix MIDI track queueing not working

Changed paths:
    engines/agos/midi.cpp


diff --git a/engines/agos/midi.cpp b/engines/agos/midi.cpp
index 0d824c1cf48..de23cca8ffc 100644
--- a/engines/agos/midi.cpp
+++ b/engines/agos/midi.cpp
@@ -519,25 +519,12 @@ int MidiPlayer::open() {
 		_parserSfxAccolade->setMidiDriver(_driverMsSfx);
 	}
 
-	if ((_parserSfx || _parserSfxAccolade) && _driverMsSfx == _driver) {
-		// Use MidiPlayer::onTimer to trigger both parsers from the
-		// single driver (it can only have one timer callback).
-		_driver->setTimerCallback(this, &onTimer);
-		if (_parserSfx) {
-			_parserSfx->setTimerRate(_driver->getBaseTempo());
-		} else if (_parserSfxAccolade) {
-			_parserSfxAccolade->setTimerRate(_driver->getBaseTempo());
-		}
-	} else {
-		// Connect each parser to its own driver.
-		_driver->setTimerCallback(_parserMusic, &_parserMusic->timerCallback);
-		if (_parserSfx) {
-			_driverMsSfx->setTimerCallback(_parserSfx, &_parserSfx->timerCallback);
-			_parserSfx->setTimerRate(_driverMsSfx->getBaseTempo());
-		} else if (_parserSfxAccolade) {
-			_driverMsSfx->setTimerCallback(_parserSfxAccolade, &_parserSfxAccolade->timerCallback);
-			_parserSfxAccolade->setTimerRate(_driverMsSfx->getBaseTempo());
-		}
+	// Use MidiPlayer::onTimer to trigger both parsers.
+	_driver->setTimerCallback(this, &onTimer);
+	if (_parserSfx) {
+		_parserSfx->setTimerRate(_driver->getBaseTempo());
+	} else if (_parserSfxAccolade) {
+		_parserSfxAccolade->setTimerRate(_driver->getBaseTempo());
 	}
 
 	return 0;


Commit: fb7e7539d4ba735ea5ad30e189a6380d4874667e
    https://github.com/scummvm/scummvm/commit/fb7e7539d4ba735ea5ad30e189a6380d4874667e
Author: Coen Rampen (crampen at gmail.com)
Date: 2025-02-04T20:38:07+01:00

Commit Message:
SCUMM: Fix excessive MIDI messages

The code for reducing music volume levels during speech was sending out volume
change messages every MIDI timer tick, regardless of whether the volume had
actually changed. This caused problems for older MIDI hardware, which can only
process a limited number of MIDI events in a given time period.

Fixed this by checking if any of the volume levels set by musicVolumeReduction
has actually changed before calling update_volumes. Looking at the MIDI output
of the original interpreter, this also seems a better match to the original
behavior.

This fixes issue #15724.

Changed paths:
    engines/scumm/imuse/imuse.cpp


diff --git a/engines/scumm/imuse/imuse.cpp b/engines/scumm/imuse/imuse.cpp
index 7276ca4fa4d..835b2e83d6a 100644
--- a/engines/scumm/imuse/imuse.cpp
+++ b/engines/scumm/imuse/imuse.cpp
@@ -1401,11 +1401,17 @@ void IMuseInternal::musicVolumeReduction(MidiDriver *midi) {
 			_music_volume_eff = (curEffVol + 1) * factor;
 	}
 
+	bool volumeChanged = false;
 	for (uint i = 0; i < ARRAYSIZE(_channel_volume); i++) {
-		_channel_volume_eff[i] = _channel_volume[i] * (_master_volume * _music_volume_eff / 255) / 255;
+		uint16 newChannelVolume = _channel_volume[i] * (_master_volume * _music_volume_eff / 255) / 255;
+		if (_channel_volume_eff[i] != newChannelVolume) {
+			_channel_volume_eff[i] = newChannelVolume;
+			volumeChanged = true;
+		}
 	}
 
-	update_volumes();
+	if (volumeChanged)
+		update_volumes();
 }
 
 int IMuseInternal::set_volchan_entry(uint a, uint b) {




More information about the Scummvm-git-logs mailing list