Releases of OpenMPT Module Decoder

0.6.6 current version, released on: 2022-11-03

  • Fixed bugs in OpenMPT visualisation color & font management.
  • Made Columns UI theme colors respected.
  • Updated OpenMPT to 0.6.6.

0.6.5 released on: 2022-09-09

  • Now under new management, as kode54 officially ceased all foobar2000 development.
  • Updated libopenmpt to version 0.6.5.
  • Added 64-bit build.
  • Added dark mode.
  • Made possible to navigate OpenMPT control dialog with keyboard.
  • Visualisation no longer corrupts Default UI fonts.

0.6.4 released on: 2022-06-26

  • Ping-pong sample loops sometimes stopped playing at the end of the loop.
  • Pitch / Pan Separation and Random Variation instrument properties were not resetting properly when seeking, potentially causing instruments to be played e.g. at a vastly different pan position compared to playing the module continuously.
  • MED: Stereo samples were not imported correctly.
  • zlib: Update to v1.2.12 (2022-03-27).

0.6.2 released on: 2022-03-14

  • [Sec] Possible out-of-bounds write in malformed IT / XM / MPTM files using the internal LFO plugin. (r17076)
  • [Sec] Possible out-of-bounds read when using Amiga BLEP interpolation with extremely high-pitched notes. (r17078, r17079)
  • ISO-8859-1-related charsets from Amiga OS and RISC OS are now handled more accurately, thus avoiding some unwanted control characters.
  • MO3: Pattern indices 254 / 255 were not treated as playable patterns even if the original file was a MOD / XM.
  • Correctly apply ST3-style effect memory when seeking in S3M files.
  • Command S (S3M / IT style) effect memory was not applied when seeking.

0.6.1 released on: 2022-01-31

  • [Bug-unofficial-fix] Interactive mode correctly reflects initial mute status of channels by checking both mute flags
  • [Bug] Linking libmpg123 no longer fails on OpenBSD.
  • [Bug] Possible hang with malformed DMF, DSM, MED, MUS, OKT and SymMOD files containing 65536 or more patterns when destroying the module.
  • [Bug] Avoid NaNs and infinite values with custom tunings and in the I3DL2Reverb plugin.
  • MIDI macros are now evaluated when seeking.
  • The letter “z” is now evaluated in fixed MIDI macros (Z80…ZFF) the same way as in Impulse Tracker.
  • MOD: Loosened VBlank timing heuristics so that “frame of mind” by Dascon plays correctly.
  • MOD: Validate the contents of “hidden” patterns beyond the end of the order * list when the file size matches the expected size when only taken “official” patterns into account. This fixes Shofixti Ditty.mod from Star Control 2 while keeping other (partly broken) modules working.
  • MED: Command 20 (reverse sample) is now only applied when it’s next to a note.
  • S3M: Introducing the “Send OPL key-off when triggering notes” compatibility setting broke retrigger for OPL notes again (they retriggered rather than not retriggering).
  • S3M: Retriggering a note no longer resets its pitch after a portamento.
  • S3M: Partially implement retrigger behaviour for stopped notes in SoundBlaster mode: Like in IT, it is not possible to retrigger a sample that has already stopped playing.
  • DIGI: Improve compatibility with E3x reverse sample command.
  • DSym: Tempos < 32 were treated as tempo slides.
  • SymMOD: Key-off command was not implemented properly.

0.6.0 released on: 2021-12-27

  • [New] MUS files from Psycho Pinball and Micro Machines 2 are now supported.
  • [New] SymMOD files created with Symphonie / Symphonie Pro are now supported.
  • [New] FMT files created with Davey W Taylor’s FM Tracker are now supported.
  • [New] DSYM files created with Digital Symphony are now supported.
  • [New] TakeTracker MODs with TDZ1 to TDZ3 magic bytes are now supported.
  • [Change] libopenmpt no longer generates internal interpolation tables on library load time, but instead only on first module load time.
  • libopenmpt can now detect infinite pattern loops and treats them as the song end. This means that setting a repeat count other than -1 now always guarantees that playback will eventually end. The song loop counter is decremented each time it ends up at the start of the infinite loop, so the song does not restart from the beginning even if the repeat count is not 0.
  • openmpt::module::set_position_seconds() accuracy has been improved for modules with pattern loops.
  • IT: Portamentos in files with Linear Slides disabled are now more accurate.
  • IT: Pitch/Pan Separation was affected by note-off commands, and wasn’t reset by panning commands like in Impulse Tracker.
  • IT: Even after libopenmpt 0.5.14 the filter reset logic was still not 100% identical to Impulse Tracker: A note triggered on tick 0 of a row with a Pattern Delay effect still caused the filter to be reset on repetitions of that row even though the note wasn’t retriggered.
  • IT: Added read-only support for BeRoTracker commands 1 and 2 (equivalent to XM commands K and L).
  • XM: BeRoTracker saves smooth MIDI macros in a different way from OpenMPT. This command is now imported correctly.
  • XM: Emulate FT2 Tone Portamento quirk that inverts portamento direction after the target was reached (if target note was higher than previous note).
  • S3M files saved with Impulse Tracker and latest Schism Tracker now also compute sample playback speed in Hertz.
  • Depending on whether an S3M file was last saved in Scream Tracker with the Sound Blaster or Gravis Ultrasound drivers loaded, different compatibility flags are now applied. For files saved with the GUS, the sample volume factor is now also ignored (fixes volume levels in S3Ms made on the GUS, in particular if they use both samples and OPL instruments).
  • S3M: Enforce the lower frequency bound.
  • MOD: Loosened VBlank timing heuristics so that the original copy of Guitar Slinger from Dizzy Tunes II plays correctly.
  • FAR: Correct portamento depth is now used.
  • DMF / IMF: Improved accuracy of finetune commands.
  • MDL: Implemented finetune command.
  • OKT: Various accuracy improvements such as: Sharing volume between mixed channels, volume commands on mixed channels are permanent (not reset with new notes), mixed channels do not support default sample volume, 7-bit samples are actually supposed to be played as-is (not amplified to full 8-bit range), reject speed command parameters >= 20.
  • zlib: v1.2.11 (2017-01-15).
  • mpg123: v1.29.3 (2021-12-11).
  • ogg: v1.3.5 (2021-06-04).
  • vorbis: v1.3.7 (2020-07-04).

0.5.14 released on: 2021-12-07

  • [Sec] Possible out-of-bounds read in Chorus plugin with NaN plugin parameters. Most implementations of the “fast math” compiler optimizations will prevent this crash but it is not guaranteed. (r16096)
  • [Bug] Fixed undefined behaviour with custom tunings found with ubsan.
  • OPL: Improved channel allocation strategy when there are lots of faded-out notes.
  • MOD: Digital Tracker MODs have four unknown bytes right after the magic bytes which seem to be ignored even by Digital Tracker itself. Just skip over them.
  • The logic when to turn off the resonant filter was broken in some edge cases since libopenmpt 0.5.1.
  • IMF: Implemented XE1-XE3 commands, which disable individual envelopes. Command Nxy (cutoff slide + resonance) is now also partially supported (only resonance for now).
  • IMF: Filter envelopes were upside down.
  • MTM: Omitting pattern loading through the load.skip_patterns ctl caused sample data to be corrupted.
  • S3M: Ignore O00 commands in files created with Scream Tracker 3.00 and 3.01, as this command only gained effect memory in version 3.03.
  • STM: Use S3M-like sample swap behaviour.
  • XM: Disable arpeggio quirk for XMs made with Skale Tracker. Fixes KAPTENFL.XM.

0.5.13 released on: 2021-11-15

  • [Bug] Fixed various undefined behaviour found with ubsan.
  • IMF: Change envelope interpretation to be more like in XM instead of IT and tighten header validation.
  • MED: Some samples had a ping-pong loop when there should be no loop at all.
  • MT2: Ignore incorrect drums chunk size in early MT2 files (fixes e.g. “A little Rock” by Csumi).
  • MT2: Work around initial master volume of 0 used in some files that apply a fade-in a the song start using track automation that would stay silent forever otherwise (track automation is currently not supported).
  • OKT: Apply portamento on every tick.
  • mpg123: Update to v1.29.2 (2021-10-23).

0.5.12 released on: 2021-10-06

  • [Sec] Possible crash when loading malformed MDL files. (r15603)
  • [Bug] Fixed various undefined behaviour found with ubsan.
  • Seeking with sample sync sometimes didn’t compute the correct sample position with pingpong-looped samples.
  • IT: Tremor command I11 erroneously behaved like I00 (use previous parameter) unless IT Old Effects were enabled.
  • PTM: Panning was translated wrong in some edge cases.
  • IMF / PTM: Note Slide commands were sometimes slightly off.
  • OKT: Better support for fine note slides.
  • DBM: Echo enable effect parameter range checks were incorrect.
  • XM: Sample texts in XMs made with MadTracker are now also decoded using Windows-1252 encoding.

Includes the following changes from 0.5.11:
  • [Sec] Possible crash with malformed modules when trying to access non-existent plugin slots FX251-FX255. (r15479, r15518)
  • [Sec] Possible read beyond sample start after swapping to a sample with loop points set but not loop enabled. (r15499)
  • [Sec] Fixed various possible crashes with malformed MMCMP files. (r15504, 15528)
  • [Sec] MED: Possible read past end of sequence name (stack-allocated, so relatively unlikely to result in a crash). (r15477)
  • Fixed excessive memory usage with files claiming to have an extremely high rows per beat count while also using tempo swing. Maximum rows per beat are now limited to 65536.
  • STP: Avoid creating thousands of patterns when loading malformed files even though no more pattern data can be read.
  • mpg123: Update to v1.28.2 (2021-07-12).

0.5.10+1 released on: 2021-09-13

  • Removed sample rate override for playback in 1.6.x+
  • Changed default sample rate to 96000 Hz

0.5.10 released on: 2021-07-07

  • S3M: Honor the Stereo flag not being set. This improves the sound of some tunes like Turbulence by Purple Motion.
  • S3M: Detect MPT 1.0 alpha versions which didn’t set the Stereo flag. In this case, the unset Stereo flag is also ignored because MPT 1.0 alpha used the default S3M channel panning anyway.
  • S3M: Only for OPL instruments the high sample rate bits should be ignored; for PCM instruments they are clamped to 65535 Hz.
  • MOD: Do not apply ProTracker loop length quirk to MODs that could have been made with Scream Tracker (fixes Soul-O-Matic by Purple Motion).
  • AMF (DSMI): Format revisions 1 and 9, as well as early (technically malformed) revision 10 files, are now supported. Surround panning commands and instrument number without note are now converted correctly.
  • AMF (DSMI): Patterns and samples were not read correctly in some files (e.g. AVOID.AMF).
  • GDM: Correctly import extra-fine portamentos.
  • mpg123: Update to v1.28.0 (2021-06-05).
  • ogg: Update to v1.3.5 (2021-06-04).
  • stb_vorbis: Update v1.21 commit 8e51be04dc7dcee462e1f09e410faceab52cc6d2 (2021-07-02).

0.5.9 released on: 2021-05-17

  • The retrigger effect didn’t work correctly for OPL instruments in some cases depending on the chosen output sample rate.
  • S3M: Emulate IT short sample retrigger quirk in S3M files saved with Impulse Tracker and Schism Tracker.
  • ProTracker 3.6 doesn’t support sample swapping. It is now disabled when loading a ProTracker 3.6 IFF module.
  • Some files with “hidden” garbage patterns were not played correctly since libopenmpt 0.5.3.
  • MOD: E9x retrigger now works the same way as in ProTracker 2.
  • MDL: Improve auto-vibrato accuracy.
  • 669: Reject files that contain any pattern tempo higher than 15.
  • Reduce memory consumption of malformed XPK-compressed files.
  • mpg123: Update to v1.27.2 (2021-05-08).

0.5.8 released on: 2021-04-12

  • [Sec] Possible null-pointer dereference read caused by a sequence of openmpt::module::read, openmpt::module::set_position_order_row pointing to an invalid pattern, and another openmpt::module::read call. To trigger the crash, pattern 0 must not exist in the file and the tick speed before the position jump must be lower than the initial speed of the module. (r14530)
  • [Bug] libopenmpt 0.5.7 broke seeking in some subsongs.
  • The built-in LFO plugin did not load the correct initial LFO frequency.
  • IT command S7x (instrument control) is now supported when seeking with sample sync enabled.
  • libopenmpt_ext play_note was cutting of channels even when there were plenty of free channels to use.
  • mpg123: Update to v1.26.5 (2021-03-22).

0.5.7 released on: 2021-03-21

  • [Sec] Possible null-pointer dereference read caused by a sequence of openmpt::module::read, openmpt::module::set_position_seconds with a position past the song end, and another openmpt::module::read call. (r14363)
  • IT: Instrument / sample panning was reset on note-off / fade commands.
  • IMF: Set Finetune is now implemented correctly.
  • Fixed excessive memory consumption with malformed files in various formats.

0.5.6 released on: 2021-03-16

  • [Bug] stb_vorbis: Fix decoding of Vorbis streams without comments which affected most Vorbis samples since stb_vorbis v1.20.
  • openmpt::ext::interactive::set_pitch_factor wasn’t applied to OPL voices.
  • OPL channel state (in particular current patch) is now updated when seeking.
  • The FT2 tremolo quirk is now also applied to MOD files. FT2 just copied the quirky code from ProTracker!
  • DMF: Preserve effects better in some situations where there is more than one effect in a pattern cell.
  • DMF: Improve import of finetune effect with parameters larger than +/-15.
  • AMS: Avoid allocating excessive amount of memory for compressed song message in malformed files.
  • S3M: Some samples or OPL patches were imported with a too high sample rate if module was saved with Scream Tracker 3.

0.5.4 released on: 2020-12-02

  • AMS: An upper bound for uncompressed sample size is now established to avoid memory exhaustion from malformed files.
  • DMF: Support early format beta versions (in particular versions 1-4).
  • MED: Also use octave wrapping in 8-channel mode for MMD0/MMD1 modules.
  • MED: If 8-channel mode is activated, ignore BPM mode.
  • MED: Emulate tempo commands F01 and F02 quirk.
  • MED: Tempo commands below 32 BPM were interpreted as tempo slides.
  • IMF: Instrument sample mapping was off by one octave, notable in the guitar part of Astaris by Karsten Koch.

0.5.3 released on: 2020-10-25

  • Updated libopenmpt to version 0.5.3, with one security fix and several minor changes

0.5.2+1 released on: 2020-09-13

  • Now supports setting the playback sample rate automatically in foobar2000 1.6.1 and newer

0.5.2 released on: 2020-08-31

  • Updated libopenmpt to version 0.5.2, with minor changes

0.5.1 released on: 2020-07-26

  • MPTM: Qxy now retriggers OPL notes if new compatibility flag is set in file.
  • MPTM: Bring back old OPL note end-of-envelope behaviour for files made with OpenMPT 1.28.
  • IT: Global volume slides with both nibbles set preferred the “slide up” nibble over the “slide down” nibble in old OpenMPT versions, unlike other slides. Such old files are now imported correctly again.
  • IT: Fixed an edge case where, if the filter hit full cutoff / no resonance on the first tick of a row where a new delayed note would be triggered, the filter would be disabled even though it should stay active. Fixes by maddie.
  • OXM: Some sample loops were not imported correctly.
  • XM: Out-of-range arpeggio clamping behaviour broke in OpenMPT The arpeggios in Binary World by Dakota now play correctly again.
  • S3M: Support old-style sample pre-amp value in very early S3M files.
  • S3M: Only force-enable fast slides for files ST 3.00. Previously, any S3M file made with an ST3 version older than 3.20 enabled them.
  • S3M: Only apply volume and middle-C speed on instrument change if the new sample slot has sample data.
  • MOD: Fix an infinite loop in GamerMan by MrGamer by playing non-ProTracker MODs more like FT2 would.
  • M15: Improve tracker detection heuristics to never assume SoundTracker 2.0 if there is a huge number of Dxx commands, as that is a definite hint that they should be treated as volume slides. Fixes Monty On The Run by Master Blaster.
  • MO3: Support OPL patches in MO3 files created from MPTM and S3M.
  • DBM: If a global pattern command would be lost because both effect commands in a cell would have to go into the regular effect column (e.g. a speed and a tempo command), the lost command is now attempted to be written into a different cell on the same row. Fixes “Party-Question V” by grogon.
  • mpg123: Update to v1.26.3 (2020-07-16).
  • stb_vorbis: Update v1.20 commit b42009b3b9d4ca35bc703f5310eedc74f584be58 (2020-07-13).

0.5.0 released on: 2020-05-25

  • Component is now built and linked with Visual Studio 2019, for Windows 7 or newer, using dynamic runtime, and enabling SSE2.
  • OggMod compressed FastTracker 2 XM (OXM) modules are now supported.
  • Greatly improved MED import. Synthesized instruments are still not supported but support was added for: Multisampled instruments, delta samples, more pattern commands, Hold and Decay, VSTi and MIDI output, multiple songs and many other small changes.
  • Improved OPL channel allocation when more than 18 notes are active, so that channels that have completely faded out are prioritized over channels that have already been released but have not faded out yet.
  • Interactively triggering an OPL instrument could cause the first pattern channel to no longer be played back correctly.
  • Fix some inaccuracies in OPL emulator.
  • Fix overflow of OPL amplification happening at a synth volume level of 510.
  • End-of-sample pop reduction of surround channels was applied to front channels instead, causing a pop on the front channels instead of removing it on the back channels.
  • IT: Disable retrigger with short notes quirk for modules saved with Chibi * Tracker, as it does not implement that quirk.
  • IT: Instrument and sample panning should not override channel panning for following notes.
  • IT: SBx is now prioritized over Bxx commands that are to the left of it.
  • IT: Duplicate Check Type “Sample” should only be applied if the instruments match, too.
  • IT: Duplicate Check Type “Note” should compare pattern notes, but it was comparing the new pattern note against the old translated note.
  • IT: Various fixes for envelope resetting.
  • IT / S3M: When combining SBx and EEx effects, don’t skip the first row of the loop like in FastTracker 2.
  • S3M: Empty pattern commands now affect effect memory as well.
  • S3M: Offset beyond loop end wraps around to loop start like in Scream Tracker 3 + GUS (previously it just keep playing from the loop start, which is neither what GUS nor Sound Blaster drivers do).
  • S3M: Notes cannot be retriggered after they have been cut.
  • S3M: Fix portamento after note cut (fixes antediluvian_song.s3m).
  • S3M / MOD: Previous note offset is no longer used for retriggered notes if there was no instrument number next to the Qxy effect.
  • MOD: Sample swapping now also works if the sample that is being swapped from does not loop. Swapping to a non-looped sample now stops playback once the swapped-from sample reaches its (loop) end.
  • MOD: Fix early song ending due to ProTracker pattern jump quirk (EEx + Dxx on same row) if infinite looping is disabled. Fixes Haunted Tracks.mod by Triace.
  • MOD: Previous note offset is no longer used for retriggered notes if there was no instrument number next to the E9x effect.
  • MOD: Vibrato type “ramp down” was upside down.
  • XM: If a file contains patterns longer than 1024 rows, they are now clamped to 1024 rows instead of 64 rows.
  • XM: Do not reset note-off status on portamento if there is no instrument number.

0.4.11 released on: 2019-12-23

  • Updated libopenmpt to version 0.4.11 with bug fixes