Stable versions --------------- 4.6.0 (20230615): Changes by Alice Rowan: - Implement S3M and IT mix volume. - Add IT MIDI macro filter effects support. - Fix for IT filter cutoff 127 on new note behavior. - Add missing IT filter clamp to mixer loops. - Fix IT duplicate note check to use the key prior to transpose. - Fix multiple IT playback bugs affecting, e.g. Atomic Playboy. - Fix IT tone portamento and offset. - Fix reverse sustain loop release bug, add IT effect S9F support. - Add Modplug ADPCM4 support for Impulse Tracker modules. - Improve anticlick performance and fix anticlick filter volume bug. - IT fade envelope reset should only affect volume envelope. - Fix Impulse Tracker envelope and fadeout order. - Replace bidirectional loop unrolling with reverse sample rendering. - Fix crash when xmp_set_row() is used on an IT end marker. - Fix NNA and tone portamento interaction with sample changes. - Fix detection for TakeTracker TDZx MODs. - Fix >1MB S3M modules relying on the sample segment high byte. - Move interpolation wraparound handling out of sample loader. - Don't increment voice position by step value at loop/tick end. - Allow xmp_smix_play functions to play key off, cut and fade events. - Several loading performance improvements. - Allow up to 255 sequences to be scanned. - Fixed numerous defects found by fuzzing. Changes by Vitaly Novichkov: - Cmake build system support. Changes by Ozkan Sezer: - Cleanups and refactoring of platform-specific code. - Multiple code cleanups. - Build system fixes and clean-ups. Changes by Claudio Matsuoka: - Fix linkage with gcc when versioned symbols and LTO are enabled. Changes by Cameron Cawley: - Several code and build system clean-ups. Changes by Clownacy: - Fixes and cleanups for C++ compatibility. 4.5.0 (20210606): - fix xmp_set_position et al. when used during loops, pattern delay - make xmp_set_position() consistently clear pattern break/jump vars - xmp_get_format_list() now returns const char* const*, not char** (no ABI change) - xmp_test_module, xmp_load_module, xmp_set_instrument_path and xmp_smix_load_sample() now accept const char* path parameters (no ABI change) - xmp_load_module_from_memory() now accepts a const void* memory param (no ABI change) - xmp_load_module_from_memory no longer accepts sizes <= 0. - explicitly document that callers of xmp_load_module_from_file() are responsible for closing their own file. - remove nonportable use of fdopen in xmp_load_module_from_file() - fix a seek issue with xmp_load_module_from_memory - fix memory-io functions' error handling - fix event out-of-bounds reads due to invalid key values - fix multiple out-of-bounds reads/writes, memory corruptions, uninitialized reads and hangs in several loaders (thanks to Lionel Debroux for providing fuzz files) - fix xmp_release_module double frees when invoked multiple times - fix tempo assignment in module scan (fixes seek issues/crashes) - fix volume, pitch and pan slides lagging behind one frame - fix lite build mod loader symbols - add new xmp_set_row() call to skip replay to the given row - add new xmp_set_tempo_factor() call to set the replay tempo multiplier - add xmp_test_module_from_memory and xmp_test_module_from_file calls to api - add new xmp_syserrno call to the api - xmp_load_module_from_callbacks and xmp_test_module_from_callbacks added to api - fix IT pattern delay volume reset bug (read row events only once per row) - IT: T00 now repeats previous slide - prevent clobbering of muted channels' volumes in IT modules - clamp number of IT envelope nodes at load time - fix IT message (comment) length miscalculation - fix IT volume panning effect - fix IT bug where Cxx on same row as SBx would not be ignored - fix IT bug where Qxy would ignore the volume parameter - fix IT sample global volume and sample vibrato - fix two IT bugs related to note off and volume handling - fix mute status on player creation - fix loading of XMLiTE XM modules - fix XM keyoff with instrument - handle XM 16-bit samples with odd in-file data - fix loading xm instruments with more than 16 samples - fix smix sample allocation - force reset of buffer state on player start - code refactoring and cleanup - fix windows static library builds - fix build with C89 compilers - fix issues related to visibility attributes - fix compatibility with old gcc, mingw, djgpp - fix warnings in configure script - fix Watcom C build on OS/2 - support compiling for Windows with OpenWatcom - fix Amiga build - fix Emscripten builds - fix linkage errors with MSVC debug builds 4.4.1 (20161012): - fix MacOS Tiger build issues (reported by Misty De Meo) - fix sample loop corner case (reported by knight-ryu12) - fix set pan effect in multichannel MODs (reported by Leilei) - fix global volume on module loop (reported by Travis Evans) - fix IT pan right value (by NoSuck) - fix memory leak in XMs with 256 patterns - fix anticlick when rendering only one sample 4.4.0 (20160719): Fix bugs caught in the OpenMPT test cases: - fix XM arpeggio in FastTracker 2 compatible mode - fix IT bidirectional loop sample length - fix MOD vibrato and tremolo in Protracker compatible mode Fix multichannel MOD issues reported by Leilei: - fix XM replayer note delay and retrig quirk - fix XM replayer channel pan - fix MOD loader period to note conversion Fix issues reported by Lionel Debroux: - fix virtual channel deallocation error handling - fix S3M global volume effect - fix IT envelope reset on tone portamento - fix IT voice leak caused by disabled envelope - fix IT volume column tone portamento - fix XM envelope position setting - fix FT2 arpeggio+portamento quirk with finetunes - fix mixer anticlick routines - accept S3M modules with invalid effects Other changes: - fix S3M channel reset on sample end (reported by Alexander Null) - fix Noisetracker MOD speed setting (reported by Tero Auvinen) - fix IT loader DCA sanity check (reported by Paul Gomez Givera) - fix IT envelope reset after offset with portamento - fix bidirectional sample interpolation - fix mixer resampling and tuning issues - add flags to configure player mode - add option to set the maximum number of virtual channels - add support to IT sample sustain loop - code refactoring and cleanup 4.3.13 (20160417): Fix bugs caught in the OpenMPT test cases: - fix IT volume column fine volume slide with row delay Other changes: - fix MOD vs XM set finetune effect - fix IT old instrument volume - fix IT panbrello speed - fix IT random pan variation left bias - fix IT default pan in sample mode (reported by Hai Shalom) - fix S3M set pan effect (reported by Hai Shalom and Johannes Schultz) - code refactoring and cleanup 4.3.12 (20150305): Fix bugs caught in the OpenMPT test cases: - fix IT note off with instrument - fix IT note recover after cut - fix IT instrument without note after note cut event - fix IT pan reset on new note instead of new instrument - fix IT volume swing problems - fix XM glissando effect - fix Scream Tracker 3 period limits - fix Scream Tracker 3 tremolo memory Other changes: - fix IT pattern break in hexadecimal (reported by StarFox008) - fix S3M subsong detection (reported by knight-ryu12) - fix S3M/IT special marker handling (reported by knight-ryu12) - fix tone portamento memory without note (reported by NoSuck) - fix IT pan swing limits 4.3.11 (20160212): Fix bugs caught in the OpenMPT test cases: - fix FT2 XM arpeggio clamp - fix FT2 XM arpeggio + pitch slide - fix XM tremor effect handling - fix XM tremor recover after volume setting - fix IT instrument after keyoff - fix S3M first frame test in pattern delay - fix Protracker tone portamento target setting - fix Protracker arpeggio wraparound - fix Protracker finetune setting Other changes: - fix Visual C++ build (reported by Jochen Goernitz) - fix invalid sample offset handling in Skale Tracker XM (reported by Vladislav Suschikh) - fix Protracker sample loop to use full repeat only if start is 0 - fix lite build with IT support disabled 4.3.10 (20151231): Fix bugs reported by Coverity Scan: - fix out of bounds access in IT/XM envelopes - fix negative array index read when setting position - fix resource leak in module load error handling - add sanity check to smix sample loading - add error handling to many I/O operations - remove dead code in virtual channel manager reset - remove unnecessary seeks in format loaders - prevent division by zero in memory I/O Other changes: - fix IT envelope release + fadeout (reported by NoSuck) - fix IT autovibrato depth (reported by Travis Evans) - fix tone portamento target setting (reported by Georgy Lomsadze) - disable ST3 sample size limit (reported by Jochen Goernitz) 4.3.9 (20150623): Fix bugs caught in the OpenMPT test cases: - fix IT tone portamento on sample change and NNA - fix IT tone portamento with offset Fix problems caused by fuzz files (reported by Jonathan Neuschäfer): - add sanity check to IT instrument name loader - add sanity check to IT loader instrument mapping - initialize IT loader last event data Other changes: - detect Amiga frequency limits in MOD (reported by Mirko Buffoni) - fix global volume on restart to invalid row (reported by Adam Purkrt) - fix external sample mixer for IT files (reported by honguito98) - allow short sample reads (reported by Adam Purkrt) - address problems reported by clang sanitizer 4.3.8 (20150404): - fix pre-increment of envelope indexes - fix IT note release at end of envelope sustain loop - reset channel flags in case of delay effect - refactor XM envelopes - refactor IT envelopes 4.3.7 (20150329): - fix IT sample mode note cut on invalid sample - fix IT sample mode note end detection - fix IT envelope handling with carry and fadeout - fix IT tone portamento with sample changes - fix IT initial global volume setting - fix IT keyoff with instrument in old effects mode - fix IT filter maximum values with resonance - fix IT random volume variation - fix pattern initialization sanity check - fix ++ pattern handling in IT loader (reported by honguito98) - add IT high offset command (SAx) - add IT surround command (S9x) - add IT surround channel support - add IT sample pan setting support 4.3.6 (20150322): - fix IT volume column volume slide effect memory - fix IT default filter cutoff on new note - fix IT filter envelope memory - add sanity check for IT old instrument loading - fix instrument number in channel initialization - fix sample size limit (reported by Jochen Goernitz) - fix loading of OpenMPT 1.17 IT modules (reported by Dane Bush) - fix XM loading for MED2XM modules (reported by Lorence Lombardo) - add IT random volume variation - add IT random pan variation 4.3.5 (20150207): - add sanity check for ST3 S3M maximum sample size - add sanity check for sample loop start - add sanity check for speed 0 - add sanity check for invalid XM effects - add sanity check for maximum number of channels - add sanity check for number of points in IT envelope - add sanity check for S3M file format information - add sanity check for maximum sample size - add sanity check for invalid envelope points - add sanity check for basic module parameters - add sanity check for instrument release after load error - add sanity check for XM header size - add sanity check for XM/IT/S3M parameters and sample size - fix mixer index overflow with large samples - fix crash on attempt to play invalid sample - fix infinite loop in break+delay quirk - reset module data before loading module - fix loop processing error in scan (reported by Lionel Debroux) - fix sample loop adjustment (by Emmanuel Julien) 4.3.4 (20150111): - fix XM keyoff+delay combinations - fix XM fine pitch slide with pattern delay - fix XM vibrato rampdown waveform - fix XM volume column pan with keyoff and delay - fix XM pan envelope position setting - fix channel volume and instrument initialization - fix end of module detection inside a loop - fix overflow in linear interpolator (reported by Jochen Goernitz) - fix big-endian detection in configuration (by Andreas Schwab) 4.3.3 (20141231): - fix XM note delay volume with no note or instrument set - fix XM out-of-range note delays with pattern delays - fix XM envelope loop length (reported by Per Törner) 4.3.2 (20141130): - fix IT invalid instrument number recovery - fix IT note retrig on portamento with same sample - fix XM portamento target reset on new instrument - fix XM portamento with offset - fix XM pan slide memory - fix XM tremolo and vibrato waveforms - fix MOD pattern break with pattern delay - fix MOD Protracker offset bug emulation - fix tremolo rate - fix IT portamento after keyoff and note end - fix IT fadeout reset on new note - fix IT pattern row delay scan - fix MOD/XM volume up+down priority (reported by Jason Gibson) - fix MOD fine volume slide memory (reported by Dennis Lindroos) - fix set sample offset effect (by Dennis Lindroos) - add emulation of the FT2 pattern loop bug (by Eugene Toder) - code cleanup 4.3.1 (20141111): - fix IT filter envelope range - fix IT envelope carry after envelope end - fix IT tone portamento in first note (reported by Jan Engelhardt) - fix XM note off with volume command - fix XM K00 effect handling - fix XM portamento with volume column portamento - fix XM keyoff with instrument - fix XM note limits - fix XM invalid memory access in event reader - fix MOD period range enforcing (reported by Jason Gibson) - fix corner case memory leak in S3M loader - fix retrig of single-shot samples after the end of the sample - fix crash in envelope reset with invalid instrument - fix module titles and instrument names in Mac OS X - fix row delay initialization on new module 4.3.0 (20140927): - rebranded as libxmp-lite - build from the same source tree as the full libxmp - fix fine volume slide memory - fix IT portamento after note end in sample mode - fix S3M portamento after note end - add XM and IT envelope loop and sustain point quirk - fix Amiga limits for notes with finetune - fix XM invalid offset handling - fix XM note release reset on new volume - fix XM pattern loader to honor header size - fix XM fine volume slide effect memory - fix XM fine pitch slide effect memory - fix XM finetune effect - fix IT portamento if offset effect is used - fix IT NNA on invalid sample mapping - fix IT filter envelope index reset - fix IT envelope carry on note cut events - fix IT envelope reset on new instrument - fix IT instrument change on portamento in compatible GXX mode - fix IT unmapped sample parsing - fix IT filter cutoff reset - add API call to load a module from a file handle - add API call to set default pan separation value - refactor memory I/O calls - fix segfault in mixer caused by sample position overflow - fix XM, S3M, IT and MED offset effect handling - fix IT fadeout and envelope reset on new virtual channel - fix S3M shared effect parameter memory - fix S3M default pan positions - fix S3M set BPM effect with values < 32 (reported by Kyu S.) - fix loop counter reset on play buffer reset - fix finetune effect - fix sequence number reset on player start - fix stray notes in XM (reported by Andreas Argirakis) - limit note number to avoid crash (reported by Bastian Pflieger) 4.2.7 (20140412): - fix library name in pkg-config file (by Chris Spiegel) - fix XM set pan effect - fix IT disabled instrument pan 4.2.6 (20140407): - add configure option to disable IT support - minor Visual C++ port fixes - add Visual C++ nmake Makefile - fix double free in module loaded from memory (by Arnaud Troël) - fix Win64 portability issues (reported by Özkan Sezer) - fix IT tempo slide effect - generate Android NDK static libraries 4.2.0 (20140302): - forked from libxmp 4.2.5 and removed unnecessary features