--- linuxsampler/trunk/ChangeLog 2011/07/11 17:52:01 2205 +++ linuxsampler/trunk/ChangeLog 2013/05/13 17:26:29 2452 @@ -1,8 +1,5 @@ Version CVS HEAD (?) - * plugin changes: - - LV2 Persist + Files support (patch by David Robillard) - * packaging changes: - fixed building with newer MinGW-w64 - Mac OS X: support the new dir for Core Audio SDK @@ -17,6 +14,16 @@ 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 + - modernized configure script + - fixed linkage error when building with + LDFLAGS="-Wl,--no-undefined" (#190) + - fixed compilation with Clang 3.2 + - removed usage of deprecated Automake variable INCLUDES * general changes: - Refactoring: moved the independent code from @@ -40,6 +47,32 @@ - 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", ... + - Added new C++ API method Sampler::GetGlobalMaxVoices(). + - Added new C++ API method Sampler::GetGlobalMaxStreams(). + - Added new C++ API method Sampler::SetGlobalMaxVoices(). + - Added new C++ API method Sampler::SetGlobalMaxStreams(). + - Various "const" and "restrict" optimizations. + - all engines: add pan CC value to instrument pan parameter before + applying panning, instead of using two separate pan functions in + series (#182) + - added a lock guard class for exception safe mutex handling and + used it everywhere appropriate + - Immediately apply scale tuning changes to active voices. + - Exposed scale tuning to C++ API (along to the already existing standard + SysEx way). + - lsatomic.h fixes: seq_cst load and store were suboptimal for x86 + and broken for ppc64. (Seq_cst loads and stores are actually not + used in LS, so the bug wasn't noticable.) + - lsatomic.h: added ARMv7 support * Gigasampler format engine: - implemented the "round robin keyboard" dimension @@ -47,6 +80,15 @@ dimension zones is not a power of two - made round robin use a counter for each region instead of each key + - 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) + - handle special case when pan parameter in gig file has max or + min value + - Exclusive Groups: don't ever stop voices of the same note, + doesn't sound naturally with a drumkit + - fixed EG1 modulation when attack or release is zero * SFZ format engine: - Initial implementation (not usable yet) @@ -92,21 +134,131 @@ (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) + - fixed crash when using lochan/hichan opcodes (#187) + - sfz parser: allow -200 to 200 for pan_oncc opcode (#182) + - added FLAC support (#191) + - sfz parser bugfix: lines starting with whitespace were ignored + - added amplitude opcode * 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 - - * 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) + - initial implementation of Vibrato LFO and Modulation LFO + - initial implementation of cutoff filter + - use linear decay and release for filter and pitch EG - * Host plugins: + * Host plugins (VST, AU, LV2, DSSI): - 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 @@ -120,15 +272,58 @@ - VST: made it possible to build the VST plugin for Mac - AU: link AU plugin dynamically if --disable-shared isn't specified + - LV2 "state" extension support (patch by David Robillard) + - 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 + - LV2: fixed save/restore of SFZ state (patch by David Robillard) + - LV2: made LV2 plugin buildable on Windows and Mac + - VST: implemented retrieval and switching of programs using the + sampler's internal MIDI instrument mapping system * 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 + - CoreMIDI: implemented driver specific port parameter "CORE_MIDI_BINDINGS", + which allows to retrieve the list of CoreMIDI clients / ports and to connect + to them a la JACK, via the usual sampler APIs + - CoreMIDI: added driver specific port parameter "AUTO_BIND", if enabled + the driver will automatically connect to other CoreMIDI clients' ports + (e.g. external MIDI devices being attached to the Mac) + - added support for MIDI note on velocity filter + - CoreMIDI: fixed memory deallocation error + - Fixed variable underflow in VirtualMidiDevice, which caused graphical + virtual keyboards in frontends / instrument editors being stuck. + - Bugfix in VirtualMidiDevice: process note on with velocity 0 as note off. + - Implemented missing handling of MIDI "running status". + - CoreMIDI fix: a MIDIPacket can contain more than one event per packet. + - MME bugfix: driver wasn't closed properly * audio driver: - ASIO driver fixes for newer gcc versions (fix from PortAudio) + - JACK audio: react on sample rate changes. + - JACK audio: react on buffer size changes. + - JACK audio: jack_port_get_buffer() was cached and called outside + RT context. + - ASIO driver: removed compiler warnings * LSCP server: - added support for sending MIDI CC messages via LSCP command @@ -185,6 +380,32 @@ 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 + - fixed erroneous error message piping in VoiceBase.h + (labelled "Disk stream not available in time") + - Update effects on sample rate & period size changes (to avoid + crashes and noise on such transitions). Version 1.0.0 (31 July 2009)