Since commit b7d6a6ea, libxmp has added an extra step to voice
positions if they are close to or at the end of their loop on a tick
boundary. This results in samples with loops being very slightly
too fast. This patch corrects this behavior so samples with loops
play at the correct speed.
The issue can be demonstrated with two looping samples, where one
sample is two inverted copies of the other sample. When played back
at the same pitch, they should cancel entirely and be silent, but
this extra step causes them to gradually diverge instead.
* Fixes support for the following previously broken FAR effects:
`1?` Pitch offset up
`2?` Pitch offset down
`3?` Tone portamento
`4?` Retrigger
`5?` Set vibrato depth
`6?` Vibrato
`7?` Volume slide up
`8?` Volume slide down
`9?` Sustained vibrato
`c?` Note offset
`f?` Tempo
* Adds support for previously unimplemented FAR effects:
`03` Fulfill loop
`04` Old tempo mode
`05` New tempo mode
`a?` Slide-to-volume
`b?` Balance
`d?` Fine tempo down
`e?` Fine tempo up
* Adds FAR effects loader test.
* Adds FAR effects regression tests.
* libxmp no longer ignores the header length field in FAR modules.
* libxmp now loads module comment text from FAR modules.
* libxmp now loads channel panning and mute values from FAR modules.
The portions of this patch related to tempo handling had to be
partially based on Dan Potter's example playercode, which *should*
be license friendly.