Parent Directory | Revision Log
Links to HEAD: | (view) (download) (annotate) |
Sticky Revision: |
NKSP: Built-in instrument functions fixes & hardening: * Fixed the following built-in functions having misinterpreted values given with unit type (for their 2nd argument) as if they were relative values (that is as if they were passed without a unit type): "change_attack()", "change_decay()", "change_release()", "change_cutoff_attack()", "change_cutoff_decay()", "change_cutoff_release()". * Fixed the following built-in functions having applied completely wrong 'final' values: "change_sustain()", "change_cutoff_sustain()" (since the respective EGs being their modulation sink assume uint data type with value range 0..1000 instead of 0.0..1.0. * Added individual parse-time checks of function arguments for the following built-in functions: "play_note()", "note_off()", "set_event_mark()", "delete_event_mark()", "by_marks()", "change_cutoff()", "change_attack()", "change_decay()", "change_release()", "change_cutoff_attack()", "change_cutoff_decay()", "change_cutoff_release()", "change_amp_lfo_freq()", "change_cutoff_lfo_freq()", "change_pitch_lfo_freq()", "change_vol_time()", "change_tune_time()" and "change_pan_time()". * Don't abort function call if unit type was used and at the same time 'final' operator was omitted for the primary value argument of the following built-in functions: "change_cutoff()", "change_attack()", "change_decay()", "change_release()", "change_cutoff_attack()", "change_cutoff_decay()", "change_cutoff_release()", "change_amp_lfo_freq()", "change_cutoff_lfo_freq()", "change_pitch_lfo_freq()", "change_vol_time()", "change_tune_time()", "change_pan_time()", instead imply 'final'ness at runtime and raise an appropriate parser warning at parse time. * Bumped version (2.1.1.svn13).
NKSP: Added standard units support for numbers and final "!" operator: * NKSP strictness: Variable names, function names and preprocessor condition names must start with a regular character (a-z or A-Z); starting them with a digit or underscore is no longer allowed. * NKSP parser fix: equal comparison operator "=" and not equal comparison operator "#" must only accept integer operands. * NKSP language: Implemented support for standard units like Hertz, seconds, Bel including support for metric unit prefixes; so one can now e.g. conveniently use numbers in scripts like "5us" meaning "5 microseconds", or e.g. "12kHz" meaning "12 kilo Hertz", or e.g. "-14mdB" meaning "minus 14 Millidecibel", or e.g. "28c" meaning "28 cents" (for tuning). * NKSP language: Introduced "final" operator "!" which is specifically intended for synthesis parameter values to denote that the synthesis parameter value is intended to be the "final" value for that synthesis parameter that should explicitly be used by the engine and thus causing the sampler engine to ignore all other modulation sources for the same synthesis parameter (like e.g. LFO, EG); by simply prefixing a value, variable or formula with this new "!" operator the expression is marked as being "final". * Bumped version (2.1.1.svn4).
* Gig format extension: If requested by instrument then don't play release trigger sample on note-off events. * Bumped version (2.1.0.svn3).
* Only play release trigger samples on sustain pedal up if this behaviour was explicitly requested by the instrument (otherwise only on note-off). * Bumped version (2.1.0.svn2).
* NKSP: Added built-in script function "change_cutoff_attack()". * NKSP: Added built-in script function "change_cutoff_decay()". * NKSP: Added built-in script function "change_cutoff_sustain()". * NKSP: Added built-in script function "change_cutoff_release()". * NKSP: Added built-in script function "change_cutoff_lfo_depth()". * NKSP: Added built-in script function "change_cutoff_lfo_freq()". * Bumped version (2.0.0.svn77).
* gig Engine: Added support for controlling whether the individual EGADSR stages may be aborted (as LinuxSampler extension to the original GigaStudio 4 format). * Bumped version (2.0.0.svn73).
* NKSP: Implemented built-in script function "change_sustain()". * Bumped version (2.0.0.svn72).
* NKSP: Fixed crash when using built-in script array variable "%ALL_EVENTS". * NKSP: Added built-in function "change_amp_lfo_depth()". * NKSP: Added built-in function "change_amp_lfo_freq()". * NKSP: Added built-in function "change_pitch_lfo_depth()". * NKSP: Added built-in function "change_pitch_lfo_freq()". * Bumped version (2.0.0.svn44).
* Fixed numerous compiler warnings. * Bumped version (2.0.0.svn32).
* Follow-up fix regarding aftertouch handling. * Bumped version (2.0.0.svn29).
* 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).
* fixed printf type errors (mostly in debug messages)
* Aftertouch: extended API to explicitly handle channel pressure and polyphonic key pressure events (so far polyphonic pressure was not supported at all, and channel pressure was rerouted as CC128 but not used so far). * Gig Engine: Fixed support for 'aftertouch' attenuation controller. * Bumped version (1.0.0.svn39).
* gig engine: fixed EG1 modulation when attack or release is zero
* Exclusive Groups: don't ever stop voices of the same note, doesn't sound naturally with a drumkit.
* all engines: add pan CC value to instrument pan parameter before applying panning, instead of using two separate pan functions in series (#182) * sfz parser: allow -200 to 200 for pan_oncc opcode (#182) * gig engine: handle special case when pan parameter in gig file has max or min value * CoreMIDI: fixed memory deallocation error
* sfz/sf2 engine: fixed crash when using small audio fragment size
* sf2 engine: fine-tuned amplitude EG (by switching from gig to sfz EG) * sfz engine: added support for EG hold (ampeg_hold) * Mac OS X: made it possible to specify plugin installation dir to configure
* sfz engine: 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. * sfz engine: bugfix: zero ampeg_sustain didn't work * gig engine: bugfix: pitch LFO controller "internal+aftertouch" was broken * gig engine: bugfix: filter keyboard tracking was broken * gig engine: filter performance fix (an unnecessary copy was made of the filter parameters in each sub fragment) * ASIO driver: fixes for newer gcc versions (fix from PortAudio)
* sfz engine: improved support for exclusive groups (group, off_by and off_mode) * minor valgrind fixes
* sfz engine: added support for trigger=release and rt_decay
* sfz engine: added support for v2 multiple stage envelope generators * sfz engine: added a fine-tuned v1 envelope generator instead of using the one from the gig engine
* Refactoring: moved the independent code from gig::Voice to base classes * SoundFont format engine: implemented EG1 & EG2
* Refactoring: moved the independent code from the Gigasampler format engine to base classes * SFZ format engine: experimental code (not usable yet) * SoundFont format engine: experimental code (not usable yet) * Fixed crash which may occur when MIDI key + transpose is out of range
* fixed crash happening when a pitch bend event arrived at the same time a new instrument was loading * fixed building with sqlite installed in a non-standard directory
* fixes for using large audio device buffers * VST: added support for sample rate and buffer size changes * VST: close editor (Fantasia) when the VST is removed * minor fix in configure for mmsystem.h detection on MinGW * removed warnings from gcc 4.4 and valgrind
* allow gig files to use unlimited downward pitch shifting * added a limit check for upward pitch shifting
* optimized the DSSI plugin: all plugin instances now share the same disk streaming buffers * added support for the "fine tune" and "pitch bend range" instrument-level gig parameters * fixed minor artifacts in pitch bend handling
* 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: 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 partial support for the "Controller Triggered" MIDI rule, enough for piano gigs with pedal noise samples
* added highly 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) * disk thread: queue sizes are now proportional to CONFIG_MAX_STREAMS instead of fix values * removed legacy Makefiles in meanwhile deleted src/lib directory and its subdirectories * bumped version to 0.4.0.7cvs
* reenabled assembly features support, at the moment only for enabling a fast denormal FPU mode (x86 platforms supporting SSE2) * bumped version to 0.4.0.6cvs
* fixed compiler error when --enable-override-filter-type was supplied to the configure script (fixes #46)
* 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"
- fixed handling of MIDI volume change
* global volume can now be altered at runtime (added two new LSCP commands for this, LSCP specs updated)
* implemented effect sends (also added new LSCP commands for this feature, updated LSCP spec document along with this commit batch as well)
* if a filter is used and EG2 finishes before EG1, let the voice die when EG2 has finished (this fixes a problem with clicks and voice starvation for some gigs)
* implemented MIDI instrument mapping according to latest LSCP draft
* small fix of LFO1 behaviour (dampening from max volume instead of amplifying from 0) * added checks for bad MIDI data
* real support for 24 bit samples - samples are not truncated to 16 bits anymore * support for aftertouch (channel pressure, not polyphonic aftertouch)
* new filter implementation, which is more accurate and supports all filter types including bandreject and lowpass turbo
* sample loop parameters are now taken from the DimensionRegion instead of the wave chunk * fixed keyswitching for v3 gigs with a number of keyswitch splits not equal to a power of two
* fixed concurrency problems between the main thread doing lscp notifications and the lscp thread * bug fix: the LFOs were not properly initialized
* added smoothing of volume changes caused by control change messages * fine tuning of the crossfade volume curve
* 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
* added linear interpolation of volume modulation inside a subfragment; this prevents clicks during voice stealing. Can be switched off with the --disable-interpolate-volume configure option.
* 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)
* Bug-fixes: pitch changes larger than one octave didn't work. Looped samples small enough to fit in RAM didn't work.
* fixed voice stealing - stolen voices weren't killed
* Filter tuning: calculation of cutoff frequency and bandwidth improved. Removed use of "BasicBPFilter". Changed bandpass filter from constant peak to constant skirt. Use gig parameter Resonance if no resonance controller is set. Removed keyboard tracking influence on resonance.
* EG fixes: the length of "attack hold" stage was wrong. Release stage can now start before attack stage ends. Cancel release didn't work when sustain was zero.
* 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
* synthesis core optimizations
* fixed endless loop which occured on MIDI control change and pitch bend events
* bug fixes for the new EG implementation
* extensive synthesis optimization: reimplementation of EGs and LFO(s), removed synthesis parameter prerendering and the synthesis parameter matrix in general, splitting each audio fragment into subfragments now where each subfragment uses constant synthesis parameters (everything's still very buggy ATM)
* 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 configure option --enable-process-muted-channels which can be used to enable the processing of muted channels
* fine tuning of the EG modulation parameters
* minor efficiency fix (LFO preprocessing was performed even though the respective LFO was disabled by the instrument patch)
* fixed minor issue with null/silence samples (those stole voices even though they don't need a voice at all which resulted in "voice stealing didn't work out" messages)
* volume of release triggered samples now depends on note-on velocity, note length and gig parameter "release trigger decay" instead of note-off velocity.
* hand-crafted assembly optimization code can be disabled with './configure --disable-asm' (definitely not recommended)
* 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.
* (re)implemented voice stealing algorithm "oldestvoiceonkey" and made it the default voice stealing algorithm * added new LSCP command "GET SERVER INFO" which currently returns description and version about this sampler * added some API documentation comments * minor cleanup
* 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.
* spawning layered voices now within a loop instead of recursively (fixes segmentation fault under heavy voice count load and reduces stress on the stack) * voice stealing operates on all engine channels now * limit voice stealing to MAX_AUDIO_VOICES thefts per audio fragment cycle * fixed keygroup handling (layered voices could kill each other)
* 24-bit decompression now supports the 20 and 18 bit formats * support for "random" and "round robin" dimensions * removed a warning printout for empty samples during instrument loading
* fixed a bug that sometimes caused clicks at the beginning of samples * added denormal number elimination for CPUs with SSE2 support
* 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)
* added support for sample parameter 'attenuation'
* 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)
* bunch of fixes for OSX (patch by Stephane Letz)
* support for keyswitching * ignore if no sample was defined for region(s) or dimension region(s) (patch by Andreas Persson)
* another crossfade fix (honoring AttenuationController for case 0,0,0,0, fixed cases in_start = in_end = CrossfadeControllerValue, fixed curve for cases out_start < CrossfadeControllerValue < out_end, honoring InvertAttenuationController parameter) * support for up to 8 dimensions as introduced by Gig V3 (patch by Andreas Persson)
* Fixed pitch calculation. FineTune needs to be taken as is without multiplying it by 10.
* Initialize the synthesis mode bitmask properly
* fixed endless loop at the end of sample playback (patch by Andreas Persson)
* Added some profiling capabilities, bugs.
* Applied patch from Andreas Persson and made a few other small changes to fix a bug in the filter code.
* fixed bug which caused samples not to be played back to their actual end (patch by Andreas Persson, added a small extra fix)
* fixed CalculateBiquadParameters() to set parameters for both right and left, not just left.
* 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)
* 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
* bunch of bugfixes (e.g. segfault on voice stealing)
* 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
* Small fix to pan coeff. calculation. * (LS was silent with gigs where pan was 0).
just tidied up event type specific parameters (that is note-on specific parameters, controle change specific parameters, etc.) in Event class
* support patch panorama info
* added support for scale tuning via MIDI GS system exclusive message
* added support for release trigger dimension (that is voices which are spawned when a key was released) * libgig: bugfix in dimension region switching
* 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
* added support for crossfades * support sample playback start offset
* added support for layers * fixed initial pitch calculation which did not honor the sample's own sample rate
* src/engines/gig/Voice.cpp: dimension region selection takes current MIDI controller values into account
* set default volume to 1.0 in Gigasampler engine (was 0.0) * implemented "SET CHANNEL AUDIO_OUTPUT_CHANNEL" LSCP command * fixed "GET ENGINE INFO" LSCP command * fixed "GET CHANNEL INFO" LSCP command * src/network/lscp.y: fixed 'stringval' rule (returned string with formal apostrophes), fixed 'dotnum' rule (ignored position after decimal point)
* LSCP allows now comment lines, that is lines starting with a hash ('#') character * src/engines/gig/Voice.cpp: fixed "SET CHANNEL VOLUME" bug
forgot to remove a redundant assignment (only a small efficiency issue)
* biquad filter parameters are now calculated outside the interpolate loop for better performance * couple of loop unroll optimizations * filter is now enabled by default * cubic interpolation is now enabled by default * reduced debug level to 1 to lower verbosity * raised default limit for voices to 128 * raised default limit for streams to 150 * added some compiler optimization flags (-ffast-math -march -mcpu)
* src/Sampler.cpp: fixed 3 stupid but fatal bugs that left in the rush (in method SamplerChannels(), CreateAudioOutputDevice() and CreateMidiInputDevice()) * src/network/lscpserver.cpp: implemented LSCP command 'SET CHANNEL MIDI_INPUT_CHANNEL' * src/Sampler.h: moved enums 'audio_output_type_t', 'midi_input_type_t' and 'engine_type_t' into the respective base classes ('AudioOutputDevice', 'MidiInputDevice', 'Engine')
updated copyright header for 2004
* completely restructured source tree * implemented multi channel support * implemented instrument manager, which controls sharing of instruments between multiple sampler engines / sampler channels * created abstract classes 'AudioOutputDevice' and 'MidiInputDevice' for convenient implementation of further audio output driver and MIDI input driver for LinuxSampler * implemented following LSCP commands: 'SET CHANNEL MIDI INPUT TYPE', 'LOAD ENGINE', 'GET CHANNELS', 'ADD CHANNEL', 'REMOVE CHANNEL', 'SET CHANNEL AUDIO OUTPUT TYPE' * temporarily removed all command line options * LSCP server is now launched by default
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, enter a numeric revision.
ViewVC Help | |
Powered by ViewVC |