* 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)

* bugfix: LSCP command "REMOVE FX_SEND EFFECT" was broken
* fixed a bug in FxSend::SetDestinationEffect
* bugfix: parent was not set when effect instance is appended
* bugfix: was able to remove effect chain while FX send is connected to it
* bugfix: was able to remove effect instance from effect chain while
FX send is connected to that instance

* 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

* VST bugfix: If the host called resume() before and after changing
sample rate or block size, the number of channels was incorrectly
set to two. This caused silence in Cubase 5.
* removed compiler warnings

* gig engine: implemented the "round robin keyboard" dimension
* gig engine: fixed round robin and random dimensions for cases when
number of dimension zones is not a power of two
* gig engine: made round robin use a counter for each region instead
of each key
* fixed building with libgig installed in a non-standard directory

* bugfix: don't allow to create or destroy audio devices and MIDI devices
of host plugin implementations (e.g VST, AU, DSSI, LV2) on their own,
as they only exist in the context of the plugin instance and would
otherwise crash the application

* VST: look for the Fantasia binary in liblinuxsampler.dll's directory and
in its parent directory (required for the next Windows installer which
allows to install the 64 bit and 32 bit version of LinuxSampler VST
alongside)

* hotplugins/vst/PluginVst.cpp: Removed the final & when
launching Fantasia java GUI which was interpreted as an
LSCP file to be loaded and hindered its correct launching
from within the VST plugin (patch of Grigor)

* 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

* Adapted drivers/Plugin class to be used as a base class for the
AudioUnit plugin and fixed orphaned pointers when deleting PluginGlobal
* Fixed possible iterator invalidations when resetting the sampler
* Fixed memory leaks when issuing the following LSCP commands:
GET AUDIO_OUTPUT_DRIVER INFO
GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO
GET MIDI_INPUT_DRIVER INFO
GET MIDI_INPUT_DRIVER_PARAMETER INFO
* Fixed possible compilation error when sqlite is not present

* 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

* don't retrieve key bindings and keyswitch bindings if
the instrument is not loaded in the instrument manager
* notification events are now sent when sending MIDI
messages using SEND CHANNEL MIDI_DATA lscp command
* fixed a bug in the keyswitch bindings retrieval

* added new LSCP command: SEND CHANNEL MIDI_DATA which can be used by
frontends to send MIDI messages to specific sampler channel
* added two additional fields to GET FILE INSTRUMENT INFO command -
KEY_BINDINGS and KEYSWITCH_BINDINGS
* InstrumentResourceManager::GetInstrumentInfo now scans the specified
instrument file only if it is not loaded in the instrument manager

* 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

* dispatch bank select as ordinary CC as well, the user might seriously
want to (mis)use it for some purpose ("fixed" in all current MIDI
input drivers: ALSA, CoreMIDI, JACK, MidiShare, MME)
* minor fix: only mark FX sends as being modified if really the
respective FX send MIDI controller was used

* 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

* 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

* fixed memory leaks that occurred when liblinuxsampler was unloaded
* fixed a memory leak that could happen when a channel was deleted
while notes were playing
* fixed memory management bug in ASIO driver
* optimized the SynchronizedConfig class so it doesn't wait
unnecessarily long after an update

* seems mingw has problems with accessing static variables from another
static (noinst) libtool library, at least it prevented it from producing
the liblinuxsampler.dll and just created a static archive
* fixed Perl script which automatically updates our LSCP spec source file
(lscp.xml), it didn't remove multi line C++ code

* bugfix: The commands GET FILE INSTRUMENTS, LIST FILE INSTRUMENTS,
GET FILE INSTRUMENT INFO now return an error on fail
* The field FORMAT_NAME returned by GET FILE INSTRUMENT INFO
is now FORMAT_FAMILY

* fixes in Ringbuffer.h:
- fill_write_space_with_null() did not zero out all the space
- operator--() did not apply size_mask after decrementing the read_ptr
(might fix bug #48)
- DEFAULT_WRAP_ELEMENTS set to 0 in order to avoid problems with
the _NonVolatileReader functions.

* 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

* the following LSCP commands now also support escape sequences for at
least one of their text-based arguments (i.e. name, description):
"ADD MIDI_INSTRUMENT_MAP", "SET MIDI_INSTRUMENT_MAP NAME",
"SET FX_SEND NAME", "CREATE FX_SEND"
* the LSCP spec doc now lists all LSCP commands which support escape
sequences as one of their arguments

* 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 default min and max values to restrict the number of allowed
audio output channels and MIDI input ports
* the connection to the PCM interface is now closed when destroying
an audio output device

* bugfix: The previous bindings were not been disconnected when
altering the ALSA_SEQ_BINDINGS parameter.
* Introduced a NONE keyword for unsubscribing from all bindings
(e.g. SET MIDI_INPUT_PORT_PARAMETER 0 0 ALSA_SEQ_BINDINGS=NONE).

* fixed a crash which occurs when changing the number of ports of a MIDI
device connected to a sampler channel to number less then or equal
to the index of the port to which the sampler channel is connected

* LSCP server returns verbose syntax errors (line and column where
syntax error occured, the unexpected character and the actually
expected, possible character(s), the latter only if less than 5
possibilities)

* minor fix in our automatic stack trace mechanism on crashes, the
main process did not wait for the stack trace process to finish
and thus killed the whole application before the stack trace was
completely shown on the console

* fixed several issues in fundamental "Thread" class: set scheduling
policy and priority on thread level, set a minimum stack size for
thread (TODO: a reasonable value yet to be tested), bugfix: non-RT
threads simply inherited properties of starting thread instead of
setting their own policy and priority
* updated and fixed test cases (haven't been touched in a while, but
are now all running successfully through all cases)

* 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

* added --instruments-db-location command line switch
* fixed bug regarding the scanning progress notifications
* directories containing no instrument files are now not re-created
in the instruments databese when recursive scan is performed

* by default now all "MAP MIDI_INSTRUMENT" LSCP commands (also the
"PERSISTENT" ones) block until the respective mapping is completely
established in the sampler, added a new argument though to allow
explicit mapping in the background ("MAP MIDI_INSTRUMENT NON_MODAL")
* LSCP documentation updated

* playback is no longer disabled during instrument loading
* all notes playing on a channel that changes its instrument keep
playing with the old instrument until they get a note off command
* new thread safety fix for lscp "load engine" and "set channel audio
output device"

* bugfix regarding FX Sends: when more than one sampler channel used FX
sends, only the audio signal of the last sampler channel made it into the
final output signal
* fixed small autoconf compilation issue on certain systems (complained
about missing AM_PATH_ARTS macro)

* 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.

* fixed global pan (CC10) which hasn't been working for a while
* fine tuning of the curves for volume (CC7) and pan (CC10 and gig
parameter)
* added support for the "attenuation controller threshold" gig
parameter

* 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

* improved filter cutoff calculation by adding support for the
following gig parameters: Cutoff freq (used when no cutoff
controller is defined), Control invert, Minimum cutoff, Velocity
curve and Velocity range. The keyboard tracking now also scales
cutoff frequency, not just resonance.

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 implementation of the new LFO implementations in LS will follow soon

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

* support for muting sampler channels and solo mode of the same, two new
LSCP commands ("SET CHANNEL MUTE" and "SET CHANNEL SOLO") and two new
fields ("MUTE" and "SOLO") for command "GET CHANNEL INFO" were
introduced for this (patch by Grigor Iliev, a bit adjusted)

* if period time of chosen audio device is too small (< MIN_RELEASE_TIME)
then simply show a warning about possible click sounds and reduce the
volume ramp down appropriately instead of cancelling the audio device
connection

* fixed a key group bug which caused undefined behavior in conjunction with
stolen voices (this case was usually followed by a "killed voice
survived" or "voice stealing didn't work out" error message)

* support for the gig parameters for "release velocity response"
curves, which means the decay and release times now depends on
velocity. The softer velocity, the longer release.
* fine tuning of the envelope curves. Decay1 and release now have two
parts, first linear and then exponential at the end.

* 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.

* Implemented MIDI program change as general, engine independant solution.
The program number will determine the sampler channel to which the MIDI
device will be connected to and the given MIDI channel defines on which
MIDI channel that sampler channel should listen to. Also the program
change will disconnect probably established connection from the previous
program change event.

* [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

* fixed some segfaults (which occured on EngineChannel destruction)
* InstrumentResourceManager: recache small samples if their current
number of silence sample points are not sufficient enough for the used
audio output device
* src/linuxsampler.cpp: voice / streams statistics on the console is back
again (can be turned on with command line switch --statistics)

* 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)

* lscpserver: we now only use one instrument loader thread; commands for
loading instruments in the background wait in a queue to be processed one
by one to avoid possible race conditions and to improve I/O efficiency
* fixed possible race condition while streaming with multiple disk threads
by using an own decompression buffer for each disk thread
* libgig: fixed some memory leaks caused by non virtual base constructors

* some fixes regarding the filter (fixes the "silence" bug which occured
occasionally, caused by random biquad parameters which lead to unstable
filter equation and thus to infinit filter output results)

* introduced 'synthesis mode' to reduce the amount of code and conditionals
for the current synthesis case in the main synthesis loop
* support for MMX and SSE(1) in the core synthesis algorithms (CPU feature
detection at runtime, only x86 so far)

* introduced 'synthesis mode' to reduce the amount of code and conditionals
for the current synthesis case in the main synthesis loop
* support for MMX and SSE(1) in the core synthesis algorithms (CPU feature
detection at runtime, only x86 so far)

* gig::Engine: changed way how events make it from the input event queue
into the engine's process chain (fixes forced segfault in EGADSR)
* Event.h: using signed type for fragment position for easier
differentiation if event might happened before or after current fragment

* fixed segfault which occured whenever a voice stole a voice and was in
turn killed in the same audio fragment, to fix that the MIDI key
informations are now updated only after all voices were processed

* libgig: fixed panorama value in DimensionRegion (invalid conversion
from signed 7 bit to signed 8 bit)
* src/linuxsampler.cpp: stacktrace is now automatically shown on fatal
errors (that is segmentation faults, etc.), gdb should be installed for
this to work
* gig::Voice: tiny accuracy fix of pan calculation
* replaced old pool classes by completely new ones which now offer
Iterator abstraction

stacktrace routines by Bjorn Reese, only slightly modified:
- header file adjusted to work with C++ applications
- deactivated separated piping of debugger output, as it didn't work out
correctly in multithreaded application

* added first two experimental voice stealing algorithms ('oldestkey' -
which just steals the oldest voice on the oldest key and 'keymask' - which
tries to pick the oldest voice on the same key where the new voice should
be spawned, if it fails it behaves like 'oldestkey'), the desired algorithm
can be selected at compile time (see Engine.h) will be configurable via
LSCP soon though

* implemented key groups (a.k.a exclusive groups) which is important for
drum patches and monphonic instruments
* src/engines/gig/Engine.cpp: bugfix in ProcessNoteOn() - did not always
stick the note on event to the respective key's own event list although
e.g. the EGADRS expects it to find there

* ALSA audio driver: bugfix in device parameter 'CARD' which caused an
error message if used in conjunction with 'CREATE AUDIO_OUTPUT_DEVICE'
LSCP command
* JACK audio driver: fixed minor JACK port name issue and the device was
not activated by default on creation which caused it to render solely
silence
* src/network/lscpserver.cpp: retry to bind socket for 3 minutes if bind
failed

* completely removed the lex scanner and replaced it by pure yacc rules
for all terminal symbols (that is command keywords and variables) to
avoid misunderstandings while parsing (e.g. recognition of command
keywords in string arguments)
* src/drivers/audio/AudioChannel.cpp: changed channel parameter 'Name' to
'NAME' as defined in the LSCP documentation

* src/drivers/DeviceParameter.cpp: fixed return values for
classes 'DeviceRuntimeParameterString' and 'DeviceCreationParameterString'
which returned their values without being encapsulated into apostrophes,
fixed return values for 'DeviceRuntimeParameterBool' and
'DeviceCreationParameterBool' to be returned in lower case (as defined in
the LSCP documentation)
* src/network/lscp.y: key value pairs now also allow strings (without
spaces) to be not encapsulated into apostrophes (e.g. foo=bar instead of
foo='bar')
* src/linuxsampler.cpp: show on the console which TCP port the LSCP server
is using

* src/linuxsampler.cpp: tidied up a bit, "initialization completed"
message shown only after the server is actually running
* src/testcases/: print the name of each test suite before running the
tests of the suite, added first tests against the LSCP server using a
socket connection to the LSCP server (tests for the following LSCP
commands: "ADD CHANNEL", "GET CHANNELS", "REMOVE CHANNEL")

* SET CHANNEL AUDIO_OUTPUT_TYPE <chan> <driver> command is back!
creates an audio output device instance of the given driver type
('Jack' or 'Alsa') with default parameters if none exists,
otherwise it just picks the first available device and assign
it to the intended sampler channel.
* The AudioOutputDevice class get's a new pure virtual method,
Driver(), which is implemented on both of the existing inherited
classes, AudioOutputDeviceAlsa and AudioOutputDeviceJack, with
the sole purpose to return the driver type name as a String
('Alsa' and 'Jack', respectively).
* The quoting on the filename argument for the LOAD INSTRUMENT
command has been made optional; you can have both ways, with
single quotes or none, keeping compability with older LSCP
specification.
* An additional sanity check is made on LOAD INSTRUMENT, whether
the sampler channel has an audio output device assigned, thus
preventing the server from crashing on instrument file load.
* The GET AUDIO_OUTPUT_DEVICE INFO now includes the missing
'driver' item, as predicted by the draft protocol document.

* 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: added template class 'optional<>' which can be used e.g. as
return type whenever a value might be returned, but don't has to; this
template class pretty much acts like a pointer of the given type, but is
much more safer than a simple pointer
* src/audiodriver: added static class AudioDeviceFactory to create audio
devices at runtime by using a string and to obtain driver informations
of drivers at runtime, driver classes should simply use the macro
REGISTER_AUDIO_OUTPUT_DRIVER(DriverName,DriverClass) in their cpp file
to register the driver to LinuxSampler (no changes needed anymore in the
LS code to add a new audio output driver)
* src/drivers: added classes to dynamically manage driver parameters; there
are two different kinds of parameters: parameters which are need to
create a new device (DeviceCreationParameterX) used to e.g. create an
audio output device or a MIDI input device and parameters which are only
available at runtime, means when a device is already created
(DeviceRuntimeParameterX) which will be e.g. used as audio channel
parameters and MIDI port parameters
* src/linuxsampler.cpp: all registered audio output drivers will be shown
on the console on startup
* src/network: implemented configuration of audio output devices via LSCP

* src/common/Thread.cpp: threads are now stoppable even if they are
waiting for a condition
* src/common/Condition.cpp: fixed little misbehavior of Set() method,
which locked the Condition object on return
* src/testcases: added a couple of new unit tests (against classes
'Mutex', 'Condition' and 'Thread')

* 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

* added Envelope Generator 2 and 3 (filter cutoff EG and pitch EG) for
accurate .gig playback
* fixed accuracy of pitch calculation
* changed filter cutoff range to 100Hz..10kHz with exponential curve, this
value range can also be adjusted on compile time by setting
FILTER_CUTOFF_MIN and FILTER_CUTOFF_MAX in src/voice.h to desired
frequencies
* src/lfo.h: lfo is now generalized to a C++ template, which will be useful
especially when we implement further engines

* added filters (lowpass, bandpass and highpass), note that filter code is
currently disabled by default, you have to explicitly enable it in
src/voice.h by setting define ENABLE_FILTER to 1
* src/eg_vca.cpp: Decay_1 stage now using exponential curve

* src/eg_vca.cpp: added following transitions to the envelope generator:
'Attack_Hold' -> 'Release', 'Decay_1' -> 'Release' in case of a release
event
* EG1 parameters 'Attack Time', 'Release Time' and 'Sustain Time' are now
controllable by a MIDI controller defined in the .gig file
* src/voice.cpp: fixed bug in pitch calculation which caused new triggered
voices to be played back without honoring the current pitch bend value

* 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

* implemented looping; RAM only loops (that is loops that end within the
cached part of the sample) are handled in src/voice.cpp whereas
disk stream looping is handled in src/stream.cpp and is mostly covered
there by the new ReadAndLoop() method in class 'Sample' from src/gig.cpp

gig.cpp, gig.h: added method GetInstrument(uint index) to class 'File'
which is needed for the new command line switch --instrument in
linuxsampler.cpp (forgot this to commit with the recent commit batch)

* added command line switch --volume to set the global volume level
* added command line switch --inputclient to connect to an Alsa sequencer
input client on startup (e.g. a MIDI port with a keyboard)
* added command line switch --instrument to select an instrument in case
the instrument file provides more than one instrument

* implemented velocity->volume mapping: samples are now played back with a
volume appropriate to the velocity of the triggered key, the velocity
curve transformation functions (in src/gig.h) used for this are so far
only an approximation to the ones from Gigasampler

* rewrote sustain pedal handling: instead of just queuing the note-offs I
added a sustain pointer for each midi key which starts to point to the
first active voice on the respective key and increments to the next voice
on the key when a note-off arrived, the release velocity value will
immediately be stored in the respective voice object (this also fixes the
segmentation fault issue when the sustain pool was full)

* src/voice.cpp: fixed bug which caused a voice not free it's disk stream
when the whole sample was already played back and the voice was going to
free itself resulting in outage of unused disk streams after a while
* src/audioio.cpp: implemented automatic fallback to ALSA plughw when the
sound card doesn't support one of the hardware parameters
* src/linuxsampler.cpp: solved segmentation fault issue when receiving a
SIGINT which was caused due to the fact that all threads entered the
signal handler (there still seems to occur a segfault on some certain
circumstances though)
* added print out of all-time maximum usage of voices and streams and the
current number of unused streams
* src/thread.cpp: the StopThread() method will now block until the
associated thread actually stopped it's execution

* 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