* Got rid of resembling an ancient GSt misbehavior which did not pitch at
all if an up-pitch of more than 40 semi tones was requested (I don't
think there is any stock gig sound that requires this misbehavior to
resemble its original sound).
* Bumped version (2.0.0.svn67).

* NKSP: Print a time stamp along to each call of built-in function
"message()".
* ScriptVM API: Added VMParserContext::preprocessorComments() which
allows to retrieve all code blocks filtered out by the
preprocessor.
* Bumped version (2.0.0.svn63).

* NKSP: built-in "play_note()" function now accepts -2 for its fourth
argument (note duration) which means the life time of the note shall
be sticked to the requested note number of argument 1.
* NKSP Fix: built-in "play_note()" function now returns 0 as result
value if -1 was passed for its fourth argument (note duration) and
the respective parent note is already gone.
* NKSP: Built-in array variable %KEY_DOWN[] is now a read-only
variable.
* Built-in variable $EVENT_NOTE is now a read-only variable.
* Built-in variable $EVENT_VELOCITY is now a read-only variable.
* Bumped version (2.0.0.svn56).

* NKSP: built-in "play_note()" function now supports a sample playback
start offset with argument 3, where special value -1 means to use the
regular sample offset as defined by the instrument file.
* Bumped version (2.0.0.svn55).

* NKSP: Adjusted behavior of "change_vol()" and "change_tune()" to a more
intuitive behavior if used in combination with "change_vol_time()" or
"change_tune_time()" respectively: now tuning/volume changes are only
assigned (without delay) immediately to a new note if the respective
timing function has not been called before, otherwise the volume/tuning
changes are automatically faded (before, only the event's time stamp was
relevant).
* Bumped version (2.0.0.svn50).

* Cleanup of instruments DB file creation and opening code.
* The instrument DB path of linuxsampler's --create-instruments-db argument
is now optional, if it is missing, then a default location is used.
* Bumped version (2.0.0.svn39).

* NKSP Fix: "init" event handler was not always executed when a script
was loaded.
* NKSP built-in wait() script function: abort script execution if
a negative or zero wait time was passed as argument (since this is
a common indication of a bug either of the script or even of the
engine, which could lead to RT instability or even worse).
* Bumped version (2.0.0.svn24).

* NKSP: Fixed all change_*() built-in script functions to apply their
synthesis parameter changes immediately in case the respective note
was triggered at the same time, instead of scheduling the parameter
change, especially because it would cause some parameter types's
changes either to be ramped (i.e. change_vol()) or other types even
to have not effect at all (i.e. change_attack()).
* Bumped version (2.0.0.svn20).

* Added new C++ API class "ScriptVMFactory".
* Instrument Scripts: extended parser issues to provide not only first
line and first column, but also last line and last column of issue
(thus marking the precise span of the issue within the source code).
* Bumped version (2.0.0.svn7).

* All engines: Active voices are now internally grouped to "Note" objects,
instead of being directly assigned to a keyboard key. This allows more
fine graded processing of voices, which is i.e. required for certain
instrument script features.
* Built-in script function "play_note()": Added support for passing
special value -1 for "duration-us" argument, which will cause the
triggered note to be released once the original note was released.
* Bumped version (2.0.0.svn3).

* Instrument editor interface: Changed instrument editor plugin interface,
providing additional informations like the EngineChannel for which the
instrument editor was spawned for. This allows the instrument editors to
interact more actively with the sampler.
* Bumped version (1.0.0.svn60).

* Fixed crash when loading an instrument script.
* Fixed "init" script handler only to be executed once:
when the script was loaded.
* Fixed aftertouch script event which always had value zero
and controller number was set to aftertouch value instead.
* gig Engine: Fixed handling of "smartmidi" dimension, which
was recognized as "unknown" dimension.
* Fixed script function gig_set_dim_zone(): was accessing
wrong event.
* ls_instr_script command line tool: is now not limited to
core language scripts, but can now also parse sampler format
dependent instrument scripts, with the respective specific
built-in script variables and functions.
* ScriptVM: Fixed runtime behavior of "and" and "or" binary
script expressions, which also evaluated the right hand side
of the expression even if the left hand side already failed
the overall expression semantic to become true.
* Bumped version (1.0.0.svn46).

* (WIP) Implemented parser and VM for upcoming new real-time instrument
script support. It needs yet to be integrated into the sampler's
sampler engines. You can toy around for now with the command line tool
"ls_instr_script" and i.e. examples showing the core language features
under src/scriptvm/examples/.
* Bumped version (1.0.0.svn41).

* LSCP shell (WIP): Added initial support for built-in LSCP reference
documentation, which will automatically show the relevant LSCP reference
section on screen as soon as one specific LSCP command was detected while
typing on the command line.
* Bumped version (1.0.0.svn37).

* LSCP Server: Fixed bug in LSCP grammar definition which caused a
statement like "GET SERVER INFOasdf\n" to be accepted as valid
statement (was so far practically irrelevant, however it caused
problems with the following new LSCP shell's auto completion
feature).
* LSCP shell: improvement of auto completion feature, which now
not only resolves the next LSCP command token, but the longest,
unique sequence of LSCP commands expected next. Accordingly it
can now auto complete an entire line.
* Bumped version (1.0.0.svn33).

* WIP: LSCP Shell: implemented support for auto-correction of
obvious and trivial LSCP syntax mistakes, support for
auto-completion by tab key and visual completion suggestion
while typing.
* Bumped version (1.0.0.svn29).

* WIP: Introducing the LSCP shell: for now, providing color
highlighting while typing (indicating correct part bold white,
incorrect part red, and turning green when the command is
complete. The shell application is implemented as thin client,
that is the parser work is performed on sampler side and the
shell application is just providing output formatting.
* Bumped version (1.0.0.svn28).

* Added support for multiple MIDI input ports per sampler channel (added
various new C++ API methods for this new feature/design, old C++ API
methods are now marked as deprecated but should still provide full
behavior backward compatibility).
* LSCP Network interface: Added the following new LSCP commands for the new
feature mentioned above: "ADD CHANNEL MIDI_INPUT",
"REMOVE CHANNEL MIDI_INPUT" and "LIST CHANNEL MIDI_INPUTS". As with the
C++ API changes, the old LSCP commands for MIDI input management are now
marked as deprecated, but are still there and should provide full behavior
backward compatibility.
* New LSCP specification document (LSCP v1.6).
* AbstractEngine::GSCheckSum(): don't allocate memory on the stack (was
unsafe and caused compilation error with old clang 2.x).
* Bumped version (1.0.0.svn25).

* VST: implemented retrieval and switching of programs using the
sampler's internal MIDI instrument mapping system
* VST: reply to "canDo" plugin features we don't know as "don't know"
* bumped version to 1.0.0.svn19

* LV2: use urid and atom extensions instead of deprecated uri-map and
event
* LV2: lv2 package 1.0 is now required to build the LV2 plugin
* LV2: changed number of output channels to 16 stereo, just like the
VST and AU plugins

* fixed configure script error with old autoconf versions
* LV2: use the new lv2 package if present
* lsatomic.h: use gcc provided atomic functions if building with gcc
4.7 and C++11
* added comments in lsatomic.h

* Introduced new C++ API method EngineChannel::InstrumentFileName(int index)
allowing to retrieve the whole list of files used for the loaded
instrument on an engine channel (a.k.a. part). Some GigaStudio instruments
for example are splitted over several files like "Foo.gig", "Foo.gx01",
"Foo.gx02", ...
* Bumped version to 1.0.0.svn18

* sfz engine bugfix: looping was disabled if loop_start was set to 0
* sfz engine: allow regions with end=-1 to turn off other regions
using the group and off_by opcodes (#168)
* sfz engine: made end=0 play the whole sample
* sfz engine: fixed support for lochan and hichan opcodes (#155)
* bumped version to 1.0.0.svn17

* Bugfix: When creating MIDI instrument map entries with "PERSISTENT"
type, the instruments were uselessly precached with zero samples,
however it still took the full preloading time and on 1st program
change the respective instrument was completely reloaded again.
* Bumped version to 1.0.0.svn15

* Introduced Signal Units and Signal Unit Racks, which hopefully will meet
the demands of the new engines for flexible signal processing.
* sf2: Initial implementation of vibrato LFO, fixes in modulation EG and
and volume EG (work in progress)

* AU: changed number of output channels from one stereo to 16 stereo
* VST: made it possible to build the VST plugin for Mac
* AU: link AU plugin dynamically if --disable-shared isn't specified
* minor Makefile fix for building lscpparser when build and source
directories are separate

* Mac OS X fixes: support the new dir for Core Audio SDK, fixed name
collision of enum in EffectControl, fixed building outside source
directory, fixed wrong name of destructor in
AudioOutputDeviceCoreAudio.cpp
* made sure all source files for hostplugins are included when doing
"make dist"
* removed empty directories left from the cvs to svn migration

* revised previously added new LSCP commands regarding effect handling:
renamed "master effects" to "send effects", since this is the actual
correct common term for those effects
* also corrected the names regarding "send effects" in the respective
methods of the "FxSsnd" class and "AudioOutputDevice" class of the
sampler's C++ API, the old methods are still available but marked as
deprecated and scheduled for removal
* added LSCP command "SET FX_SEND SEND_EFFECT <sampler_channel>
<fx_send_id> <effect_chain> <chain_pos>"
* added LSCP command "REMOVE FX_SEND SEND_EFFECT <sampler_channel>
<fx_send_id>"
* added a list of common known LADSPA paths (for Windows and POSIX) which
will be automatically checked for being used as LADSPA plugin directory
(if the user did not set the LADSPA_PATH environment variable explicitly)
* bumped version to 1.0.0.cvs8

* implemented Roland GS NRPN 1ArrH which allows to set volume per note
* implemented Roland GS NRPN 1CrrH which allows to set pan per note
* implemented Roland GS NRPN 1DrrH which allows to set reverb send per
note (in this implementation of the sampler its simply hard routed to
the 1st effect send of the sampler channel, no matter what the actual
effect type is)
* implemented Roland GS NRPN 1ErrH which allows to set chorus send per
note (in this implementation of the sampler its simply hard routed to
the 2nd effect send of the sampler channel, no matter what the actual
effect type is)
* bumped version to 1.0.0cvs4

* Introduced support for optional environment variable
"LINUXSAMPLER_PLUGIN_DIR" which allows to override the directory
where the sampler shall look for instrument editor plugins
(patch by Luis Garrido, slightly modified).
* bumped version to 1.0.0.cvs3

* fixed hanging notes which occured when note-off event had the exact
same time stamp as the voice's note-on event and occured both in the
same audio fragment cycle (fixes bug #112)
* bumped version to 0.5.1.11cvs

* bugfix: on sample reference changes (instrument editor), only un-cache
the respective sample if it's really not used by any sampler engine
anymore
* re-cache samples in case they were changed by an instrument editor, e.g.
when a sample was added while playing (#82)
* bumped version to 0.5.1.10cvs

* automatic stacktrace mechanism is now turned off by default and can
be switched on by command line option "--stacktrace" (the automatic
stacktrace mechanism seems to be broken on most systems at the moment)
* bumped version to 0.5.1.9cvs

* global volume sysex message can now be selected at compile time to be
only applied to the sampler channels that are connected to the respective
MIDI input port the SysEx message arrived on (by default global volume
SysEx messages apply globally to the whole sampler)
* bumped version to 0.5.1.7cvs

* added support for chromatic / drumkit mode Roland GS Sysex message
which is usally used to switch a part between chromatic sounds and
drumkit sounds (as opposed to their common default setting of MIDI
part 10 being a drumkit part and all other ones chromatic parts), in
LS however one can switch between the first 16 MIDI instrument maps
of all ones defined for the sampler
* bumped version to 0.5.1.6cvs

* bugfix: notes triggered at position 0 in the audio buffer were
sometimes wrongly killed in the same buffer, causing no sound to be
played
* fixes for audio drivers with varying buffer sizes
* Makefile fix: JACK_CFLAGS wasn't used
* JACK driver: use jack_client_open instead of the deprecated
jack_client_new

* added new LSCP event "DEVICE_MIDI" which can be used by frontends to
react on MIDI data arriving on certain MIDI input devices (so far only
Note-On and Note-Off events are sent via this LSCP event)
* bumped version to 0.5.1.4cvs

* added new LSCP event "CHANNEL_MIDI" which can be used by frontends to
react on MIDI data arriving on certain sampler channels (so far only
Note-On and Note-Off events are sent via this LSCP event)
* bumped LSCP compliance version to 1.4
* bumped LS version to 0.5.1.3cvs

* code cleanup:
- global.h now only covers global definitions that are needed for the C++
API header files, all implementation internal global definitions are now
in global_private.h
- atomic.h is not exposed to the C++ API anymore (replaced the references
in SynchronizedConfig.h for this with local definitions)
- no need to include config.h anymore for using LS's API header files
- DB instruments classes are not exposed to the C++ API
- POSIX callback functions of Thread.h are hidden
- the (optional) gig Engine benchmark compiles again
- updated Doxyfile.in
- fixed warnings in API doc generation
* preparations for release 0.5.0

* the following LSCP command return escape sequences in at least one
of their LSCP response fields: "GET ENGINE INFO", "GET CHANNEL INFO",
"GET MIDI_INSTRUMENT INFO", "GET MIDI_INSTRUMENT_MAP INFO",
"GET FX_SEND INFO", "GET SERVER INFO"
* listed all LSCP commands in the LSCP specs which may use escape
sequences in at least on of their response fields
* hide instrument editor related debug messages in the gig::Engine when
using the default debug level (which is 1)
* bumped version to 0.4.0.8cvs

* fixed egoistic --instruments-db-location command line switch ;-)
which caused all subsequent command line switches to be ignored
* the default location of the instruments DB file can now be overridden
with ./configure --enable-default-instruments-db-location=/foo/bar.db
* instruments DB feature can be disabled at compile time with
./configure --disable-instruments-db (i.e. for cross compilation)
* in case instruments DB feature is disable at compile time, don't
actually compile the instruments DB source files and don't install the
instruments DB API header files either

* added highly experimental support for on-the-fly instrument editing
within the sampler's process (by using instrument editor plugins),
you'll notice the new "Registered instrument editors:" message on
startup, the plugin path can be overridden at compile time with
./configure --enable-plugin-dir=/some/dir
* added a new LSCP command "EDIT INSTRUMENT <sampler-channel>" to spawn
a matching instrument editor for the instrument on the given sampler
channel (LSCP command syntax might be subject to change soon)
* config.h is not going to be installed along with liblinuxsampler's
API header files anymore (not necessary anymore)
* take care of $(DESTDIR) when creating the instruments DB on 'make
install' rule (needed for packaging and cross compilation)
* bumped version to 0.4.0.5cvs

* Fixed a memory leak due to EngineFactory::Destroy() not doing it
as an actual destructor and just removing the engine instance from
factory stock and all instances allocated via EngineFactory::Create()
never got delete'd and thus their destructors never called. This bug
was evident while having many mapped instruments and querying the
instrument status via GET MIDI_INSTRUMENT INFO command, eating up
system memory very quickly and never let it go.

* implemented portamento mode and solo mode (a.k.a 'mono mode'):
all modes can be altered via standard GM messages, that is CC5 for
altering portamento time, CC65 for enabling / disabling portamento
mode, CC126 for enabling solo mode and CC127 for disabling solo mode
* fixed EG3 (pitch envelope) synthesis which was neutral all the time
* configure.in: do not automatically pick optimized gcc flags if the user
already provided some on his own (as CXXFLAGS)

* fixed event handling bug which was introduced by the recent synthesis
optimizations (events were only processed for the first active voice)
* added global volume attenuation of -9 dB (0.35f) to prevent clipping
which can be overridden with --enable-global-attenuation

added benchmark to automatically detect the best triangle LFO
implementation (currently either an integer math solution or a
di-harmonic approximation), automatic detection can be overriden
with --enable-signed-triang-algo=x and --enable-unsigned-triang-algo=x
configure script argument though (mandatory for cross-compilation)
---
actual implementations of the new LFO solutions in LS will follow soon

* All compile time options are now centrally alterable as arguments to the
./configure script. All options are C Macros beginning with CONFIG_
prefix and will be placed into auto generated config.h file.

* [bug #9] Fixed for a LSCP command syntax convention
consistency, regarding the enumeration of available
sampler engines, Audio and MIDI drivers; this has
affected the semantics of the following commands:
GET AVAILABLE_ENGINES
GET AVAILABLE_AUDIO_DRIVERS
GET AVAILABLE_MIDI_DRIVERS
which are now returning an integer count of engines
and drivers, respectively, while the following
new commands are now being introduced:
LIST AVAILABLE_ENGINES
LIST AVAILABLE_AUDIO_DRIVERS
LIST AVAILABLE_MIDI_DRIVERS
taking on the previous functionality, returning
a comma separated list of names.
* LinuxSampler version bumped to 0.3.1.

* removed statically included libgig sources from the LinuxSampler code
base - you now have to compile and install libgig separately
* added -Wreturn-type gcc switch to avoid bugs with no returns on non void
functions in future

* design change: using now one sampler engine instance and one disk thread
instance for all sampler channels that are connected to the same audio
output device (and are using the same engine type of course)
* added EngineFactory / EngineChannelFactory to remove the annoying build
dependencies e.g. of the lscpserver to the actual sampler engine
implementations
* bumped version to 0.3.0 (current CVS state is still quite broken,
previous, stable CVS version was tagged as "v0_2_0" and is also available
as source tarball)

* Load Instrument patch applied; this patch makes the
LOAD INSTRUMENT command to return immediately,
almost/always with an OK response, while spawning
the proper instrument file loading in the background.
* New INSTRUMENT_STATUS field on GET CHANNEL INFO result
set; the instrument status value holds the load progress
percentage if positive, otherwise a negative value is
evidence of a load exception error.
* VERSION is now set to 0.2.

* src/common/Thread.cpp: method StartThread() now blocks until thread
actually runs, mlockall() will only be applied for realtime threads
* libtoolized liblinuxsampler
* initiated automatic unit tests against the LinuxSampler codebase
(see src/testcases): already added a couple of tests for the Thread and
Mutex classes, you have to explicitly compile the unit tests by running
'make testcases' (you need to have cppunit installed though) and then you
can run the console version of the test runner by calling
'src/testcases/linuxsamplertest'
* src/Sampler.h: added API documentation

* implemented parser for the LinuxSampler control protocol (LSCP) by using
flex / bison (where src/network/lscp.l is the input file for lex / flex
and src/network/lscp.y is the input file for yacc / bison), parser and
scanner can be regenerated by 'make parser'
* implemented LSCP network server (only single threaded so far), LSCP
server will be launched if LinuxSampler was started with "--server" flag,
implemented the following LSCP commands so far: "LOAD INSTRUMENT", "GET
CHANNEL VOICE_COUNT", "GET CHANNEL STREAM_COUNT", "GET CHANNEL
BUFFER_FILL", "SET CHANNEL VOLUME" and "RESET CHANNEL"
* disk thread now started within the engine

* implemented bidirectional voice state transition, means voice state can
switch arbitrary times between 'Sustained'<-->'Released' within it's life
time, thus the release process of a voice can be cancelled
* src/eg_vca.cpp: extended envelope generator by additional states
('Attack_Hold', 'Decay_1' and 'Decay_2')
* applied patch from Vladimir Senkov which adds new command line parameters
('--jackout', '--alsaout' and '--samplerate')
* configure.in: fixed compiler warning

* Added JACK support: Audio rendering process is now callback based and
independant of used audio output system. Interfaces to other audio output
systems can be added by creating a class derived from abstract base class
'AudioIO' and embedding the new class into linuxsampler.cpp.
* src/audiothread.cpp: applied patch from Vladimir Senkov which fixes
hanging notes in conjunction with the sustain pedal

* src/gig.cpp: fixed bug in decompression algorithm which caused it not to
detect the end of a stream and let the disk streams reload forever also
resulting in strange sounds at the end of disk voices (concerned only
playback of compressed gig files)
* src/audiothread.cpp: deallocation of voices when they reached the end of
playback (thus e.g. when sustain pedal is pressed and a disk stream
reached it's end)
* various endian corrections needed for non intel systems
* introduced debug level, you can set the debug level and thus the
verbosity of LinuxSampler in src/global.h