Skip to content

Fix looping bugs#263

Merged
sezero merged 2 commits intoMindwerks:masterfrom
Clownacy:fix-infinite-loop
Oct 17, 2025
Merged

Fix looping bugs#263
sezero merged 2 commits intoMindwerks:masterfrom
Clownacy:fix-infinite-loop

Conversation

@Clownacy
Copy link
Contributor

This addresses an infinite loop as well as incorrect song looping. See each commit for further details.

https://www.doomworld.com/idgames/music/ultimidi

The song 'E2M2 Myrgharok - Halls of Wandering Spirits' contains a
track which produces only metadata, meaning that `samples_to_mix`
is never increased. Because of this, the while-loop never terminates,
and the program freezes.

This problem is only exhibited when looping is enabled.
WildMIDI internally uses a single list of events, like a Type 0 MIDI
file, resulting in Type 1 MIDI files being 'flattened' into a single
track when they are loaded.

Because of this, 'end of track' events lose their original meaning,
ending the entire song instead of just the track which they belong
to.

Rather than overhaul WildMIDI to internally use multiple tracks, it
is easier to simply discard all but the final 'end of track' event.

https://www.doomworld.com/idgames/music/ultimidi

This fixes the playback of 'E2M1 TrialD - Pagliacci's Going to Town',
which would otherwise loop within seconds of starting.

Closes Mindwerks#213. The MIDI files from Rise of the Triad which are linked
in the issue are Type 1 MIDI files which suffer from this exact
problem.
@sezero sezero merged commit 2ee7ebf into Mindwerks:master Oct 17, 2025
8 checks passed
@sezero
Copy link
Contributor

sezero commented Oct 17, 2025

Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants