Stable versions
---------------

4.7.0 (20260225):
	Changes by Alice Rowan:
	- Increase maximum sampling rate (XMP_MAX_SRATE) to 768000.
	  This increases XMP_MAX_FRAMESIZE to 384000. The tick buffers are now
	  allocated using the player-provided rate instead of XMP_MAX_FRAMESIZE:
	  the frame info buffer may also be much smaller than XMP_MAX_FRAMESIZE.
	  In case of existing software misusing the old XMP_MAX_FRAMESIZE, the
	  minimum value for mixer_data->total_size is the old XMP_MAX_FRAMESIZE
	  for now.
	- xmp_seek_time now always seeks (even if the position is the same
	  as the current position) and uses the start row detected by the scan.
	- New function: xmp_seek_time_frame, which attempts to seek to the time
	  requested by the caller within frame precision. This is achieved by
	  using xmp_seek_time then repeatedly calling xmp_play_frame until the
	  *next* frame contains the caller-requested time. The caller can then
	  use xmp_play_frame/xmp_play_buffer to render the requested frame.
	  WARNING: this is more computationally expensive than xmp_seek_time.
	- New function: xmp_set_tempo_factor_relative, to set a relative
	  tempo factor without clobbering the module's tempo factor.
	- New function: xmp_get_tempo_factor, to get the base tempo factor
	  set by loading a module or by xmp_set_tempo_factor.
	- New function: xmp_get_tempo_factor_relative, to get the relative
	  tempo factor set by xmp_start_player/xmp_set_tempo_factor_relative.
	- New API define: XMP_FORMAT_32BIT for xmp_start_player to enable
	  32-bit integer output.
	- New API define: XMP_INST_NO_DEFAULT_PAN for xmp_subinstrument::pan
	- New API defines: XMP_MARK_SKIP and XMP_MARK_END for xmp_module::xxo
	- All internal module time/duration calculations are now in doubles
	  (fixes off-by-one module time on final tick of some modules).
	- Fix XM volume effects cxx/dxx accidentally having effects memory.
	- Correct default of sample default panning values to -1 (no default
	  panning) for most module formats.
	- Simplify read_event_mod, read_event_st3, read_event_ft2 sample
	  default volume handling.
	- Anticlick decay curves are now applied after IT note cut, DCA note
	  cut, IT effect S70 (etc.), and API-requested position changes.
	- XM, MOD: remove QUIRK_FINEFX from QUIRKS_FT2.
	- XM: channel fade rate is only copied from the instrument on rows
	  with note + ins. + no toneporta/K00.
	- XM: zero-length samples cut the channel like invalid instruments.
	- XM: do not cut on a no-instrument key off note if the preceding
	  instrument was invalid.
	- XM: previous instrument's sample default volume is now applied for
	  invalid instrument numbers beside a key off note.
	- XM: previous instrument's sample default panning is now applied for
	  invalid instrument numbers.
	- XM: apply default volume, panning, and instrument fade rate for
	  active invalid instruments.
	- XM: invalid instrument numbers now reset the envelope positions.
	- XM: valid instrument numbers with no note no longer set xc->ins,
	  which would cause notes to play with the wrong instrument envelopes
	  and could cause subsequent no-note instruments or invalid
	  instruments to apply the wrong instrument's volume/panning.
	- XM: rows with an instrument number and K00 no longer reset fadeout.
	- XM: apply QUIRK_FT2BUGS to Fasttracker II clone modules.
	- XM: reimplement Fasttracker II note delay effect.
	- XM: FT2 tremor now resets on all delay rows, does not reset on
	  instrument number + K00 rows, and is suppressed by instrument default
	  volume and Cxx in cases where it is not reset. FT2 tremor no longer
	  updates on note delay events before the delayed event is processed.
	- XM: load all keyoff notes as XMP_KEY_OFF (fixes keyoff + ins rows).
	- XM: keyoff without delay always initiates fadeout, even if there is
	  if there is a volume envelope. The old implementation would sometimes
	  delay the start of fadeout.
	- XM: keyoff without volume envelope sets the channel volume to 0
	  instead of setting fadeout to 0. This is now performed on the tick
	  where keyoff takes effect only (fixes volume effects not cancelling
	  the volume cut when they should have).
	- XM: fix volume column set volume effects resetting fadeout
	  (fixes Comic Bakery Remix position 35).
	- XM: fix Kxx persisting between rows and pattern delay interaction.
	- XM: fix note without ins# resetting fadeout position and state.
	- XM: handle out-of-range notes more closely to FT2.
	- XM: fix setting toneporta target with an active invalid instrument.
	- XM: implement FT2-style offset effect memory (QUIRK_FT2BUGS only).
	- Sum toneporta rates when toneporta is present in both effects slots
	  in an event; FT2 bug emulation for double toneporta now zeroes the
	  parameter of 3xx in the player instead of using a loader hack.
	- Fix time tracking bugs in some complex pattern loop cases.
	- Fix time tracking bugs when Bxx+Dxx jumps within the same position.
	- S3M/IT: Cxx followed by Byy on the same row now jumps to pos Y row X.
	- IT: fix importing channel initial panning for muted channels.
	- IT: fix playing instruments with samples >=120 in the key map.
	- Fix xmp_start_player not unmuting non-muted channels (regression
	  introduced in 4.5.0).
	Changes by Alice Rowan and ds-sloth:
	- Minor Impulse Tracker loader performance improvements.

4.6.3 (20250511):
	Changes by Alice Rowan:
	- Fix crashes when xmp_set_position is used to set a negative position.
	  Negative positions now correctly return -XMP_ERROR_INVALID.
	- Fix crashes when xmp_set_row is used to set a negative row.
	  Negative positions now correctly return -XMP_ERROR_INVALID.
	- Fix hangs when xmp_prev_position is used on the first position of
	  a sequence which is preceded by an S3M/IT skip marker.
	- Fix out-of-bounds reads when xmp_next_position is used at the end of
	  a 256 position module.
	- Fix hangs when seeking to an end-of-module marker caused by these
	  positions getting assigned a non-existent sequence.
	- Document xmp_set_position/xmp_next_position/xmp_prev_position
	  interactions with xmp_stop_module/xmp_restart_module.
	- xmp_set_tempo_factor no longer alters frame time calculation for
	  xmp_get_frame_info. Frame time is now updated to account for the
	  new time factor after calling xmp_scan_module.
	- Fix loading XMs with some types of harmless pattern truncation.
	  See: Jazztiz/ta-da-da-da.xm, Sonic (UK)/phuture.xm, et al.
	- Fix pattern loop jump interactions with same row pattern jump/break
	  for Scream Tracker 3.03b+ S3Ms and Impulse Tracker ITs.

4.6.2 (20250224):
	

4.6.1 (20250101):
	Changes by Alice Rowan:
	- Add stereo sample loading support for IT, S3M, XM.
	- Add sample preamplification to filter mixers for high sample rates.
	- Implement support for Protracker instrument swapping.
	- Fix XM envelope sustain points that exist on a zero-length loop.
	- Fix XM extra fine portamento effect memory.
	- Fix XM portamento up and portamento down memory (only for modules
	  where FT2 bug compatibility is enabled, for now).
	- Faster IT loading by buffering pattern, sample, and comment reads.
	- Fix loop detection edge cases broken by S3M/IT marker scan bugs.
	- Add fix for IT break to module scan (was missed in libxmp 4.5.0.)
	- Fix restart position for >64k sample and Digital Tracker MODs.
	- Replace rand() with a built-in reentrant alternative.
	- Fix Paula mixer state leak after changing XMP_PLAYER_MODE.
	- xmp_set_tempo_factor now returns -XMP_ERROR_STATE when called prior
	  to xmp_start_player (instead of causing crashes).
	- Fix mixer crashes caused by previously valid tempo factors after
	  sample rate or BPM changes.
	- Passing NULL to xmp_set_instrument_path() now unsets the instrument
	  path instead of crashing.
	- Fix module scan pattern delay counting.
	- Add compatibility for non-standard IT Pattern Loop implementations.
	- Fixed numerous defects found by fuzzing.
	Changes by Thomas Neumann:
	- Fix XM envelope handling
	- Fix XM restart position, so that it is possible to play
	 "10 Days Of Abstinence.xm"
	Changes by ds-sloth:
	- Optimize scan code for common case of no effects
	Changes by Ozkan Sezer:
	- Build system fixes and clean-ups. Misc code clean-ups.

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.
	- Several loading performance improvements.
	- Allow up to 255 sequences to be scanned.
	- Allow xmp_smix_play functions to play key off, cut and fade events.
	- 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 (20160305):
	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 tone portamento target setting (reported by Georgy Lomsadze)
	- fix IT autovibrato depth (reported by Travis Evans)
	- 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 (20140926):
	- 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
