2020-10-07:

	2.4.1 released.

	* Fixed a bug that caused loss of the least significant bit of PCM samples
	  loaded from ROMs.

2020-03-29:

	2.4.0 released.

	* In addition to already existing options intended to improve
	  audio output quality in contrast to somewhat degrading emulation
	  accuracy, the two more quirks of LA-32 are now configurable.
	  NicePanning enlarges the allowed value range for the pan setting,
	  providing for smoother panning.
	  NicePartialMixing disables occasional counter-phase mixing of partials
	  making the timbres that contain closely sounding partials be
	  mixed in a more predictable way.
	* Improved emulation of the pitch overflow quirks of the MT-32 GEN0
	  by disabling the upper-bound check that is only applied during the base
	  pitch calculations by modern units. Specifically, this fixes the "starfall"
	  timbre playing at wrong pitch in the WILLY BEAMISH intro when using
	  ROMs of the MT-32 GEN0 (discovered by eddieduff at Sourceforge).
	* Fixed compilation errors when setting various preprocessor definitions
	  intended for debugging.
	* Converted compiler definition MT32EMU_REDUCE_REVERB_MEMORY to a runtime
	  configuration option. This allows the client to ensure that reverb mode
	  changes are safe for rendering in a realtime thread.
	* Improved the implementation of the internal MIDI event queue. Notably,
	  added a new storage mechanism for the payload of SysEx events that
	  does not require memory allocations while pushing events to the queue.

2017-12-24:

	2.3.0 released.

	* Improved emulation of partial allocator. It still handles individual partials as entities and not pairs,
	  but now it keeps inactive partials on a stack rather than assigns the first free partial sorted by index.
	  This behaviour better corresponds to how the real units allocate partials though.
	* Fixed various issues with accessing ROM files with localised pathnames.
	* Fixed old thinko about MIDI channel mapping when a MIDI channel is assigned to multiple parts.
	  In this case, the messages received on that MIDI channel are now handled by all the parts.
	* Changed semantic of the build option libmt32emu_WITH_INTERNAL_RESAMPLER. When disabled, the built-in
	  resampler support is no longer included in the build implicitly. In case no external resampler library is
	  found, a simple stub is used instead, that either outputs at the internal synth sample rate or is muted.
	  This is mainly intended to reduce the library size when the sample rate conversion is handled externally.

2017-07-29:

	2.2.0 released.

	* Added emulation of a number of MT-32 GEN0 quirks that is enabled when loading e.g. Control ROM v1.07,
	  so many patches specific for old MT-32 are now played correctly. Thanks go to NewRisingSun for providing
	  the test set of those patches. See http://www.vogons.org/viewtopic.php?p=578873#p578873 for more details.
	* Fixed sample format conversion implementation, so that integer samples are converted to normalised
	  float samples as well as float samples are still converted to full-range integer ones.
	  LA32FloatWaveGenerator now produces output at 0.25 volume that corresponds to the fact that each partial
	  in LA32 uses only 14-bit samples. Still, no clamping is applied in DACInputMode_NICE mode for floats,
	  so the output samples may overshoot a little for tunes with the volume set too high.
	* Introduced "Nice Amp Ramp" mode intended to improve emulation of amplitude ramp in sustain phase.
	  Quick changes of volume or expression on a MIDI channel may result in amp jumps on real hardware.
	  When "Nice Amp Ramp" mode is enabled (default), amp changes gradually instead. Otherwise,
	  the emulation accuracy is preserved.

2017-04-09:

	2.1.0 released.

	* Added sample rate conversion feature that allows converting the synthesiser output to any desired sample rate.
	  It can either utilise an external library (e.g. libsoxr or libsamplerate) or use an internal implementation.
	  This behaviour is controlled by a build option libmt32emu_WITH_INTERNAL_RESAMPLER (enabled by default).
	  The internal implementation is derived from that previously added in mt32emu-qt application and aims
	  to provide for good performance yet lower the added latency at the expense of phase linearity.
	* The types of the rendering engine and of the wave generator can now be triggered in runtime. Nuked
	  MT32EMU_USE_FLOAT_SAMPLES preprocessor definition.

2017-03-05:

	2.0.4 released.

	* Fixed API Configuration compatibility check for mode MT32EMU_API_TYPE 3.

2017-02-27:

	2.0.3 released.

	* Renderer now uses pre-allocated temporary sample buffers thus reducing the amount of memory used on the stack.

2017-02-25:

	2.0.2 released.

	* Fixed a bug in handling of the rhythm part that enabled playing uninitialised timbres when using MT-32 control ROMs
	  and setting timbre numbers >= 94 in the rhythm set up area.

2016-12-11:

	2.0.1 released.

	* Disamibugated names of classes ReportHandler and MidiReceiver. In cpp_interface.h, these classes are now named
	  IReportHandler and IMidiReceiver in accordance. This fixes linkage errors that may previously arise
	  when an implementation attempted to extend one of these classes.
	* Various other minor code improvements that render no functional changes.

2016-10-22:

	2.0.0 released.

	* Introduced support for sound groups. Callback ReportHandler::onProgramChanged() now supply correct sound group name
	  instead of just the index of the timbre bank.
	* Reworked ControlROMFeatureSet. MT-32 GEN0 quirk "Pitch Envelope Overflow" exploited in Colonel's Bequest timbre "Lightning"
	  is now emulated when loading one of control ROMs v.1.04-1.07.
	* Improved current loose implementation of SysEx handshake communication. Specifically, disabled the check for partial
	  activity, as that caused SysEx messages to be ignored without any feedback.
	* API and build changes:
	  - minimum required version of Cmake raised to 2.8.12;
	  - clarified existing C++ API, mt32emu.h no longer used internally but intended for clients;
	  - encapsulated MT32EMU_USE_FLOAT_SAMPLES definition, API provides rendering in both 16-bit signed integer and float
	    formats, sample conversion applies implicitly when needed;
	  - introduced C-compatible API as a facade, that allows using the library with programs written in other languages
	    as well as provides for consistent well-defined ABI for the library as a shared object;
	  - C-compatible API also involves COM-like interfaces to simplify usage of the library as a plugin loaded in run-time;
	  - three new build options libmt32emu_SHARED, libmt32emu_C_INTERFACE and libmt32emu_CPP_INTERFACE intended
	    to configure whether to build a statically or dynamically linked library, whether to include C-compatible API,
	    and whether to expose C++ classes (old-fashioned compiler-specific ABI).

2014-12-21:

	1.5.0 released.

	* Introduced support for emulation of analogue circuits of the hardware units.
	* Synth renderer now produces output at different sample rates depending on the analogue circuits emulation mode in effect.
	* Introduced full-featured MIDI stream parser class which can be used on incoming raw MIDI stream.
	* Removed internal Portaudio copy and related build option munt_WITH_INTERNAL_PORTAUDIO as it becomes obsolete.
	* Minimum required version of Cmake is now 2.8.4. Added support for version 3.0.2.
	* Clarified API. Internal classes and structures are no longer defined in mt32emu.h file.
	  Reduced number of headers installed. Some preprocessor definitions which control debugging output and optimisations
	  moved to dedicated header file internals.h. Introduced a few wrapper methods in Synth to facilitate synth state
	  visualisation and monitoring while avoiding direct access to internal classes.

2014-06-09:

	1.4.0 released.

	* Reworked core rendering engine:
	  - reduced memory consumption;
	  - implemented accurate emulation of the LA32 output bit shift depending on the unit generation;
	  - output gain is now applied after the possible bit shift as it should, assuming the output gain
	    is the gain of output analogue amplifier, so presence of the overdrives doesn't dependent on it.
	* Fixed integer overflow that may occur in the reverb model with time and level values set near
	  the maximum and loud input signal (doesn't occur when MT32EMU_USE_FLOAT_SAMPLES set to 1).
	* Improved reverb model:
	  - added BReverb settings tuned for accurate emulation of MT-32 version of reverb chip;
	  - effective settings of the reverb model are selected depending on the used control ROM version (can be overridden).
	* Improved project build:
	  - doc files are now installed to folder share/doc/munt under the installation prefix;
	  - introduced build options munt_WITH_MT32EMU_SMF2WAV and munt_WITH_MT32EMU_QT to control build of subcomponents;
	  - renamed build option WITH_INTERNAL_PORTAUDIO -> munt_WITH_INTERNAL_PORTAUDIO for consistency.

2013-09-21:

	1.3.0 released.

	* Incorporated a timestamped MIDI event queue and renderer support:
	  - nuked prerenderer while retaining graceful partial abortion;
	  - added fair emulation of the MIDI interface delays;
	  - extended the synth interface to facilitate the rendering loop in realtime MIDI player implementations;
	  - dependent projects updated in accordance.
	* Partial allocation made dynamic. Preprocessor definition MT32EMU_MAX_PARTIALS removed.
	* Removed inaccurate reverb models. Preprocessor definition MT32EMU_BOSS_REVERB_PRECISE_MODE added.
	* More accurate ring modulator model, added emulation of integer overflow (exploited in distortion guitar-like patches)
	* Added preprocessor definition MT32EMU_USE_FLOAT_SAMPLES to control whether to use float samples throughout the emulation.
	* Fixed several issues in FileStream which lead to inability to reopen a file.
	* Fixed memory leaks caused by incorrect memory handling of ROM files (most notable in the Windows driver).
	* Minor change in panning. It is implemented without floats and divisions in the accurate emulation mode.
	* Added reverse stereo option which inverts MIDI panning. Reverb remains unchanged.
	* Code refactoring.
	* Revived ALSA driver as a light-weight emulation facility, mainly for consistency with Windows driver being self-contained.
	  The rendering engine left untouched, so it may still sound wrong with PulseAudio.
	* Some improvements in mt32emu_win32drv_setup, fixed several bugs and security issues,
	  better MIDI driver registering algorithm.

2013-03-24:

	1.2.0 released.

	* Major wave generator rework by SergM. The wave generator now modularised and ready for integration
	  with other emulation software. With the help of Lord_Nightmare, Balrog and Sarayan, LA32 internals became clearer,
	  which allows to further improve the emulation accuracy. Still, we are not precise yet but very close now.
	  The output wave now has about the same FFT spectrum as the original digitally captured waves. As the wave
	  generation engine is completely new, some bugs probably still exist, though.

2013-02-11:

	1.1.1 released.

	* Bugfix in mixer. Weird timbres which have ring modulation structures but with only partial were mixed incorrectly.
	  Test timbre: "TinCan1" in Dune2 (completely muted).

2013-01-19:

	1.1.0 released.

	* Refined computations of pulse widths.
	* Removed STL dependency. The only STL class used by mt32emu library now reimplemented as a simplest linked list.
	* Some improvements in mt32emu_win32drv_setup regarding driver cleanup and directory handling.
	* Minor sources cleanup towards easier mt32emu library integration into other applications.

2012-12-25:

	1.0.0 released.

	* Thanks to the reverse engineering efforts of Mok, KingGuppy and SergM various things are now accurate.
	  These include MIDI event processing, time variant pitch, amplifier and filter envelopes, partial allocation, etc.
	* Fixed many inaccuracies in MIDI event processing.
	* Waveforms are now generated on the fly. Waveform cache files are no longer necessary and can be deleted.
	  New waveform generation engine closely resembles LA32 synthesis and demand significantly less computational resources.
	* Ring modulation approach simplified and made accurate.
	* Mixer now approximately resembles the LA32 feature - inverted mixing of partials. This is particularly noticeable
	  for patches containing closely sounding partials which are capable to subtract each other.
	* Added emulation of the data lines shift between the LA32 chip and the DAC.
	* The overall emulation is now close to indistinguishable to a listener.
	* Internal emulation sample rate is fixed to 32000 Hz - LA32 working sample rate. There are plenty of thing bound
	  to this value which can not be easily adapted to sample rate changes and as such, will break the emulation accuracy.
	  An additional resampler is now required to convert the sample rate to any arbitrary value.
	* Added accurate reverberation model of the Boss reverb chip.
	* Changed building tools. CMake is now required to build the library.
	* Removed some obsolete stuff in API (ExternalInterface, SynthProperties struc).
	* Changed report API. A C++ ReportHandler class is now used providing for better convenience.
	* Changed file handling routines. ROM files are now loaded entirely at the initialisation and verified using SHA1 digests.
	  Broken or unknown ROM files cannot be used anymore.

2005-07-04:

	0.1.3 released.

	* Added support for most of the extended capabilities of the CM-32L/LAPC-I (more rhythm timbres, more rhythm key mappings, more PCM samples).
	* The control ROM is now identified by searching for matching ID strings at various locations in the file. There are now a lot of safety checks to help ensure that a bad ROM will not crash the emulator.
	* Three control ROM versions are now identified and mapped out - an original MT-32 control ROM, an original CM-32L ROM, and the Blue Ridge modified MT-32 ROM.
	* Now supports the expression controller properly.
	* Sustain is now turned off correctly again.
	* "All Notes Off" no longer stops notes held by the sustain controller.
	* Implemented "Reset all controllers".
	* Stereo pan positions are no longer inverted.
	* Volume, pitch, filter and envelopes are now more accurately calculated. Overall, the sound emulation is much more accurate.
	* Waveforms are now slightly more accurate (in terms of pitch), necessitating a regeneration.
	* Handling of unusual sysex messages has been improved (fixes sysex messages from Java's MIDI classes on Windows).
	* Fixed a reverb bug during periods of silence.
	* Master tuning is now properly initialised to 0x4A (442Hz).

2004-12-05:

	0.1.2 released.

2004-12-01:

	0.1.1 released.

2004-11-30:

	0.1.0 released.
