sfizz 0.4.0 release

Big stuff:

  • Added support for polynomial resamples and sample_quality opcodes (#238 #267). The engine now defaults to a value of 2 for this opcode, which is more intensive than the original linear interpolation resampler but provides a better quality. Added support for better resampling algorithms also in the wavetables via oscillator_quality (#287).
  • Support _curvecc and _stepcc opcodes (#166 #155 #77) as well as _smoothcc opcodes (#181 #48 #22 #153 #297 #285)
  • Added support and API for Scala tuning files in the engine and the plugins (#253 #268 #282)

Other new features:

  • Added support for unison oscillators (#161)
  • Support for the polyphony opcode at all levels (#171 #275), as well as note_polyphony. The group= polyphony is also more flexible and can be defined anywhere.
  • Added support for offset_cc (#170 #159)
  • Added support for direction=reverse (#185 #179)
  • Added support to label the keys using a label_key opcode. This is not really standard yet, but it is now integrated in the LV2 plugin to advertise the names in the MIDNAM file and possibly change their labels in hosts that support it. (#174 #154)
  • Added support for block comments /* */ in the parser (#196 #195)
  • Added a sfizz_render client in tree; you can build it with the make target sfizz_render if the SFIZZ_RENDER CMake variable is set to ON. (#200 #201 #206)
  • Add support to integrate sfizz in DPF plugins (#216)
  • Added an AudioUnit target (#224)
  • Added support for the set_hdcc opcodes and overall added the ability to support floating-point CCs from the API (#233 #232 #244)
  • Added support for FLAC loops (#242 #229)
  • Support the mapPath feature of the LV2 specifications, for tentatively better portability in plugin states (#303)
  • New instances of the sfizz LV2 plugin will now load a default *sine instrument (#283)

Issues:

  • Solved some issues with DSmolken's drumkits related to the ampeg envelope (#172)
  • An exception problem was thrown if an sfz file was deleted (#182 #184)
  • Properly bundle the dylib for macOS (#188)
  • Improved the filter stability (#198 #199 #210)
  • Handle USE_LIBCPP properly on configure (#203)
  • Fix the handling of loop markers if sample end= is present (#202 #204)
  • Handle note on with 0 velocity as note offs in the jack client (#208 #211)
  • Solved an issue with super short files (#215)
  • Corrected a stack smashing bug in the LV2 plugin (#226)
  • Fixed some parsing issues with $variables (#230)
  • Properly advertise the VST plugin parameters (#241)
  • Process $ expansions in #include (#247)
  • Change the default build type to RelWithDebInfo (#249)
  • Improve the note stealing algorithm (#214); note that this is still very much a work in progress since many heuristics are in play here. Feel free to report misbehavior regarding note stealing as we improve this regularly.
  • Corrected a bug with SFZ v1 velcurve (#263)
  • Properly support the off_by=-1 opcode to correctly reset the value. (#235)
  • Corrected some errors with null-terminated atoms in the LV2 plugin (#269)
  • Ignore garbage values following e.g. a key number in opcode values (as in key=64Garbage -> key=64) (#263)
  • ampeg_****_onccXX modifiers now properly consider multiple CC modifiers (#300 #167)
  • Add headers and group sources in the CMake project for integration with e.g. Qt (#312)
  • Trigger on CC does not require disabling the key triggering through e.g. key=-1 (#315)
  • Support flat notes parsed as string values (#291 #289)
  • Improved handling of release_key (#298); still not perfect, if the region spans multiple key and multiple notes happened with the pedal down, only a single voice will start.
  • Properly read the LV2 option list until the end (#323, by @atsushieno)
  • Corrected a parsing issue when $variables were part of an opcode name (#328)
  • Various other plumbing changes

API additions:

  • Added API calls to set $variable define values prior to loading an SFZ file (#168 #119 #130)
  • Added API calls to get key labels and cc labels defined by label_key and label_cc (#174)
  • Added an API call to load an sfz file as an std::string or const char* (#217)
  • Added API calls for Scala files and tunings (#253)
  • Added high-definition floating point CC API calls (#244)
  • Added API calls to change the default resampling quality (#267 #238)

See: GitHub release page