Opened 10 years ago

Closed 10 years ago

Last modified 2 years ago

#9262 closed patch

SCI: MT-32 plays "warble" of notes when music resumes

Reported by: SF/sven3000 Owned by: bluegr
Priority: normal Component: Engine: SCI
Version: Keywords: MIDI
Cc: Game:


When music is resumed from a non-zero starting position (e.g. if music was paused or when a game is restored), the MidiParser::jumpToTick function fast-forwards to the correct position and sends all events to the driver (fireEvents==true in these cases). With some instruments on the Roland MT-32, this is audible, creating a "warble" sound - a flurry of notes played in rapid succession.

A very clear example of this happening is in the dwarves' mine in King's Quest 4 (note: you may need to clean their house first before you can stay their long enough to notice this). Stay in the mine, then start typing, press ESC, or save/load, anything that pauses the music. The "warble" is heard when the music resumes. This was observed with a real Roland MT-32; it's not really audible on the emulator in the scenario's I've tried.

The attached patch modifies the jumpToTick function so that it doesn't send "note on" messages to the driver. This solves the problem, and the behaviour matches the observed behaviour of the real SCI engine (under DOSBox), in that hanging notes are not resumed when the music resumes (which means it doesn't send a note on for those notes that were playing when then music was paused).

This patch fixes the issue I've mentioned, and has no apparent side-effects.

This was observed on ScummVM 1.2 and svn revision 54451, on Windows 7 x64, using a real Roland MT-32 attached via USB MIDI cable, with the "true Roland MT-32" option checked in the game's settings. I have noticed this effect in several games, and this patch apears to solve it.

Ticket imported from: #3117577. Ticket imported from: patches/1367.

Attachments (1)

midiparser_jumpToTick.patch (557 bytes ) - added by SF/sven3000 10 years ago.
Patch that changes MidiParser::jumpToTick to not send note on messages even if fireEvents==true

Download all attachments as: .zip

Change History (4)

by SF/sven3000, 10 years ago

Attachment: midiparser_jumpToTick.patch added

Patch that changes MidiParser::jumpToTick to not send note on messages even if fireEvents==true

comment:1 by bluegr, 10 years ago

Owner: set to bluegr
Status: newclosed

comment:2 by bluegr, 10 years ago

Applied with some minor modifications.

Please use our code formatting conventions:

This is only used by SCI for now, but it looks sensible enough to be used by all engines that require this functionality, thus an appropriate TODO has been added

comment:3 by digitall, 2 years ago

Component: Engine: SCI
Keywords: MIDI added
Note: See TracTickets for help on using tickets.