Last update: 3 June, 2012.
Table of Contents
LinuxSampler SFZ Implementation
Table 1.4 Wavetable Oscillator
Table 1.10 Envelope Generators
Table 1.11 Low-Frequency Oscillators
Table 1.15 Amplifier EG (SFZ v1)
Table 1.16 Amplifier LFO (SFZ v1)
Table 1.18 Filter LFO (SFZ v1)
This is a work in progress!
SFZ is a file format to define how a collection of samples and other type of oscillators are arranged for performance.
The goal behind the SFZ format is to provide a free, simple, minimalistic and expandable format to arrange, distribute and use audio samples with the highest possible quality and the highest possible performance flexibility. Soundware, software and hardware developers can create, use and distribute the SFZ format files for free, for either free or commercial applications.
The following is an overview of the implementation of SFZ in LinuxSampler. It will serve as a chart of the state of our implementation. The numbering of tables (up to 1.20) correspond to Cakewalk Synthesizers Appendix A. Some opcodes introduced by Garritan/Plogue in their ARIA engine have been included. Missing and otherwise omitted opcodes have also been added to the tables by us.
This document represents LinuxSamplers interpretation of the SFZ format and is not guaranteed to be correct in any way, shape or form.
Stricken opcodes in tables are not implemented by LinuxSampler at this time. All opcodes are in lower case, capitalized N, X and Y in opcode names indicate an integer number.
An instrument in the SFZ format is a collection of sample files and a SFZ definition file. A SFZ definition file contain two types of tokens: headers and opcodes. Headers starts with a lesser-than character (<) and ends with a greater-than character (>). Opcodes are key/value pairs separated by an equal to sign (=). The opcode values can either be integers, floating point numbers or strings.
An instrument is defined as a collection of regions. A region include the definition for the input controls (when and how the region will be triggered for playback), the samples to be played and the performance parameters (how to play those samples). A region starts with the <region> header and is followed by one or more opcodes.
Regions can be arranged into groups. Groups allow entering common parameters for multiple regions, think of it as a template for regions. A group start with the <group> header and is followed by one or more opcodes.
Global settings applying to the whole SFZ definition file can be defined. Think of it as a template for all groups and regions. Some opcodes can only be set here. The global settings start with the <global> header and is followed by one or more opcodes (see Table 1.22).
Control directives are used to specify a default path to the location of samples or set the default position for any MIDI continuous controller. Those are special opcodes that can only be set here. The control settings start with the <control> header and is followed by one or more opcodes (see Table 1.2).
The player define up to six curves internally but additional custom curves can also be defined. A custom curve start with the <curve> header and is followed by one or more curve value opcodes (see Table 1.21).
Effects that should apply to all voices can be defined. Effects start with the <effects> header and is followed by one or more effect opcodes (see Table 1.13).
Comment lines can be inserted anywhere inside the file. A comment line starts with two slash characters ('//') and it extends until the end of the line.
All units in the SFZ format are in real-world values. Frequencies are expressed in Hertz, pitches in cents, amplitudes in percentage and volumes in decibels. Notes are expressed in MIDI Note Numbers, or in note names according to the International Pitch Notation (IPN) convention. According to this rules, middle C in the keyboard is C4 and the MIDI note number 60.
Everything that can be modulated by a continuous controller has a _oncc opcode suffix. A _smoothcc suffix sets the speed of parameter change in milliseconds. A _stepcc sets in what steps the parameter change is introduced. A _curvecc suffix sets the curve defined in the file.
SFZ support an extended set of MIDI CC messages generated by the various Cakewalk synthesizers GUIs. Events for the following CC numbers are generated by other MIDI events or internal generators and therefore might be applicable to our implementation:
Opcode | Description | Type | Range |
sample= | This opcode defines which sample file the region will play. The value of this opcode is the filename of the sample file, including the extension. The filename must be stored in the same folder where the definition file is, or specified relatively to it. If the sample file is not found, the player will ignore the whole region contents. Long names and names with blank spaces and other special characters (excepting the = character) are allowed in the sample definition. The sample file can either be a WAVE, AIFF or OGG file. | string | n/a |
md5= | Verifies the MD5 hash of a sample on loading. | string | n/a |
waveguide= | Instructs the player to treat the loaded sample as an impulse which is directed to a waveguide. | string | on, off |
There can be multiple <control> headers in a file. Their effects lasts until the end of the file or the next <control> header.
Opcode | Description | Type | Range |
default_path= | This defines a default path, which will be added to every path in the sample opcode. | string | n/a |
octave_offset= | This opcode sets an offset which will be applied to all note names and numbers in a definition. | integer | n/a |
note_offset= | Shifts all notes in a given map. | integer | n/a |
set_ccN= | Sets the named MIDI CC initial value. | integer | 0 to 127 |
#define | Allows for macro/text pre-processing | string | n/a |
Table 1.3 Loading
Opcode | Description | Type | Range |
load_mode= | Similar to "load mode" in Dimension Pro, but on a per-region basis. 0: load as 32-bit 1: load as 16-bit | integer | 0 to 1 |
load_start= load_end= | Allows loading only part of a sample into memory. | integer | 0 to 4294967296 |
sample_quality= | Sets the quality for sample-playback. 1: linear 2: high 3-10: different sinc interpolated modes | integer | 1 to 10 |
image= | Allows loading a BMP image, with or without alpha-channel for display purposes. | string | n/a |
Table 1.4 Wavetable Oscillator
Opcode | Description | Type | Range |
oscillator= | If the value is set to on, the region becomes a wavetable oscillator. The sample specified in the region will be used to extract the spectral information and construct the wavetable. | string | on, off |
oscillator_phase= | Sets the initial phase for the oscillator, from 0 to 360 degrees. A negative value will make the oscillator start at a random phase. | integer | -360 to 360 degrees |
oscillator_quality= | Sets the quality for wavetable playback. 0: nearest 1: linear 2: high 3: dual-high | integer | 0 to 3 |
oscillator_table_size= | Defines the table size of the wavetable used for the oscillator playback. | integer | 0 to 4294967296 |
oscillator_multi= | Sets the oscillator to play in multi mode. When oscillator_mode=0 1: engage a single oscillator 2: engage ring modulation | integer | 3 to 9 |
oscillator_mode= | Defines the playback mode for the oscillator. 0: normal and ring modulation 1: phase modulation 2: frequency modulation | integer | 0 to 2 |
oscillator_detune= | Sets the detune between the oscillators when in Multi, Ring, PM or FM modes. | integer | -100 to 100 cents |
oscillator_detune_onccN= | Sets the detune between the oscillators modulated by MIDI continuous controller N. | integer | -100 to 100 cents |
oscillator_mod_depth= | Sets the depth of modulation in PM/FM modes. | integer | -1200 to 1200 cents |
oscillator_mod_depth_onccN= | Sets the depth of modulation in PM/FM modes modulated by MIDI continuous controller N. | integer | -1200 to 1200 cents |
oscillator_mod_smoothcc= | Sets the control smooth for the depth of modulation when in PM/FM modes. |
The input controls define the conditions under which a region will get triggered and play back. Some input control states are defined at the instrument level while others (timer, sequence, key switches and groups) are defined at the region level.
A region can be triggered by either a key or controller. The key and velocity will be used if triggered by a key. The controller number and value will be used if triggered by a controller.
Opcode | Description | Type | Range |
lochan= hichan= | If incoming notes have a MIDI channel between lochan and hichan, the region will play. | integer | 1 to 16 |
lokey= hikey= key= | If a note equal to or higher than lokey AND equal to or lower than hikey is played, the region will play. | integer | 0 to 127 |
lovel= hivel= | If a note with velocity value equal to or higher than lovel AND equal to or lower than hivel is played, the region will play. | integer | 0 to 127 |
loccN= hiccN= | Defines the range of the last MIDI controller N required for the region to play. | integer | 0 to 127 |
lobend= hibend= | Defines the range of the last Pitch Bend message required for the region to play. | integer | -8192 to 8192 |
lobpm= hibpm= | Host tempo value. The region will play if the host tempo is equal to or higher than lobpm, and lower than hibpm. | integer | 0 to 500 |
lochanaft= hichanaft= | Defines the range of last Channel Aftertouch message required for the region to play. | integer | 0 to 127 |
lopolyaft= hipolyaft= | Defines the range of last Polyphonic Aftertouch message required for the region to play. | integer | 0 to 127 |
loprog= hiprog= | Sets a region playback based on the value of the last Program Change message recieved. | integer | 0 to 127 |
lorand= hirand= | Random values. The player will generate a new random number on every note-on event, in the range 0~1. The region will play if the random number is equal to or higher than lorand, and lower than hirand. | float | 0 to 1 |
lotimer= hitimer= | Set the region to play if the specified time has elapsed since a region in the same group has played. | float | n/a |
reverse_loccN= reverse_hiccN= | Sets the region into reverse playback based on a CC. | integer | 0 to 127 |
seq_length= | Sequence length. The player will keep an internal counter creating a consecutive note-on sequence for each region, starting at 1 and resetting at seq_length. | integer | 1 to 100 |
seq_position= | Sequence position. The region will play if the internal sequence counter is equal to seq_position. | integer | 1 to 100 |
start_loccN= start_hiccN= stop_loccN= stop_hiccN= | Defines a range of values to start a region playback, and another range of values of a control to stop the region playback (as replacements for note-on and note-off messages). | integer | 0 to 127 |
sw_lokey= sw_hikey= | Defines the range of the keyboard to be used as trigger selectors for the sw_last opcode. | integer | 0 to 127 |
sw_last= | Enables the region to play if the last key pressed in the range specified by sw_lokey and sw_hikey is equal to the sw_last value. | integer | 0 to 127 |
sw_down= | Enables the region to play if the key equal to sw_down value is depressed. Key has to be in the range specified by sw_lokey and sw_hikey. | integer | 0 to 127 |
sw_up= | Enables the region to play if the key equal to sw_up value is not depressed. Key has to be in the range specified by sw_lokey and sw_hikey. | integer | 0 to 127 |
sw_previous= | Previous note value. The region will play if last note-on message was equal to sw_previous value. | integer | 0 to 127 |
sw_vel= | This opcode allows overriding the velocity for the region with the velocity of the previous note. Values can be: current: Region uses the velocity of current note. previous: Region uses the velocity of the previous note. | string | current, previous |
trigger= | Sets the trigger which will be used for the sample to play. Values can be: attack (default): Region will play on note-on. release: Region will play on note-off. The velocity used to play the note-off sample is the velocity value of the corresponding (previous) note-on message. first: Region will play on note-on, but if there's no other note going on (staccato, or first note in a legato phrase). legato: Region will play on note-on, but only if there's a note going on (notes after first note in a legato phrase). | string | attack, release, first, legato |
group= | Exclusive group number for this region. | integer | 0 to 4294967296 |
off_by= | Region off group. When a new region with a group number equal to off_by plays, this region will be turned off. | integer | 0 to 4294967296 |
off_mode= | Region off mode. This opcode will determinate how a region is turned off by an off_by opcode. Values can be: fast (default): The voice will be turned off immediately. Release settings will not have any effect. normal: The region will be set into release stage. All envelope generators will enter in release stage, and region will expire when the amplifier envelope generator expired. | string | fast, normal |
on_loccN= on_hiccN= | Sample trigger on MIDI continuous control N. If a MIDI control message with a value between on_loccN and on_hiccN is received, the region will play. | integer | 0 to 127 |
Opcode | Description | Type | Range |
count= | The number of times the sample will be played. If this opcode is specified, the sample will restart as many times as defined. Envelope generators will not be retriggered on sample restart. When this opcode is defined, loopmode is automatically set to one_shot. | integer | 0 to 4294967296 |
delay= | Region delay time, in seconds. If a delay value is specified, the region playback will be postponed for the specified time. If the region receives a note-off message before delay time, the region won't play. All envelope generators delay stage will start counting after region delay time. | float | 0 to 100 seconds |
delay_onccN= | Region delay time modulated by MIDI continuous controller N, in seconds. If the region receives a note-off message before delay time, the region won't play. All envelope generators delay stage will start counting after region delay time. | float | 0 to 100 seconds |
delay_random= | Region random delay time, in seconds. If the region receives a note-off message before delay time, the region won't play. | float | 0 to 100 seconds |
delay_beats= stop_beats= | Specify a region delay, or time-to-stop in beats, synchronized to host tempo. | integer | 0 to 32 beats |
delay_samples= delay_samples_onccN= | Allows specifying a delay for a given region in samples (independent of sample rate). | integer | 0 to 4294967296 |
end= | The endpoint of the sample, in sample units. The player will reproduce the whole sample if end is not specified. If end value is -1, the sample will not play. Marking a region end with -1 can be used to use a silent region to turn off other regions by using the group and off_by opcodes. | integer | -1 to 4294967296 |
loop_crossfade= | Set a value for loop crossfading, in seconds. | float | 0 to 100 seconds |
offset= | The offset used to play the sample, in sample units. The player will reproduce samples starting with the very first sample in the file, unless offset is specified. It will start playing the file at the offset sample in this case. | integer | 0 to 4294967296 |
offset_random= | Random offset added to the region offset, in sample units. | integer | 0 to 4294967296 |
offset_onccN= | The offset used to play the sample according to last position of MIDI continuous controller N, in sample units. | integer | 0 to 4294967296 |
loop_mode= | If loop_mode is not specified, each sample will play according to its predefined loop mode. That is, the player will play the sample looped using the first defined loop, if available. If no loops are defined, the wave will play unlooped. The loop_mode opcode allows playing samples with loops defined in the unlooped mode. The possible values are: no_loop: no looping will be performed. Sample will play straight from start to end, or until note off, whatever reaches first. (Default for samples without a loop defined.) one_shot: sample will play from start to end, ignoring note off. This mode is engaged automatically if the count opcode is defined. loop_continuous: once the player reaches sample loop point, the loop will play until note expiration. loop_sustain: the player will play the loop while the note is held, by keeping it depressed or by using the sustain pedal (CC64). The rest of the sample will play after note release. (Default for samples with defined loop(s).) | string | no_loop, one_shot, loop_continuous, loop_sustain |
loop_start= | The loop start point, in samples. If loop_start is not specified and the sample has a loop defined, the sample start point will be used. If loop_start is specified, it will overwrite the loop start point defined in the sample. This opcode will not have any effect if loopmode is set to no_loop. | integer | 0 to 4294967296 |
loop_end= | The loop end point, in samples. This opcode will not have any effect if loopmode is set to no_loop. If loop_end is not specified and the sample have a loop defined, the sample loop end point will be used. If loop_end is specified, it will overwrite the loop end point defined in the sample. | integer | 0 to 4294967296 |
sync_beats= | Region playing synchronization to host position. When sync_beats is specified and after input controls instruct the region to play, the playback will be postponed until the next multiple of the specified value is crossed. | integer | 0 to 32 beats |
sync_offset= | Region playing synchronization to host position offset. When sync_beats is specified and after input controls instruct the region to play, the playback will be postponed until the next multiple of the specified value plus the sync_offset value is crossed. | integer | 0 to 32 beats |
Opcode | Description | Type | Range |
volume= | The volume for the region, in dB. | float | -144 to 6 dB |
volume_onccN= volume_smoothccN= volume_curveccN= | |||
amplitude= | The amplitude for the region, in percent. | float | 0 to 100 % |
amplitude_onccN= amplitude_smoothccN= amplitude_curveccN= | |||
pan= | The panoramic position for the region, in percent. If a mono sample is used, pan value defines the position in the stereo image where the sample will be placed. When a stereo sample is used, the pan value the relative amplitude of one channel respect the other. A value of zero means centered, negative values move the panoramic to the left, positive to the right. | float | -100 to 100 % |
pan_onccN= pan_smoothccN= pan_curveccN= | |||
pan_law= | string | no_law | |
width= | Only operational for stereo samples, width defines the amount of channel mixing applied to play the sample. A width value of 0 makes a stereo sample play as if it were mono (adding both channels and compensating for the resulting volume change). A value of 100 will make the stereo sample play as original. Any value in between will mix left and right channels with a part of the other, resulting in a narrower stereo field image. Negative width values will reverse left and right channels. | float | -100 to 100 % |
width_onccN= width_smoothccN= width_curveccN= | |||
position= | Only operational for stereo samples, positionwidth opcode. defines the position in the stereo field of a stereo signal, after channel mixing as defined in the A value of zero means centered, negative values move the panoramic to the left, positive to the right. | float | -100 to 100 % |
position_onccN= position_smoothccN= position_curveccN= | |||
amp_keytrack= | Amplifier keyboard tracking (change in amplitude per key) in dB. | float | -96 to 12 dB |
amp_keycenter= | Center key for amplifier keyboard tracking. In this key, the amplifier keyboard tracking will have no effect. | integer | 0 to 127 |
amp_veltrack= | Amplifier velocity tracking, represents how much the amplitude changes with incoming note velocity. Volume changes with incoming velocity in a concave shape according to the following expression: Amplitude(dB) = 20 log (127^2 / Velocity^2) The amp_velcurve_N opcodes allow overriding the default velocity curve. | float | -100 to 100 % |
amp_velcurve_N= | User-defined amplifier velocity curve. This opcode range allows defining a specific curve for the amplifier velocity. The value of the opcode indicates the normalized amplitude (0 to 1) for the specified velocity. | float | 0 to 1 |
amp_random= | Random volume for the region, in dB. | float | 0 to 24 dB |
rt_decay= | The volume decay amount when the region is set to play in release trigger mode, in decibels per second since note-on message. | float | 0 to 200 dB |
output= | The stereo output number for this region. If the player doesn't feature multiple outputs, this opcode is ignored. | n/a | 0 to 1024 |
gain_onccN= | Gain applied on MIDI control N, in dB. | float | -144 to 48 dB |
gain_smoothccN= gain_curveccN= | |||
xfin_lokey= xfin_hikey= | Fade in control. xfin_lokey and xfin_hikey define the fade-in keyboard zone for the region. The volume of the region will be zero for keys lower than or equal to xfin_lokey, and maximum (as defined by the volume opcode) for keys greater than or equal to xfin_hikey. | integer | 0 to 127 |
xfout_lokey= xfout_hikey= | Fade out control. xfout_lokey and xfout_hikey define the fade-out keyboard zone for the region. The volume of the region will be maximum (as defined by the volume opcode) for keys lower than or equal to xfout_lokey, and zero for keys greater than or equal to xfout_hikey. | integer | 0 to 127 |
xf_keycurve= | Keyboard crossfade curve for the region. Values can be: gain: Linear gain crossfade. This setting is best when crossfading phase-aligned material. Linear gain crossfades keep constant amplitude during the crossfade, preventing clipping. power: Equal-power RMS crossfade. This setting works better to mix very different material, as a constant power level is kept during the crossfade. | string | gain, power |
xfin_lovel= xfin_hivel= | Fade in control. xfin_lovel and xfin_hivel define the fade-in velocity range for the region. The volume of the region will be zero for velocities lower than or equal to xfin_lovel, and maximum (as defined by the volume opcode) for velocities greater than or equal to xfin_hivel. | integer | 0 to 127 |
xfout_lovel= xfout_hivel= | Fade out control. xfout_lokey and xfout_hikey define the fade-out velocity range for the region. The volume of the region will be maximum (as defined by the volume opcode) for velocities lower than or equal to xfout_lovel, and zero for velocities greater than or equal to xfout_hivel. | integer | 0 to 127 |
xf_velcurve= | Velocity crossfade curve for the region. Values can be: gain: Linear gain crossfade. This setting is best when crossfading phase-aligned material. Linear gain crossfades keep constant amplitude during the crossfade, preventing clipping. power: Equal-power RMS crossfade. This setting works better to mix very different material, as a constant power level is kept during the crossfade. | string | gain, power |
xfin_loccN= xfin_hiccN= | Fade in control. xfin_loccN and xfin_hiccN set the range of values in the MIDI continuous controller N which will perform a fade-in in the region. The volume of the region will be zero for values of the MIDI continuous controller N lower than or equal to xfin_loccN, and maximum (as defined by the volume opcode) for values greater than or equal to xfin_hiccN. | integer | 0 to 127 |
xfout_loccN= xfout_hiccN= | Fade out control. xfout_loccN and xfout_hiccN set the range of values in the MIDI continuous controller N which will perform a fade-out in the region. The volume of the region will be maximum (as defined by the volume opcode) for values of the MIDI continuous controller N lower than or equal to xfout_loccN, and zero for values greater than or equal to xfout_hiccN. | integer | 0 to 127 |
xf_cccurve= | MIDI controllers crossfade curve for the region. Values can be: gain: Linear gain crossfade. This setting is best when crossfading phase-aligned material. Linear gain crossfades keep constant amplitude during the crossfade, preventing clipping. power: Equal-power RMS crossfade. This setting works better to mix very different material, as a constant power level is kept during the crossfade. | string | gain, power |
Opcode | Description | Type | Range |
transpose= | The transposition value for this region which will be applied to the sample. | integer | -127 to 127 |
transpose_onccN= transpose_smoothccN= transpoe_curveccN= | |||
tune= | The fine tuning for the sample, in cents. Range is ±1 semitone, from -100 to 100. Only negative values must be prefixed with sign. | integer | -100 to 100 cents |
tune_onccN= tune_smoothccN= tune_curveccN= | |||
pitch_keycenter= | Root key for the sample. | integer | -127 to 127 |
pitch_keytrack= | Within the region, this value defines how much the pitch changes with every note. Default value is 100, which means pitch will change one hundred cents (one semitone) per played note. Setting this value to zero means that all notes in the region will play the same pitch, particularly useful when mapping drum sounds. | integer | -1200 to 1200 cents |
pitch_veltrack= | Pitch velocity tracking, represents how much the pitch changes with incoming note velocity, in cents. | integer | -9600 to 9600 cents |
pitch_random= | Random tuning for the region, in cents. Random pitch will be centered, with positive and negative values. | integer | 0 to 9600 cents |
bend_up= | Pitch bend range when Pitch Wheel or Joystick is moved up, in cents. | integer | -9600 to 9600 cents |
bend_down= | Pitch bend range when Pitch Wheel or Joystick is moved down, in cents. | integer | -9600 to 9600 cents |
bend_step= | Pitch bend step, in cents. | integer | 1 to 1200 cents |
Two filters are available in SFZ version 2. To use the second filter, use opcode with the number 2.
Opcode | Description | Type | Range |
fil_type= fil2_type= | Filter type. Avaliable types are: lpf_1p: one-pole low pass filter (6dB/octave). hpf_1p: one-pole high pass filter (6dB/octave). bpf_1p: one-pole band pass filter (6dB/octave). brf_1p: one-pole band rejection filter (6dB/octave). apf_1p: one-pole all pass filter (6dB/octave). lpf_2p: two-pole low pass filter (12dB/octave). hpf_2p: two-pole high pass filter (12dB/octave). bpf_2p: two-pole band pass filter (12dB/octave). brf_2p: two-pole band rejection filter (12dB/octave). pkf_2p: two-pole peak filter (12dB/octave). lpf_4p: four-pole low pass filter (24dB/octave). hpf_4p: four-pole high pass filter (24dB/octave). lpf_6p: six-pole low pas filter (36dB/octave). hpf_6p: six-pole high pass filter (36dB/octave). comb: comb filter pink: pink filter | string | lpf_1p, hpf_1p, bpf_1p, brf_1p, apf_1p, lpf_2p, hpf_2p, bpf_2p, brf_2p, pkf_2p, lpf_4p, hpf_4p, lpf_6p, hpf_6p, comb, pink |
cutoff= cutoff2= | The filter cutoff frequency, in Hz. If the cutoff is not specified, the filter will be disabled, with the consequent CPU drop in the player. | float | 0 to SR/2 |
cutoff_onccN= cutoff2_onccN= | The variation in the cutoff frequency when MIDI continuous controller N is received, in cents. | integer | -9600 to 9600 cents |
cutoff_smoothccN= cutoff2_smoothccN= | The smooth factor defines how smooth the change is. Smooth is a low pass filter on speed of parameter changes and its in milliseconds. | integer | -9600 to 9600 cents |
cutoff_stepccN= cutoff2_stepccN= | The step factor sets in what steps that the variation is introduced. | integer | -9600 to 9600 cents |
cutoff_curveccN= cutoff2_curveccN= | Select a curve defined internally or in a <curve> section. | integer | ? |
cutoff_chanaft= cutoff2_chanaft= | The variation in the cutoff frequency when MIDI channel aftertouch messages are received, in cents. | integer | -9600 to 9600 cents |
cutoff_polyaft= cutoff2_polyaft= | The variation in the cutoff frequency when MIDI polyphonic aftertouch messages are received, in cents. | integer | -9600 to 9600 cents |
resonance= resonance2= | The filter cutoff resonance value, in dB. | float | 0 to 40 dB |
resonance_onccN= resonance2_onccN= | The filter cutoff resonance value modulated by MIDI continuous controller N, in dB. | float | 0 to 40 dB |
resonance_smoothccN= resonance2_smoothccN= | The smooth factor defines how smooth the modulation is. Smooth is a low pass filter on speed of parameter changes and its in milliseconds. | float | 0 to 40 dB |
resonance_stepccN= resonance2_stepccN= | The step factor sets in what steps that the modulation is introduced. | float | 0 to 40 dB |
resonance_curveccN= resonance2_curveccN= | Select a curve defined internally or in a <curve> section. | integer | 0 to 4294967296 |
fil_keytrack= fil2_keytrack= | Filter keyboard tracking (change on cutoff for each key) in cents. | integer | 0 to 1200 cents |
fil_keycenter= fil2_keycenter= | Center key for filter keyboard tracking. In this key, the filter keyboard tracking will have no effect. | integer | 0 to 127 |
fil_veltrack= fil2_veltrack= | Filter velocity tracking, represents how much the cutoff changes with incoming note velocity. | integer | -9600 to 9600 cents |
fil_random= fil2_random= | Random cutoff added to the region, in cents. | integer | 0 to 9600 cents |
The first seven EGs might already be in use by the player. To be compatible across different players start with EG number 8.
Opcode | Description | Type | Range |
egN_timeX= | Set the time of the node X in the envelope generator N to the specified value. | float | 0 to 100 seconds |
egN_timeX_onccY= | Set the time of the node X in the envelope generator N to the specified value modulated by MIDI continuous controller X. | float | 0 to 100 seconds |
egN_levelX= | Sets the level of the node X in the envelope generator N to the specified value. | float | 0 to 1 |
egN_levelX_onccY= | Sets the level of the node X in the envelope generator N to the specified value modulated by MIDI continuous controller X. | float | 0 to 1 |
egN_shapeX= | Sets the shape of the segment X in the flexible envelope generator N to one of the predefined shapes. | float | 0 to 1 |
egN_curveX= | Defines the curve of the segment X in the envelope generator N. | float | 0 to 1 |
egN_sustain= | Sets the specified node as the sustain node for the envelope generator N. | integer | 0 to 100 |
egN_loop= | Sets the specified node as the loop node for the envelope generator N. | integer | 0 to 100 |
egN_loop_count= | Defines the number of repeats for the loop in the envelope generator N. | integer | 0 to 4294967296 |
egN_volume= | Patch envelope generator N to the amplifier. The EGs normalized output will be multiplied by the opcode value and added to the destination. | float | -144 to 6 dB |
egN_amplitude= | -"- | float | 0 to 100 % |
egN_pan= egN_width= egN_position= | -"- | float | -100 to 100 % |
egN_pan_curve= egN_pan_curveccX= | Select a curve defined internally or in a <curve> section. | integer | ? |
egN_volume_onccX= | Patch envelope generator N to the amplifier. The EGs normalized output will be multiplied by the opcode value and added to the destination in addition to being modulated by MIDI continuous controller X. | float | -144 to 6 dB |
egN_amplitude_onccX= | -"- | float | 0 to 100 % |
egN_pan_onccX= egN_width_onccX= egN_position_onccX= | -"- | float | -100 to 100% |
egN_freq_lfoX= | Patch envelope generator N to LFO X. The EGs normalized output will be multiplied by the opcode value and added to the destination. | float | 0 to 20 Hz |
egN_depth_lfoX= egN_depthadd_lfoX= | -"- | integer | -1200 to 1200 cents |
egN_pitch= | Patch envelope generator N to the pitch. The EGs normalized output will be multiplied by the opcode value and added to the destination. | integer | -9600 to 9600 cents |
egN_pitch_onccX= | Patch envelope generator N to the pitch. The EGs normalized output will be multiplied by the opcode value and added to the destination in addition to being modulated by MIDI continuous controller X. | integer | -9600 to 9600 cents |
egN_cutoff= egN_cutoff2= | Patch envelope generator N to the filter. The EGs normalized output will be multiplied by the opcode value and added to the destination. | integer | -9600 to 9600 cents |
egN_resonance= egN_resonance2= | -"- | float | 0 to 40dB |
egN_cutoff_onccX= egN_cutoff2_onccX= | Patch envelope generator N to the filter. The EGs normalized output will be multiplied by the opcode value and added to the destination in addition to being modulated by MIDI continuous controller X. | integer | -9600 to 9600 cents |
egN_resonance_onccX= egN_resonance2_onccX= | -"- | float | 0 to 40 dB |
egN_eq1freq= egN_eq2freq= egN_eq3freq= | Patch envelope generator N to the per voice equalizer. The EGs normalized output will be multiplied by the opcode value and added to the destination. | float | 0 to 30000 Hz |
egN_eq1bw= egN_eq2bw= egN_eq3bw= | -"- | float | 0.001 to 4 octaves |
egN_eq1gain= egN_eq2gain= egN_eq3gain= | -"- | float | -96 to 24 dB |
egN_eq1freq_onccX= egN_eq2freq_onccX= egN_eq3freq_onccX= | Patch envelope generator N to the per voice equalizer. The EGs normalized output will be multiplied by the opcode value and added to the destination in addition to being modulated by MIDI continuous controller X. | float | 0 to 30000 Hz |
egN_eq1bw_onccX= egN_eq2bw_onccX= egN_eq3bw_onccX= | -"- | float | 0.001 to 4 octaves |
egN_eq1gain_onccX= egN_eq2gain_onccX= egN_eq3gain_onccX= | -"- | float | -96 to 24 dB |
egN_decim= egN_bitred= egN_rectify= egN_ringmod= egN_noiselevel= egN_noisestep= egN_noisetone= egN_driveshape= | Patch envelope generator N to effects. The EGs normalized output will be multiplied by the opcode value and added to the destination. | ? | ? |
egN_decim_onccX= egN_bitred_onccX= egN_rectify_onccX= egN_ringmod_onccX= egN_noiselevel_onccX= egN_noisestep_onccX= egN_noisetone_onccX= egN_driveshape_onccX= | The EGs normalized output will be multiplied by the opcode value and added to the destination in addition to being modulated by MIDI continuous controller X | ? | ? |
The first seven LFOs might already be in use by the player. To be compatible across different players start with LFO number 8.
Opcode | Description | Type | Range |
lfoN_freq= | Defines the frequency for the LFO N, in Hz. | float | 0 to 20 Hz |
lfoN_freq_onccX= | Defines the frequency variation modulated by MIDI continuous controller X for the LFO N, in Hz. | float | 0 to 20 Hz |
lfoN_freq_smoothccX= | The smooth factor defines how smooth MIDI continuous controller X modulation is. Smooth is a low pass filter on speed of parameter changes and its in milliseconds. | integer | ? |
lfoN_freq_stepccX= | The step factor sets in what steps that variation is introduced. | float | 0 to 20 Hz |
lfoN_delay= | Sets a delay time from the region instantiation to the LFO N starts working, in seconds. | float | 0 to 100 seconds |
lfoN_delay_onccX= | Sets a delay time from the region instantiation to the LFO N starts working modulated by MIDI continuous controller X, in seconds. | float | 0 to 100 seconds |
lfoN_fade= | Defines a fade-in ramp from region instantiation for the LFO N output, in seconds. | float | 0 to 100 seconds |
lfoN_fade_onccX= | Defines a fade-in ramp from the region instantiation for the LFO N output modulated by MIDI continuous controller X, in seconds. | float | 0 to 100 seconds |
lfoN_depth= | |||
lfoN_depth_onccN= | |||
lfoN_phase= | Sets the initial phase of the LFO N. | float | 0 to 360 degrees |
lfoN_phase_onccX= | Sets the initial phase of LFO N modulated by MIDI continuous controller X. | float | 0 to 360 degrees |
lfoN_count= | Defines a cycle count for the LFO N. After that cycle count, the LFO will stop. Default is infinite. | integer | 0 to 4294967296 |
lfoN_wave= | Set the waveform for LFO N. The wave pool is player dependant, but the following waveforms are mandatory: 0: triangle 1: sine 2: pulse 75% 3: square (pulse 50%) 4: pulse 25% 5: pulse 12.5% 6: saw up 7: saw down | integer | 0 to 4294967296 |
lfoN_steps= | Turns the LFO N into a step sequencer, with a number of steps specified in the value. | integer | 0 to 4294967296 |
lfoN_stepX= | Defines the level of step X in the LFO N. | float | 0 to 1 |
lfoN_smooth= | Sets the smoothing for the LFO N output. | ? | ? |
lfoN_smooth_onccX= | Sets the smoothing for the LFO N output modulated by MIDI continuous controller X. | ? | ? |
lfoN_volume= | Patch LFO N to amplifier. The LFOs normalized output will be multiplied by the opcode value and added to the destination. | float | -144 to 6 dB |
lfoN_amplitude= | -"- | float | 0 to 100 % |
lfoN_pan= lfoN_width= lfoN_position= | -"- | float | -100 to 100 % |
lfoN_volume_onccX= | Patch LFO N to amplifier. The LFOs normalized output will be multiplied by the opcode value and added to the destination in addition to being modulated by MIDI continuous controller X. | float | -144 to 6 dB |
lfoN_amplitude_onccX= | -"- | float | 0 to 100 % |
lfoN_pan_onccX= lfoN_width_onccX= lfoN_position_onccX= | -"- | float | -100 to 100 % |
lfoN_volume_smoothccX= lfoN_amplitude_smoothccX= lfoN_pan_smoothccX= lfoN_width_smoothccX= lfoN_position_smoothccX= | The smooth factor defines how smooth the modulation is. Smooth is a low pass filter on speed of parameter changes and its in milliseconds. | integer | ? |
lfoN_volume_stepccX= lfoN_amplitude_stepccX= lfoN_pan_stepccX= lfoN_width_stepccX= lfoN_position_stepccX= | The step factor sets in what steps that modulation is introduced. | integer | 0 to 4294967296 |
lfoN_freq_lfoX= | Patch LFO N to LFO X. The LFOs normalized output will be multiplied by the opcode value and added to the destination. | float | 0 to 20 Hz |
lfoN_depth_lfoX= lfoN_depthadd_lfoX= | -"- | integer | -1200 to 1200 cents |
lfoN_pitch= | Patch LFO N to the pitch. The LFOs normalized output will be multiplied by the opcode value and added to the destination. | integer | -9600 to 9600 cents |
lfoN_pitch_onccX= | Pitch of LFO N modulated by MIDI continuous controller X. | ? | ? |
lfoN_pitch_smoothccX= | Smooth is a low pass filter on speed of parameter changes and its in milliseconds. | integer | |
lfoN_pitch_stepccX= | The step factor sets in what steps that variation is introduced. | integer | 0 to 4294967296 |
lfoN_cutoff= lfoN_cutoff2= | Patch LFO N to the filter. The LFOs normalized output will be multiplied by the opcode value and added to the destination. | integer | -9600 to 9600 cents |
lfoN_resonance= lfoN_resonance2= | -"- | float | 0 to 40 dB |
lfoN_cutoff_onccX= lfoN_cutoff2_onccX= | Patch LFO N to the filter. The LFOs normalized output will be multiplied by the opcode value and added to the destination in addition to being modulated by MIDI continuous controller X. | integer | -9600 to 9600 cents |
lfoN_resonance_onccX= lfoN_resonance2_onccX= | -"- | float | 0 to 40 dB |
lfoN_cutoff_smoothccX= lfoN_cutoff2_smoothccX= lfoN_resonance_smoothccX= lfoN_resonance2_smoothX= | The smooth factor defines how smooth the change is. Smooth is a low pass filter on speed of parameter changes and its in milliseconds. | integer | ? |
lfoN_cutoff_stepccX= lfoN_cutoff2_stepccX= lfoN_resonance_stepccX= lfoN_resonance2_stepccX= | The step factor sets in what steps that variation is introduced. | integer | 0 to 4294967296 |
lfoN_eq1freq= lfoN_eq2freq= lfoN_eq3freq= | Patch LFO N to the per voice equalizer. The LFOs normalized output will be multiplied by the opcode value and added to the destination. | float | 0 to 30000 Hz |
lfoN_eq1bw= lfoN_eq2bw= lfoN_eq3bw= | -"- | float | 0.001 to 4 octaves |
lfoN_eq1gain= lfoN_eq2gain= lfoN_eq3gain= | -"- | float | -96 to 24 dB |
lfoN_eq1freq_onccX= lfoN_eq2freq_onccX= lfoN_eq3freq_onccX= | Patch LFO N to the per voice equalizer. The LFOs normalized output will be multiplied by the opcode value and added to the destination in addition to being modulated by MIDI continuous controller X. | float | 0 to 30000 Hz |
lfoN_eq1bw_onccX= lfoN_eq2bw_onccX= lfoN_eq3bw_onccX= | -"- | float | 0.001 to 4 octaves |
lfoN_eq1gain_onccX= lfoN_eq2gain_onccX= lfoN_eq3gain_onccX= | -"- | float | -96 to 24 dB |
lfoN_eq1freq_smoothccX= lfoN_eq2freq_smoothccX= lfoN_eq3freq_smoothccX= lfoN_eq1bw_smoothccX= lfoN_eq2bw_smoothccX= lfoN_eq3bw_smoothccX= lfoN_eq1gain_smoothccX= lfoN_eq2gain_smoothccX= lfoN_eq3gain_smoothccX= | The smooth factor defines how smooth the change is. Smooth is a low pass filter on speed of parameter changes and its in milliseconds. | integer | ? |
lfoN_eq1freq_stepccX= lfoN_eq2freq_stepccX= lfoN_eq3freq_stepccX= lfoN_eq1bw_stepccX= lfoN_eq2bw_stepccX= lfoN_eq3bw_stepccX= lfoN_eq1gain_stepccX= lfoN_eq2gain_stepccX= lfoN_eq3gain_stepccX= | The step factor sets in what steps that variation is introduced. | integer | 0 to 4294967296 |
lfoN_decim= lfoN_bitred= lfoN_noiselevel= lfoN_noisestep= lfoN_noisetone= lfoN_drive= | Patch LFO N to effects. | ? | ? |
lfoN_decim_onccX= lfoN_bitred_onccX= lfoN_noiselevel_onccX= lfoN_noisestep_onccX= lfoN_noisetone_onccX= lfoN_drive_onccX= | Modulated by MIDI continuous control N. | ? | ? |
lfoN_decim_smoothccX= lfoN_bitred_smoothccX= lfoN_noiselevel_smoothccX= lfoN_noisestep_smoothccX= lfoN_noisetone_smoothccX= lfoN_drive_smoothccX= | The smooth factor defines how smooth the change is. Smooth is a low pass filter on speed of parameter changes and its in milliseconds. | integer | ? |
lfoN_decim_stepccX= lfoN_bitred_stepccX= lfoN_noiselevel_stepccX= lfoN_noisestep_stepccX= lfoN_noisetone_stepccX= lfoN_drive_stepccX= | The step factor sets in what steps that variation is introduced. | ? | ? |
Note that the <effects> equalizers are monophonic (i.e. they apply to all notes playing) while these are polyphonic (i.e. they apply per voice).
Opcode | Description | Type | Range |
eq1_freq= eq2_freq= eq3_freq= | Frequency of the equalizer band, in Hz. | float | 0 to 30000 Hz |
eq1_freq_onccN= eq2_freq_onccN= eq3_freq_onccN= | Frequency change of the equalizer band modulated by MIDI continuous control N, in Hz. | float | -30000 to 30000 Hz |
eq1_vel2freq= eq2_vel2freq= eq3_vel2freq= | Frequency change of the equalizer band with MIDI velocity, in Hz. | float | -30000 to 30000 Hz |
eq1_bw= eq2_bw= eq3_bw= | Bandwidth of the equalizer band, in octaves. | float | 0.001 to 4 octaves |
eq1_bw_onccN= eq2_bw_onccN= eq3_bw_onccN= | Bandwidth change of the equalizer band modulated by MIDI continuous control N, in octaves. | float | -4 to 4 octaves |
eq1_gain= eq2_gain= eq3_gain= | Gain of the equalizer band, in dB. | float | -96 to 24 dB |
eq1_gain_onccN= eq2_gain_onccN= eq3_gain_onccN= | Gain change of the equalizer band modulated by MIDI continuous control N, in dB. | float | -96 to 24 dB |
eq1_vel2gain= eq2_vel2gain= eq3_vel2gain= | Gain change of the equalizer band with MIDI velocity, in dB. | float | -96 to 24 dB |
All effects should be prefaced with the <effects> header.
Opcode | Description | Type | Range |
Table 1.14 Effects (SFZ v1)
Opcode | Description | Type | Range |
effect1= | Level of effect1 send (reverb). | float | 0 to 100 % |
effect2= | Level of effect2 send (chorus). | float | 0 to 100 % |
Table 1.15 Amplifier EG (SFZ v1)
These have been deprecated. Use the much more flexible EGs in Table 1.10 instead.
Opcode | Description | Type | Range |
ampeg_delay= | Amplifier EG delay time, in seconds. This is the time elapsed from note on to the start of the Attack stage. | float | 0 to 100 seconds |
ampeg_start= | Amplifier EG start level, in percentage. | float | 0 to 100 % |
ampeg_attack= | Amplifier EG attack time, in seconds. | float | 0 to 100 seconds |
ampeg_hold= | Amplifier EG hold time, in seconds. During the hold stage, EG output will remain at its maximum value. | float | 0 to 100 seconds |
ampeg_decay= | Amplifier EG decay time, in seconds. | float | 0 to 100 seconds |
ampeg_sustain= | Amplifier EG sustain level, in percentage. | float | 0 to 100 % |
ampeg_release= | Amplifier EG release time (after note release), in seconds. | float | 0 to 100 seconds |
ampeg_vel2delay= | Velocity effect on amplifier EG delay time, in seconds. | float | -100 to 100 seconds |
ampeg_vel2attack= | Velocity effect on amplifier EG attack time, in seconds. | float | -100 to 100 seconds |
ampeg_vel2hold= | Velocity effect on amplifier EG hold time, in seconds. | float | -100 to 100 seconds |
ampeg_vel2decay= | Velocity effect on amplifier EG decay time, in seconds | float | -100 to 100 seconds |
ampeg_vel2sustain= | Velocity effect on amplifier EG sustain level, in percentage. | float | -100 to 100 % |
ampeg_vel2release= | Velocity effect on amplifier EG release time, in seconds. | float | -100 to 100 seconds |
ampeg_delay_onccN= | Amplifier EG delay time added on MIDI control N, in seconds. | float | -100 to 100 seconds |
ampeg_start_onccN= | Amplifier EG start level added on MIDI control N, in percentage. | float | -100 to 100 % |
ampeg_attack_onccN= | Amplifier EG attack time added on MIDI control N, in seconds. | float | -100 to 100 second |
ampeg_hold_onccN= | Amplifier EG hold time added on MIDI control N, in seconds. | float | -100 to 100 seconds |
ampeg_decay_onccN= | Amplifier EG decay time added on MIDI control N, in seconds. | float | -100 to 100 seconds |
ampeg_sustain_onccN= | Amplifier EG sustain level added on MIDI control N, in percentage. | float | -100 to 100 % |
ampeg_release_onccN= | Amplifier EG release time added on MIDI control N, in seconds. | float | -100 to 100 seconds |
Table 1.16 Amplifier LFO (SFZ v1)
These have been deprecated. Use the much more flexible LFOs in Table 1.11 instead.
Opcode | Description | Type | Range |
amplfo_delay= | The time before the Amplifier LFO starts oscillating, in seconds. | float | 0 to 100 seconds |
amplfo_delay_onccN= | The time before the Amplifier LFO starts oscillating modulated by MIDI continuous controller N, in seconds. | float | 0 to 100 seconds |
amplfo_fade= | Amplifier LFO fade-in effect time, in seconds. | float | 0 to 100 seconds |
amplfo_fade_onccN= | Amplifier LFO fade-in effect time modulated by MIDI continuous controller N, in seconds. | float | 0 to 100 seconds |
amplfo_freq= | Amplifier LFO frequency, in hertz. | float | 0 to 20 hertz |
amplfo_freq_onccN= | Amplifier LFO frequency change when MIDI continuous controller N is received, in hertz. | float | -200 to 200 hertz |
amplfo_freqchanaft= | Amplifier LFO frequency change when channel aftertouch MIDI messages are received, in hertz. | float | -200 to 200 hertz |
amplfo_freqpolyaft= | Amplifier LFO frequency change when polyphonic aftertouch MIDI messages are received, in hertz. | float | -200 to 200 hertz |
amplfo_depth= | Amplifier LFO depth, in decibels. | float | -10 to 10 dB |
amplfo_depth_onccN= | Amplifier LFO depth when MIDI continuous controller N is received, in decibels. | float | -10 to 10 dB |
amplfo_depthchanaft= | Amplifier LFO depth when polyphonic aftertouch MIDI messages are received, in cents. | float | -10 to 10 dB |
amplfo_depthpolyaft= | Amplifier LFO frequency change when polyphonic aftertouch MIDI messages are received, in hertz. | float | -10 to 10 dB |
Table 1.17 Filter EG (SFZ v1)
These have been deprecated. Use the much more flexible EGs in Table 1.10 instead.
Opcode | Description | Type | Range |
fileg_delay= | Filter EG delay time, in seconds. This is the time elapsed from note on to the start of the Attack stage. | float | 0 to 100 seconds |
fileg_start= | Filter EG start level, in percentage. | float | 0 to 100 % |
fileg_attack= | Filter EG attack time, in seconds. | float | 0 to 100 seconds |
fileg_hold= | Filter EG hold time, in seconds. During the hold stage, EG output will remain at its maximum value. | float | 0 to 100 seconds |
fileg_decay= | Filter EG decay time, in seconds. | float | 0 to 100 seconds |
fileg_sustain= | Filter EG sustain level, in percentage. | float | 0 to 100 % |
fileg_release= | Filter EG release time (after note release), in seconds. | float | 0 to 100 seconds |
fileg_depth= | Depth or the filter EG, in cents. | integer | -12000 to 12000 cents |
fileg_vel2delay= | Velocity effect on filter EG delay time, in seconds. | float | -100 to 100 seconds |
fileg_vel2attack= | Velocity effect on filter EG attack time, in seconds. | float | -100 to 100 seconds |
fileg_vel2hold= | Velocity effect on filter EG hold time, in seconds. | float | -100 to 100 seconds |
fileg_vel2decay= | Velocity effect on filter EG decay time, in seconds. | float | -100 to 100 seconds |
fileg_vel2sustain= | Velocity effect on filter EG sustain level, in percentage. | float | -100 to 100 % |
fileg_vel2release= | Velocity effect on filter EG release time, in seconds. | float | -100 to 100 seconds |
fileg_vel2depth= | integer | -12000 to 12000 cents | |
fileg_delay_onccN= | float | -100 to 100 seconds | |
fileg_start_onccN= | float | -100 to 100 seconds | |
fileg_attack_onccN= | float | -100 to 100 seconds | |
fileg_hold_onccN= | float | -100 to 100 seconds | |
fileg_decay_onccN= | float | -100 to 100 seconds | |
fileg_sustain_onccN= | float | -100 to 100 % | |
fileg_release_onccN= | float | -100 to 100 seconds | |
fileg_depth_onccN= | integer | -12000 to 12000 cents |
These have been deprecated. Use the much more flexible LFOs in Table 1.11 instead.
Opcode | Description | Type | Range |
fillfo_delay= | The time before the filter LFO starts oscillating, in seconds. | float | 0 to 100 seconds |
fillfo_delay_onccN= | float | -100 to 100 seconds | |
fillfo_fade= | Filter LFO fade-in effect time. | float | 0 to 100 seconds |
fillfo_fade_onccN= | float | -100 to 100 seconds | |
fillfo_freq= | Filter LFO frequency, in hertz. | float | 0 to 20 hertz |
fillfo_freq_onccN= | Filter LFO frequency change when MIDI continuous controller N is received, in hertz. | float | -200 to 200 hertz |
fillfo_freqchanaft= | Filter LFO frequency change when channel aftertouch MIDI messages are received, in hertz. | float | -200 to 200 hertz |
fillfo_freqpolyaft= | Filter LFO frequency change when polyphonic aftertouch MIDI messages are received, in hertz. | float | -200 to 200 hertz |
fillfo_depth= | Filter LFO depth, in cents. | integer | -1200 to 1200 cents |
fillfo_depth_onccN= | Filter LFO depth when MIDI continuous controller N is received, in cents. | integer | -1200 to 1200 cents |
fillfo_depthchanaft= | Filter LFO depth when channel aftertouch MIDI messages are received, in cents. | integer | -1200 to 1200 cents |
fillfo_depthpolyaft= | Filter LFO depth when polyphonic aftertouch MIDI messages are received, in cents. | integer | -1200 to 1200 cents |
Table 1.19 Pitch EG (SFZ v1)
These have been deprecated. Use the much more flexible EGs in Table 1.10 instead.
Opcode | Description | Type | Range |
pitcheg_delay= | Pitch EG delay time, in seconds. This is the time elapsed from note on to the start of the Attack stage. | float | 0 to 100 seconds |
pitcheg_start= | Pitch EG start level, in percentage. | float | 0 to 100 % |
pitcheg_attack= | Pitch EG attack time, in seconds. | float | 0 to 100 seconds |
pitcheg_hold= | Pitch EG hold time, in seconds. During the hold stage, EG output will remain at its maximum value. | float | 0 to 100 seconds |
pitcheg_decay= | Pitch EG decay time, in seconds. | float | 0 to 100 seconds |
pitcheg_sustain= | Pitch EG release time (after note release), in seconds. | float | 0 to 100 % |
pitcheg_release= | Pitch EG release time (after note release), in seconds. | float | 0 to 100 seconds |
pitcheg_depth= | Depth for the pitch EG, in cents. | integer | -12000 to 12000 cents |
pitcheg_vel2delay= | Velocity effect on pitch EG delay time, in seconds. | float | -100 to 100 seconds |
pitcheg_vel2attack= | Velocity effect on pitch EG attack time, in seconds. | float | -100 to 100 seconds |
pitcheg_vel2hold= | Velocity effect on pitch EG hold time, in seconds. | float | -100 to 100 seconds |
pitcheg_vel2decay= | Velocity effect on pitch EG decay time, in seconds. | float | -100 to 100 seconds |
pitcheg_vel2sustain= | Velocity effect on pitch EG sustain level, in percentage. | float | -100 to 100 % |
pitcheg_vel2release= | Velocity effect on pitch EG release time, in seconds. | float | -100 to 100 seconds |
pitcheg_vel2depth= | Velocity effect on pitch EG depth, in cents. | integer | -12000 to 12000 cents |
pitcheg_delay_onccN= | float | -100 to 100 seconds | |
pitcheg_start_onccN= | float | -100 to 100 seconds | |
pitcheg_attack_onccN= | float | -100 to 100 seconds | |
pitcheg_hold_onccN= | float | -100 to 100 seconds | |
pitcheg_decay_onccN= | float | -100 to 100 seconds | |
pitcheg_sustain_onccN= | float | -100 to 100 % | |
pitcheg_release_onccN= | float | -100 to 100 seconds | |
pitcheg_depth_onccN= | integer | -12000 to 12000 cents |
Table 1.20 Pitch LFO (SFZ v1)
These have been deprecated. Use the much more flexible LFOs in Table 1.11 instead.
Opcode | Description | Type | Range |
pitchlfo_delay= | The time before the Pitch LFO starts oscillating, in seconds. | float | 0 to 100 seconds |
pitchlfo_delay_onccN= | float | -100 to 100 seconds | |
pitchlfo_fade= | Pitch LFO fade-in effect time. | float | 0 to 100 seconds |
pitchlfo_fade_onccN= | float | -100 to 100 seconds | |
pitchlfo_freq= | Pitch LFO frequency, in hertz. | float | 0 to 20 hertz |
pitchlfo_freq_onccN= | Pitch LFO frequency change when MIDI continuous controller N is received, in hertz. | float | -200 to 200 hertz |
pitchlfo_freqchanaft= | Pitch LFO frequency change when channel aftertouch MIDI messages are received, in hertz. | float | -200 to 200 hertz |
pitchlfo_freqpolyaft= | Pitch LFO frequency change when polyphonic aftertouch MIDI messages are received, in hertz. | float | -200 to 200 hertz |
pitchlfo_depth= | Pitch LFO depth, in cents. | integer | -1200 to 1200 cents |
pitchlfo_depth_onccN= | Pitch LFO depth when MIDI continuous controller N is received, in cents. | integer | -1200 to 1200 cents |
pitchlfo_depthchanaft= | Pitch LFO depth when channel aftertouch MIDI messages are received, in cents. | integer | -1200 to 1200 cents |
pitchlfo_depthpolyaft= | Pitch LFO depth when polyphonic aftertouch MIDI messages are received, in cents. | integer | -1200 to 1200 cents |
The first six curves are predefined by the player and usually player specific if implemented, custom curve number 7 and up can be defined using the <curve> header.
Opcode | Description | Type | Range |
vN= | Define normalized values on curve. | float | 0 to 1 |
There can be one <global> header in a file. Their settings are global for the whole file. The following opcodes can only be defined in the global header.
Opcode | Description | Type | Range |
polyphony= | Limits the polyphony to number of voices. The default is infinite or maximal number of voices the player can handle, whichever comes first. | integer | n/a |
sustain_sw= | Enable/disable the sustain pedal. | string | on, off |