SFZ parser and synth c++ library, providing a JACK standalone client
lotimer/hitimer
(@essej)hint_ram_based=1
MIDI_CC_COUNT
variable,
Config.h is now a generated fileimage_controls
opcode to add a background image on UI' Controls tab (#1156)The big stuff:
output
opcode. The VST3 and LV2 plugins both have a 16-out version (as 8 stereo outs) (#1002)emscripten
branch allows to run sfizz through WASM for your web-oriented needs. An example with WebMidi is available at https://sfz.tools/sfizz-webaudio/ (requires a Chromium-based browser), with source code at https://github.com/sfztools/sfizz-webaudio.Smaller things:
sw_last
is now properly affected by octave_offset
and note_offset
(#1039)apf_1p
filter still misbehaves and is disabled for now.SFIZZ_LV2_PSA
. Too many hosts expect their plugins to respond to midi messages for things like pedal and volume. (#1054)loprog/hiprog
(#1058)API changes:
sfizz_enable_logging
and sfizz_disable_logging
(and their C++ counterparts) are deprecated, replaced by sfizz_get_callback_breakdown
which needs to be called at the end of a callback by the host (#1034). All file writing is handled by the host for logging.sfizz_send_program_change
and its C++ counterpart.sfizz_set_sustain_cancels_release
and its C++ counterpart.New supports and plugins:
hint_sustain_cancels_release
, which when activated reproduces a LinuxSampler behavior by sustaining already released notes (#898). A GUI option should come later.amp_veltrack_oncc
, pitch_veltrack_oncc
, and fil_veltrack_oncc
(#938)_curvecc
for extended CCs (#993)lorand
and hirand
on CC-triggered regions (#997)oscillator=auto
and only enables oscillators on short samples with wavetable tags in the WAV metadata (#954)Bug fixes and other improvements:
off_by
behavior with long-releasing notes (#972)lokey=-1
as hikey=-1
(#941)SFIZZ_LV2_PSA
), sustain and sostenu CC events will still go through to the plugin to improve the user experience on hosts that do not support automatic mapping of control ports to midi events through the LV2 midi:binding
extension (#963).sfizz_jack
(#973)sfizz_render
(#992)sfizz_render
and sfizz_jack
(#999)We would like to thank to our contributors at https://opencollective.com/sfztools, as well as everyone who is regularly testing and pushing sfizz to the limits! Your support to this project in any form is much appreciated.
You can download builds catered for your Linux distribution over at OBS. The Mac, Windows and MOD packages are below in the release assets, as well as the source packages.
Headlines:
API/ABI changes for the library:
bpmTempo
method has been added to pass tempo as beats-per-minute rather than seconds per beat.
The previous version is deprecated.aftertouch
is renamed as channel_aftertouch
(for C) and channelAftertouch
(for C++) throughout the API
to be more consistent with polyAftertouch
.UI:
image
opcode (#770)Plugins:
Library:
*silence
(#831)end
, loop_start
and loop_end
(#752)depth
targets (#730)count
and loop_count
(#654)delay_oncc
(#653)sw_vel
(#650)note_polyphony
choking (#634 #529)end
opcode (#618)sample_quality
from 3 to 10 (#609)lfoN_beats
(#553)sw_default
in a region (#531)sw_lolast
and sw_hilast
(#526)Big stuff:
New features:
sustain_lo
(#327)reverb
, disto
, gate
and comp
hint_stealing
, with possible values as first
, oldest
(default), and envelope_and_age
. The latter is the more CPU-consuming version which requires to follow the envelope of each voice to kill low-volume ones preferably. Note that the voice stealing continue to kill all voices started on the same event by default (i.e. all layers of the same note). (#344 #384 #353)sfizz
now internally uses a modulation matrix to link all modulation sources (CC, LFOs, and EGs) and targets (#335 #351 #386)off_time
and complete support for off_mode
. The voice stealing logic was improved to take into account polyphony
, note_polyphony
and group_polyphony
properly (#349 #352 #393 #413 #414 #467). Note that this support is also available for the engine polyphony. In this case, some additional voice will take over for the release duration (#477).offset_cc
(#385)sfizz_render
now supports a --quality
switch, which acts like the sample_quality=
opcode (#408)pitch_keycenter=sample
is now taken into account (#362)oscillator_detunecc
(#434)hint_ram_loading
for loading the whole samples in RAM (#353)loop_crossfade
(#464)Issues:
oscillator=on
on the region (#431)sample_quality
was put back to 1 for live playing and 2 for freewheeling (#405)ampeg_attack
and ampeg_release
to avoid clicks (#437)offset
value (#469)*noise
generator to match ARIA's (#429)atom:Blank
atoms in the LV2 plugin (#363)amp_veltrack
behavior (#371)sustain_cc
behavior (#377)loop_mode
for release regions (#379)end=0
are now properly disabled (#380)fil_random
to be bipolar (#452)sequence
order now properly starts at 1 (#451)pitch_veltrack
(#461)<
character (#439)API changes:
Big stuff:
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)._curvecc
and _stepcc
opcodes (#166 #155 #77) as well as _smoothcc
opcodes (#181 #48 #22 #153 #297 #285)Other new features:
polyphony
opcode at all levels (#171 #275), as well as note_polyphony
. The group=
polyphony is also more flexible and can be defined anywhere.offset_cc
(#170 #159)direction=reverse
(#185 #179)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)/* */
in the parser (#196 #195)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)set_hdcc
opcodes and overall added the ability to support floating-point CCs from the API (#233 #232 #244)mapPath
feature of the LV2 specifications, for tentatively better portability in plugin states (#303)*sine
instrument (#283)Issues:
dylib
for macOS (#188)USE_LIBCPP
properly on configure (#203)end=
is present (#202 #204)$variables
(#230)$
expansions in #include
(#247)RelWithDebInfo
(#249)velcurve
(#263)off_by=-1
opcode to correctly reset the value. (#235)key=64Garbage
-> key=64
) (#263)ampeg_****_onccXX
modifiers now properly consider multiple CC modifiers (#300 #167)key=-1
(#315)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.$variables
were part of an opcode name (#328)API additions:
$variable
define values prior to loading an SFZ file (#168 #119 #130)label_key
and label_cc
(#174)std::string
or const char*
(#217)