--- linuxsampler/trunk/ChangeLog 2007/06/22 10:10:06 1248 +++ linuxsampler/trunk/ChangeLog 2012/07/08 14:44:47 2356 @@ -1,5 +1,635 @@ Version CVS HEAD (?) + * plugin changes: + - LV2 "state" extension support (patch by David Robillard) + + * packaging changes: + - fixed building with newer MinGW-w64 + - Mac OS X: support the new dir for Core Audio SDK + - Mac OS X: fixed building outside source directory + - made sure all source files for hostplugins are included when + doing "make dist" + - removed empty directories left from the cvs to svn migration + - fixed compilation with gcc 4.6.1 + - another "make dist" fix, for the LV2 plugin + - made --enable-pthread-testcancel default on Mac OS X + - minor Makefile fix for building lscpparser when build and source + directories are separate + - Mac OS X: made it possible to specify plugin installation dir to + configure + - Mac OS X: Makefile fix for the install-strip target + - fixed compilation with gcc 4.7 + - fixed configure script error with old autoconf versions + - lsatomic.h: use gcc provided atomic functions if building with + gcc 4.7 and C++11 + + * general changes: + - Refactoring: moved the independent code from + the Gigasampler format engine to base classes + - command line option '--profile' is currently disabled, since the + respective profiling code is currently broken + - 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). + - 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) + - implemented support for internal LADSPA effects + - raised limit of program change queue from 100 to 512 + (as suggested by Alex Stone) + - implemented sine LFO, pulse LFO and saw LFO + - experimental support for per voice equalization + - added command line option --exec-after-init + - 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", ... + + * Gigasampler format engine: + - implemented the "round robin keyboard" dimension + - fixed round robin and random dimensions for cases when number of + dimension zones is not a power of two + - made round robin use a counter for each region instead of each + key + + * SFZ format engine: + - Initial implementation (not usable yet) + - added support for v2 multiple stage envelope generators + - added a fine-tuned v1 envelope generator instead of using the + one from the gig engine + - fixed memory leak and memory handling errors + - added support for trigger=first, trigger=legato and sw_previous + - allow non-numerical key values ("C#4" for example) + - "key" opcode now sets pitch_keycenter too + - fixed error when unloading instrument with same sample used by + multiple regions + - added some opcode aliases, like loopmode for loop_mode, to be + more compatible + - added support for trigger=release and rt_decay + - added support for off_mode=normal + - added support for random, seq_position, seq_length and volume + - added v1 LFO opcodes to parser (no support in engine yet) + - added support for amp_veltrack and amp_velcurve_N + - fine-tuned the default velocity curve + - added support for transpose + - fixed crash when using sw_down/up + - improved logic for sw_lokey/hikey/up/down/last + - added more v1 aliases to parser + - reduced memory usage for sfz data + - RT-safeness: avoid malloc in audio thread + - fixed a bug that could cause voice stealing to fail + - optimized sample lookup + - improved support for exclusive groups (group, off_by and + off_mode) + - added support for controller triggered regions (on_locc/on_hicc) + - added support for loop_mode=one_shot + - fixed playback of 16 bit wav files on big endian CPUs + - added support for Ogg Vorbis sample files + - use loop markers from sample file if loop_start and loop_end are + not set in sfz file + - implemeted filters. Filter types: lowpass, bandpass, bandreject + and highpass. 1, 2, 4 and 6 pole filters. Opcodes: fil_type, + cutoff, resonance, fil_veltrack, fil_keytrack, fil_keycenter, + cutoff_cc, cutoff_chanaft. + - bugfix: zero ampeg_sustain didn't work + - added support for velocity effect on amplifier envelope time + (ampeg_vel2attack, ampeg_vel2decay, ampeg_vel2sustain and + ampeg_vel2release) + - added support for EG hold (ampeg_hold) + - added support for sample offset (offset) + - use the newly introduced signal units model + - implemented opcodes lfoN_delay, + lfoN_freq, lfoN_pan, lfoN_cutoff, lfoN_resonance + - implemented opcodes ampeg_delay, ampeg_vel2delay + pitcheg_delay, pitcheg_start, pitcheg_attack, pitcheg_hold, + pitcheg_decay, pitcheg_sustain, pitcheg_release, pitcheg_vel2delay, + pitcheg_vel2attack, pitcheg_vel2hold, pitcheg_vel2decay, + pitcheg_vel2sustain, pitcheg_vel2release, pitcheg_depth + - implemented opcodes pitchlfo_delay, pitchlfo_freq, + pitchlfo_depth, fillfo_delay, fillfo_freq, fillfo_depth, + amplfo_delay, amplfo_freq, amplfo_depth + - implemented opcodes fileg_delay, fileg_start, fileg_attack, + fileg_hold, fileg_decay, fileg_sustain, fileg_release, fileg_vel2delay, + fileg_vel2attack, fileg_vel2hold, fileg_vel2decay, fileg_vel2sustain, + fileg_vel2release + - implemented opcode lfoN_wave + - implemented opcode pitchlfo_depthccN + - implemented opcodes lfoN_phase, lfoN_phase_onccX, + lfoN_pitch, lfoN_pitch_onccX + - implemented opcodes pitchlfo_fade, + fillfo_fade, amplfo_fade, lfoN_fade, lfoN_fade_onccX + - implemented opcodes fillfo_freqccN, + pitchlfo_freqccN, amplfo_freqccN, lfoN_freq_onccX + - implemented opcodes ampeg_delayccN, ampeg_startccN, + ampeg_attackccN, ampeg_holdccN, ampeg_decayccN, ampeg_sustainccN, + ampeg_releaseccN, egN_timeX_onccY, egN_levelX_onccY + - lfoN_* and egN_* opcodes defined in group sections + are now taken into account + - implemented curves + - implemented opcodes volume_onccN, volume_curveccN + - implemented opcode volume_smoothccN + - implemented opcodes fillfo_depthccN, amplfo_depthccN, + lfoN_volume, lfoN_volume_onccX, lfoN_volume_smoothccX, + lfoN_freq_smoothccX, lfoN_pitch_smoothccX, lfoN_pan_onccX, + lfoN_pan_smoothccX, lfoN_cutoff_onccX, lfoN_cutoff_smoothccX, + lfoN_resonance_onccX, lfoN_resonance_smoothccX, lfoN_delay_onccX + - implemented opcode end + - implemented opcodes egN_amplitude_onccX, + egN_volume, egN_volume_onccX, egN_cutoff, egN_cutoff_onccX, + egN_pitch, egN_pitch_onccX, egN_resonance, egN_resonance_onccX + - implemented opcodes xfin_lokey, xfin_hikey, + xfout_lokey, xfout_hikey, xf_keycurve, xfin_lovel, xfin_hivel, + xfout_lovel, xfout_hivel, xf_velcurve, xfin_loccN, xfin_hiccN, + xfout_loccN, xfout_hiccN, xf_cccurve + - implemented opcodes pan_onccN, pan_smoothccN, + pan_curveccN, egN_pan, egN_pan_curve, egN_pan_onccX, + egN_pan_curveccX, pitch_veltrack + - when failed to parse a sfz file + print the line number on which the error occurs + - use common pool of CC objects to minimize RAM usage + - implemented opcodes amplfo_delay_onccN, + amplfo_fade_onccN, fillfo_delay_onccN, fillfo_fade_onccN, + pitchlfo_delay_onccN, pitchlfo_fade_onccN + - implemented opcodes fileg_delay_onccN, + fileg_start_onccN, fileg_attack_onccN, fileg_hold_onccN, + fileg_decay_onccN, fileg_sustain_onccN, fileg_release_onccN, + fileg_depth_onccN, pitcheg_delay_onccN, pitcheg_start_onccN, + pitcheg_attack_onccN, pitcheg_hold_onccN, pitcheg_decay_onccN, + pitcheg_sustain_onccN, pitcheg_release_onccN, pitcheg_depth_onccN + - implemented automatic aliasing *ccN <-> *_onccN + - *lfo_freqccN wasn't working when the respective *lfo_freq + was not set or was set to zero + - lfoN_freq_onccX wasn't working when lfoN_freq + was not set or was set to zero + - implemented opcodes resonance_onccN, resonance_smoothccN, + resonance_curveccN, cutoff_smoothccN, cutoff_curveccN + - implemented opcodes fillfo_depthchanaft, + fillfo_freqchanaft, amplfo_depthchanaft, amplfo_freqchanaft, + pitchlfo_depthchanaft, pitchlfo_freqchanaft + - implemented opcodes pitch_onccN, + pitch_curveccN, pitch_smoothccN, pitch_stepccN + - implemented opcodes volume_stepccN, pan_stepccN, + cutoff_stepccN, resonance_stepccN, lfoN_freq_stepccX, + lfoN_volume_stepccX, lfoN_pitch_stepccX, lfoN_pan_stepccX, + lfoN_cutoff_stepccX, lfoN_resonance_stepccX + - implemented opcodes eq1_freq, eq2_freq, eq3_freq, + eq1_freqccN, eq2_freqccN, eq3_freqccN, eq1_bw, eq2_bw, eq3_bw, + eq1_bwccN, eq2_bwccN, eq3_bwccN, eq1_gain, eq2_gain, eq3_gain, + eq1_gainccN, eq2_gainccN, eq3_gainccN + - implemented opcodes delay, delay_onccN, delay_random, + delay_samples, delay_samples_onccN + - implemented opcodes egN_eq1gain, egN_eq2gain, egN_eq3gain, + egN_eq1gain_onccX, egN_eq2gain_onccX, egN_eq3gain_onccX, egN_eq1freq, + egN_eq2freq, egN_eq3freq, egN_eq1freq_onccX, egN_eq2freq_onccX, + egN_eq3freq_onccX, egN_eq1bw, egN_eq2bw, egN_eq3bw, egN_eq1bw_onccX, + egN_eq2bw_onccX, egN_eq3bw_onccX, lfoN_eq1gain, lfoN_eq2gain, + lfoN_eq3gain, lfoN_eq1gain_onccX, lfoN_eq2gain_onccX, lfoN_eq3gain_onccX, + lfoN_eq1gain_smoothccX, lfoN_eq2gain_smoothccX, lfoN_eq3gain_smoothccX, + lfoN_eq1gain_stepccX, lfoN_eq2gain_stepccX, lfoN_eq3gain_stepccX, + lfoN_eq1freq, lfoN_eq2freq, lfoN_eq3freq, lfoN_eq1freq_onccX, + lfoN_eq2freq_onccX, lfoN_eq3freq_onccX, lfoN_eq1freq_smoothccX, + lfoN_eq2freq_smoothccX, lfoN_eq3freq_smoothccX, lfoN_eq1freq_stepccX, + lfoN_eq2freq_stepccX, lfoN_eq3freq_stepccX, lfoN_eq1bw, lfoN_eq2bw, + lfoN_eq3bw, lfoN_eq1bw_onccX, lfoN_eq2bw_onccX, lfoN_eq3bw_onccX, + lfoN_eq1bw_smoothccX, lfoN_eq2bw_smoothccX, lfoN_eq3bw_smoothccX, + lfoN_eq1bw_stepccX, lfoN_eq2bw_stepccX, lfoN_eq3bw_stepccX + - implemented opcodes eq1_vel2freq, eq2_vel2freq, + eq3_vel2freq, eq1_vel2gain, eq2_vel2gain, eq3_vel2gain + - sfz parser: allow double spaces in sample filenames + - sfz parser: allow absolute paths for sample filenames + - use linear decay and release for filter and pitch EG + - bugfix: only the first amp_veltrack definition in a file was + used + - bugfix: looping was disabled if loop_start was set to 0 + - allow regions with end=-1 to turn off other regions using the + group and off_by opcodes (#168) + - made end=0 play the whole sample + - fixed support for lochan and hichan opcodes (#155) + + * SoundFont format engine: + - Initial implementation (not usable yet) + - RT-safeness: avoid malloc in audio thread + - fixed a bug that could cause voice stealing to fail + - fine-tuned amplitude EG (by switching from gig to sfz EG) + - initial implementation of Vibrato LFO and Modulation LFO + - initial implementation of cutoff filter + - use linear decay and release for filter and pitch EG + + * Gigasampler format engine: + - bugfix: pitch LFO controller "internal+aftertouch" was broken + - bugfix: filter keyboard tracking was broken + - filter performance fix (an unnecessary copy was made of the + filter parameters in each sub fragment) + + * Host plugins: + - AU bugfix: failed to destroy its audio/MIDI devices + - Listen to all interfaces on Mac OS X (INADDR_ANY) + - 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. + - save engine type (gig, sfz or sf2) in plugin state + - VST: when opening Fantasia, look for both 32 and 64 bit Java on + 64 bit Windows + - 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 + - VST bugfix: instrument loading hang and crashed the host when + the plugin was loaded a second time (#174) + - plugin bugfix: instrument loading hang when the plugin was + loaded a second time (this time it's for Linux and Mac, previous + similar fix was for Windows) + - thread safety fixes for the instrument loading thread + - LV2: use the new lv2 package if present + - VST: try to open Fantasia automatically on Linux and Mac too (on + Linux, the Fantasia jar should be placed in /share/java) + - VST: fixed crashes on Linux Ardour and EnergyXT + - DSSI bugfix: it wasn't possible to change engine type. The MIDI + port and audio channel routing for DSSI plugins are now visible. + - 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 + + * MIDI driver: + - ALSA MIDI driver supports now "NAME" device parameter, for overriding + the ALSA sequencer client name + - removed limit of maximum amount of MIDI ports per MIDI device, since + there is no reason for this limit + - MME: fixed memory handling bug found with cppcheck + - MME: removed compiler warning + + * audio driver: + - ASIO driver fixes for newer gcc versions (fix from PortAudio) + + * LSCP server: + - added support for sending MIDI CC messages via LSCP command + "SEND CHANNEL MIDI_DATA CC " + - added LSCP command "GET AVAILABLE_EFFECTS" + - added LSCP command "LIST AVAILABLE_EFFECTS" + - added LSCP command "GET EFFECT INFO " + - added LSCP command "CREATE EFFECT_INSTANCE " + - added LSCP command + "CREATE EFFECT_INSTANCE " + - added LSCP command "DESTROY EFFECT_INSTANCE " + - added LSCP command "GET EFFECT_INSTANCES" + - added LSCP command "LIST EFFECT_INSTANCES" + - added LSCP command "GET EFFECT_INSTANCE INFO " + - added LSCP command + "GET EFFECT_INSTANCE_INPUT_CONTROL INFO " + - added LSCP command "SET EFFECT_INSTANCE_INPUT_CONTROL VALUE + " + - added LSCP command "GET SEND_EFFECT_CHAINS " + - added LSCP command "LIST SEND_EFFECT_CHAINS " + - added LSCP command "ADD SEND_EFFECT_CHAIN " + - added LSCP command + "REMOVE SEND_EFFECT_CHAIN " + - added LSCP command + "GET SEND_EFFECT_CHAIN INFO " + - added LSCP command "APPEND SEND_EFFECT_CHAIN EFFECT + " + - added LSCP command "INSERT SEND_EFFECT_CHAIN EFFECT + " + - added LSCP command "REMOVE SEND_EFFECT_CHAIN EFFECT + " + - added LSCP command "SET FX_SEND EFFECT + " + - added LSCP command "REMOVE FX_SEND EFFECT " + - added LSCP commands "SUBSCRIBE EFFECT_INSTANCE_COUNT", + "SUBSCRIBE EFFECT_INSTANCE_INFO", "SUBSCRIBE SEND_EFFECT_CHAIN_COUNT", + "SUBSCRIBE SEND_EFFECT_CHAIN_INFO" + + * Bug fixes: + - Fixed crash which may occur when MIDI key + transpose is out of range + - minor valgrind fixes + - fixed crash which occurred when changing an already deployed sampler + channel to a different engine type + - fixed crash when deleting a sampler channel or changing engine + type while an instrument load was in progress + - bugfix: playing a note while changing the instrument could cause + a crash, or give "Handing back unknown region" error messages + - bugfix: calling SET VOICES (which Fantasia does on start and + refresh) could cause instruments to be unloaded + - Mac OS X: fixed name collision of enum in EffectControl and + wrong name of destructor in AudioOutputDeviceCoreAudio.cpp + - Mac OS X: fixed hanging threads + - Windows: disabled the previous thread fix on non-Mac systems, as + it caused hanging threads on Windows + - Fixed possible crashes due to corrupted MIDI/audio device list + after MIDI/audio device creation failure + - 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. + - fixed handling of rapid bank select and program change messages + sent to the same sampler channel (patch from the Open Octave + project, slightly adjusted) + - fixed crash when trying to create an effect instance with controls + which min and/or max values depend on the sample rate + - fixed bug #162 + - bugfix: LADSPA_PATH was not evaluated correctly when containing + multiple paths (#165) + - thread safety fixes for the instrument loading thread + - bugfix: instrument loading crashed for sfz and sf2 in Ardour + (#176) + - more thread safety fixes for the instrument loading thread + - sfz/sf2 engine: fixed crash when using small audio fragment size + - Mac OS X: fixed crash when unloading plugin on 10.7 and later + - Mac OS X: fixed process hang when unloading 32-bit plugin (bug + introduced in previous fix) + - fixed crash when a channel received a program change while + playing a note in a key group + +Version 1.0.0 (31 July 2009) + + * packaging changes: + - autoconf bugfix: the PKG_CONFIG variable wasn't initialized properly, + causing e.g. the libgig test to fail when + "./configure --disable-jack-driver" was used + (patch by Alexis Ballier) + - fixed compilation with gcc 4.3 + - fixes for building on OS X (thanks to Ebrahim Mayat for testing) + - fixed configure so it detects x86_64 (#107) + - fixes for building with newer MinGW versions + - fix for building with bison 2.4 (#111) + - fixed building with libgig installed in a non-standard directory + - minor fix in configure for mmsystem.h detection on MinGW + - Windows: look for editor plugins and Fantasia using base + directory of liblinuxsampler dll (look in the same directory and one + directory above) + - configure script fix: removed unconditional use of SSE + - fixed building with sqlite installed in a non-standard directory + - when cross-compiling, don't try to create instruments.db + - fix for new mingw-w64 version, which has usleep + + * general changes: + - bugfix: on some POSIX systems instrument editor plugins refused to + load as we used a non-portable Linux specific struct field + (fixes bug #70, patch by Ronald Baljeu) + - fixed endless loop which occured when loading an instrument editor + plugin DLL on Windows systems failed + - fixed memory leaks that occurred when liblinuxsampler was unloaded + - optimized the SynchronizedConfig class so it doesn't wait + unnecessarily long after an update + - added support for notifying instrument editors on note-on / note-off + events (e.g. to highlight the pressed keys on the virtual keyboard + of gigedit) + - added support for triggering notes by instrument editors (see above) + - be verbose on DLL load errors (on Linux) + - fixed di-harmonic triangle LFO implementation (this LFO implementation + is only used by very few systems, most pick the int math + implementation, which is usually faster) + - fixes for audio drivers with varying buffer sizes + - experimental support for running LinuxSampler as a DSSI, LV2 and + VST plugin + - notification events for stream/voice count statistics are now sent + only when there are actual changes + - added memory ordering constraints to improve stability on + multi-core and multi-cpu systems + - maximum voices and disk streams can now be altered at runtime + - fixed CPU feature detection on x86_64 (maybe fixes #108) + - 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) + - C++ API method InstrumentManager::LaunchInstrumentEditor() now returns + a pointer to the launched InstrumentEditor object + - added optional 3rd party user data parameter for following + liblinuxsampler C++ API methods: InstrumentEditor::Main(), + InstrumentEditor::Launch(), + InstrumentManager::LaunchInstrumentEditor() + - theoretical fix: made SynchronizedConfig follow C++0x memory + model more strictly + - fixes for using large audio device buffers + - Windows: add the installation directory to the DLL search path + when loading an editor plugin (solves problems with VST and + gigedit on systems with other GTK versions installed) + + * audio driver: + - removed the nonsense audio channel constraint (which was hard coded to + max. 100 audio channels) for most audio drivers + - JACK audio driver did not offer a device parameter "SAMPLERATE" as + opposed to the LSCP specs + - bugfix: the SAMPLERATE parameter of some drivers (e.g. JACK) + reflected the wrong value + - fixed a memory management bug in ASIO driver + - Makefile fix: JACK_CFLAGS wasn't used + - JACK: use jack_client_open instead of the deprecated + jack_client_new + - added (experimental) CoreAudio driver + - applied old fixes to the ASIO driver that were included in the + previous binary release but accidentally never committed to CVS + (fixes #117) + - fixes for ASIO on mingw-w64 (iasio wrapper is not needed on + win64) + - VST: added support for sample rate and buffer size changes + - VST: close editor (Fantasia) when the VST is removed + - VST: avoid opening Fantasia more than once for each VST instance + - VST: export main function as "main" on Linux too (fix for + energyXT) + - VST: changed number of output channels from one stereo to 16 + stereo + - added channel routing, fxsends and midi maps to the settings + stored in the plugin state + - performance optimization of AudioChannel::MixTo() and + AudioChannel::CopyTo() methods using GCC vector exensions + (if available) + - ASIO fixes: avoid initializing the device twice, avoid throwing + exception when getting parameters from a disconnected device + + * MIDI driver: + - added JACK MIDI driver + - 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) + - bugfix: pitch bend wasn't working with JackMidi, VST, LV2, MME, + CoreMidi or AU + - fixed mingw-w64 compilation error in MME driver + - made program change handling in MIDI thread real-time safe by + moving the logic to a non-RT thread + - fixed minor memory leak in ALSA driver + + * instruments database: + - avoid time consuming samples scanning when adding instruments + to the instruments database + - added support for handling lost files in the instruments database + - Implemented option for adding instruments in separate directories + in the instruments database + (patch by Chris Cherrett & Andrew Williams, a bit adjusted) + - work-around for missing fnmatch function on Windows to make + instrument database compilable + - added instrument database support on Windows + works with both standalone mode and VST plugin. + the instruments DB file is located in + %USERPROFILE%\.linuxsampler\instruments.db which allows different + databases for each windows user + if no DB is present it automatically creates the .linuxsampler subdir + and then creates an empty DB + - fixed recursive import, which was broken on Windows + + * Gigasampler format engine: + - fixed a memory leak that could happen when a channel was deleted + while notes were playing + - made it possible to load an instrument even if the audio thread + isn't running + - added partial support for the "Controller Triggered" MIDI rule, + enough for piano gigs with pedal noise samples + - minor fix: only mark FX sends as being modified if really the + respective FX send MIDI controller was used + - added support for GM global device volume SysEx message + (can be selected at compile time to either apply globally to the + whole sampler [default] or only to the sampler channels that are + connected to the respective MIDI input port the SysEx message arrived + on) + - bugfix: notes triggered at position 0 in the audio buffer were + sometimes wrongly killed in the same buffer, causing no sound to + be played + - 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 + defined for the sampler + - made it possible to create multiple sample channels even if the + audio thread isn't running + - fixed crash when removing channel with active voices (#116) + - 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) + - 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) + - added support for the "fine tune" and "pitch bend range" + instrument-level gig parameters + - fixed minor artifacts in pitch bend handling + - added support for GS Reset SysEx message + - allow gig files to use unlimited downward pitch shifting + - added a limit check for upward pitch shifting + - bugfix: sometimes, when playing a note twice fast, the second + note was silent + - fixed crash happening when a pitch bend event arrived at the + same time a new instrument was loading + + * LSCP server: + - 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) + - 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) + - added new LSCP commands: FIND LOST DB_INSTRUMENT_FILES and + SET DB_INSTRUMENT FILE_PATH + - 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 + - bugfix: the bank number provided by MIDI_INSTRUMENT_INFO notifications + was incorrect + - Optimized the retrieval of the MIDI instrument mappings + - added new LSCP command "SET VOICES" to globally alter the maximum + amount of voices, added new LSCP event "GLOBAL_INFO:VOICES" which will + be triggered respectively + - added new LSCP command "SET STREAMS" to globally alter the maximum + amount of disk streams, added new LSCP event "GLOBAL_INFO:STREAMS" + which will be triggered respectively + - bugfix: retry if "select" returns EINTR (this fixes a crash when + a gigedit file dialog is opened) + - close all connections when LSCPServer is deleted + - hard close of all sockets on exit + - bugfix: SET CHANNEL MIDI_INPUT_TYPE didn't work with the MME + driver + + * Bug fixes: + - fixed a crash which occurs when removing a sampler channel waiting + to start instrument loading after another channel + - fixed a crash which occurs when removing a sampler channel with + instrument loading in progress (bug #113) + - fixed termination caused by uncaught exception when adding MIDI + instrument with PERSISTENT load mode + - 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 + - fixed orphaned pointers when setting maximum voices limit (bug #118) + - fixed crash when changing the audio output device of a sampler + channel with loaded instrument and start playing notes + - fixed endless loop in Engine::SuspendAll() (bug #120) + - fixed a low-level atomic load function that was broken on 64-bit + PowerPC, which probably could cause crashes on that platform + - fixed a memory management error which could cause a crash when a + plugin was unloaded + - bugfix: two private structs had the same name, which could cause + problems if the linker chose the wrong constructor + - fixed low-level ConditionServer usage bug that caused lockups on + Windows + + +Version 0.5.1 (6 December 2007) + + * packaging changes: + - added autoconf checks for pthread library + - added autoconf check for pthread bug found on certain NPTL-enabled + glibc versions (see Gentoo bug report #194076) + - added autoconf checks for MS Windows + + * general changes: + - bugfix: the thread used by an editor plugin didn't die when the + editor closed + - bugfix: 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. DEFAULT_WRAP_ELEMENTS set to 0 in + order to avoid problems with the _NonVolatileReader functions. + - bugfix: Stream.h: added a missing divide by BytesPerSample in + GetWriteSpace(). Since this function is currently only used in + the stream's qsort() compare function, it didn't trigger any + bugs. + - Resampler.h, Synthesizer.h: cubic interpolation now works in + 24bit mode too. Faster method to read 24bit words on little + endian machines (x86): replaced 3 byte reads + shifts with a 1 + unaligned 32bit read and shift + - experimental support for MS Windows (MIDI input via MME, AUDIO + output via ASIO) + - made handling of SIGINT signal (Ctrl-C) a bit more robust + - support for monitoring the total number of active disk streams + (new LSCP commands: GET TOTAL_STREAM_COUNT, + SUBSCRIBE TOTAL_STREAM_COUNT, UNSUBSCRIBE TOTAL_STREAM_COUNT) + + * AUDIO driver: + - added Windows ASIO low latency audio driver + + * MIDI driver: + - added MME Windows MIDI driver + + * LSCP server: + - added support for Windows style path / filenames, however with + forward slash path separators instead of backslash + (i.e. "C:/foo/bar.gig") + - allow naughty liblscp to send non-string device parameters within + apostrophes as well + - added new LSCP commands: "GET FILE INSTRUMENTS ", + "LIST FILE INSTRUMENTS " and + "GET FILE INSTRUMENT INFO " for retrieving informations + about an arbitrary instrument file on the system where the sampler is + running on + +Version 0.5.0 (15 October 2007) + * packaging changes: - config.h is not going to be installed along with liblinuxsampler's API header files anymore @@ -9,6 +639,14 @@ capable to execute our autoconf environment, thus no need anymore to maintain the compile time configuration file (osx/version.h) for OSX manually (patch by Toshi Nagata) + - fixed buggy boolean --enable-foo / --disable-foo configure script + parameters + - 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 + - no need to include config.h anymore for using LS's API header files + - fixed warnings in API doc generation * general changes: - replaced the old, confusing MIDI program change mechanism by a @@ -41,13 +679,19 @@ - fixed compilation errors regarding OSX (patch by Toshi Nagata) - implemented instruments database + - added support for escape sequences to the instruments database - 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, added a new LSCP command "EDIT INSTRUMENT " + startup, added a new LSCP command: + "EDIT CHANNEL INSTRUMENT " to spawn a matching instrument editor for the instrument on the given sampler channel, the plugin path can be overridden at compile time with ./configure --enable-plugin-dir=/some/dir + - added experimental code for synchronizing instrument editors hosted + in the sampler's process to safely edit instruments while playing + without a crash (hopefully) by either suspending single regions + wherever possible or if unavoidable whole engine(s) - 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 @@ -57,6 +701,11 @@ main process did not wait for the stack trace process to finish its output - fixed some minor memory leaks + - reenabled assembly features support, at the moment only for + enabling a fast denormal FPU mode (x86 platforms supporting SSE2) + - minor assembly fix in x86 features detection (don't use the PIC + register, to avoid relocations in the text segment at runtime) + - POSIX callback functions of Thread.h are hidden * MIDI driver: - dispatch bank select (MSB and LSB) messages @@ -84,6 +733,11 @@ - minor fix of EGDecay (patch by Toshi Nagata) - fixed compiler error when --enable-override-filter-type was supplied to the configure script (fixes #46) + - disk thread: queue sizes are now proportional to CONFIG_MAX_STREAMS + instead of a fix value + - behavior fix: on MIDI CC# 65 (portamento on / off), 126 (mono mode), + 127 (solo mode) only kill voices if the respective mode really + changed * LSCP server: - fixed compile time error for old Bison versions @@ -94,11 +748,43 @@ sequences, that is directly literal as one of: \', \", \\, \n, \r, \f, \t, \v, or as octal ASCII code value like \132, or as hex ASCII code value like \xf2) (fixes bug #24) + - the following LSCP commands now also support escape sequences for at + least one of their text-based parameters (i.e. name, description): + "ADD MIDI_INSTRUMENT_MAP", "MAP MIDI_INSTRUMENT", + "SET MIDI_INSTRUMENT_MAP NAME", "SET FX_SEND NAME", "CREATE FX_SEND", + "SET DB_INSTRUMENT_DIRECTORY NAME", + "SET DB_INSTRUMENT_DIRECTORY DESCRIPTION", "SET DB_INSTRUMENT NAME", + "SET DB_INSTRUMENT DESCRIPTION", "FIND DB_INSTRUMENTS", + "FIND DB_INSTRUMENT_DIRECTORIES" + - 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) + - made sure that LSCP syntax is not affected by gigedit locale + settings + - bugfix regarding strings parameter lists: all comma separated lists + of strings were treated as being one string containing commas + (fixes #57) * Bug fixes: - fixed crash occurring on certain LSCP scripts (Bug 39) - another thread safety fix for lscp "load engine" and "set channel audio output device" + - fixed a crash which occurs when reassigning the same engine + on a sampler channel with connected MIDI device + - 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. + - 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. ALSA_SEQ_BINDINGS=NONE). + - The active stream/voice count statistic was incorrect. + - notification events were not been sent for some sampler + channel changes + - 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 + - files with slash in their path or filename could not be loaded * test cases: - updated and fixed (haven't been touched in a while)