--- libgig/trunk/ChangeLog 2009/03/26 13:32:59 1875 +++ libgig/trunk/ChangeLog 2021/05/12 18:31:25 3903 @@ -1,8 +1,432 @@ -Version CVS HEAD (?) +Version SVN trunk (?) + + * src/gig.cpp, src/gig.h: + - Region::DeleteDimensionZone(): Fix clang sanatizer warning. + + * src/SF.cpp, src/SF.h: + - File::DeleteInstrument(): Fix clang sanatizer warning. + + * src/RIFF.cpp, src/RIFF.h: + - Chunk::LoadChunkData(): Fix clang sanatizer warning. + - List::LoadSubChunks(): Fix potential garbage data access if reading a + RIFF chunk ID failed. + +Version 4.3.0 (9 May 2021) + + * general changes: + - Require at least a C++11 compliant compiler. + - Require some UUID generating function by underlying system. + + * src/gig.cpp, src/gig.h: + - GIG FORMAT EXTENSION: Added attributes DimensionRegion::LFO1WaveForm, + DimensionRegion::LFO2WaveForm and DimensionRegion::LFO3WaveForm, which + allow to define override LFOs' wave form (e.g. saw or square instead of + the default wave form which was always sine in the original + Gigasampler/GigaStudio software). + - GIG FORMAT EXTENSION: Added attributes DimensionRegion::LFO1Phase, + DimensionRegion::LFO2Phase and DimensionRegion::LFO3Phase, which allow to + move the start point horizontally of the LFOs' waves (0° ... 360°). + - GIG FORMAT EXTENSION: Added attribute DimensionRegion::LFO3FlipPhase + (the original Gigasampler/GigaStudio software only had that flip phase + option for LFO1 and LFO2). + - Added methods DimensionRegion::UsesAnyGigFormatExtension(), + Region::UsesAnyGigFormatExtension(), + Instrument::UsesAnyGigFormatExtension() and + File::UsesAnyGigFormatExtension() (however only as private methods yet, + see comments on methods why). + - GIG FORMAT EXTENSION: added LinuxSampler specific filter type + implementations to enum vcf_type_t: vcf_type_lowpass_1p, + vcf_type_lowpass_2p, vcf_type_lowpass_4p, vcf_type_lowpass_6p, + vcf_type_highpass_1p, vcf_type_highpass_2p, vcf_type_highpass_4p, + vcf_type_highpass_6p, vcf_type_bandpass_2p, vcf_type_bandreject_2p. + - Compatibility fix: GigaStudio always expects 128 '3gnm' RIFF chunks + (patch by Ivan Maguidhir). + - Compatibility fix: GigaStudio 3 expects '3dnm' and '3ddp' RIFF chunks + (original patch by Ivan Maguidhir). + - Region::DeleteDimensionZone() and Region::SplitDimensionZone(): Fixed + dimensions being in different order after deleting a dimension zone. + - Script: Generate a persistent UUID for each script. + - GIG FORMAT EXTENSION: Added support for script 'patch' variables and + accordingly added new methods to Instrument class: + IsScriptPatchVariableSet(), GetScriptPatchVariables(), + GetScriptPatchVariable(), SetScriptPatchVariable(), + UnsetScriptPatchVariable(); stored persistently as new 'SCPV' RIFF chunk + as child of our '3LS ' list chunk on Instrument level. + - Fixed undefined behaviour when modifying script slots on an instrument + that had been cloned and not been saved yet (e.g. unintended modification + of original instrument's script slots, and crash on Instrument destruction + due to double free of pScriptRefs). + + * src/Serialization.cpp, src/Serialization.h: + - Fixed broken Archive(RawData) constructor which always threw an + Exception. + - Added built-in support for C++ String objects (a.k.a. std::string + from the STL) and bumped Srx format version to 1.1 for that reason. + - Fixed assertion fault on some systems if a member variable defined was + serialized which was declared as size_t or ssize_t data type. + - Added new method Archive::operation() which allows applications to + distinguish between serialization vs. deserialization in their + serialize() method implementations. + - Added built-in support for C++ Array<> objects (a.k.a. std::vector from + the STL). + - Member offsets are now signed and for (newly added support of) member + variables on the heap -1 is always used as offset instead. + - Added built-in support for C++ Set<> objects (a.k.a. std::set from the + STL). + - DataType: Added optional 2nd custom type name. + - Added built-in support for C++ Map<> objects (a.k.a. std::map from the + STL). + + * src/helper.h: + - Fix compile error with GCC 9 due to ignored result value of vasprintf() + function call. + + * src/tools/gigdump.cpp: + - Print dimension region properties LFO1WaveForm, LFO2WaveForm, + LFO3WaveForm, LFO1Phase, LFO2Phase, LFO3Phase, LFO1FlipPhase, + LFO2FlipPhase and LFO3FlipPhase. + +Version 4.2.0 (25 Jul 2019) + + * general changes: + - Added MSVC build support (anonymous patch from mailing list). + - Introduced CMake build support (yet constrained for building with MSVC) + (anonymous patch from mailing list). + - Fix: Don't automatically delete RIFF chunks from DLS/gig classes' + destructors. Added new virtual method DeleteChunks() to those classes + for this which must be explicitly called instead to remove their RIFF + chunks. + - Fix: Many methods of DLS/gig classes assumed a RIFF chunk read position + of zero; which is unsafe per se. + - Added C++11 "override" keyword where appropriate. + - Fixed crash in RIFF, DLS and gig classes which occurred on certain + of their actions when not passing a progress_t callback structure. + + * src/gig.cpp, src/gig.h: + - Fixed Doxygen API comments for enum types (currently latest Doxygen + [v1.8.13] only supports C comments in macro arguments expansion, but + not C++ comments; see lexer rules in src/pre.l of + the Doxygen source code, which currently also filter out new line + \n chars). + - Added new method File::CountSamples(). + - Added new method File::CountInstruments(). + - Fixed gig v4 files falsely being handled as v2 format + (patch by Ivan Maguidhir). + - Added gig v4 version identifier (File::VERSION_4). + - GIG FORMAT EXTENSION: Added attribute + DimensionRegion::SustainReleaseTrigger which allows to define whether + a sustain pedal up event shall cause a release trigger sample to be + played (default: don't play release trigger sample by sustain pedal). + - GIG FORMAT EXTENSION: Added attribute + DimensionRegion::NoNoteOffReleaseTrigger which allows to disable the + regular behaviour of playing release trigger sample on MIDI note-off + events. + - Introduced support for writing extension files (.gx01, .gx02, ...) + (original patch by Ivan Maguidhir). + - Many gig classes derive now from DLS::Storage (see DLS changes below). + - Added File::GetRiffFile() method. + + * src/DLS.cpp, src/DLS.h: + - File: Fixed implicitly allocated RIFF::File object never been freed. + - Added new abstract interface base class DLS::Storage which is derived by + the respective classes for implementing (the old) UpdateChunks() and the + new DeleteChunks() method. + - Added File::GetRiffFile() method. + + * src/sf2.cpp, src/sf2.h: + - Added Sample::GetFile() method. + - Added File::GetRiffFile() method. + + * src/Serialization.cpp, src/Serialization.h: + - Hide pure internal declarations from header file to avoid numerous + compiler warnings when building and linking against the public API. + - Fixed comparision logic bug + - Fixed memory leak in DataType::customTypeName(). + + * src/RIFF.cpp, src/RIFF.h: + - Fix: Calling File::SetMode() left an undefined file handle on Windows and + caused a resource leak + - Avoid compiler warning when building for 32 bit windows. + - Added new method progress_t::subdivide(). + - Fix: API doc comment for Chunk::GetFilePos() was completely wrong. + - progress_t: Added a 2nd (overridden) progress_t::subdivide() method which + allows a more fine graded control into which portions the subtasks are + divided to. + + * src/tools/gigdump.cpp: + - Added command line option --instrument-names which causes only + instrument names and their index numbers to be printed. + +Version 4.1.0 (25 Nov 2017) + * general changes: + - removed 2 GB limitation when loading a gig or DLS file + - using now native integer size where appropriate + - fixed minor issues with man pages (patch by Debian maintainer) + - fixed various spelling mistakes (patch by Debian maintainer) + - Added new "Serialization" framework (and equally named namespace) + which allows to serialize and deserialize native C++ objects + in a portable, easy and flexible way. + - print compiler warning if no RTTI available + - Fixed potential crash in command line tools gig2stereo, korg2gig, + korgdump and sf2extract. + - Fixed CVE-2017-12950, CVE-2017-12952, CVE-2017-12953 + (original patch by Paul Brossier, slightly modified). + - Debian: Fixed packaging error about invalid substitution variable + "Source-Version". + - Raised Debian compatibility level to Debian 9 "Stretch". + + * src/gig.cpp, src/gig.h: + - fixed bug in Script::SetGroup: the script chunk wasn't moved + - fixed compilation error with clang 3.4 + - GIG FORMAT EXTENSION: added support for saving gig file larger than 4 GB + as one single monolithic gig file. In case .gig file is >= 2GB expect a + large monolithic file, otherwise if .gig file is < 2 GB check for + "extension" files (.gx01, .gx02, ...) instead. + - fixed Region::UpdateUpdateVelocityTable() which did not work correctly + if there were dimensions after the velocity dimension: it only created + valid velocity tables for cases of dimensions lower than the velocity + dimension. + - added new method Sample::VerifyWaveData() which allows to check whether + a sample had been damaged for some reason + - Fix: samples' CRC checksums were damaged on file structure changes. + - Fix: samples' CRC checksums were misordered when a Sample was deleted. + - Added new method Sample::GetWaveDataCRC32Checksum(). + - Changed default value of EG2Release (filter release time) to 60s. + - Instruments' default pitch bend range is now +-2 semi tones. + - Fixed CRC checksums being wrong sometimes. + - Fix: method File::AddContentOf() did not clone script groups and scripts + of passed original file. + - Added support for serializing & deserializing DimensionRegion + objects (and crossfade_t and leverage_ctrl_t objects). + - Added enum reflection API functions for retrieving enum declaration type + information at runtime (enumCount(), enumKey(), enumKeys(), enumValue()). + - Exception class now has a variadic constructor which allows to add + textual format specifiers like with printf(). + - On unknown leverage controller exception: show precise unknown leverage + controller number found. + - Ignore invalid leverage controller types and just show a warning on the + console instead of throwing an exception. + - Added new struct eg_opt_t and new class member variable + DimensionRegion::EG1Options and DimensionRegion::EG2Options as an + extension to the gig file format, which allows to override the default + behavior of the first two EGs' state machines. + - Fixed undefined behavior when loading a gig file with invalid + velocity curve parameters (fixes CVE-2017-12951). + - Fixed undefined behavior when loading a gig file with invalid wave + pool index number (fixes CVE-2017-12954). + + * src/DLS.cpp, src/DLS.h: + - Sample: wave pool offsets are now 64 bits (to allow support for files + larger than 4 GB). + - Exception class now has a variadic constructor which allows to add + textual format specifiers like with printf(). + + * src/RIFF.cpp, src/RIFF.h: + - added support for RIFF files larger than 4 GB, by default the required + internal RIFF file offset size is automatically detected (that is RIFF + files < 4 GB automatically use 32 bit offsets while files >= 4 GB + automatically use 64 bit offsets), a particular offset size can be forced + with a new option added to the RIFF File constructor though + - when saving a modified, grown RIFF file, the temporary file size during + Save() operation will no longer be larger than the final grown file size + - Exception class now has a variadic constructor which allows to add + textual format specifiers like with printf(). + + * src/Serialization.cpp, src/Serialization.h: + - Archive: Added method isModified(). + - Archive: Added method setAutoValue(). + - Archive: Added method setIntValue(). + - Archive: Added method setRealValue(). + - Archive: Added method setBoolValue(). + - Archive: Added method setEnumValue(). + - Archive: Added method valueAsString(). + - Archive::rawData(): Automatically re-encode new raw data stream if + archive had been modified (i.e. by remove(), setAutoValue(), etc.). + - Object: Added method memberByUID(). + - Object: remove() method is now protected. + - Archive: Added method removeMember(). + - Archive: Added methods name() and setName(). + - Archive: Added methods comment() and setComment(). + - Archive: Added methods timeStampCreated(), timeStampModified(), + dateTimeCreated() and dateTimeModified(). + - Archive: Added methods valueAsInt(), valueAsReal() and valueAsBool(). + - DataType: Implemented demangling C++ type names (for methods + asLongDescr() and customTypeName(bool demangle=false)). + - Archive::setAutoValue(): Handle human readable boolean text + representations like "yes", "no", "true", "false" as expected. + - Exception class now has a variadic constructor which allows to add + textual format specifiers like with printf(). + - DataType fix: Retain backward compatibility to older versions of native + C++ classes/structs. + + * src/Akai.cpp: + - Fixed compilation error with recent, more strict compilers. + + * src/tools/akaidump.cpp, src/tools/akaiextract.cpp: + - improved output of non-ascii characters in usage messages + - fixed printf format strings + + * src/tools/korg2gig.cpp: + - fixed c++11 narrowing warnings + - fixed fine tuning which was not translated at all + + * src/tools/gigdump.cpp: + - additionally print VelocityUpperLimit and DimensionUpperLimits of all + dimension regions + - additionally print RIFF chunk file offset and RIFF chunk size of sample + data + - added and implemented new parameter "--verify" which allows to check + the raw wave form data integrity of all samples + - added and implemented new parameter "--rebuild-checksums" which allows + to recalculate the CRC32 checksum of all samples' raw wave data and + rebuilding the gig file's global checksum table (i.e. in case the + file's checksum table was damaged) + - print samples' CRC32 checksums + - Print the new EG behavior options (eg_opt_t). + + * src/tools/gigextract.cpp: + - Fix: if sample name contains a path separator (slash or backslash) then + replace them by a minus sign to avoid file system issues. + + * src/tools/gig2stereo.cpp: + - Also merge mono sample pairs with non matching loop information if + argument --incompatible was given. + + * packaging changes: + - Automake: set environment variable GCC_COLORS=auto to allow GCC to + auto detect whether it (sh/c)ould output its messages in color. + +Version 4.0.0 (14 Jul 2015) + * general changes: + - minor Makefile fix for parallel make + - Mac OS X: link with CoreFoundation (for the UUID function) + - removed gcc 4.7 warnings + - modernized configure script + - removed usage of deprecated Automake variable INCLUDES + - added new command line tool "gigmerge" + - added "const" keyword to several methods + - added new command line tool "gig2mono" + - added man page for "sf2dump" + - added new command line tool "korgdump" (and a man page for it) + - added new command line tool "korg2gig" (and a man page for it) + - moved source files of command line tools to new subdir src/tools + - libgig.so and libakai.so files are now installed under + $(prefix)/lib/libgig/ by default. + - Header files are now installed under $(prefix)/include/libgig/ by default. + - Fixed various packaging issues regarding installation directories + (fixes #218). + - added new command line tool "gig2stereo" (and a man page for it) + - unit tests: fixed wrong return value when test suite app exits + (patch by Ryan Schmidt) + - added new command line tool "sf2extract" (and a man page for it) + + * SoundFont file format: + - initial implementation + - changed region lookup API to avoid malloc in RT threads + - fixed GetEG1Sustain which didn't return correct value + - bugfix: GetPan always returned -1, 0 or 1 + + * KORG file format: + - initial support for sample based instruments in KORG's file format + (.KMP and .KSF files) + + * AKAI file format: + - Added Linux/POSIX ported version of libakai. Note that libakai is released + under LGPL terms while libgig is released under GPL terms. To handle this + license difference appropriately the AKAI support part is built as + separate DLL (.so file). + - Fixed Mac OSX support so that the Akai lib files and tools compile without + any exotic third party libraries. + - Fixed various compilation errors for Windows. + - POSIX fix: open() requires third (mode) argument if used with O_CREAT + (fixes #219). + + * src/gig.cpp: + - bugfix: VCF velocity dynamic range and VCF velocity curve + weren't saved correctly + - implemented File::AddDuplicateInstrument() + - bugfix: negative EG3 depth values were not correctly parsed or + saved + - added write support for CtrlTrigger midi rule + - added read and write support for Legato and Alternator midi + rules + - bugfix: sample groups were sometimes created multiple times or with + wrong textual group name + - added new method File::AddContentOf() for merging .gig files + - GIG FORMAT EXTENSION: added additional MIDI controllers for leverage + controller types (only works with LinuxSampler & gigedit, will not + work with Gigasampler/GigaStudio) + - added new method File::GetGroup(String name) for getting group by name + - added new method Region::GetDimensionDefinition(dimension_t type) + - bugfix: don't alter region pointer in DimensionRegion::CopyAssign() + - added some more sanity checks in Region::AddDimension() + - added new method Region::DeleteDimensionZone(dimension_t, int) + - added new method Region::SplitDimensionZone(dimension_t, int) + - Fixed crash caused by Region::GetDimensionRegionByValue() that happened + with certain velocity split sounds under certain conditions (added bound + constraints to prevent that) + - GIG FORMAT EXTENSION: added support for real-time instrument scripts. + - added new method Region::GetDimensionRegionIndexByValue() + - added new method Script::GetGroup() + - added new method Region::SetDimensionType() + - Added support for custom progress notification while saving to gig file. + - Bugfix: Adding a new region in between two existing regions caused the + new one being dropped after save operation and the gig file being tainted + (chunks at wrong location in the RIFF tree). + - Added new method Instrument::MoveTo() which allows to rearrange the order + of instruments within the same gig file. + + * src/DLS.cpp, src/DLS.h: + - added new method File::GetFileName() + - fixed minor "memory leak on exception" bug found with cppcheck + - added new method File::GetExtensionFile(int index) + - added new method File::SetFileName() allowing to call File::Save() + later on without passing a file name + - added inline helper methods overlaps() for struct range_t + - Added support for custom progress notification while saving to DLS file. + - Bugfix: Adding a new region in between two existing regions caused the + new one being dropped after save operation and the gig file being tainted + (chunks at wrong location in the RIFF tree). + + * src/SF.cpp, src/SF.h: + - added new method Sample::ReadNoClear() + + * src/RIFF.cpp, src/RIFF.h: + - bugfix: avoid calling read() with count 0 when writing a file, + as this may hang on some systems + - fixed memory leak and memory handling errors when file loading + fails + - added new method Chunk::ReadString + - added new method File::SetFileName() allowing to call File::Save() + later on without passing a file name + - added new method File::IsNew() + - added support for loading RIFF-like files with a bit different layout + than "real" RIFF files (used for KORG format support) + - added new method Chunk::GetFile() + - added new method Chunk::GetLayout() + - added 2nd, alternative method for List::MoveSubChunk(), the old 1st one + allows to move a subchunk within the current List, whereas the new 2nd + one allows to move the subchunk from the current list to another list + - POSIX: only assume -1 result value as error on open() calls + - POSIX: show operating system's error reason if opening a file failed + - Added support for custom progress notification while saving to RIFF file. + - Fixed embarrassing old bug: POSIX read() errors were never detected on + Chunk::Read() calls due to signment incompatible variable. + - Cleanup of an old DLL binary backward compatibility hack. + + * src/gigextract.cpp: + - export sample loop, unity note and fine tune with libsndfile + + * src/riftree.cpp: + - added more command line options for being able to also dump other kind + of file formats similar but not equal to the RIFF format + +Version 3.3.0 (30 Jul 2009) * general changes: - fixed compilation with gcc 4.3 - fixes for building with Visual C++ + - minor fix in configure for building DLL on Windows * src/gig.cpp, src/gig.h: - added partial support for MIDI rules, only the Controller @@ -26,6 +450,8 @@ - bugfix: destructor for base class RIFF::Chunk accessed members of derived class RIFF::File, which is bad, and caused crashes when using Visual C++ + - bugfix: files that contain zero length RIFF lists were not read + correctly (fixes #127) (bug was introduced 2009-03-13) Version 3.2.1 (5 Dec 2007)