Parent Directory
|
Revision Log
Links to HEAD: | (view) (download) (annotate) |
Sticky Revision: |
* added support for GS Reset SysEx message
* fixed orphaned pointers when setting maximum voices limit (bug #118)
* maximum voices and disk streams can now be altered at runtime (added new LSCP commands "GET VOICES", "SET VOICES", "GET STREAMS", "SET STREAMS" and accordingly new LSCP events "GLOBAL_INFO:VOICES" and "GLOBAL_INFO:STREAMS") * bumped version to 0.5.1.8cvs
* notification events for stream/voice count statistics are now sent only when there are actual changes * use atomic_t for stream/voice count statistics
* rewrote the ConditionServer class to make it possible to create multiple sample channels when the audio thread isn't running
* 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
* bugfix: process chromatic / drumkit mode sysex message only for the respective engine channels that are connected to the MIDI input port on which the message was received
* added support for chromatic / drumkit mode Roland GS Sysex message which is usally used to switch a part between chromatic sounds and drumkit sounds (as opposed to their common default setting of MIDI part 10 being a drumkit part and all other ones chromatic parts), in LS however one can switch between the first 16 MIDI instrument maps of all ones defined for the sampler * bumped version to 0.5.1.6cvs
* bugfix: notes triggered at position 0 in the audio buffer were sometimes wrongly killed in the same buffer, causing no sound to be played * fixes for audio drivers with varying buffer sizes * Makefile fix: JACK_CFLAGS wasn't used * JACK driver: use jack_client_open instead of the deprecated jack_client_new
* added support for GM global device volume SysEx message
* allow pan control of engine channels on C++ API level * export denormals-are-zero mode feature to C++ API
* minor preparations for internal effects support * bumped version to 0.5.1.5cvs
* 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 partial support for the "Controller Triggered" MIDI rule, enough for piano gigs with pedal noise samples
* made it possible to load an instrument even if the audio thread isn't running
* 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
- slightly changed gig engine description
* win32 port work in progress: * - implemented win32 support in the following classes: * Thread, Condition, Mutex, Path, LscpServer * - lscp.y use DONTCARE instead of VOID * (a win32 symbol defined) * - completed win32 editor plugin loader
* 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
* behavior fix: on MIDI CC# 65 (portamento on / off), 126 (mono mode), 127 (solo mode) only kill voices if the respective mode really changed
* 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
* 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 active stream/voice count statistic was incorrect
* fixed some minor memory leaks
* Added new notification events for tracking effect send changes and global volume changes
- small fix regarding previously added MIDI RPN controller handling (all subsequent CC #6 messages were misinterpreted as being values for the previously selected RPN controller)
* for now just set all notes off when receiving a MIDI coarse tuning message to prevent hanging notes when transposing while playing
* handle MIDI coarse tuning messages (MIDI RPN #0 MSB, #2 LSB), currently lazy implementation, transpose value is simply added on the note on/off values instead only at the mandatory places, thus when altering transpose while playing, voices can unintendedly survive
* EG fix: a release value of zero could cause noises or crash * fix of previous thread safety fix, which in some cases locked the engine
* 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.
* implemented effect sends (also added new LSCP commands for this feature, updated LSCP spec document along with this commit batch as well)
* fixed crash occuring in conjunction with the new 'MAP MIDI_INSTRUMENT' LSCP command (cause: RingBuffer was not able to do deep copies)
* implemented MIDI instrument mapping according to latest LSCP draft
just minor code comment update
* real support for 24 bit samples - samples are not truncated to 16 bits anymore * support for aftertouch (channel pressure, not polyphonic aftertouch)
just some refactoring work: - renamed class LinuxSamplerException -> Exception - encapsulated LS API relevant files into LS namespace - removed unnecessary header inclusions
* 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
* added compile time option to disable processing of All-Notes-Off MIDI messages
* more thread safety fixes: another fix for lscp "load engine" and midi thread. Sysex midi protected against lscp. Instrument loader thread protected against lscp thread.
* 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
* implemented portamento mode and solo mode (a.k.a 'mono mode'): all modes can be altered via standard GM messages, that is CC5 for altering portamento time, CC65 for enabling / disabling portamento mode, CC126 for enabling solo mode and CC127 for disabling solo mode * fixed EG3 (pitch envelope) synthesis which was neutral all the time * configure.in: do not automatically pick optimized gcc flags if the user already provided some on his own (as CXXFLAGS)
* fixed event handling bug which was introduced by the recent synthesis optimizations (events were only processed for the first active voice) * added global volume attenuation of -9 dB (0.35f) to prevent clipping which can be overridden with --enable-global-attenuation
* Added support for sostenuto pedal
* src/drivers/MidiInputPort.cpp: fixed legacy SysEx code which caused dispatching of MIDI SysEx messages several times instead of once * src/engines/gig/Engine.cpp: fixed bug in SysEx handling (patch by Juan Linietsky)
* fixed endless loop which occured on MIDI control change and pitch bend events
* 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)
* Added configure option --enable-process-muted-channels which can be used to enable the processing of muted channels
* 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)
just to clearify that the previous change refers to voice stealing
* 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 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)
* 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)
finally fixes endless loop in voice stealing algorithm (hopefully)
* another voice stealing fix (endless loop occured when voices were stolen from other engine channels)
* LSCP server: fixed LSCP event "CHANNEL_INFO" notification (e.g. did not notify on volume changes)
* don't reset scale tuning on instrument or audio output device change
* revised voice stealing (fixes crash caused by voice stealing)
* volume of release triggered samples now depends on note-on velocity, note length and gig parameter "release trigger decay" instead of note-off velocity.
* 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.
* removed some build warnings * fixed a bug with hanging notes when using sustain pedal * release samples are not triggered anymore when sustain pedal is down
* fixed MIDI GS scale tuning (via SysEx Message)
* fixed segmentation fault on "GET CHANNEL INFO" commands which occured when an engine type was selected but no audio device connected yet to the sampler channel (fixes bug #4)
* fixed event leak (events sent to inactive keys were not freed) * implemented MIDI channel mode messages "All Sound Off", "Reset All Controller", "All Notes Off" (fixes bug #5)
* fixed another crash under heavy load which was accidently introduced with the previous commit - events have to be processed completely on all engine channels before audio is rendered (fixes bug #7)
* 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
* implemented MIDI Control Change 7 (Volume) * implemented MIDI Control Change 10 (Panpot)
* 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)
* gig::Engine: fixed silence (engine channels' events were not imported into the engine, fixed undesired creation of new gig::Engine instances (and disk threads) * AudioOutputDevice: reverted behavior to render per Engine instance (and not per EngineChannel instance)
* 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)
* fixed possibility that memory got not locked * immediately set instrument status when calling LOAD INSTUMENT NON_MODAL
* Added INSTRUMENT_NAME to GET CHANNEL INFO command result set
* 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)
* fixed some memory leaks (patch by Gene Anders)
* Fixes for engine reloading. Fixed streaming bugs in some cases only, most probably not all yet.
* 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
* 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
* 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
just tidied up event type specific parameters (that is note-on specific parameters, controle change specific parameters, etc.) in Event class
* 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 layers * fixed initial pitch calculation which did not honor the sample's own sample rate
* 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)
* 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
* Added methods for CHANNEL_INFO command
* 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 |