[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