DOTT: Hanging notes (regression?)
|Reported by:||eriktorbjorn||Owned by:||SF/jamieson630|
|Game:||Day of the Tentacle|
[Extracted from bug report #775097]
English CD "talkie" version.
At the end of the game, when the kids are hiding from
purple tentacle, the music changes. When it does, some
notes are usually (always?) left hanging. The same
thing also happens sometimes when I push nurse Edna out
of her room, but that's harder for me to reproduce.
I've look a bit closer at the first of these cases, and
I think it must have something to do with the "smart
jumping" logic in the MIDI parser, because if I disable
this property I no longer get any hanging notes.
From what I understand, smart jumping means that
instead of silencing all notes at once and then jump to
a new position, it leaves the current notes to fade out
on their own, thus allowing for a smoother transition.
This involves scanning the track for note off events or
the end of the track, to see when the notes would have
been turned off.
I don't know what the unit of time measurement is, so I
don't know what are reasonable values and what aren't,
but when the track loops the time_left parameter is
somewhere around 10000, and it only has to scan a few
events ahead to figure that out.
Which makes the following calls to hangingNote(), which
I captured during one test run, look rather suspicious
hangingNote(11, 67, 8099928, 0)
hangingNote(11, 71, 8615520, 0)
hangingNote(11, 74, 16625052, 0)
hangingNote(1, 35, 72028872, 0)
hangingNote(2, 67, 78392304, 0)
hangingNote(6, 67, 104966496, 0)
Not only that, but it had to scan hundreds - maybe
thousands - of events ahead to find them.
Ticket imported from: #775654. Ticket imported from: bugs/1063.