* When markers are enabled for a module with 256 orders, libxmp
could attempt to index past the end of the orders array to find
an end marker.
* When repeating from the end of a module or an end marker into an
FE marker, libxmp would apply a junk global volume value from the
marker's scan position instead of from the first actual pattern.
* Positions <0 are now clamped at the start of rendering a tick.
These could cause crashes and mostly only occur in situations
where negative positions aren't useful.
* When a loop playing in reverse reaches the start of the loop
at the end of rendering a tick, the loop is repositioned now.
This prevents the aforementioned clamp from altering the
playback rate of samples with reversed loops.
* The loop is no longer repositioned when the position is after
the end of the loop when playing in reverse.
* Adds IT MIDI macro configuration handling to the IT loader.
* Adds a player parser for IT MIDI macros and support for several
MIDI macro variables supported by Impulse Tracker.
* Adds support for the IT set parameterized macro, MIDI macro,
and smooth MIDI macro (OpenMPT extension) effects.
* Adds six missing OpenMPT IT MIDI macro tests and updates the
OpenMPT IT readme. Also adds a new test for smooth MIDI macros.
* Digital Symphony stores patterns in blocks of 2000.
libxmp previously did not handle this quirk.
* Implemented !Tracker effect 16 Line Jump, which is also used
by Digital Symphony. This effect acts like Pattern Break, except
it jumps into the current pattern instead of the next pattern.
It can also be used in conjunction with Position Jump and Pattern
Break to change their target row. This effect required minor flow
hacks to work without clobbering running time.
* Fixed a scan bug related to FX_S3M_TEMPO where tempo values under
32 would be ignored despite them being higher than the minimum
allowed tempo.
* Fixed a memory leak in the Digital Symphony loader.
* Digital Symphony effects added:
- Implemented 1F Invert Loop. This required a new quirk as invert
loop is implemented in a way that assumes QUIRK_PROTRACK may be
changed by xmp_set_player.
- Implemented 2A Volume Slide + Fine Slide Down.
- Implemented 2B Line Jump (same as !Tracker Line Jump).
- Implemented 30 Set Stereo.
- Implemented 32 Unset Sample Repeat. This required switching
Digital Symphony modules to IT sustain loops instead of regular
loops. This also required adding support for sustain loops to
invert loop.
* Digital Symphony effects fixed:
- Portamento effects 01 02 21 and 22 were incorrectly using
effect memory.
- Fine portamento effects 11 12 1a and 1b were being converted
to Exx instead of their equivalent full byte parameter effects.
- Vibrato and tremolo effects 04 06 07 now update on tick 0.
- The highest 3 bits of 09 Set Sample Offset are now translated
to FX_HIOFFSET instead of being ignored.
- 0B Position Jump uses a hex parameter in Digital Symphony, but
libxmp was treating it as decimal.
- 0F Set Speed now ignores parameter 0 and clamps values >255.
- 2F Set Tempo now only ignores parameter 0, and clamps other
valid tempos instead of ignoring them.
- Extended effects 16 1c 1d and 1e (which libxmp currently does
not have dedicated effects for) are now bounded with a clamp
instead of a modulo, which makes them slightly less wrong.
The IT filter should be disabled if the channel filter cutoff is
currently 127 and the channel filter resonance is currently 0. This
combination of settings should only be applied when a new note is
encountered that does not use portamento; otherwise, the previous
settings should be used. libxmp was instead always resetting the
cutoff to 127 on a new note.
Adds a clamp to the IT filter mixer loops to prevent filtered output
samples from going above the expected level. The clamp was determined
by comparing against OpenMPT test modules that contain an IT WAV
writer output sample. This fixes numerous playback bugs in test
modules (and probably real modules) that use filters, and also stops
integer overflows in some rare situations with garbage samples.