Hi there! I recently tried to align my sfz files for use with Zynthian and thought, that some more control screens would be cool. I found the corresponding lines in zynthian_engine_sfizz.py and thought about another layout which would look like this:
# ---------------------------------------------------------------------------
# Controllers & Screens
# ---------------------------------------------------------------------------
# SFZ Default MIDI Controllers (modulators)
_ctrls = [
['modulation wheel', 1, 0],
['volume', 7, 127],
# default to 127 to match sfz loudness to synth processors, assuming
# sfz creators prevent clipping at vol. 127
['pan', 10, 64],
['expression', 11, 127],
['env. attack', {'value': 64, 'midi_cc': 73, 'envelope': 'attack'}],
['env. decay', {'value': 64, 'midi_cc': 75, 'envelope': 'decay'}],
# having complete ADSR seems nice.
['env. sustain', {'value': 64, 'midi_cc': 79, 'envelope': 'sustain'}],
# like above. CC debatable, not in MIDI reference, but that is how Arturia
# for example handles this
['env. release', {'value': 64, 'midi_cc': 72, 'envelope': 'release'}]
['filter cutoff', 74, 127],
# should default to open filter
['filter resonance', 71, 0],
# should default to no resonance
['lfo rate', 76, 64],
# can call that lfo or vibrato, which might be more suitable for sfz
# real world instruments. Can control vibrato if modwheel occupied by
# dynamic crossfading
['lfo depth', 77, 0],
# like above, default to no modulation
['sustain', 64, 'off', ['off', 'on']],
['sostenuto', 66, 'off', ['off', 'on']],
['legato', 68, 'off', ['off', 'on']],
['breath', 2, 127],
['portamento on/off', 65, 'off', ['off', 'on']],
['portamento time-coarse', 5, 0],
['portamento time-fine', 37, 0],
['portamento amount', 84, 0],
# because why not
['reverb', 91, 0],
# not sure if sfizz handles these. otherwise: default to zero send level
['tremolo', 92, 0],
['chorus', 93, 0],
['phaser', 95, 0],
]
# Controller Screens
_ctrl_screens = [
['main', ['volume', 'pan', 'modulation wheel', 'expression']],
['envelope', ['env. attack', 'env. decay',
'env. sustain', 'env. release']]
['filter/lfo', ['filter cutoff', 'filter resonance',
'lfo rate', 'lfo depth']]
['pedals', ['legato', 'breath', 'sostenuto', 'sustain']],
['portamento', ['portamento on/off',
'portamento time-coarse', 'portamento time-fine', 'portamento amount']],
['effects', ['reverb', 'tremolo', 'chorus', 'phaser']],
]
Edit: Here is the above mentioned in human readable form:
main: volume, pan, modulation wheel, expression
envelope: env. attack, env. decay, env. sustain, env. release
filter/lfo: filter cutoff, filter resonance, lfo rate, lfo depth
pedals: legato, breath, sostenuto, sustain
portamento: portamento on/off, portamento time-coarse, portamento time-fine, portamento amount
effects: reverb, tremolo, chorus, phaser
It mainly completes the ADSR (I also did not differentiate between filter and amp envelopes, because itâs soundfonts and is not in the MIDI reference anyway.) and LFO controls which could be and are sometimes used for vibrato controls. I also added some effects, but I actually donât know if sfizz even handles them.
While I am here already, I just want to leave some thoughts about sfz handling I had:
- What would be great: A small info panel containing either each sfzâs readme.$ext or a specific âzyninfo.txtâ, which might contain a short soundfont info and usable cc and keyswitches which shows in the preset menu and on the chain control screen. (could apply to synth chain screens as well). It could look like this:
Soprano recorder sampled from my childhood with stereo [brand] microphones in my garage by [creator]. Very bright sounding.
Keyswitches:
C0 = Poly Sustain
C#0 = Mono Legato
D#0 = Just slamming it on the floor
Controls:
CC74 = Cutoff
...
- Maybe a next/previous preset control on the chain control screen (could apply to synth chain screens as well).
- Like somebody mentioned before already, I wonder how soundfonts are ordered. If possible, a case insensitive alphabetical order would be great, because this can be edited by the end user straight forward.
What do you think about these?