From 7a97476d95321a5fea1e78c6ec874941f3f40ff4 Mon Sep 17 00:00:00 2001 From: redtide Date: Tue, 12 Mar 2024 22:08:35 +0000 Subject: [PATCH] deploy: da9e6eec1446c9bf4103d1391b69ad04c06cacff --- .nojekyll | 0 CNAME | 1 + .../bootstrap-table-filter-control.min.css | 10 + assets/css/bootstrap-table.min.css | 10 + assets/css/brands.min.css | 6 + assets/css/fontawesome.min.css | 9 + assets/css/fork-awesome.min.css | 12 + assets/css/fork-awesome.min.css.map | 1 + assets/css/github-dark-dimmed.min.css | 15 + assets/css/github.min.css | 16 + assets/css/solid.min.css | 6 + assets/css/style.min.css | 12 + assets/css/style.min.css.map | 98 + assets/css/v4-font-face.min.css | 6 + assets/ico/android-chrome-144x144.png | Bin 0 -> 10706 bytes assets/ico/apple-touch-icon.png | Bin 0 -> 13769 bytes assets/ico/browserconfig.xml | 9 + assets/ico/favicon-16x16.png | Bin 0 -> 1138 bytes assets/ico/favicon-32x32.png | Bin 0 -> 2294 bytes assets/ico/favicon.ico | Bin 0 -> 15086 bytes assets/ico/mstile-150x150.png | Bin 0 -> 6133 bytes assets/ico/safari-pinned-tab.svg | 65 + assets/ico/site.webmanifest | 14 + assets/img/ampeg_attack_shape/sine_0.jpg | Bin 0 -> 14896 bytes assets/img/ampeg_attack_shape/sine_neg3p8.jpg | Bin 0 -> 14334 bytes assets/img/ampeg_attack_shape/sine_neg8.jpg | Bin 0 -> 13994 bytes assets/img/ampeg_attack_shape/sine_pos2p1.jpg | Bin 0 -> 15047 bytes assets/img/ampeg_attack_shape/sine_pos8.jpg | Bin 0 -> 14456 bytes assets/img/ampeg_decay_shape/sine_0.jpg | Bin 0 -> 14596 bytes assets/img/ampeg_decay_shape/sine_neg3p8.jpg | Bin 0 -> 14969 bytes assets/img/ampeg_decay_shape/sine_neg8.jpg | Bin 0 -> 14857 bytes assets/img/ampeg_decay_shape/sine_pos2p1.jpg | Bin 0 -> 14534 bytes assets/img/ampeg_decay_shape/sine_pos8.jpg | Bin 0 -> 13698 bytes assets/img/ampeg_env.jpg | Bin 0 -> 81617 bytes assets/img/effect/routing.svg | 3 + assets/img/logo.svg | 13 + assets/img/opcodes/label_cc.jpg | Bin 0 -> 16782 bytes assets/img/opcodes/labels.jpg | Bin 0 -> 33698 bytes assets/img/opcodes/sw_label.jpg | Bin 0 -> 31752 bytes assets/img/tutorials/brush_stirs/stir1.jpg | Bin 0 -> 24989 bytes assets/img/tutorials/brush_stirs/stir2.jpg | Bin 0 -> 36837 bytes assets/img/tutorials/brush_stirs/stir3.jpg | Bin 0 -> 36163 bytes assets/img/tutorials/brush_stirs/stir4.jpg | Bin 0 -> 35721 bytes assets/img/tutorials/brush_stirs/temp.txt | 1 + assets/js/amp_velcurve_N_gen.js | 83 + assets/js/anchor.min.js | 9 + assets/js/base.min.js | 1 + assets/js/bash.min.js | 20 + .../js/bootstrap-table-filter-control.min.js | 10 + assets/js/bootstrap-table.min.js | 10 + assets/js/bootstrap.min.js | 7 + assets/js/color-modes.js | 92 + assets/js/cpp.min.js | 47 + assets/js/highlight.min.js | 1207 +++ assets/js/index.bundle.min.js | 6 + assets/js/index.bundle.min.js.map | 1 + assets/js/jquery.min.js | 2 + assets/js/jquery.min.map | 1 + assets/js/mermaid.min.js | 1646 ++++ assets/js/opcodes_table_filters.js | 85 + assets/js/popper.min.js | 6 + assets/js/popper.min.js.map | 1 + assets/js/scroll-to-top.min.js | 1 + assets/js/sfz.min.js | 16 + assets/src/exs2sfz.py | 610 ++ assets/src/makesample.c | 36 + assets/webfonts/fa-brands-400.ttf | Bin 0 -> 207972 bytes assets/webfonts/fa-brands-400.woff2 | Bin 0 -> 117372 bytes assets/webfonts/fa-regular-400.ttf | Bin 0 -> 68004 bytes assets/webfonts/fa-regular-400.woff2 | Bin 0 -> 25452 bytes assets/webfonts/fa-solid-900.ttf | Bin 0 -> 419720 bytes assets/webfonts/fa-solid-900.woff2 | Bin 0 -> 156496 bytes assets/webfonts/fa-v4compatibility.ttf | Bin 0 -> 10832 bytes assets/webfonts/fa-v4compatibility.woff2 | Bin 0 -> 4792 bytes atom.xml | 46 + .../aria/xml_instrument_bank/index.html | 696 ++ extensions/midi_ccs/index.html | 776 ++ headers/control/index.html | 709 ++ headers/curve/index.html | 748 ++ headers/effect/index.html | 699 ++ headers/global/index.html | 727 ++ headers/group/index.html | 721 ++ headers/index.html | 737 ++ headers/master/index.html | 725 ++ headers/midi/index.html | 691 ++ headers/region/index.html | 729 ++ headers/sample/index.html | 1070 +++ index.html | 780 ++ legacy/background.gif | Bin 0 -> 70 bytes legacy/index.html | 4429 +++++++++ misc/all_opcodes/index.html | 8432 +++++++++++++++++ misc/amp_velcurve_N_gen/index.html | 751 ++ misc/aria/index.html | 8432 +++++++++++++++++ misc/categories/index.html | 727 ++ misc/sfz1/index.html | 8432 +++++++++++++++++ misc/sfz2/index.html | 8432 +++++++++++++++++ modulations/curveccN/index.html | 696 ++ modulations/envelope_generators/index.html | 852 ++ modulations/icurveccN/index.html | 697 ++ modulations/index.html | 707 ++ modulations/lfo/index.html | 822 ++ modulations/moved/ampeg_vel2attack/index.html | 708 ++ modulations/moved/ampeg_vel2decay/index.html | 696 ++ modulations/moved/ampeg_vel2delay/index.html | 699 ++ modulations/moved/ampeg_vel2hold/index.html | 696 ++ .../moved/ampeg_vel2release/index.html | 696 ++ .../moved/ampeg_vel2sustain/index.html | 696 ++ .../moved/amplfo_depthchanaft/index.html | 695 ++ .../moved/amplfo_depthpolyaft/index.html | 695 ++ .../moved/amplfo_freqchanaft/index.html | 698 ++ .../moved/amplfo_freqpolyaft/index.html | 698 ++ modulations/moved/eqN_vel2freq/index.html | 700 ++ modulations/smoothccN/index.html | 705 ++ modulations/stepccN/index.html | 700 ++ modulations/vel2/index.html | 710 ++ news/index.html | 1169 +++ .../index.html | 698 ++ news/posts/2019-07-25-new-tutorial/index.html | 699 ++ .../index.html | 694 ++ .../index.html | 692 ++ .../index.html | 702 ++ .../2019-11-21-legato-tutorial/index.html | 692 ++ .../2019-12-29-happy-new-year/index.html | 699 ++ .../index.html | 700 ++ .../index.html | 698 ++ .../2020-10-16-opcodes-page-update/index.html | 694 ++ .../index.html | 694 ++ opcodes/_mod/index.html | 727 ++ opcodes/amp_attack/index.html | 773 ++ opcodes/amp_decay/index.html | 750 ++ opcodes/amp_delay/index.html | 759 ++ opcodes/amp_hold/index.html | 755 ++ opcodes/amp_keycenter/index.html | 719 ++ opcodes/amp_keytrack/index.html | 719 ++ opcodes/amp_random/index.html | 728 ++ opcodes/amp_release/index.html | 756 ++ opcodes/amp_sustain/index.html | 749 ++ opcodes/amp_vel2attack/index.html | 773 ++ opcodes/amp_vel2decay/index.html | 750 ++ opcodes/amp_vel2delay/index.html | 759 ++ opcodes/amp_vel2hold/index.html | 755 ++ opcodes/amp_vel2release/index.html | 756 ++ opcodes/amp_vel2sustain/index.html | 749 ++ opcodes/amp_velcurve_N/index.html | 768 ++ opcodes/amp_veltrack/index.html | 755 ++ opcodes/amp_veltrack_ccN/index.html | 755 ++ opcodes/amp_veltrack_curveccN/index.html | 755 ++ opcodes/amp_veltrack_onccN/index.html | 755 ++ opcodes/amp_veltrack_random/index.html | 715 ++ opcodes/ampeg_attack/index.html | 773 ++ opcodes/ampeg_attack_curveccN/index.html | 773 ++ opcodes/ampeg_attack_onccN/index.html | 773 ++ opcodes/ampeg_attack_shape/index.html | 744 ++ opcodes/ampeg_attackccN/index.html | 773 ++ opcodes/ampeg_decay/index.html | 750 ++ opcodes/ampeg_decay_curveccN/index.html | 750 ++ opcodes/ampeg_decay_onccN/index.html | 750 ++ opcodes/ampeg_decay_shape/index.html | 741 ++ opcodes/ampeg_decay_zero/index.html | 729 ++ opcodes/ampeg_decayccN/index.html | 750 ++ opcodes/ampeg_delay/index.html | 759 ++ opcodes/ampeg_delay_curveccN/index.html | 759 ++ opcodes/ampeg_delay_onccN/index.html | 759 ++ opcodes/ampeg_delayccN/index.html | 759 ++ opcodes/ampeg_dynamic/index.html | 719 ++ opcodes/ampeg_hold/index.html | 755 ++ opcodes/ampeg_hold_curveccN/index.html | 755 ++ opcodes/ampeg_hold_onccN/index.html | 755 ++ opcodes/ampeg_holdccN/index.html | 755 ++ opcodes/ampeg_release/index.html | 756 ++ opcodes/ampeg_release_curveccN/index.html | 756 ++ opcodes/ampeg_release_onccN/index.html | 756 ++ opcodes/ampeg_release_shape/index.html | 737 ++ opcodes/ampeg_release_zero/index.html | 724 ++ opcodes/ampeg_releaseccN/index.html | 756 ++ opcodes/ampeg_start/index.html | 751 ++ opcodes/ampeg_start_curveccN/index.html | 751 ++ opcodes/ampeg_start_onccN/index.html | 751 ++ opcodes/ampeg_startccN/index.html | 751 ++ opcodes/ampeg_sustain/index.html | 749 ++ opcodes/ampeg_sustain_curveccN/index.html | 749 ++ opcodes/ampeg_sustain_onccN/index.html | 749 ++ opcodes/ampeg_sustainccN/index.html | 749 ++ opcodes/ampeg_vel2attack/index.html | 773 ++ opcodes/ampeg_vel2decay/index.html | 750 ++ opcodes/ampeg_vel2delay/index.html | 759 ++ opcodes/ampeg_vel2hold/index.html | 755 ++ opcodes/ampeg_vel2release/index.html | 756 ++ opcodes/ampeg_vel2sustain/index.html | 749 ++ opcodes/amplfo_delay/index.html | 720 ++ opcodes/amplfo_depth/index.html | 759 ++ opcodes/amplfo_depth_onccN/index.html | 759 ++ opcodes/amplfo_depthccN/index.html | 759 ++ opcodes/amplfo_depthchanaft/index.html | 759 ++ opcodes/amplfo_depthpolyaft/index.html | 759 ++ opcodes/amplfo_fade/index.html | 720 ++ opcodes/amplfo_freq/index.html | 753 ++ opcodes/amplfo_freqccN/index.html | 753 ++ opcodes/amplfo_freqchanaft/index.html | 753 ++ opcodes/amplfo_freqpolyaft/index.html | 753 ++ opcodes/amplitude/index.html | 763 ++ opcodes/amplitude_ccN/index.html | 763 ++ opcodes/amplitude_curveccN/index.html | 763 ++ opcodes/amplitude_onccN/index.html | 763 ++ opcodes/amplitude_smoothccN/index.html | 763 ++ opcodes/apan_depth/index.html | 730 ++ opcodes/apan_depth_onccN/index.html | 730 ++ opcodes/apan_dry/index.html | 730 ++ opcodes/apan_dry_onccN/index.html | 730 ++ opcodes/apan_freq/index.html | 730 ++ opcodes/apan_freq_onccN/index.html | 730 ++ opcodes/apan_phase/index.html | 730 ++ opcodes/apan_phase_onccN/index.html | 730 ++ opcodes/apan_waveform/index.html | 715 ++ opcodes/apan_wet/index.html | 730 ++ opcodes/apan_wet_onccN/index.html | 730 ++ opcodes/bend_down/index.html | 725 ++ opcodes/bend_smooth/index.html | 719 ++ opcodes/bend_step/index.html | 721 ++ opcodes/bend_stepdown/index.html | 719 ++ opcodes/bend_stepup/index.html | 721 ++ opcodes/bend_up/index.html | 721 ++ opcodes/benddown/index.html | 725 ++ opcodes/bendstep/index.html | 721 ++ opcodes/bendup/index.html | 721 ++ opcodes/bitred/index.html | 759 ++ opcodes/bitred_curveccN/index.html | 759 ++ opcodes/bitred_onccN/index.html | 759 ++ opcodes/bitred_smoothccN/index.html | 759 ++ opcodes/bitred_stepccN/index.html | 759 ++ opcodes/bus/index.html | 723 ++ opcodes/bypass_onccN/index.html | 720 ++ opcodes/comp_attack/index.html | 715 ++ opcodes/comp_gain/index.html | 715 ++ opcodes/comp_ratio/index.html | 715 ++ opcodes/comp_release/index.html | 715 ++ opcodes/comp_stlink/index.html | 714 ++ opcodes/comp_threshold/index.html | 715 ++ opcodes/count/index.html | 730 ++ opcodes/curve_index/index.html | 748 ++ opcodes/cutoff/index.html | 798 ++ opcodes/cutoff2/index.html | 798 ++ opcodes/cutoff2_ccN/index.html | 798 ++ opcodes/cutoff2_chanaft/index.html | 798 ++ opcodes/cutoff2_curveccN/index.html | 798 ++ opcodes/cutoff2_onccN/index.html | 798 ++ opcodes/cutoff2_polyaft/index.html | 798 ++ opcodes/cutoff2_random/index.html | 723 ++ opcodes/cutoff2_smoothccN/index.html | 798 ++ opcodes/cutoff2_stepccN/index.html | 798 ++ opcodes/cutoff_ccN/index.html | 798 ++ opcodes/cutoff_chanaft/index.html | 798 ++ opcodes/cutoff_curveccN/index.html | 798 ++ opcodes/cutoff_onccN/index.html | 798 ++ opcodes/cutoff_polyaft/index.html | 798 ++ opcodes/cutoff_random/index.html | 723 ++ opcodes/cutoff_smoothccN/index.html | 798 ++ opcodes/cutoff_stepccN/index.html | 798 ++ opcodes/decim/index.html | 759 ++ opcodes/decim_curveccN/index.html | 759 ++ opcodes/decim_onccN/index.html | 759 ++ opcodes/decim_smoothccN/index.html | 759 ++ opcodes/decim_stepccN/index.html | 759 ++ opcodes/default_path/index.html | 733 ++ opcodes/define/index.html | 745 ++ opcodes/delay/index.html | 753 ++ opcodes/delay_beats/index.html | 746 ++ opcodes/delay_beats_curveccN/index.html | 746 ++ opcodes/delay_beats_onccN/index.html | 746 ++ opcodes/delay_beats_random/index.html | 715 ++ opcodes/delay_ccN/index.html | 753 ++ opcodes/delay_curveccN/index.html | 753 ++ opcodes/delay_cutoff/index.html | 730 ++ opcodes/delay_cutoff_onccN/index.html | 730 ++ opcodes/delay_damphi/index.html | 730 ++ opcodes/delay_damphi_onccN/index.html | 715 ++ opcodes/delay_damplo/index.html | 730 ++ opcodes/delay_damplo_onccN/index.html | 715 ++ opcodes/delay_dry/index.html | 730 ++ opcodes/delay_dry_onccN/index.html | 730 ++ opcodes/delay_feedback/index.html | 730 ++ opcodes/delay_feedback_onccN/index.html | 730 ++ opcodes/delay_filter/index.html | 716 ++ opcodes/delay_input/index.html | 730 ++ opcodes/delay_input_onccN/index.html | 730 ++ opcodes/delay_levelc/index.html | 715 ++ opcodes/delay_levell/index.html | 715 ++ opcodes/delay_levelr/index.html | 715 ++ opcodes/delay_lfofreq/index.html | 730 ++ opcodes/delay_lfofreq_onccN/index.html | 730 ++ opcodes/delay_moddepth/index.html | 730 ++ opcodes/delay_moddepth_onccN/index.html | 730 ++ opcodes/delay_mode/index.html | 714 ++ opcodes/delay_onccN/index.html | 753 ++ opcodes/delay_panc/index.html | 730 ++ opcodes/delay_panc_onccN/index.html | 730 ++ opcodes/delay_panl/index.html | 730 ++ opcodes/delay_panl_onccN/index.html | 730 ++ opcodes/delay_panr/index.html | 730 ++ opcodes/delay_panr_onccN/index.html | 730 ++ opcodes/delay_random/index.html | 725 ++ opcodes/delay_resonance/index.html | 730 ++ opcodes/delay_resonance_onccN/index.html | 730 ++ opcodes/delay_samples/index.html | 731 ++ opcodes/delay_samples_onccN/index.html | 731 ++ opcodes/delay_spread/index.html | 730 ++ opcodes/delay_spread_onccN/index.html | 730 ++ opcodes/delay_syncc_onccN/index.html | 715 ++ opcodes/delay_syncl_onccN/index.html | 715 ++ opcodes/delay_syncr_onccN/index.html | 715 ++ opcodes/delay_time_tap/index.html | 715 ++ opcodes/delay_timec/index.html | 730 ++ opcodes/delay_timec_onccN/index.html | 730 ++ opcodes/delay_timel/index.html | 730 ++ opcodes/delay_timel_onccN/index.html | 730 ++ opcodes/delay_timer/index.html | 730 ++ opcodes/delay_timer_onccN/index.html | 730 ++ opcodes/delay_wet/index.html | 730 ++ opcodes/delay_wet_onccN/index.html | 730 ++ opcodes/direction/index.html | 725 ++ opcodes/directtomain/index.html | 717 ++ opcodes/disto_depth/index.html | 730 ++ opcodes/disto_depth_onccN/index.html | 730 ++ opcodes/disto_dry/index.html | 730 ++ opcodes/disto_dry_onccN/index.html | 730 ++ opcodes/disto_stages/index.html | 715 ++ opcodes/disto_tone/index.html | 730 ++ opcodes/disto_tone_onccN/index.html | 730 ++ opcodes/disto_wet/index.html | 730 ++ opcodes/disto_wet_onccN/index.html | 730 ++ opcodes/dsp_order/index.html | 715 ++ opcodes/effect1/index.html | 722 ++ opcodes/effect2/index.html | 722 ++ opcodes/effect3/index.html | 734 ++ opcodes/effect4/index.html | 734 ++ opcodes/egN_ampeg/index.html | 736 ++ opcodes/egN_amplitude/index.html | 730 ++ opcodes/egN_amplitude_onccX/index.html | 730 ++ opcodes/egN_bitred/index.html | 730 ++ opcodes/egN_bitred_onccX/index.html | 730 ++ opcodes/egN_curveX/index.html | 718 ++ opcodes/egN_cutoff/index.html | 730 ++ opcodes/egN_cutoff2/index.html | 730 ++ opcodes/egN_cutoff2_onccX/index.html | 730 ++ opcodes/egN_cutoff_onccX/index.html | 730 ++ opcodes/egN_decim/index.html | 730 ++ opcodes/egN_decim_onccX/index.html | 730 ++ opcodes/egN_depth_lfoX/index.html | 730 ++ opcodes/egN_depthadd_lfoX/index.html | 715 ++ opcodes/egN_driveshape/index.html | 730 ++ opcodes/egN_driveshape_onccX/index.html | 730 ++ opcodes/egN_dynamic/index.html | 729 ++ opcodes/egN_eqXbw/index.html | 730 ++ opcodes/egN_eqXbw_onccY/index.html | 730 ++ opcodes/egN_eqXfreq/index.html | 730 ++ opcodes/egN_eqXfreq_onccY/index.html | 730 ++ opcodes/egN_eqXgain/index.html | 730 ++ opcodes/egN_eqXgain_onccY/index.html | 730 ++ opcodes/egN_freq_lfoX/index.html | 715 ++ opcodes/egN_levelX/index.html | 735 ++ opcodes/egN_levelX_onccY/index.html | 735 ++ opcodes/egN_loop/index.html | 722 ++ opcodes/egN_loop_count/index.html | 722 ++ opcodes/egN_noiselevel/index.html | 730 ++ opcodes/egN_noiselevel_onccX/index.html | 730 ++ opcodes/egN_noisestep/index.html | 730 ++ opcodes/egN_noisestep_onccX/index.html | 730 ++ opcodes/egN_noisetone/index.html | 730 ++ opcodes/egN_noisetone_onccX/index.html | 730 ++ opcodes/egN_pan/index.html | 730 ++ opcodes/egN_pan_curve/index.html | 730 ++ opcodes/egN_pan_curveccX/index.html | 730 ++ opcodes/egN_pan_onccX/index.html | 730 ++ opcodes/egN_pitch/index.html | 730 ++ opcodes/egN_pitch_onccX/index.html | 730 ++ opcodes/egN_points/index.html | 741 ++ opcodes/egN_rectify/index.html | 730 ++ opcodes/egN_rectify_onccX/index.html | 730 ++ opcodes/egN_resonance/index.html | 730 ++ opcodes/egN_resonance2/index.html | 730 ++ opcodes/egN_resonance2_onccX/index.html | 730 ++ opcodes/egN_resonance_onccX/index.html | 730 ++ opcodes/egN_ringmod/index.html | 730 ++ opcodes/egN_ringmod_onccX/index.html | 730 ++ opcodes/egN_shapeX/index.html | 726 ++ opcodes/egN_sustain/index.html | 722 ++ opcodes/egN_timeX/index.html | 736 ++ opcodes/egN_timeX_onccY/index.html | 736 ++ opcodes/egN_volume/index.html | 730 ++ opcodes/egN_volume_onccX/index.html | 730 ++ opcodes/egN_width/index.html | 730 ++ opcodes/egN_width_onccX/index.html | 730 ++ opcodes/end/index.html | 733 ++ opcodes/eqN_bw/index.html | 742 ++ opcodes/eqN_bw_onccX/index.html | 742 ++ opcodes/eqN_bwccX/index.html | 742 ++ opcodes/eqN_freq/index.html | 755 ++ opcodes/eqN_freq_onccX/index.html | 755 ++ opcodes/eqN_freqccX/index.html | 755 ++ opcodes/eqN_gain/index.html | 753 ++ opcodes/eqN_gain_onccX/index.html | 753 ++ opcodes/eqN_gainccX/index.html | 753 ++ opcodes/eqN_type/index.html | 726 ++ opcodes/eqN_vel2freq/index.html | 755 ++ opcodes/eqN_vel2gain/index.html | 753 ++ opcodes/eq_bw/index.html | 730 ++ opcodes/eq_bw_onccN/index.html | 730 ++ opcodes/eq_freq/index.html | 730 ++ opcodes/eq_freq_onccN/index.html | 730 ++ opcodes/eq_gain/index.html | 730 ++ opcodes/eq_gain_onccN/index.html | 730 ++ opcodes/eq_type/index.html | 715 ++ opcodes/fil2_gain/index.html | 746 ++ opcodes/fil2_gain_onccN/index.html | 746 ++ opcodes/fil2_keycenter/index.html | 720 ++ opcodes/fil2_keytrack/index.html | 724 ++ opcodes/fil2_type/index.html | 759 ++ opcodes/fil2_veltrack/index.html | 719 ++ opcodes/fil_attack/index.html | 752 ++ opcodes/fil_decay/index.html | 750 ++ opcodes/fil_delay/index.html | 759 ++ opcodes/fil_depth/index.html | 752 ++ opcodes/fil_gain/index.html | 746 ++ opcodes/fil_gain_onccN/index.html | 746 ++ opcodes/fil_hold/index.html | 755 ++ opcodes/fil_keycenter/index.html | 720 ++ opcodes/fil_keytrack/index.html | 724 ++ opcodes/fil_random/index.html | 723 ++ opcodes/fil_release/index.html | 754 ++ opcodes/fil_sustain/index.html | 749 ++ opcodes/fil_type/index.html | 759 ++ opcodes/fil_vel2attack/index.html | 752 ++ opcodes/fil_vel2decay/index.html | 750 ++ opcodes/fil_vel2delay/index.html | 759 ++ opcodes/fil_vel2depth/index.html | 752 ++ opcodes/fil_vel2hold/index.html | 755 ++ opcodes/fil_vel2release/index.html | 754 ++ opcodes/fil_vel2sustain/index.html | 749 ++ opcodes/fil_veltrack/index.html | 719 ++ opcodes/fileg_attack/index.html | 752 ++ opcodes/fileg_attack_curveccN/index.html | 752 ++ opcodes/fileg_attack_onccN/index.html | 752 ++ opcodes/fileg_attack_shape/index.html | 725 ++ opcodes/fileg_attackccN/index.html | 752 ++ opcodes/fileg_decay/index.html | 750 ++ opcodes/fileg_decay_curveccN/index.html | 750 ++ opcodes/fileg_decay_onccN/index.html | 750 ++ opcodes/fileg_decay_shape/index.html | 724 ++ opcodes/fileg_decay_zero/index.html | 726 ++ opcodes/fileg_decayccN/index.html | 750 ++ opcodes/fileg_delay/index.html | 759 ++ opcodes/fileg_delay_curveccN/index.html | 759 ++ opcodes/fileg_delay_onccN/index.html | 759 ++ opcodes/fileg_delayccN/index.html | 759 ++ opcodes/fileg_depth/index.html | 752 ++ opcodes/fileg_depth_curveccN/index.html | 752 ++ opcodes/fileg_depth_onccN/index.html | 752 ++ opcodes/fileg_depthccN/index.html | 752 ++ opcodes/fileg_dynamic/index.html | 719 ++ opcodes/fileg_hold/index.html | 755 ++ opcodes/fileg_hold_curveccN/index.html | 755 ++ opcodes/fileg_hold_onccN/index.html | 755 ++ opcodes/fileg_holdccN/index.html | 755 ++ opcodes/fileg_release/index.html | 754 ++ opcodes/fileg_release_curveccN/index.html | 754 ++ opcodes/fileg_release_onccN/index.html | 754 ++ opcodes/fileg_release_shape/index.html | 724 ++ opcodes/fileg_release_zero/index.html | 723 ++ opcodes/fileg_releaseccN/index.html | 754 ++ opcodes/fileg_start/index.html | 751 ++ opcodes/fileg_start_curveccN/index.html | 751 ++ opcodes/fileg_start_onccN/index.html | 751 ++ opcodes/fileg_startccN/index.html | 751 ++ opcodes/fileg_sustain/index.html | 749 ++ opcodes/fileg_sustain_curveccN/index.html | 749 ++ opcodes/fileg_sustain_onccN/index.html | 749 ++ opcodes/fileg_sustainccN/index.html | 749 ++ opcodes/fileg_vel2attack/index.html | 752 ++ opcodes/fileg_vel2decay/index.html | 750 ++ opcodes/fileg_vel2delay/index.html | 759 ++ opcodes/fileg_vel2depth/index.html | 752 ++ opcodes/fileg_vel2hold/index.html | 755 ++ opcodes/fileg_vel2release/index.html | 754 ++ opcodes/fileg_vel2sustain/index.html | 749 ++ opcodes/fillfo_delay/index.html | 720 ++ opcodes/fillfo_depth/index.html | 759 ++ opcodes/fillfo_depth_onccN/index.html | 759 ++ opcodes/fillfo_depthccN/index.html | 759 ++ opcodes/fillfo_depthchanaft/index.html | 759 ++ opcodes/fillfo_depthpolyaft/index.html | 759 ++ opcodes/fillfo_fade/index.html | 720 ++ opcodes/fillfo_freq/index.html | 753 ++ opcodes/fillfo_freqccN/index.html | 753 ++ opcodes/fillfo_freqchanaft/index.html | 753 ++ opcodes/fillfo_freqpolyaft/index.html | 753 ++ opcodes/filter_cutoff/index.html | 730 ++ opcodes/filter_cutoff_onccN/index.html | 730 ++ opcodes/filter_resonance/index.html | 730 ++ opcodes/filter_resonance_onccN/index.html | 730 ++ opcodes/filter_type/index.html | 716 ++ opcodes/filtype/index.html | 759 ++ opcodes/fxNtomain/index.html | 717 ++ opcodes/fxNtomix/index.html | 717 ++ opcodes/gain_ccN/index.html | 776 ++ opcodes/gain_onccN/index.html | 776 ++ opcodes/gain_random/index.html | 728 ++ opcodes/gate_attack/index.html | 715 ++ opcodes/gate_onccN/index.html | 715 ++ opcodes/gate_release/index.html | 715 ++ opcodes/gate_stlink/index.html | 714 ++ opcodes/gate_threshold/index.html | 715 ++ opcodes/global_amplitude/index.html | 717 ++ opcodes/global_label/index.html | 721 ++ opcodes/global_tune/index.html | 715 ++ opcodes/global_volume/index.html | 715 ++ opcodes/group/index.html | 743 ++ opcodes/group_amplitude/index.html | 717 ++ opcodes/group_label/index.html | 725 ++ opcodes/group_tune/index.html | 715 ++ opcodes/group_volume/index.html | 715 ++ opcodes/hibend/index.html | 719 ++ opcodes/hibpm/index.html | 721 ++ opcodes/hiccN/index.html | 736 ++ opcodes/hichan/index.html | 724 ++ opcodes/hichanaft/index.html | 719 ++ opcodes/hihdccN/index.html | 719 ++ opcodes/hikey/index.html | 737 ++ opcodes/hint_/index.html | 722 ++ opcodes/hipolyaft/index.html | 725 ++ opcodes/hiprog/index.html | 723 ++ opcodes/hirand/index.html | 759 ++ opcodes/hitimer/index.html | 725 ++ opcodes/hivel/index.html | 742 ++ opcodes/image/index.html | 729 ++ opcodes/include/index.html | 780 ++ opcodes/index.html | 8432 +++++++++++++++++ opcodes/internal/index.html | 714 ++ opcodes/key/index.html | 744 ++ opcodes/label_ccN/index.html | 728 ++ opcodes/label_keyN/index.html | 722 ++ opcodes/label_outputN/index.html | 729 ++ opcodes/lfoN_amplitude/index.html | 746 ++ opcodes/lfoN_amplitude_onccX/index.html | 746 ++ opcodes/lfoN_amplitude_smoothccX/index.html | 746 ++ opcodes/lfoN_amplitude_stepccX/index.html | 746 ++ opcodes/lfoN_bitred/index.html | 746 ++ opcodes/lfoN_bitred_onccX/index.html | 746 ++ opcodes/lfoN_bitred_smoothccX/index.html | 746 ++ opcodes/lfoN_bitred_stepccX/index.html | 746 ++ opcodes/lfoN_count/index.html | 720 ++ opcodes/lfoN_cutoff/index.html | 746 ++ opcodes/lfoN_cutoff2/index.html | 746 ++ opcodes/lfoN_cutoff2_onccX/index.html | 746 ++ opcodes/lfoN_cutoff2_smoothccX/index.html | 746 ++ opcodes/lfoN_cutoff2_stepccX/index.html | 746 ++ opcodes/lfoN_cutoff_onccX/index.html | 746 ++ opcodes/lfoN_cutoff_smoothccX/index.html | 746 ++ opcodes/lfoN_cutoff_stepccX/index.html | 746 ++ opcodes/lfoN_decim/index.html | 746 ++ opcodes/lfoN_decim_onccX/index.html | 746 ++ opcodes/lfoN_decim_smoothccX/index.html | 746 ++ opcodes/lfoN_decim_stepccX/index.html | 746 ++ opcodes/lfoN_delay/index.html | 742 ++ opcodes/lfoN_delay_onccX/index.html | 742 ++ opcodes/lfoN_depth_lfoX/index.html | 715 ++ opcodes/lfoN_depthadd_lfoX/index.html | 715 ++ opcodes/lfoN_drive/index.html | 746 ++ opcodes/lfoN_drive_onccX/index.html | 746 ++ opcodes/lfoN_drive_smoothccX/index.html | 746 ++ opcodes/lfoN_drive_stepccX/index.html | 746 ++ opcodes/lfoN_eqXbw/index.html | 746 ++ opcodes/lfoN_eqXbw_onccY/index.html | 746 ++ opcodes/lfoN_eqXbw_smoothccY/index.html | 746 ++ opcodes/lfoN_eqXbw_stepccY/index.html | 746 ++ opcodes/lfoN_eqXfreq/index.html | 746 ++ opcodes/lfoN_eqXfreq_onccY/index.html | 746 ++ opcodes/lfoN_eqXfreq_smoothccY/index.html | 746 ++ opcodes/lfoN_eqXfreq_stepccY/index.html | 746 ++ opcodes/lfoN_eqXgain/index.html | 746 ++ opcodes/lfoN_eqXgain_onccY/index.html | 746 ++ opcodes/lfoN_eqXgain_smoothccY/index.html | 746 ++ opcodes/lfoN_eqXgain_stepccY/index.html | 746 ++ opcodes/lfoN_fade/index.html | 737 ++ opcodes/lfoN_fade_onccX/index.html | 737 ++ opcodes/lfoN_freq/index.html | 759 ++ opcodes/lfoN_freq_lfoX/index.html | 730 ++ opcodes/lfoN_freq_lfoX_onccY/index.html | 730 ++ opcodes/lfoN_freq_onccX/index.html | 759 ++ opcodes/lfoN_freq_smoothccX/index.html | 759 ++ opcodes/lfoN_freq_stepccX/index.html | 759 ++ opcodes/lfoN_noiselevel/index.html | 746 ++ opcodes/lfoN_noiselevel_onccX/index.html | 746 ++ opcodes/lfoN_noiselevel_smoothccX/index.html | 746 ++ opcodes/lfoN_noiselevel_stepccX/index.html | 746 ++ opcodes/lfoN_noisestep/index.html | 746 ++ opcodes/lfoN_noisestep_onccX/index.html | 746 ++ opcodes/lfoN_noisestep_smoothccX/index.html | 746 ++ opcodes/lfoN_noisestep_stepccX/index.html | 746 ++ opcodes/lfoN_noisetone/index.html | 746 ++ opcodes/lfoN_noisetone_onccX/index.html | 746 ++ opcodes/lfoN_noisetone_smoothccX/index.html | 746 ++ opcodes/lfoN_noisetone_stepccX/index.html | 746 ++ opcodes/lfoN_offset/index.html | 739 ++ opcodes/lfoN_offsetX/index.html | 739 ++ opcodes/lfoN_pan/index.html | 746 ++ opcodes/lfoN_pan_onccX/index.html | 746 ++ opcodes/lfoN_pan_smoothccX/index.html | 746 ++ opcodes/lfoN_pan_stepccX/index.html | 746 ++ opcodes/lfoN_phase/index.html | 736 ++ opcodes/lfoN_phase_onccX/index.html | 736 ++ opcodes/lfoN_pitch/index.html | 761 ++ opcodes/lfoN_pitch_curveccX/index.html | 761 ++ opcodes/lfoN_pitch_onccX/index.html | 761 ++ opcodes/lfoN_pitch_smoothccX/index.html | 761 ++ opcodes/lfoN_pitch_stepccX/index.html | 761 ++ opcodes/lfoN_ratio/index.html | 737 ++ opcodes/lfoN_ratioX/index.html | 737 ++ opcodes/lfoN_resonance/index.html | 746 ++ opcodes/lfoN_resonance2/index.html | 746 ++ opcodes/lfoN_resonance2_onccX/index.html | 746 ++ opcodes/lfoN_resonance2_smoothccX/index.html | 746 ++ opcodes/lfoN_resonance2_stepccX/index.html | 746 ++ opcodes/lfoN_resonance_onccX/index.html | 746 ++ opcodes/lfoN_resonance_smoothccX/index.html | 746 ++ opcodes/lfoN_resonance_stepccX/index.html | 746 ++ opcodes/lfoN_sample_dyn_paramX/index.html | 730 ++ .../lfoN_sample_dyn_paramX_onccY/index.html | 730 ++ opcodes/lfoN_scale/index.html | 737 ++ opcodes/lfoN_scaleX/index.html | 737 ++ opcodes/lfoN_smooth/index.html | 730 ++ opcodes/lfoN_smooth_onccX/index.html | 730 ++ opcodes/lfoN_stepX/index.html | 744 ++ opcodes/lfoN_stepX_onccY/index.html | 744 ++ opcodes/lfoN_steps/index.html | 727 ++ opcodes/lfoN_volume/index.html | 746 ++ opcodes/lfoN_volume_onccX/index.html | 746 ++ opcodes/lfoN_volume_smoothccX/index.html | 746 ++ opcodes/lfoN_volume_stepccX/index.html | 746 ++ opcodes/lfoN_wave/index.html | 797 ++ opcodes/lfoN_waveX/index.html | 797 ++ opcodes/lfoN_wave_onccX/index.html | 797 ++ opcodes/lfoN_width/index.html | 746 ++ opcodes/lfoN_width_onccX/index.html | 746 ++ opcodes/lfoN_width_smoothccX/index.html | 746 ++ opcodes/lfoN_width_stepccX/index.html | 746 ++ opcodes/load_end/index.html | 715 ++ opcodes/load_mode/index.html | 715 ++ opcodes/load_start/index.html | 715 ++ opcodes/lobend/index.html | 719 ++ opcodes/lobpm/index.html | 721 ++ opcodes/loccN/index.html | 736 ++ opcodes/lochan/index.html | 724 ++ opcodes/lochanaft/index.html | 719 ++ opcodes/lohdccN/index.html | 719 ++ opcodes/lokey/index.html | 737 ++ opcodes/loop_count/index.html | 724 ++ opcodes/loop_crossfade/index.html | 725 ++ opcodes/loop_end/index.html | 760 ++ opcodes/loop_length_onccN/index.html | 760 ++ opcodes/loop_lengthccN/index.html | 760 ++ opcodes/loop_mode/index.html | 763 ++ opcodes/loop_start/index.html | 743 ++ opcodes/loop_start_onccN/index.html | 743 ++ opcodes/loop_startccN/index.html | 743 ++ opcodes/loop_tune/index.html | 720 ++ opcodes/loop_type/index.html | 715 ++ opcodes/loopcount/index.html | 724 ++ opcodes/loopend/index.html | 760 ++ opcodes/loopmode/index.html | 763 ++ opcodes/loopstart/index.html | 743 ++ opcodes/looptune/index.html | 720 ++ opcodes/looptype/index.html | 715 ++ opcodes/lopolyaft/index.html | 725 ++ opcodes/loprog/index.html | 723 ++ opcodes/lorand/index.html | 759 ++ opcodes/lotimer/index.html | 725 ++ opcodes/lovel/index.html | 742 ++ opcodes/master_amplitude/index.html | 717 ++ opcodes/master_label/index.html | 725 ++ opcodes/master_tune/index.html | 715 ++ opcodes/master_volume/index.html | 715 ++ opcodes/md5/index.html | 723 ++ opcodes/noise_filter/index.html | 714 ++ opcodes/noise_level/index.html | 738 ++ opcodes/noise_level_onccN/index.html | 738 ++ opcodes/noise_level_smoothccN/index.html | 738 ++ opcodes/noise_step/index.html | 730 ++ opcodes/noise_step_onccN/index.html | 730 ++ opcodes/noise_stereo/index.html | 714 ++ opcodes/noise_tone/index.html | 730 ++ opcodes/noise_tone_onccN/index.html | 730 ++ opcodes/note_offset/index.html | 720 ++ opcodes/note_polyphony/index.html | 742 ++ opcodes/note_selfmask/index.html | 733 ++ opcodes/octave_offset/index.html | 720 ++ opcodes/off_by/index.html | 737 ++ opcodes/off_curve/index.html | 726 ++ opcodes/off_mode/index.html | 748 ++ opcodes/off_shape/index.html | 721 ++ opcodes/off_time/index.html | 719 ++ opcodes/offby/index.html | 737 ++ opcodes/offset/index.html | 755 ++ opcodes/offset_ccN/index.html | 755 ++ opcodes/offset_mode/index.html | 720 ++ opcodes/offset_onccN/index.html | 755 ++ opcodes/offset_random/index.html | 732 ++ opcodes/on_hiccN/index.html | 732 ++ opcodes/on_hihdccN/index.html | 717 ++ opcodes/on_loccN/index.html | 732 ++ opcodes/on_lohdccN/index.html | 717 ++ opcodes/oscillator/index.html | 714 ++ opcodes/oscillator_detune/index.html | 730 ++ opcodes/oscillator_detune_onccN/index.html | 730 ++ opcodes/oscillator_mod_depth/index.html | 738 ++ opcodes/oscillator_mod_depth_onccN/index.html | 738 ++ opcodes/oscillator_mod_smoothccN/index.html | 738 ++ opcodes/oscillator_mode/index.html | 719 ++ opcodes/oscillator_multi/index.html | 802 ++ opcodes/oscillator_phase/index.html | 715 ++ opcodes/oscillator_quality/index.html | 715 ++ opcodes/oscillator_table_size/index.html | 715 ++ opcodes/output/index.html | 721 ++ opcodes/pan/index.html | 763 ++ opcodes/pan_ccN/index.html | 763 ++ opcodes/pan_curveccN/index.html | 763 ++ opcodes/pan_keycenter/index.html | 719 ++ opcodes/pan_keytrack/index.html | 722 ++ opcodes/pan_law/index.html | 720 ++ opcodes/pan_onccN/index.html | 763 ++ opcodes/pan_random/index.html | 715 ++ opcodes/pan_smoothccN/index.html | 763 ++ opcodes/pan_stepccN/index.html | 763 ++ opcodes/pan_veltrack/index.html | 720 ++ opcodes/param_offset/index.html | 739 ++ opcodes/phase/index.html | 721 ++ opcodes/phaser_depth/index.html | 730 ++ opcodes/phaser_depth_onccN/index.html | 730 ++ opcodes/phaser_feedback/index.html | 730 ++ opcodes/phaser_feedback_onccN/index.html | 730 ++ opcodes/phaser_freq/index.html | 730 ++ opcodes/phaser_freq_onccN/index.html | 730 ++ opcodes/phaser_phase_onccN/index.html | 715 ++ opcodes/phaser_stages/index.html | 715 ++ opcodes/phaser_waveform/index.html | 715 ++ opcodes/phaser_wet/index.html | 730 ++ opcodes/phaser_wet_onccN/index.html | 730 ++ opcodes/pitch/index.html | 777 ++ opcodes/pitch_attack/index.html | 752 ++ opcodes/pitch_curveccN/index.html | 777 ++ opcodes/pitch_decay/index.html | 750 ++ opcodes/pitch_delay/index.html | 759 ++ opcodes/pitch_depth/index.html | 752 ++ opcodes/pitch_hold/index.html | 755 ++ opcodes/pitch_keycenter/index.html | 737 ++ opcodes/pitch_keytrack/index.html | 725 ++ opcodes/pitch_onccN/index.html | 777 ++ opcodes/pitch_random/index.html | 736 ++ opcodes/pitch_release/index.html | 754 ++ opcodes/pitch_smoothccN/index.html | 777 ++ opcodes/pitch_stepccN/index.html | 777 ++ opcodes/pitch_sustain/index.html | 749 ++ opcodes/pitch_vel2attack/index.html | 752 ++ opcodes/pitch_vel2decay/index.html | 750 ++ opcodes/pitch_vel2delay/index.html | 759 ++ opcodes/pitch_vel2depth/index.html | 752 ++ opcodes/pitch_vel2hold/index.html | 755 ++ opcodes/pitch_vel2release/index.html | 754 ++ opcodes/pitch_vel2sustain/index.html | 749 ++ opcodes/pitch_veltrack/index.html | 721 ++ opcodes/pitcheg_attack/index.html | 752 ++ opcodes/pitcheg_attack_curveccN/index.html | 752 ++ opcodes/pitcheg_attack_onccN/index.html | 752 ++ opcodes/pitcheg_attack_shape/index.html | 725 ++ opcodes/pitcheg_decay/index.html | 750 ++ opcodes/pitcheg_decay_curveccN/index.html | 750 ++ opcodes/pitcheg_decay_onccN/index.html | 750 ++ opcodes/pitcheg_decay_shape/index.html | 724 ++ opcodes/pitcheg_decay_zero/index.html | 726 ++ opcodes/pitcheg_delay/index.html | 759 ++ opcodes/pitcheg_delay_curveccN/index.html | 759 ++ opcodes/pitcheg_delay_onccN/index.html | 759 ++ opcodes/pitcheg_depth/index.html | 752 ++ opcodes/pitcheg_depth_curveccN/index.html | 752 ++ opcodes/pitcheg_depth_onccN/index.html | 752 ++ opcodes/pitcheg_depthccN/index.html | 752 ++ opcodes/pitcheg_dynamic/index.html | 720 ++ opcodes/pitcheg_hold/index.html | 755 ++ opcodes/pitcheg_hold_curveccN/index.html | 755 ++ opcodes/pitcheg_hold_onccN/index.html | 755 ++ opcodes/pitcheg_release/index.html | 754 ++ opcodes/pitcheg_release_curveccN/index.html | 754 ++ opcodes/pitcheg_release_onccN/index.html | 754 ++ opcodes/pitcheg_release_shape/index.html | 724 ++ opcodes/pitcheg_release_zero/index.html | 723 ++ opcodes/pitcheg_start/index.html | 751 ++ opcodes/pitcheg_start_curveccN/index.html | 751 ++ opcodes/pitcheg_start_onccN/index.html | 751 ++ opcodes/pitcheg_sustain/index.html | 749 ++ opcodes/pitcheg_sustain_curveccN/index.html | 749 ++ opcodes/pitcheg_sustain_onccN/index.html | 749 ++ opcodes/pitcheg_vel2attack/index.html | 752 ++ opcodes/pitcheg_vel2decay/index.html | 750 ++ opcodes/pitcheg_vel2delay/index.html | 759 ++ opcodes/pitcheg_vel2depth/index.html | 752 ++ opcodes/pitcheg_vel2hold/index.html | 755 ++ opcodes/pitcheg_vel2release/index.html | 754 ++ opcodes/pitcheg_vel2sustain/index.html | 749 ++ opcodes/pitchlfo_delay/index.html | 720 ++ opcodes/pitchlfo_depth/index.html | 759 ++ opcodes/pitchlfo_depth_onccN/index.html | 759 ++ opcodes/pitchlfo_depthccN/index.html | 759 ++ opcodes/pitchlfo_depthchanaft/index.html | 759 ++ opcodes/pitchlfo_depthpolyaft/index.html | 759 ++ opcodes/pitchlfo_fade/index.html | 720 ++ opcodes/pitchlfo_freq/index.html | 753 ++ opcodes/pitchlfo_freqccN/index.html | 753 ++ opcodes/pitchlfo_freqchanaft/index.html | 753 ++ opcodes/pitchlfo_freqpolyaft/index.html | 753 ++ opcodes/polyphony/index.html | 773 ++ opcodes/polyphony_group/index.html | 743 ++ opcodes/polyphony_stealing/index.html | 716 ++ opcodes/position/index.html | 765 ++ opcodes/position_curveccN/index.html | 765 ++ opcodes/position_keycenter/index.html | 715 ++ opcodes/position_keytrack/index.html | 715 ++ opcodes/position_onccN/index.html | 765 ++ opcodes/position_random/index.html | 715 ++ opcodes/position_smoothccN/index.html | 765 ++ opcodes/position_stepccN/index.html | 765 ++ opcodes/position_veltrack/index.html | 715 ++ opcodes/region_label/index.html | 729 ++ opcodes/resonance/index.html | 767 ++ opcodes/resonance2/index.html | 767 ++ opcodes/resonance2_ccN/index.html | 767 ++ opcodes/resonance2_curveccN/index.html | 767 ++ opcodes/resonance2_onccN/index.html | 767 ++ opcodes/resonance2_smoothccN/index.html | 767 ++ opcodes/resonance2_stepccN/index.html | 767 ++ opcodes/resonance_ccN/index.html | 767 ++ opcodes/resonance_curveccN/index.html | 767 ++ opcodes/resonance_onccN/index.html | 767 ++ opcodes/resonance_random/index.html | 715 ++ opcodes/resonance_smoothccN/index.html | 767 ++ opcodes/resonance_stepccN/index.html | 767 ++ opcodes/reverb_damp/index.html | 730 ++ opcodes/reverb_damp_onccN/index.html | 730 ++ opcodes/reverb_dry/index.html | 730 ++ opcodes/reverb_dry_onccN/index.html | 730 ++ opcodes/reverb_input/index.html | 730 ++ opcodes/reverb_input_onccN/index.html | 730 ++ opcodes/reverb_predelay/index.html | 730 ++ opcodes/reverb_predelay_onccN/index.html | 730 ++ opcodes/reverb_size/index.html | 730 ++ opcodes/reverb_size_onccN/index.html | 730 ++ opcodes/reverb_tone/index.html | 730 ++ opcodes/reverb_tone_onccN/index.html | 730 ++ opcodes/reverb_type/index.html | 714 ++ opcodes/reverb_wet/index.html | 730 ++ opcodes/reverb_wet_onccN/index.html | 730 ++ opcodes/reverse_hiccN/index.html | 722 ++ opcodes/reverse_loccN/index.html | 722 ++ opcodes/rt_dead/index.html | 724 ++ opcodes/rt_decay/index.html | 737 ++ opcodes/rt_decayN/index.html | 734 ++ opcodes/rt_decayN_time/index.html | 724 ++ opcodes/sample/index.html | 769 ++ opcodes/sample_dyn_paramN/index.html | 730 ++ opcodes/sample_dyn_paramN_onccX/index.html | 730 ++ opcodes/sample_fadeout/index.html | 726 ++ opcodes/sample_quality/index.html | 722 ++ opcodes/script/index.html | 734 ++ opcodes/seq_length/index.html | 746 ++ opcodes/seq_position/index.html | 782 ++ opcodes/set_ccN/index.html | 719 ++ opcodes/set_hdccN/index.html | 724 ++ opcodes/set_realccN/index.html | 724 ++ opcodes/sostenuto_cc/index.html | 719 ++ opcodes/sostenuto_lo/index.html | 725 ++ opcodes/sostenuto_sw/index.html | 716 ++ opcodes/start_hiccN/index.html | 732 ++ opcodes/start_hihdccN/index.html | 717 ++ opcodes/start_loccN/index.html | 732 ++ opcodes/start_lohdccN/index.html | 717 ++ opcodes/static_cyclic_level/index.html | 715 ++ opcodes/static_cyclic_time/index.html | 715 ++ opcodes/static_filter/index.html | 716 ++ opcodes/static_level/index.html | 730 ++ opcodes/static_level_onccN/index.html | 730 ++ opcodes/static_random_level/index.html | 715 ++ opcodes/static_random_maxtime/index.html | 715 ++ opcodes/static_random_mintime/index.html | 715 ++ opcodes/static_stereo/index.html | 715 ++ opcodes/static_tone/index.html | 715 ++ opcodes/stop_beats/index.html | 723 ++ opcodes/stop_hiccN/index.html | 718 ++ opcodes/stop_hihdccN/index.html | 715 ++ opcodes/stop_loccN/index.html | 718 ++ opcodes/stop_lohdccN/index.html | 715 ++ opcodes/strings_number/index.html | 715 ++ opcodes/strings_wet_onccN/index.html | 715 ++ opcodes/sustain_cc/index.html | 719 ++ opcodes/sustain_lo/index.html | 733 ++ opcodes/sustain_sw/index.html | 716 ++ opcodes/sw_default/index.html | 743 ++ opcodes/sw_down/index.html | 735 ++ opcodes/sw_hikey/index.html | 730 ++ opcodes/sw_hilast/index.html | 723 ++ opcodes/sw_label/index.html | 743 ++ opcodes/sw_last/index.html | 748 ++ opcodes/sw_lokey/index.html | 730 ++ opcodes/sw_lolast/index.html | 723 ++ opcodes/sw_note_offset/index.html | 715 ++ opcodes/sw_octave_offset/index.html | 715 ++ opcodes/sw_previous/index.html | 722 ++ opcodes/sw_up/index.html | 735 ++ opcodes/sw_vel/index.html | 734 ++ opcodes/sync_beats/index.html | 724 ++ opcodes/sync_offset/index.html | 725 ++ opcodes/tdfir_dry/index.html | 730 ++ opcodes/tdfir_dry_onccN/index.html | 730 ++ opcodes/tdfir_gain/index.html | 715 ++ opcodes/tdfir_impulse/index.html | 715 ++ opcodes/tdfir_wet/index.html | 730 ++ opcodes/tdfir_wet_onccN/index.html | 730 ++ opcodes/transpose/index.html | 724 ++ opcodes/trigger/index.html | 809 ++ opcodes/tune/index.html | 777 ++ opcodes/tune_ccN/index.html | 777 ++ opcodes/tune_curveccN/index.html | 777 ++ opcodes/tune_keytrack/index.html | 725 ++ opcodes/tune_onccN/index.html | 777 ++ opcodes/tune_random/index.html | 736 ++ opcodes/tune_smoothccN/index.html | 777 ++ opcodes/tune_stepccN/index.html | 777 ++ opcodes/tune_veltrack/index.html | 721 ++ opcodes/type/index.html | 909 ++ opcodes/vN/index.html | 748 ++ opcodes/vNNN/index.html | 748 ++ opcodes/varNN_/index.html | 739 ++ opcodes/varNN_curveccX/index.html | 761 ++ opcodes/varNN_mod/index.html | 761 ++ opcodes/varNN_onccX/index.html | 761 ++ opcodes/vendor_specific/index.html | 715 ++ opcodes/volume/index.html | 776 ++ opcodes/volume_curveccN/index.html | 776 ++ opcodes/volume_onccN/index.html | 776 ++ opcodes/volume_smoothccN/index.html | 776 ++ opcodes/volume_stepccN/index.html | 776 ++ opcodes/waveguide/index.html | 718 ++ opcodes/width/index.html | 773 ++ opcodes/width_curveccN/index.html | 773 ++ opcodes/width_onccN/index.html | 773 ++ opcodes/width_smoothccN/index.html | 773 ++ opcodes/width_stepccN/index.html | 773 ++ opcodes/xf_cccurve/index.html | 722 ++ opcodes/xf_keycurve/index.html | 722 ++ opcodes/xf_velcurve/index.html | 722 ++ opcodes/xfin_hiccN/index.html | 737 ++ opcodes/xfin_hikey/index.html | 721 ++ opcodes/xfin_hivel/index.html | 724 ++ opcodes/xfin_loccN/index.html | 737 ++ opcodes/xfin_lokey/index.html | 721 ++ opcodes/xfin_lovel/index.html | 724 ++ opcodes/xfout_hiccN/index.html | 723 ++ opcodes/xfout_hikey/index.html | 724 ++ opcodes/xfout_hivel/index.html | 721 ++ opcodes/xfout_loccN/index.html | 723 ++ opcodes/xfout_lokey/index.html | 724 ++ opcodes/xfout_lovel/index.html | 721 ++ robots.txt | 2 + search/lunr.js | 3475 +++++++ search/main.js | 109 + search/search_index.json | 1 + search/worker.js | 133 + sitemap.xml | 4583 +++++++++ sitemap.xml.gz | Bin 0 -> 4662 bytes software/engines/index.html | 732 ++ software/players/index.html | 945 ++ software/tools/index.html | 1031 ++ tutorials/basic_sfz_file/index.html | 729 ++ tutorials/basics/index.html | 1105 +++ tutorials/brush_stirs/index.html | 1069 +++ tutorials/cymbal_muting/index.html | 1626 ++++ tutorials/drum_basics/index.html | 904 ++ tutorials/envelope_generators/index.html | 814 ++ tutorials/epic_drums/index.html | 749 ++ tutorials/legato/index.html | 938 ++ tutorials/lfo/index.html | 720 ++ tutorials/modular_instruments/index.html | 968 ++ tutorials/range_extension/index.html | 882 ++ tutorials/sfz1_modulations/index.html | 779 ++ tutorials/sfz2_modulations/index.html | 979 ++ tutorials/strum/index.html | 1401 +++ tutorials/subtractive_synths/index.html | 1247 +++ tutorials/sustained_note_basics/index.html | 859 ++ tutorials/unison/index.html | 1295 +++ tutorials/vibrato/index.html | 998 ++ tutorials/videos/index.html | 702 ++ tutorials/volume/index.html | 806 ++ versions/index.html | 710 ++ 1000 files changed, 738743 insertions(+) create mode 100644 .nojekyll create mode 100644 CNAME create mode 100644 assets/css/bootstrap-table-filter-control.min.css create mode 100644 assets/css/bootstrap-table.min.css create mode 100644 assets/css/brands.min.css create mode 100644 assets/css/fontawesome.min.css create mode 100644 assets/css/fork-awesome.min.css create mode 100644 assets/css/fork-awesome.min.css.map create mode 100644 assets/css/github-dark-dimmed.min.css create mode 100644 assets/css/github.min.css create mode 100644 assets/css/solid.min.css create mode 100644 assets/css/style.min.css create mode 100644 assets/css/style.min.css.map create mode 100644 assets/css/v4-font-face.min.css create mode 100644 assets/ico/android-chrome-144x144.png create mode 100644 assets/ico/apple-touch-icon.png create mode 100644 assets/ico/browserconfig.xml create mode 100644 assets/ico/favicon-16x16.png create mode 100644 assets/ico/favicon-32x32.png create mode 100644 assets/ico/favicon.ico create mode 100644 assets/ico/mstile-150x150.png create mode 100644 assets/ico/safari-pinned-tab.svg create mode 100644 assets/ico/site.webmanifest create mode 100644 assets/img/ampeg_attack_shape/sine_0.jpg create mode 100644 assets/img/ampeg_attack_shape/sine_neg3p8.jpg create mode 100644 assets/img/ampeg_attack_shape/sine_neg8.jpg create mode 100644 assets/img/ampeg_attack_shape/sine_pos2p1.jpg create mode 100644 assets/img/ampeg_attack_shape/sine_pos8.jpg create mode 100644 assets/img/ampeg_decay_shape/sine_0.jpg create mode 100644 assets/img/ampeg_decay_shape/sine_neg3p8.jpg create mode 100644 assets/img/ampeg_decay_shape/sine_neg8.jpg create mode 100644 assets/img/ampeg_decay_shape/sine_pos2p1.jpg create mode 100644 assets/img/ampeg_decay_shape/sine_pos8.jpg create mode 100644 assets/img/ampeg_env.jpg create mode 100644 assets/img/effect/routing.svg create mode 100644 assets/img/logo.svg create mode 100644 assets/img/opcodes/label_cc.jpg create mode 100644 assets/img/opcodes/labels.jpg create mode 100644 assets/img/opcodes/sw_label.jpg create mode 100644 assets/img/tutorials/brush_stirs/stir1.jpg create mode 100644 assets/img/tutorials/brush_stirs/stir2.jpg create mode 100644 assets/img/tutorials/brush_stirs/stir3.jpg create mode 100644 assets/img/tutorials/brush_stirs/stir4.jpg create mode 100644 assets/img/tutorials/brush_stirs/temp.txt create mode 100644 assets/js/amp_velcurve_N_gen.js create mode 100644 assets/js/anchor.min.js create mode 100644 assets/js/base.min.js create mode 100644 assets/js/bash.min.js create mode 100644 assets/js/bootstrap-table-filter-control.min.js create mode 100644 assets/js/bootstrap-table.min.js create mode 100644 assets/js/bootstrap.min.js create mode 100644 assets/js/color-modes.js create mode 100644 assets/js/cpp.min.js create mode 100644 assets/js/highlight.min.js create mode 100644 assets/js/index.bundle.min.js create mode 100644 assets/js/index.bundle.min.js.map create mode 100644 assets/js/jquery.min.js create mode 100644 assets/js/jquery.min.map create mode 100644 assets/js/mermaid.min.js create mode 100644 assets/js/opcodes_table_filters.js create mode 100644 assets/js/popper.min.js create mode 100644 assets/js/popper.min.js.map create mode 100644 assets/js/scroll-to-top.min.js create mode 100644 assets/js/sfz.min.js create mode 100644 assets/src/exs2sfz.py create mode 100644 assets/src/makesample.c create mode 100644 assets/webfonts/fa-brands-400.ttf create mode 100644 assets/webfonts/fa-brands-400.woff2 create mode 100644 assets/webfonts/fa-regular-400.ttf create mode 100644 assets/webfonts/fa-regular-400.woff2 create mode 100644 assets/webfonts/fa-solid-900.ttf create mode 100644 assets/webfonts/fa-solid-900.woff2 create mode 100644 assets/webfonts/fa-v4compatibility.ttf create mode 100644 assets/webfonts/fa-v4compatibility.woff2 create mode 100644 atom.xml create mode 100644 extensions/aria/xml_instrument_bank/index.html create mode 100644 extensions/midi_ccs/index.html create mode 100644 headers/control/index.html create mode 100644 headers/curve/index.html create mode 100644 headers/effect/index.html create mode 100644 headers/global/index.html create mode 100644 headers/group/index.html create mode 100644 headers/index.html create mode 100644 headers/master/index.html create mode 100644 headers/midi/index.html create mode 100644 headers/region/index.html create mode 100644 headers/sample/index.html create mode 100644 index.html create mode 100644 legacy/background.gif create mode 100644 legacy/index.html create mode 100644 misc/all_opcodes/index.html create mode 100644 misc/amp_velcurve_N_gen/index.html create mode 100644 misc/aria/index.html create mode 100644 misc/categories/index.html create mode 100644 misc/sfz1/index.html create mode 100644 misc/sfz2/index.html create mode 100644 modulations/curveccN/index.html create mode 100644 modulations/envelope_generators/index.html create mode 100644 modulations/icurveccN/index.html create mode 100644 modulations/index.html create mode 100644 modulations/lfo/index.html create mode 100644 modulations/moved/ampeg_vel2attack/index.html create mode 100644 modulations/moved/ampeg_vel2decay/index.html create mode 100644 modulations/moved/ampeg_vel2delay/index.html create mode 100644 modulations/moved/ampeg_vel2hold/index.html create mode 100644 modulations/moved/ampeg_vel2release/index.html create mode 100644 modulations/moved/ampeg_vel2sustain/index.html create mode 100644 modulations/moved/amplfo_depthchanaft/index.html create mode 100644 modulations/moved/amplfo_depthpolyaft/index.html create mode 100644 modulations/moved/amplfo_freqchanaft/index.html create mode 100644 modulations/moved/amplfo_freqpolyaft/index.html create mode 100644 modulations/moved/eqN_vel2freq/index.html create mode 100644 modulations/smoothccN/index.html create mode 100644 modulations/stepccN/index.html create mode 100644 modulations/vel2/index.html create mode 100644 news/index.html create mode 100644 news/posts/2019-04-23-new-website-launched/index.html create mode 100644 news/posts/2019-07-25-new-tutorial/index.html create mode 100644 news/posts/2019-08-01-modulation_explained/index.html create mode 100644 news/posts/2019-09-16-sfz-page-on-italian-wikipedia/index.html create mode 100644 news/posts/2019-11-16-new-players-and-tutorial/index.html create mode 100644 news/posts/2019-11-21-legato-tutorial/index.html create mode 100644 news/posts/2019-12-29-happy-new-year/index.html create mode 100644 news/posts/2020-01-31-new-year-new-work-in-progress/index.html create mode 100644 news/posts/2020-03-17-new-tutorial-and-opcode-additions/index.html create mode 100644 news/posts/2020-10-16-opcodes-page-update/index.html create mode 100644 news/posts/2023-06-03-bootstrap-530-with-color-modes/index.html create mode 100644 opcodes/_mod/index.html create mode 100644 opcodes/amp_attack/index.html create mode 100644 opcodes/amp_decay/index.html create mode 100644 opcodes/amp_delay/index.html create mode 100644 opcodes/amp_hold/index.html create mode 100644 opcodes/amp_keycenter/index.html create mode 100644 opcodes/amp_keytrack/index.html create mode 100644 opcodes/amp_random/index.html create mode 100644 opcodes/amp_release/index.html create mode 100644 opcodes/amp_sustain/index.html create mode 100644 opcodes/amp_vel2attack/index.html create mode 100644 opcodes/amp_vel2decay/index.html create mode 100644 opcodes/amp_vel2delay/index.html create mode 100644 opcodes/amp_vel2hold/index.html create mode 100644 opcodes/amp_vel2release/index.html create mode 100644 opcodes/amp_vel2sustain/index.html create mode 100644 opcodes/amp_velcurve_N/index.html create mode 100644 opcodes/amp_veltrack/index.html create mode 100644 opcodes/amp_veltrack_ccN/index.html create mode 100644 opcodes/amp_veltrack_curveccN/index.html create mode 100644 opcodes/amp_veltrack_onccN/index.html create mode 100644 opcodes/amp_veltrack_random/index.html create mode 100644 opcodes/ampeg_attack/index.html create mode 100644 opcodes/ampeg_attack_curveccN/index.html create mode 100644 opcodes/ampeg_attack_onccN/index.html create mode 100644 opcodes/ampeg_attack_shape/index.html create mode 100644 opcodes/ampeg_attackccN/index.html create mode 100644 opcodes/ampeg_decay/index.html create mode 100644 opcodes/ampeg_decay_curveccN/index.html create mode 100644 opcodes/ampeg_decay_onccN/index.html create mode 100644 opcodes/ampeg_decay_shape/index.html create mode 100644 opcodes/ampeg_decay_zero/index.html create mode 100644 opcodes/ampeg_decayccN/index.html create mode 100644 opcodes/ampeg_delay/index.html create mode 100644 opcodes/ampeg_delay_curveccN/index.html create mode 100644 opcodes/ampeg_delay_onccN/index.html create mode 100644 opcodes/ampeg_delayccN/index.html create mode 100644 opcodes/ampeg_dynamic/index.html create mode 100644 opcodes/ampeg_hold/index.html create mode 100644 opcodes/ampeg_hold_curveccN/index.html create mode 100644 opcodes/ampeg_hold_onccN/index.html create mode 100644 opcodes/ampeg_holdccN/index.html create mode 100644 opcodes/ampeg_release/index.html create mode 100644 opcodes/ampeg_release_curveccN/index.html create mode 100644 opcodes/ampeg_release_onccN/index.html create mode 100644 opcodes/ampeg_release_shape/index.html create mode 100644 opcodes/ampeg_release_zero/index.html create mode 100644 opcodes/ampeg_releaseccN/index.html create mode 100644 opcodes/ampeg_start/index.html create mode 100644 opcodes/ampeg_start_curveccN/index.html create mode 100644 opcodes/ampeg_start_onccN/index.html create mode 100644 opcodes/ampeg_startccN/index.html create mode 100644 opcodes/ampeg_sustain/index.html create mode 100644 opcodes/ampeg_sustain_curveccN/index.html create mode 100644 opcodes/ampeg_sustain_onccN/index.html create mode 100644 opcodes/ampeg_sustainccN/index.html create mode 100644 opcodes/ampeg_vel2attack/index.html create mode 100644 opcodes/ampeg_vel2decay/index.html create mode 100644 opcodes/ampeg_vel2delay/index.html create mode 100644 opcodes/ampeg_vel2hold/index.html create mode 100644 opcodes/ampeg_vel2release/index.html create mode 100644 opcodes/ampeg_vel2sustain/index.html create mode 100644 opcodes/amplfo_delay/index.html create mode 100644 opcodes/amplfo_depth/index.html create mode 100644 opcodes/amplfo_depth_onccN/index.html create mode 100644 opcodes/amplfo_depthccN/index.html create mode 100644 opcodes/amplfo_depthchanaft/index.html create mode 100644 opcodes/amplfo_depthpolyaft/index.html create mode 100644 opcodes/amplfo_fade/index.html create mode 100644 opcodes/amplfo_freq/index.html create mode 100644 opcodes/amplfo_freqccN/index.html create mode 100644 opcodes/amplfo_freqchanaft/index.html create mode 100644 opcodes/amplfo_freqpolyaft/index.html create mode 100644 opcodes/amplitude/index.html create mode 100644 opcodes/amplitude_ccN/index.html create mode 100644 opcodes/amplitude_curveccN/index.html create mode 100644 opcodes/amplitude_onccN/index.html create mode 100644 opcodes/amplitude_smoothccN/index.html create mode 100644 opcodes/apan_depth/index.html create mode 100644 opcodes/apan_depth_onccN/index.html create mode 100644 opcodes/apan_dry/index.html create mode 100644 opcodes/apan_dry_onccN/index.html create mode 100644 opcodes/apan_freq/index.html create mode 100644 opcodes/apan_freq_onccN/index.html create mode 100644 opcodes/apan_phase/index.html create mode 100644 opcodes/apan_phase_onccN/index.html create mode 100644 opcodes/apan_waveform/index.html create mode 100644 opcodes/apan_wet/index.html create mode 100644 opcodes/apan_wet_onccN/index.html create mode 100644 opcodes/bend_down/index.html create mode 100644 opcodes/bend_smooth/index.html create mode 100644 opcodes/bend_step/index.html create mode 100644 opcodes/bend_stepdown/index.html create mode 100644 opcodes/bend_stepup/index.html create mode 100644 opcodes/bend_up/index.html create mode 100644 opcodes/benddown/index.html create mode 100644 opcodes/bendstep/index.html create mode 100644 opcodes/bendup/index.html create mode 100644 opcodes/bitred/index.html create mode 100644 opcodes/bitred_curveccN/index.html create mode 100644 opcodes/bitred_onccN/index.html create mode 100644 opcodes/bitred_smoothccN/index.html create mode 100644 opcodes/bitred_stepccN/index.html create mode 100644 opcodes/bus/index.html create mode 100644 opcodes/bypass_onccN/index.html create mode 100644 opcodes/comp_attack/index.html create mode 100644 opcodes/comp_gain/index.html create mode 100644 opcodes/comp_ratio/index.html create mode 100644 opcodes/comp_release/index.html create mode 100644 opcodes/comp_stlink/index.html create mode 100644 opcodes/comp_threshold/index.html create mode 100644 opcodes/count/index.html create mode 100644 opcodes/curve_index/index.html create mode 100644 opcodes/cutoff/index.html create mode 100644 opcodes/cutoff2/index.html create mode 100644 opcodes/cutoff2_ccN/index.html create mode 100644 opcodes/cutoff2_chanaft/index.html create mode 100644 opcodes/cutoff2_curveccN/index.html create mode 100644 opcodes/cutoff2_onccN/index.html create mode 100644 opcodes/cutoff2_polyaft/index.html create mode 100644 opcodes/cutoff2_random/index.html create mode 100644 opcodes/cutoff2_smoothccN/index.html create mode 100644 opcodes/cutoff2_stepccN/index.html create mode 100644 opcodes/cutoff_ccN/index.html create mode 100644 opcodes/cutoff_chanaft/index.html create mode 100644 opcodes/cutoff_curveccN/index.html create mode 100644 opcodes/cutoff_onccN/index.html create mode 100644 opcodes/cutoff_polyaft/index.html create mode 100644 opcodes/cutoff_random/index.html create mode 100644 opcodes/cutoff_smoothccN/index.html create mode 100644 opcodes/cutoff_stepccN/index.html create mode 100644 opcodes/decim/index.html create mode 100644 opcodes/decim_curveccN/index.html create mode 100644 opcodes/decim_onccN/index.html create mode 100644 opcodes/decim_smoothccN/index.html create mode 100644 opcodes/decim_stepccN/index.html create mode 100644 opcodes/default_path/index.html create mode 100644 opcodes/define/index.html create mode 100644 opcodes/delay/index.html create mode 100644 opcodes/delay_beats/index.html create mode 100644 opcodes/delay_beats_curveccN/index.html create mode 100644 opcodes/delay_beats_onccN/index.html create mode 100644 opcodes/delay_beats_random/index.html create mode 100644 opcodes/delay_ccN/index.html create mode 100644 opcodes/delay_curveccN/index.html create mode 100644 opcodes/delay_cutoff/index.html create mode 100644 opcodes/delay_cutoff_onccN/index.html create mode 100644 opcodes/delay_damphi/index.html create mode 100644 opcodes/delay_damphi_onccN/index.html create mode 100644 opcodes/delay_damplo/index.html create mode 100644 opcodes/delay_damplo_onccN/index.html create mode 100644 opcodes/delay_dry/index.html create mode 100644 opcodes/delay_dry_onccN/index.html create mode 100644 opcodes/delay_feedback/index.html create mode 100644 opcodes/delay_feedback_onccN/index.html create mode 100644 opcodes/delay_filter/index.html create mode 100644 opcodes/delay_input/index.html create mode 100644 opcodes/delay_input_onccN/index.html create mode 100644 opcodes/delay_levelc/index.html create mode 100644 opcodes/delay_levell/index.html create mode 100644 opcodes/delay_levelr/index.html create mode 100644 opcodes/delay_lfofreq/index.html create mode 100644 opcodes/delay_lfofreq_onccN/index.html create mode 100644 opcodes/delay_moddepth/index.html create mode 100644 opcodes/delay_moddepth_onccN/index.html create mode 100644 opcodes/delay_mode/index.html create mode 100644 opcodes/delay_onccN/index.html create mode 100644 opcodes/delay_panc/index.html create mode 100644 opcodes/delay_panc_onccN/index.html create mode 100644 opcodes/delay_panl/index.html create mode 100644 opcodes/delay_panl_onccN/index.html create mode 100644 opcodes/delay_panr/index.html create mode 100644 opcodes/delay_panr_onccN/index.html create mode 100644 opcodes/delay_random/index.html create mode 100644 opcodes/delay_resonance/index.html create mode 100644 opcodes/delay_resonance_onccN/index.html create mode 100644 opcodes/delay_samples/index.html create mode 100644 opcodes/delay_samples_onccN/index.html create mode 100644 opcodes/delay_spread/index.html create mode 100644 opcodes/delay_spread_onccN/index.html create mode 100644 opcodes/delay_syncc_onccN/index.html create mode 100644 opcodes/delay_syncl_onccN/index.html create mode 100644 opcodes/delay_syncr_onccN/index.html create mode 100644 opcodes/delay_time_tap/index.html create mode 100644 opcodes/delay_timec/index.html create mode 100644 opcodes/delay_timec_onccN/index.html create mode 100644 opcodes/delay_timel/index.html create mode 100644 opcodes/delay_timel_onccN/index.html create mode 100644 opcodes/delay_timer/index.html create mode 100644 opcodes/delay_timer_onccN/index.html create mode 100644 opcodes/delay_wet/index.html create mode 100644 opcodes/delay_wet_onccN/index.html create mode 100644 opcodes/direction/index.html create mode 100644 opcodes/directtomain/index.html create mode 100644 opcodes/disto_depth/index.html create mode 100644 opcodes/disto_depth_onccN/index.html create mode 100644 opcodes/disto_dry/index.html create mode 100644 opcodes/disto_dry_onccN/index.html create mode 100644 opcodes/disto_stages/index.html create mode 100644 opcodes/disto_tone/index.html create mode 100644 opcodes/disto_tone_onccN/index.html create mode 100644 opcodes/disto_wet/index.html create mode 100644 opcodes/disto_wet_onccN/index.html create mode 100644 opcodes/dsp_order/index.html create mode 100644 opcodes/effect1/index.html create mode 100644 opcodes/effect2/index.html create mode 100644 opcodes/effect3/index.html create mode 100644 opcodes/effect4/index.html create mode 100644 opcodes/egN_ampeg/index.html create mode 100644 opcodes/egN_amplitude/index.html create mode 100644 opcodes/egN_amplitude_onccX/index.html create mode 100644 opcodes/egN_bitred/index.html create mode 100644 opcodes/egN_bitred_onccX/index.html create mode 100644 opcodes/egN_curveX/index.html create mode 100644 opcodes/egN_cutoff/index.html create mode 100644 opcodes/egN_cutoff2/index.html create mode 100644 opcodes/egN_cutoff2_onccX/index.html create mode 100644 opcodes/egN_cutoff_onccX/index.html create mode 100644 opcodes/egN_decim/index.html create mode 100644 opcodes/egN_decim_onccX/index.html create mode 100644 opcodes/egN_depth_lfoX/index.html create mode 100644 opcodes/egN_depthadd_lfoX/index.html create mode 100644 opcodes/egN_driveshape/index.html create mode 100644 opcodes/egN_driveshape_onccX/index.html create mode 100644 opcodes/egN_dynamic/index.html create mode 100644 opcodes/egN_eqXbw/index.html create mode 100644 opcodes/egN_eqXbw_onccY/index.html create mode 100644 opcodes/egN_eqXfreq/index.html create mode 100644 opcodes/egN_eqXfreq_onccY/index.html create mode 100644 opcodes/egN_eqXgain/index.html create mode 100644 opcodes/egN_eqXgain_onccY/index.html create mode 100644 opcodes/egN_freq_lfoX/index.html create mode 100644 opcodes/egN_levelX/index.html create mode 100644 opcodes/egN_levelX_onccY/index.html create mode 100644 opcodes/egN_loop/index.html create mode 100644 opcodes/egN_loop_count/index.html create mode 100644 opcodes/egN_noiselevel/index.html create mode 100644 opcodes/egN_noiselevel_onccX/index.html create mode 100644 opcodes/egN_noisestep/index.html create mode 100644 opcodes/egN_noisestep_onccX/index.html create mode 100644 opcodes/egN_noisetone/index.html create mode 100644 opcodes/egN_noisetone_onccX/index.html create mode 100644 opcodes/egN_pan/index.html create mode 100644 opcodes/egN_pan_curve/index.html create mode 100644 opcodes/egN_pan_curveccX/index.html create mode 100644 opcodes/egN_pan_onccX/index.html create mode 100644 opcodes/egN_pitch/index.html create mode 100644 opcodes/egN_pitch_onccX/index.html create mode 100644 opcodes/egN_points/index.html create mode 100644 opcodes/egN_rectify/index.html create mode 100644 opcodes/egN_rectify_onccX/index.html create mode 100644 opcodes/egN_resonance/index.html create mode 100644 opcodes/egN_resonance2/index.html create mode 100644 opcodes/egN_resonance2_onccX/index.html create mode 100644 opcodes/egN_resonance_onccX/index.html create mode 100644 opcodes/egN_ringmod/index.html create mode 100644 opcodes/egN_ringmod_onccX/index.html create mode 100644 opcodes/egN_shapeX/index.html create mode 100644 opcodes/egN_sustain/index.html create mode 100644 opcodes/egN_timeX/index.html create mode 100644 opcodes/egN_timeX_onccY/index.html create mode 100644 opcodes/egN_volume/index.html create mode 100644 opcodes/egN_volume_onccX/index.html create mode 100644 opcodes/egN_width/index.html create mode 100644 opcodes/egN_width_onccX/index.html create mode 100644 opcodes/end/index.html create mode 100644 opcodes/eqN_bw/index.html create mode 100644 opcodes/eqN_bw_onccX/index.html create mode 100644 opcodes/eqN_bwccX/index.html create mode 100644 opcodes/eqN_freq/index.html create mode 100644 opcodes/eqN_freq_onccX/index.html create mode 100644 opcodes/eqN_freqccX/index.html create mode 100644 opcodes/eqN_gain/index.html create mode 100644 opcodes/eqN_gain_onccX/index.html create mode 100644 opcodes/eqN_gainccX/index.html create mode 100644 opcodes/eqN_type/index.html create mode 100644 opcodes/eqN_vel2freq/index.html create mode 100644 opcodes/eqN_vel2gain/index.html create mode 100644 opcodes/eq_bw/index.html create mode 100644 opcodes/eq_bw_onccN/index.html create mode 100644 opcodes/eq_freq/index.html create mode 100644 opcodes/eq_freq_onccN/index.html create mode 100644 opcodes/eq_gain/index.html create mode 100644 opcodes/eq_gain_onccN/index.html create mode 100644 opcodes/eq_type/index.html create mode 100644 opcodes/fil2_gain/index.html create mode 100644 opcodes/fil2_gain_onccN/index.html create mode 100644 opcodes/fil2_keycenter/index.html create mode 100644 opcodes/fil2_keytrack/index.html create mode 100644 opcodes/fil2_type/index.html create mode 100644 opcodes/fil2_veltrack/index.html create mode 100644 opcodes/fil_attack/index.html create mode 100644 opcodes/fil_decay/index.html create mode 100644 opcodes/fil_delay/index.html create mode 100644 opcodes/fil_depth/index.html create mode 100644 opcodes/fil_gain/index.html create mode 100644 opcodes/fil_gain_onccN/index.html create mode 100644 opcodes/fil_hold/index.html create mode 100644 opcodes/fil_keycenter/index.html create mode 100644 opcodes/fil_keytrack/index.html create mode 100644 opcodes/fil_random/index.html create mode 100644 opcodes/fil_release/index.html create mode 100644 opcodes/fil_sustain/index.html create mode 100644 opcodes/fil_type/index.html create mode 100644 opcodes/fil_vel2attack/index.html create mode 100644 opcodes/fil_vel2decay/index.html create mode 100644 opcodes/fil_vel2delay/index.html create mode 100644 opcodes/fil_vel2depth/index.html create mode 100644 opcodes/fil_vel2hold/index.html create mode 100644 opcodes/fil_vel2release/index.html create mode 100644 opcodes/fil_vel2sustain/index.html create mode 100644 opcodes/fil_veltrack/index.html create mode 100644 opcodes/fileg_attack/index.html create mode 100644 opcodes/fileg_attack_curveccN/index.html create mode 100644 opcodes/fileg_attack_onccN/index.html create mode 100644 opcodes/fileg_attack_shape/index.html create mode 100644 opcodes/fileg_attackccN/index.html create mode 100644 opcodes/fileg_decay/index.html create mode 100644 opcodes/fileg_decay_curveccN/index.html create mode 100644 opcodes/fileg_decay_onccN/index.html create mode 100644 opcodes/fileg_decay_shape/index.html create mode 100644 opcodes/fileg_decay_zero/index.html create mode 100644 opcodes/fileg_decayccN/index.html create mode 100644 opcodes/fileg_delay/index.html create mode 100644 opcodes/fileg_delay_curveccN/index.html create mode 100644 opcodes/fileg_delay_onccN/index.html create mode 100644 opcodes/fileg_delayccN/index.html create mode 100644 opcodes/fileg_depth/index.html create mode 100644 opcodes/fileg_depth_curveccN/index.html create mode 100644 opcodes/fileg_depth_onccN/index.html create mode 100644 opcodes/fileg_depthccN/index.html create mode 100644 opcodes/fileg_dynamic/index.html create mode 100644 opcodes/fileg_hold/index.html create mode 100644 opcodes/fileg_hold_curveccN/index.html create mode 100644 opcodes/fileg_hold_onccN/index.html create mode 100644 opcodes/fileg_holdccN/index.html create mode 100644 opcodes/fileg_release/index.html create mode 100644 opcodes/fileg_release_curveccN/index.html create mode 100644 opcodes/fileg_release_onccN/index.html create mode 100644 opcodes/fileg_release_shape/index.html create mode 100644 opcodes/fileg_release_zero/index.html create mode 100644 opcodes/fileg_releaseccN/index.html create mode 100644 opcodes/fileg_start/index.html create mode 100644 opcodes/fileg_start_curveccN/index.html create mode 100644 opcodes/fileg_start_onccN/index.html create mode 100644 opcodes/fileg_startccN/index.html create mode 100644 opcodes/fileg_sustain/index.html create mode 100644 opcodes/fileg_sustain_curveccN/index.html create mode 100644 opcodes/fileg_sustain_onccN/index.html create mode 100644 opcodes/fileg_sustainccN/index.html create mode 100644 opcodes/fileg_vel2attack/index.html create mode 100644 opcodes/fileg_vel2decay/index.html create mode 100644 opcodes/fileg_vel2delay/index.html create mode 100644 opcodes/fileg_vel2depth/index.html create mode 100644 opcodes/fileg_vel2hold/index.html create mode 100644 opcodes/fileg_vel2release/index.html create mode 100644 opcodes/fileg_vel2sustain/index.html create mode 100644 opcodes/fillfo_delay/index.html create mode 100644 opcodes/fillfo_depth/index.html create mode 100644 opcodes/fillfo_depth_onccN/index.html create mode 100644 opcodes/fillfo_depthccN/index.html create mode 100644 opcodes/fillfo_depthchanaft/index.html create mode 100644 opcodes/fillfo_depthpolyaft/index.html create mode 100644 opcodes/fillfo_fade/index.html create mode 100644 opcodes/fillfo_freq/index.html create mode 100644 opcodes/fillfo_freqccN/index.html create mode 100644 opcodes/fillfo_freqchanaft/index.html create mode 100644 opcodes/fillfo_freqpolyaft/index.html create mode 100644 opcodes/filter_cutoff/index.html create mode 100644 opcodes/filter_cutoff_onccN/index.html create mode 100644 opcodes/filter_resonance/index.html create mode 100644 opcodes/filter_resonance_onccN/index.html create mode 100644 opcodes/filter_type/index.html create mode 100644 opcodes/filtype/index.html create mode 100644 opcodes/fxNtomain/index.html create mode 100644 opcodes/fxNtomix/index.html create mode 100644 opcodes/gain_ccN/index.html create mode 100644 opcodes/gain_onccN/index.html create mode 100644 opcodes/gain_random/index.html create mode 100644 opcodes/gate_attack/index.html create mode 100644 opcodes/gate_onccN/index.html create mode 100644 opcodes/gate_release/index.html create mode 100644 opcodes/gate_stlink/index.html create mode 100644 opcodes/gate_threshold/index.html create mode 100644 opcodes/global_amplitude/index.html create mode 100644 opcodes/global_label/index.html create mode 100644 opcodes/global_tune/index.html create mode 100644 opcodes/global_volume/index.html create mode 100644 opcodes/group/index.html create mode 100644 opcodes/group_amplitude/index.html create mode 100644 opcodes/group_label/index.html create mode 100644 opcodes/group_tune/index.html create mode 100644 opcodes/group_volume/index.html create mode 100644 opcodes/hibend/index.html create mode 100644 opcodes/hibpm/index.html create mode 100644 opcodes/hiccN/index.html create mode 100644 opcodes/hichan/index.html create mode 100644 opcodes/hichanaft/index.html create mode 100644 opcodes/hihdccN/index.html create mode 100644 opcodes/hikey/index.html create mode 100644 opcodes/hint_/index.html create mode 100644 opcodes/hipolyaft/index.html create mode 100644 opcodes/hiprog/index.html create mode 100644 opcodes/hirand/index.html create mode 100644 opcodes/hitimer/index.html create mode 100644 opcodes/hivel/index.html create mode 100644 opcodes/image/index.html create mode 100644 opcodes/include/index.html create mode 100644 opcodes/index.html create mode 100644 opcodes/internal/index.html create mode 100644 opcodes/key/index.html create mode 100644 opcodes/label_ccN/index.html create mode 100644 opcodes/label_keyN/index.html create mode 100644 opcodes/label_outputN/index.html create mode 100644 opcodes/lfoN_amplitude/index.html create mode 100644 opcodes/lfoN_amplitude_onccX/index.html create mode 100644 opcodes/lfoN_amplitude_smoothccX/index.html create mode 100644 opcodes/lfoN_amplitude_stepccX/index.html create mode 100644 opcodes/lfoN_bitred/index.html create mode 100644 opcodes/lfoN_bitred_onccX/index.html create mode 100644 opcodes/lfoN_bitred_smoothccX/index.html create mode 100644 opcodes/lfoN_bitred_stepccX/index.html create mode 100644 opcodes/lfoN_count/index.html create mode 100644 opcodes/lfoN_cutoff/index.html create mode 100644 opcodes/lfoN_cutoff2/index.html create mode 100644 opcodes/lfoN_cutoff2_onccX/index.html create mode 100644 opcodes/lfoN_cutoff2_smoothccX/index.html create mode 100644 opcodes/lfoN_cutoff2_stepccX/index.html create mode 100644 opcodes/lfoN_cutoff_onccX/index.html create mode 100644 opcodes/lfoN_cutoff_smoothccX/index.html create mode 100644 opcodes/lfoN_cutoff_stepccX/index.html create mode 100644 opcodes/lfoN_decim/index.html create mode 100644 opcodes/lfoN_decim_onccX/index.html create mode 100644 opcodes/lfoN_decim_smoothccX/index.html create mode 100644 opcodes/lfoN_decim_stepccX/index.html create mode 100644 opcodes/lfoN_delay/index.html create mode 100644 opcodes/lfoN_delay_onccX/index.html create mode 100644 opcodes/lfoN_depth_lfoX/index.html create mode 100644 opcodes/lfoN_depthadd_lfoX/index.html create mode 100644 opcodes/lfoN_drive/index.html create mode 100644 opcodes/lfoN_drive_onccX/index.html create mode 100644 opcodes/lfoN_drive_smoothccX/index.html create mode 100644 opcodes/lfoN_drive_stepccX/index.html create mode 100644 opcodes/lfoN_eqXbw/index.html create mode 100644 opcodes/lfoN_eqXbw_onccY/index.html create mode 100644 opcodes/lfoN_eqXbw_smoothccY/index.html create mode 100644 opcodes/lfoN_eqXbw_stepccY/index.html create mode 100644 opcodes/lfoN_eqXfreq/index.html create mode 100644 opcodes/lfoN_eqXfreq_onccY/index.html create mode 100644 opcodes/lfoN_eqXfreq_smoothccY/index.html create mode 100644 opcodes/lfoN_eqXfreq_stepccY/index.html create mode 100644 opcodes/lfoN_eqXgain/index.html create mode 100644 opcodes/lfoN_eqXgain_onccY/index.html create mode 100644 opcodes/lfoN_eqXgain_smoothccY/index.html create mode 100644 opcodes/lfoN_eqXgain_stepccY/index.html create mode 100644 opcodes/lfoN_fade/index.html create mode 100644 opcodes/lfoN_fade_onccX/index.html create mode 100644 opcodes/lfoN_freq/index.html create mode 100644 opcodes/lfoN_freq_lfoX/index.html create mode 100644 opcodes/lfoN_freq_lfoX_onccY/index.html create mode 100644 opcodes/lfoN_freq_onccX/index.html create mode 100644 opcodes/lfoN_freq_smoothccX/index.html create mode 100644 opcodes/lfoN_freq_stepccX/index.html create mode 100644 opcodes/lfoN_noiselevel/index.html create mode 100644 opcodes/lfoN_noiselevel_onccX/index.html create mode 100644 opcodes/lfoN_noiselevel_smoothccX/index.html create mode 100644 opcodes/lfoN_noiselevel_stepccX/index.html create mode 100644 opcodes/lfoN_noisestep/index.html create mode 100644 opcodes/lfoN_noisestep_onccX/index.html create mode 100644 opcodes/lfoN_noisestep_smoothccX/index.html create mode 100644 opcodes/lfoN_noisestep_stepccX/index.html create mode 100644 opcodes/lfoN_noisetone/index.html create mode 100644 opcodes/lfoN_noisetone_onccX/index.html create mode 100644 opcodes/lfoN_noisetone_smoothccX/index.html create mode 100644 opcodes/lfoN_noisetone_stepccX/index.html create mode 100644 opcodes/lfoN_offset/index.html create mode 100644 opcodes/lfoN_offsetX/index.html create mode 100644 opcodes/lfoN_pan/index.html create mode 100644 opcodes/lfoN_pan_onccX/index.html create mode 100644 opcodes/lfoN_pan_smoothccX/index.html create mode 100644 opcodes/lfoN_pan_stepccX/index.html create mode 100644 opcodes/lfoN_phase/index.html create mode 100644 opcodes/lfoN_phase_onccX/index.html create mode 100644 opcodes/lfoN_pitch/index.html create mode 100644 opcodes/lfoN_pitch_curveccX/index.html create mode 100644 opcodes/lfoN_pitch_onccX/index.html create mode 100644 opcodes/lfoN_pitch_smoothccX/index.html create mode 100644 opcodes/lfoN_pitch_stepccX/index.html create mode 100644 opcodes/lfoN_ratio/index.html create mode 100644 opcodes/lfoN_ratioX/index.html create mode 100644 opcodes/lfoN_resonance/index.html create mode 100644 opcodes/lfoN_resonance2/index.html create mode 100644 opcodes/lfoN_resonance2_onccX/index.html create mode 100644 opcodes/lfoN_resonance2_smoothccX/index.html create mode 100644 opcodes/lfoN_resonance2_stepccX/index.html create mode 100644 opcodes/lfoN_resonance_onccX/index.html create mode 100644 opcodes/lfoN_resonance_smoothccX/index.html create mode 100644 opcodes/lfoN_resonance_stepccX/index.html create mode 100644 opcodes/lfoN_sample_dyn_paramX/index.html create mode 100644 opcodes/lfoN_sample_dyn_paramX_onccY/index.html create mode 100644 opcodes/lfoN_scale/index.html create mode 100644 opcodes/lfoN_scaleX/index.html create mode 100644 opcodes/lfoN_smooth/index.html create mode 100644 opcodes/lfoN_smooth_onccX/index.html create mode 100644 opcodes/lfoN_stepX/index.html create mode 100644 opcodes/lfoN_stepX_onccY/index.html create mode 100644 opcodes/lfoN_steps/index.html create mode 100644 opcodes/lfoN_volume/index.html create mode 100644 opcodes/lfoN_volume_onccX/index.html create mode 100644 opcodes/lfoN_volume_smoothccX/index.html create mode 100644 opcodes/lfoN_volume_stepccX/index.html create mode 100644 opcodes/lfoN_wave/index.html create mode 100644 opcodes/lfoN_waveX/index.html create mode 100644 opcodes/lfoN_wave_onccX/index.html create mode 100644 opcodes/lfoN_width/index.html create mode 100644 opcodes/lfoN_width_onccX/index.html create mode 100644 opcodes/lfoN_width_smoothccX/index.html create mode 100644 opcodes/lfoN_width_stepccX/index.html create mode 100644 opcodes/load_end/index.html create mode 100644 opcodes/load_mode/index.html create mode 100644 opcodes/load_start/index.html create mode 100644 opcodes/lobend/index.html create mode 100644 opcodes/lobpm/index.html create mode 100644 opcodes/loccN/index.html create mode 100644 opcodes/lochan/index.html create mode 100644 opcodes/lochanaft/index.html create mode 100644 opcodes/lohdccN/index.html create mode 100644 opcodes/lokey/index.html create mode 100644 opcodes/loop_count/index.html create mode 100644 opcodes/loop_crossfade/index.html create mode 100644 opcodes/loop_end/index.html create mode 100644 opcodes/loop_length_onccN/index.html create mode 100644 opcodes/loop_lengthccN/index.html create mode 100644 opcodes/loop_mode/index.html create mode 100644 opcodes/loop_start/index.html create mode 100644 opcodes/loop_start_onccN/index.html create mode 100644 opcodes/loop_startccN/index.html create mode 100644 opcodes/loop_tune/index.html create mode 100644 opcodes/loop_type/index.html create mode 100644 opcodes/loopcount/index.html create mode 100644 opcodes/loopend/index.html create mode 100644 opcodes/loopmode/index.html create mode 100644 opcodes/loopstart/index.html create mode 100644 opcodes/looptune/index.html create mode 100644 opcodes/looptype/index.html create mode 100644 opcodes/lopolyaft/index.html create mode 100644 opcodes/loprog/index.html create mode 100644 opcodes/lorand/index.html create mode 100644 opcodes/lotimer/index.html create mode 100644 opcodes/lovel/index.html create mode 100644 opcodes/master_amplitude/index.html create mode 100644 opcodes/master_label/index.html create mode 100644 opcodes/master_tune/index.html create mode 100644 opcodes/master_volume/index.html create mode 100644 opcodes/md5/index.html create mode 100644 opcodes/noise_filter/index.html create mode 100644 opcodes/noise_level/index.html create mode 100644 opcodes/noise_level_onccN/index.html create mode 100644 opcodes/noise_level_smoothccN/index.html create mode 100644 opcodes/noise_step/index.html create mode 100644 opcodes/noise_step_onccN/index.html create mode 100644 opcodes/noise_stereo/index.html create mode 100644 opcodes/noise_tone/index.html create mode 100644 opcodes/noise_tone_onccN/index.html create mode 100644 opcodes/note_offset/index.html create mode 100644 opcodes/note_polyphony/index.html create mode 100644 opcodes/note_selfmask/index.html create mode 100644 opcodes/octave_offset/index.html create mode 100644 opcodes/off_by/index.html create mode 100644 opcodes/off_curve/index.html create mode 100644 opcodes/off_mode/index.html create mode 100644 opcodes/off_shape/index.html create mode 100644 opcodes/off_time/index.html create mode 100644 opcodes/offby/index.html create mode 100644 opcodes/offset/index.html create mode 100644 opcodes/offset_ccN/index.html create mode 100644 opcodes/offset_mode/index.html create mode 100644 opcodes/offset_onccN/index.html create mode 100644 opcodes/offset_random/index.html create mode 100644 opcodes/on_hiccN/index.html create mode 100644 opcodes/on_hihdccN/index.html create mode 100644 opcodes/on_loccN/index.html create mode 100644 opcodes/on_lohdccN/index.html create mode 100644 opcodes/oscillator/index.html create mode 100644 opcodes/oscillator_detune/index.html create mode 100644 opcodes/oscillator_detune_onccN/index.html create mode 100644 opcodes/oscillator_mod_depth/index.html create mode 100644 opcodes/oscillator_mod_depth_onccN/index.html create mode 100644 opcodes/oscillator_mod_smoothccN/index.html create mode 100644 opcodes/oscillator_mode/index.html create mode 100644 opcodes/oscillator_multi/index.html create mode 100644 opcodes/oscillator_phase/index.html create mode 100644 opcodes/oscillator_quality/index.html create mode 100644 opcodes/oscillator_table_size/index.html create mode 100644 opcodes/output/index.html create mode 100644 opcodes/pan/index.html create mode 100644 opcodes/pan_ccN/index.html create mode 100644 opcodes/pan_curveccN/index.html create mode 100644 opcodes/pan_keycenter/index.html create mode 100644 opcodes/pan_keytrack/index.html create mode 100644 opcodes/pan_law/index.html create mode 100644 opcodes/pan_onccN/index.html create mode 100644 opcodes/pan_random/index.html create mode 100644 opcodes/pan_smoothccN/index.html create mode 100644 opcodes/pan_stepccN/index.html create mode 100644 opcodes/pan_veltrack/index.html create mode 100644 opcodes/param_offset/index.html create mode 100644 opcodes/phase/index.html create mode 100644 opcodes/phaser_depth/index.html create mode 100644 opcodes/phaser_depth_onccN/index.html create mode 100644 opcodes/phaser_feedback/index.html create mode 100644 opcodes/phaser_feedback_onccN/index.html create mode 100644 opcodes/phaser_freq/index.html create mode 100644 opcodes/phaser_freq_onccN/index.html create mode 100644 opcodes/phaser_phase_onccN/index.html create mode 100644 opcodes/phaser_stages/index.html create mode 100644 opcodes/phaser_waveform/index.html create mode 100644 opcodes/phaser_wet/index.html create mode 100644 opcodes/phaser_wet_onccN/index.html create mode 100644 opcodes/pitch/index.html create mode 100644 opcodes/pitch_attack/index.html create mode 100644 opcodes/pitch_curveccN/index.html create mode 100644 opcodes/pitch_decay/index.html create mode 100644 opcodes/pitch_delay/index.html create mode 100644 opcodes/pitch_depth/index.html create mode 100644 opcodes/pitch_hold/index.html create mode 100644 opcodes/pitch_keycenter/index.html create mode 100644 opcodes/pitch_keytrack/index.html create mode 100644 opcodes/pitch_onccN/index.html create mode 100644 opcodes/pitch_random/index.html create mode 100644 opcodes/pitch_release/index.html create mode 100644 opcodes/pitch_smoothccN/index.html create mode 100644 opcodes/pitch_stepccN/index.html create mode 100644 opcodes/pitch_sustain/index.html create mode 100644 opcodes/pitch_vel2attack/index.html create mode 100644 opcodes/pitch_vel2decay/index.html create mode 100644 opcodes/pitch_vel2delay/index.html create mode 100644 opcodes/pitch_vel2depth/index.html create mode 100644 opcodes/pitch_vel2hold/index.html create mode 100644 opcodes/pitch_vel2release/index.html create mode 100644 opcodes/pitch_vel2sustain/index.html create mode 100644 opcodes/pitch_veltrack/index.html create mode 100644 opcodes/pitcheg_attack/index.html create mode 100644 opcodes/pitcheg_attack_curveccN/index.html create mode 100644 opcodes/pitcheg_attack_onccN/index.html create mode 100644 opcodes/pitcheg_attack_shape/index.html create mode 100644 opcodes/pitcheg_decay/index.html create mode 100644 opcodes/pitcheg_decay_curveccN/index.html create mode 100644 opcodes/pitcheg_decay_onccN/index.html create mode 100644 opcodes/pitcheg_decay_shape/index.html create mode 100644 opcodes/pitcheg_decay_zero/index.html create mode 100644 opcodes/pitcheg_delay/index.html create mode 100644 opcodes/pitcheg_delay_curveccN/index.html create mode 100644 opcodes/pitcheg_delay_onccN/index.html create mode 100644 opcodes/pitcheg_depth/index.html create mode 100644 opcodes/pitcheg_depth_curveccN/index.html create mode 100644 opcodes/pitcheg_depth_onccN/index.html create mode 100644 opcodes/pitcheg_depthccN/index.html create mode 100644 opcodes/pitcheg_dynamic/index.html create mode 100644 opcodes/pitcheg_hold/index.html create mode 100644 opcodes/pitcheg_hold_curveccN/index.html create mode 100644 opcodes/pitcheg_hold_onccN/index.html create mode 100644 opcodes/pitcheg_release/index.html create mode 100644 opcodes/pitcheg_release_curveccN/index.html create mode 100644 opcodes/pitcheg_release_onccN/index.html create mode 100644 opcodes/pitcheg_release_shape/index.html create mode 100644 opcodes/pitcheg_release_zero/index.html create mode 100644 opcodes/pitcheg_start/index.html create mode 100644 opcodes/pitcheg_start_curveccN/index.html create mode 100644 opcodes/pitcheg_start_onccN/index.html create mode 100644 opcodes/pitcheg_sustain/index.html create mode 100644 opcodes/pitcheg_sustain_curveccN/index.html create mode 100644 opcodes/pitcheg_sustain_onccN/index.html create mode 100644 opcodes/pitcheg_vel2attack/index.html create mode 100644 opcodes/pitcheg_vel2decay/index.html create mode 100644 opcodes/pitcheg_vel2delay/index.html create mode 100644 opcodes/pitcheg_vel2depth/index.html create mode 100644 opcodes/pitcheg_vel2hold/index.html create mode 100644 opcodes/pitcheg_vel2release/index.html create mode 100644 opcodes/pitcheg_vel2sustain/index.html create mode 100644 opcodes/pitchlfo_delay/index.html create mode 100644 opcodes/pitchlfo_depth/index.html create mode 100644 opcodes/pitchlfo_depth_onccN/index.html create mode 100644 opcodes/pitchlfo_depthccN/index.html create mode 100644 opcodes/pitchlfo_depthchanaft/index.html create mode 100644 opcodes/pitchlfo_depthpolyaft/index.html create mode 100644 opcodes/pitchlfo_fade/index.html create mode 100644 opcodes/pitchlfo_freq/index.html create mode 100644 opcodes/pitchlfo_freqccN/index.html create mode 100644 opcodes/pitchlfo_freqchanaft/index.html create mode 100644 opcodes/pitchlfo_freqpolyaft/index.html create mode 100644 opcodes/polyphony/index.html create mode 100644 opcodes/polyphony_group/index.html create mode 100644 opcodes/polyphony_stealing/index.html create mode 100644 opcodes/position/index.html create mode 100644 opcodes/position_curveccN/index.html create mode 100644 opcodes/position_keycenter/index.html create mode 100644 opcodes/position_keytrack/index.html create mode 100644 opcodes/position_onccN/index.html create mode 100644 opcodes/position_random/index.html create mode 100644 opcodes/position_smoothccN/index.html create mode 100644 opcodes/position_stepccN/index.html create mode 100644 opcodes/position_veltrack/index.html create mode 100644 opcodes/region_label/index.html create mode 100644 opcodes/resonance/index.html create mode 100644 opcodes/resonance2/index.html create mode 100644 opcodes/resonance2_ccN/index.html create mode 100644 opcodes/resonance2_curveccN/index.html create mode 100644 opcodes/resonance2_onccN/index.html create mode 100644 opcodes/resonance2_smoothccN/index.html create mode 100644 opcodes/resonance2_stepccN/index.html create mode 100644 opcodes/resonance_ccN/index.html create mode 100644 opcodes/resonance_curveccN/index.html create mode 100644 opcodes/resonance_onccN/index.html create mode 100644 opcodes/resonance_random/index.html create mode 100644 opcodes/resonance_smoothccN/index.html create mode 100644 opcodes/resonance_stepccN/index.html create mode 100644 opcodes/reverb_damp/index.html create mode 100644 opcodes/reverb_damp_onccN/index.html create mode 100644 opcodes/reverb_dry/index.html create mode 100644 opcodes/reverb_dry_onccN/index.html create mode 100644 opcodes/reverb_input/index.html create mode 100644 opcodes/reverb_input_onccN/index.html create mode 100644 opcodes/reverb_predelay/index.html create mode 100644 opcodes/reverb_predelay_onccN/index.html create mode 100644 opcodes/reverb_size/index.html create mode 100644 opcodes/reverb_size_onccN/index.html create mode 100644 opcodes/reverb_tone/index.html create mode 100644 opcodes/reverb_tone_onccN/index.html create mode 100644 opcodes/reverb_type/index.html create mode 100644 opcodes/reverb_wet/index.html create mode 100644 opcodes/reverb_wet_onccN/index.html create mode 100644 opcodes/reverse_hiccN/index.html create mode 100644 opcodes/reverse_loccN/index.html create mode 100644 opcodes/rt_dead/index.html create mode 100644 opcodes/rt_decay/index.html create mode 100644 opcodes/rt_decayN/index.html create mode 100644 opcodes/rt_decayN_time/index.html create mode 100644 opcodes/sample/index.html create mode 100644 opcodes/sample_dyn_paramN/index.html create mode 100644 opcodes/sample_dyn_paramN_onccX/index.html create mode 100644 opcodes/sample_fadeout/index.html create mode 100644 opcodes/sample_quality/index.html create mode 100644 opcodes/script/index.html create mode 100644 opcodes/seq_length/index.html create mode 100644 opcodes/seq_position/index.html create mode 100644 opcodes/set_ccN/index.html create mode 100644 opcodes/set_hdccN/index.html create mode 100644 opcodes/set_realccN/index.html create mode 100644 opcodes/sostenuto_cc/index.html create mode 100644 opcodes/sostenuto_lo/index.html create mode 100644 opcodes/sostenuto_sw/index.html create mode 100644 opcodes/start_hiccN/index.html create mode 100644 opcodes/start_hihdccN/index.html create mode 100644 opcodes/start_loccN/index.html create mode 100644 opcodes/start_lohdccN/index.html create mode 100644 opcodes/static_cyclic_level/index.html create mode 100644 opcodes/static_cyclic_time/index.html create mode 100644 opcodes/static_filter/index.html create mode 100644 opcodes/static_level/index.html create mode 100644 opcodes/static_level_onccN/index.html create mode 100644 opcodes/static_random_level/index.html create mode 100644 opcodes/static_random_maxtime/index.html create mode 100644 opcodes/static_random_mintime/index.html create mode 100644 opcodes/static_stereo/index.html create mode 100644 opcodes/static_tone/index.html create mode 100644 opcodes/stop_beats/index.html create mode 100644 opcodes/stop_hiccN/index.html create mode 100644 opcodes/stop_hihdccN/index.html create mode 100644 opcodes/stop_loccN/index.html create mode 100644 opcodes/stop_lohdccN/index.html create mode 100644 opcodes/strings_number/index.html create mode 100644 opcodes/strings_wet_onccN/index.html create mode 100644 opcodes/sustain_cc/index.html create mode 100644 opcodes/sustain_lo/index.html create mode 100644 opcodes/sustain_sw/index.html create mode 100644 opcodes/sw_default/index.html create mode 100644 opcodes/sw_down/index.html create mode 100644 opcodes/sw_hikey/index.html create mode 100644 opcodes/sw_hilast/index.html create mode 100644 opcodes/sw_label/index.html create mode 100644 opcodes/sw_last/index.html create mode 100644 opcodes/sw_lokey/index.html create mode 100644 opcodes/sw_lolast/index.html create mode 100644 opcodes/sw_note_offset/index.html create mode 100644 opcodes/sw_octave_offset/index.html create mode 100644 opcodes/sw_previous/index.html create mode 100644 opcodes/sw_up/index.html create mode 100644 opcodes/sw_vel/index.html create mode 100644 opcodes/sync_beats/index.html create mode 100644 opcodes/sync_offset/index.html create mode 100644 opcodes/tdfir_dry/index.html create mode 100644 opcodes/tdfir_dry_onccN/index.html create mode 100644 opcodes/tdfir_gain/index.html create mode 100644 opcodes/tdfir_impulse/index.html create mode 100644 opcodes/tdfir_wet/index.html create mode 100644 opcodes/tdfir_wet_onccN/index.html create mode 100644 opcodes/transpose/index.html create mode 100644 opcodes/trigger/index.html create mode 100644 opcodes/tune/index.html create mode 100644 opcodes/tune_ccN/index.html create mode 100644 opcodes/tune_curveccN/index.html create mode 100644 opcodes/tune_keytrack/index.html create mode 100644 opcodes/tune_onccN/index.html create mode 100644 opcodes/tune_random/index.html create mode 100644 opcodes/tune_smoothccN/index.html create mode 100644 opcodes/tune_stepccN/index.html create mode 100644 opcodes/tune_veltrack/index.html create mode 100644 opcodes/type/index.html create mode 100644 opcodes/vN/index.html create mode 100644 opcodes/vNNN/index.html create mode 100644 opcodes/varNN_/index.html create mode 100644 opcodes/varNN_curveccX/index.html create mode 100644 opcodes/varNN_mod/index.html create mode 100644 opcodes/varNN_onccX/index.html create mode 100644 opcodes/vendor_specific/index.html create mode 100644 opcodes/volume/index.html create mode 100644 opcodes/volume_curveccN/index.html create mode 100644 opcodes/volume_onccN/index.html create mode 100644 opcodes/volume_smoothccN/index.html create mode 100644 opcodes/volume_stepccN/index.html create mode 100644 opcodes/waveguide/index.html create mode 100644 opcodes/width/index.html create mode 100644 opcodes/width_curveccN/index.html create mode 100644 opcodes/width_onccN/index.html create mode 100644 opcodes/width_smoothccN/index.html create mode 100644 opcodes/width_stepccN/index.html create mode 100644 opcodes/xf_cccurve/index.html create mode 100644 opcodes/xf_keycurve/index.html create mode 100644 opcodes/xf_velcurve/index.html create mode 100644 opcodes/xfin_hiccN/index.html create mode 100644 opcodes/xfin_hikey/index.html create mode 100644 opcodes/xfin_hivel/index.html create mode 100644 opcodes/xfin_loccN/index.html create mode 100644 opcodes/xfin_lokey/index.html create mode 100644 opcodes/xfin_lovel/index.html create mode 100644 opcodes/xfout_hiccN/index.html create mode 100644 opcodes/xfout_hikey/index.html create mode 100644 opcodes/xfout_hivel/index.html create mode 100644 opcodes/xfout_loccN/index.html create mode 100644 opcodes/xfout_lokey/index.html create mode 100644 opcodes/xfout_lovel/index.html create mode 100644 robots.txt create mode 100644 search/lunr.js create mode 100644 search/main.js create mode 100644 search/search_index.json create mode 100644 search/worker.js create mode 100644 sitemap.xml create mode 100644 sitemap.xml.gz create mode 100644 software/engines/index.html create mode 100644 software/players/index.html create mode 100644 software/tools/index.html create mode 100644 tutorials/basic_sfz_file/index.html create mode 100644 tutorials/basics/index.html create mode 100644 tutorials/brush_stirs/index.html create mode 100644 tutorials/cymbal_muting/index.html create mode 100644 tutorials/drum_basics/index.html create mode 100644 tutorials/envelope_generators/index.html create mode 100644 tutorials/epic_drums/index.html create mode 100644 tutorials/legato/index.html create mode 100644 tutorials/lfo/index.html create mode 100644 tutorials/modular_instruments/index.html create mode 100644 tutorials/range_extension/index.html create mode 100644 tutorials/sfz1_modulations/index.html create mode 100644 tutorials/sfz2_modulations/index.html create mode 100644 tutorials/strum/index.html create mode 100644 tutorials/subtractive_synths/index.html create mode 100644 tutorials/sustained_note_basics/index.html create mode 100644 tutorials/unison/index.html create mode 100644 tutorials/vibrato/index.html create mode 100644 tutorials/videos/index.html create mode 100644 tutorials/volume/index.html create mode 100644 versions/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/CNAME b/CNAME new file mode 100644 index 000000000..1f3a0670d --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +sfzformat.com \ No newline at end of file diff --git a/assets/css/bootstrap-table-filter-control.min.css b/assets/css/bootstrap-table-filter-control.min.css new file mode 100644 index 000000000..c1100294e --- /dev/null +++ b/assets/css/bootstrap-table-filter-control.min.css @@ -0,0 +1,10 @@ +/** + * bootstrap-table - An extended table to integration with some of the most widely used CSS frameworks. (Supports Bootstrap, Semantic UI, Bulma, Material Design, Foundation) + * + * @version v1.22.1 + * @homepage https://bootstrap-table.com + * @author wenzhixin (http://wenzhixin.net.cn/) + * @license MIT + */ + +@charset "UTF-8";.no-filter-control{height:40px}.filter-control{margin:0 2px 2px}.ms-choice{border:0}.ms-parent>button:focus{outline:0} \ No newline at end of file diff --git a/assets/css/bootstrap-table.min.css b/assets/css/bootstrap-table.min.css new file mode 100644 index 000000000..86da662c6 --- /dev/null +++ b/assets/css/bootstrap-table.min.css @@ -0,0 +1,10 @@ +/** + * bootstrap-table - An extended table to integration with some of the most widely used CSS frameworks. (Supports Bootstrap, Semantic UI, Bulma, Material Design, Foundation) + * + * @version v1.22.1 + * @homepage https://bootstrap-table.com + * @author wenzhixin (http://wenzhixin.net.cn/) + * @license MIT + */ + +.bootstrap-table .fixed-table-toolbar::after{content:"";display:block;clear:both}.bootstrap-table .fixed-table-toolbar .bs-bars,.bootstrap-table .fixed-table-toolbar .columns,.bootstrap-table .fixed-table-toolbar .search{position:relative;margin-top:10px;margin-bottom:10px}.bootstrap-table .fixed-table-toolbar .columns .btn-group>.btn-group{display:inline-block;margin-left:-1px!important}.bootstrap-table .fixed-table-toolbar .columns .btn-group>.btn-group>.btn{border-radius:0}.bootstrap-table .fixed-table-toolbar .columns .btn-group>.btn-group:first-child>.btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.bootstrap-table .fixed-table-toolbar .columns .btn-group>.btn-group:last-child>.btn{border-top-right-radius:4px;border-bottom-right-radius:4px}.bootstrap-table .fixed-table-toolbar .columns .dropdown-menu{text-align:left;max-height:300px;overflow:auto;-ms-overflow-style:scrollbar;z-index:1001}.bootstrap-table .fixed-table-toolbar .columns label{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.4286}.bootstrap-table .fixed-table-toolbar .columns-left{margin-right:5px}.bootstrap-table .fixed-table-toolbar .columns-right{margin-left:5px}.bootstrap-table .fixed-table-toolbar .pull-right .dropdown-menu{right:0;left:auto}.bootstrap-table .fixed-table-container{position:relative;clear:both}.bootstrap-table .fixed-table-container .table{width:100%;margin-bottom:0!important}.bootstrap-table .fixed-table-container .table td,.bootstrap-table .fixed-table-container .table th{vertical-align:middle;box-sizing:border-box}.bootstrap-table .fixed-table-container .table thead th{vertical-align:bottom;padding:0;margin:0}.bootstrap-table .fixed-table-container .table thead th:focus{outline:0 solid transparent}.bootstrap-table .fixed-table-container .table thead th.detail{width:30px}.bootstrap-table .fixed-table-container .table thead th .th-inner{padding:.75rem;vertical-align:bottom;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bootstrap-table .fixed-table-container .table thead th .sortable{cursor:pointer;background-position:right;background-repeat:no-repeat;padding-right:30px!important}.bootstrap-table .fixed-table-container .table thead th .sortable.sortable-center{padding-left:20px!important;padding-right:20px!important}.bootstrap-table .fixed-table-container .table thead th .both{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC")}.bootstrap-table .fixed-table-container .table thead th .asc{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg==")}.bootstrap-table .fixed-table-container .table thead th .desc{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII= ")}.bootstrap-table .fixed-table-container .table tbody tr.selected td{background-color:rgba(0,0,0,.075)}.bootstrap-table .fixed-table-container .table tbody tr.no-records-found td{text-align:center}.bootstrap-table .fixed-table-container .table tbody tr .card-view{display:flex}.bootstrap-table .fixed-table-container .table tbody tr .card-view .card-view-title{font-weight:700;display:inline-block;min-width:30%;width:auto!important;text-align:left!important}.bootstrap-table .fixed-table-container .table tbody tr .card-view .card-view-value{width:100%!important;text-align:left!important}.bootstrap-table .fixed-table-container .table .bs-checkbox{text-align:center}.bootstrap-table .fixed-table-container .table .bs-checkbox label{margin-bottom:0}.bootstrap-table .fixed-table-container .table .bs-checkbox label input[type=checkbox],.bootstrap-table .fixed-table-container .table .bs-checkbox label input[type=radio]{margin:0 auto!important}.bootstrap-table .fixed-table-container .table.table-sm .th-inner{padding:.3rem}.bootstrap-table .fixed-table-container.fixed-height:not(.has-footer){border-bottom:1px solid #dee2e6}.bootstrap-table .fixed-table-container.fixed-height.has-card-view{border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.bootstrap-table .fixed-table-container.fixed-height .fixed-table-border{border-left:1px solid #dee2e6;border-right:1px solid #dee2e6}.bootstrap-table .fixed-table-container.fixed-height .table thead th{border-bottom:1px solid #dee2e6}.bootstrap-table .fixed-table-container.fixed-height .table-dark thead th{border-bottom:1px solid #32383e}.bootstrap-table .fixed-table-container .fixed-table-header{overflow:hidden}.bootstrap-table .fixed-table-container .fixed-table-body{overflow-x:auto;overflow-y:auto;height:100%}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading{align-items:center;background:#fff;display:flex;justify-content:center;position:absolute;bottom:0;width:100%;max-width:100%;z-index:1000;transition:visibility 0s,opacity .15s ease-in-out;opacity:0;visibility:hidden}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading.open{visibility:visible;opacity:1}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap{align-items:baseline;display:flex;justify-content:center}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .loading-text{margin-right:6px}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-wrap{align-items:center;display:flex;justify-content:center}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-dot,.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-wrap::after,.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-wrap::before{content:"";animation-duration:1.5s;animation-iteration-count:infinite;animation-name:loading;background:#212529;border-radius:50%;display:block;height:5px;margin:0 4px;opacity:0;width:5px}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-dot{animation-delay:.3s}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-wrap::after{animation-delay:.6s}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading.table-dark{background:#212529}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading.table-dark .animation-dot,.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading.table-dark .animation-wrap::after,.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading.table-dark .animation-wrap::before{background:#fff}.bootstrap-table .fixed-table-container .fixed-table-footer{overflow:hidden}.bootstrap-table .fixed-table-pagination::after{content:"";display:block;clear:both}.bootstrap-table .fixed-table-pagination>.pagination,.bootstrap-table .fixed-table-pagination>.pagination-detail{margin-top:10px;margin-bottom:10px}.bootstrap-table .fixed-table-pagination>.pagination-detail .pagination-info{line-height:34px;margin-right:5px}.bootstrap-table .fixed-table-pagination>.pagination-detail .page-list{display:inline-block}.bootstrap-table .fixed-table-pagination>.pagination-detail .page-list .btn-group{position:relative;display:inline-block;vertical-align:middle}.bootstrap-table .fixed-table-pagination>.pagination-detail .page-list .btn-group .dropdown-menu{margin-bottom:0}.bootstrap-table .fixed-table-pagination>.pagination ul.pagination{margin:0}.bootstrap-table .fixed-table-pagination>.pagination ul.pagination li.page-intermediate a{color:#c8c8c8}.bootstrap-table .fixed-table-pagination>.pagination ul.pagination li.page-intermediate a::before{content:"\2B05"}.bootstrap-table .fixed-table-pagination>.pagination ul.pagination li.page-intermediate a::after{content:"\27A1"}.bootstrap-table .fixed-table-pagination>.pagination ul.pagination li.disabled a{pointer-events:none;cursor:default}.bootstrap-table.fullscreen{position:fixed;top:0;left:0;z-index:1050;width:100%!important;background:#fff;height:calc(100vh);overflow-y:scroll}.bootstrap-table.bootstrap4 .pagination-lg .page-link,.bootstrap-table.bootstrap5 .pagination-lg .page-link{padding:.5rem 1rem}.bootstrap-table.bootstrap5 .float-left{float:left}.bootstrap-table.bootstrap5 .float-right{float:right}div.fixed-table-scroll-inner{width:100%;height:200px}div.fixed-table-scroll-outer{top:0;left:0;visibility:hidden;width:200px;height:150px;overflow:hidden}@keyframes loading{0%{opacity:0}50%{opacity:1}100%{opacity:0}} \ No newline at end of file diff --git a/assets/css/brands.min.css b/assets/css/brands.min.css new file mode 100644 index 000000000..93a9a7327 --- /dev/null +++ b/assets/css/brands.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-pixiv:before{content:"\e640"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-brave:before{content:"\e63c"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-opensuse:before{content:"\e62b"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-square-letterboxd:before{content:"\e62e"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-shoelace:before{content:"\e60c"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-square-threads:before{content:"\e619"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-google-scholar:before{content:"\e63b"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-signal-messenger:before{content:"\e663"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-mintbit:before{content:"\e62f"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-brave-reverse:before{content:"\e63d"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-letterboxd:before{content:"\e62d"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-x-twitter:before{content:"\e61b"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-upwork:before{content:"\e641"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-webflow:before{content:"\e65c"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-square-x-twitter:before{content:"\e61a"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"} \ No newline at end of file diff --git a/assets/css/fontawesome.min.css b/assets/css/fontawesome.min.css new file mode 100644 index 000000000..688dd75dc --- /dev/null +++ b/assets/css/fontawesome.min.css @@ -0,0 +1,9 @@ +/*! + * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} + +.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} +.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0} \ No newline at end of file diff --git a/assets/css/fork-awesome.min.css b/assets/css/fork-awesome.min.css new file mode 100644 index 000000000..fd154dc31 --- /dev/null +++ b/assets/css/fork-awesome.min.css @@ -0,0 +1,12 @@ +/*! +Fork Awesome 1.2.0 +License - https://forkaweso.me/Fork-Awesome/license + +Copyright 2018 Dave Gandy & Fork Awesome + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */@font-face{font-family:ForkAwesome;src:url(../fonts/forkawesome-webfont.eot?v=1.2.0);src:url(../fonts/forkawesome-webfont.eot?#iefix&v=1.2.0) format('embedded-opentype'),url(../fonts/forkawesome-webfont.woff2?v=1.2.0) format('woff2'),url(../fonts/forkawesome-webfont.woff?v=1.2.0) format('woff'),url(../fonts/forkawesome-webfont.ttf?v=1.2.0) format('truetype'),url(../fonts/forkawesome-webfont.svg?v=1.2.0#forkawesomeregular) format('svg');font-weight:400;font-style:normal;font-display:block}.fa{display:inline-block;font:normal normal normal 14px/1 ForkAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell-o:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-globe-e:before{content:"\f304"}.fa-globe-w:before{content:"\f305"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-community:before,.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus-g:before,.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before,.fa-utensils:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before,.fa-pound:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-desc:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-desc:before,.fa-sort-amount-up:before{content:"\f161"}.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-desc:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before,.fa-closed-captioning:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before,.fa-gem:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-medium-square:before{content:"\f2f8"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo-v:before,.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:"\f2a3"}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-address-card:before,.fa-vcard:before{content:"\f2bb"}.fa-address-card-o:before,.fa-vcard-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.fa-mastodon:before{content:"\f2e1"}.fa-mastodon-alt:before{content:"\f2e2"}.fa-fork-awesome:before,.fa-fork-circle:before{content:"\f2e3"}.fa-peertube:before{content:"\f2e4"}.fa-diaspora:before{content:"\f2e5"}.fa-friendica:before{content:"\f2e6"}.fa-gnu-social:before{content:"\f2e7"}.fa-liberapay-square:before{content:"\f2e8"}.fa-liberapay:before{content:"\f2e9"}.fa-scuttlebutt:before,.fa-ssb:before{content:"\f2ea"}.fa-hubzilla:before{content:"\f2eb"}.fa-social-home:before{content:"\f2ec"}.fa-artstation:before{content:"\f2ed"}.fa-discord:before{content:"\f2ee"}.fa-discord-alt:before{content:"\f2ef"}.fa-patreon:before{content:"\f2f0"}.fa-snowdrift:before{content:"\f2f1"}.fa-activitypub:before{content:"\f2f2"}.fa-ethereum:before{content:"\f2f3"}.fa-keybase:before{content:"\f2f4"}.fa-shaarli:before{content:"\f2f5"}.fa-shaarli-o:before{content:"\f2f6"}.fa-cut-key:before,.fa-key-modern:before{content:"\f2f7"}.fa-xmpp:before{content:"\f2f9"}.fa-archive-org:before{content:"\f2fc"}.fa-freedombox:before{content:"\f2fd"}.fa-facebook-messenger:before{content:"\f2fe"}.fa-debian:before{content:"\f2ff"}.fa-mastodon-square:before{content:"\f300"}.fa-tipeee:before{content:"\f301"}.fa-react:before{content:"\f302"}.fa-dogmazic:before{content:"\f303"}.fa-zotero:before{content:"\f309"}.fa-nodejs:before{content:"\f308"}.fa-nextcloud:before{content:"\f306"}.fa-nextcloud-square:before{content:"\f307"}.fa-hackaday:before{content:"\f30a"}.fa-laravel:before{content:"\f30b"}.fa-signalapp:before{content:"\f30c"}.fa-gnupg:before{content:"\f30d"}.fa-php:before{content:"\f30e"}.fa-ffmpeg:before{content:"\f30f"}.fa-joplin:before{content:"\f310"}.fa-syncthing:before{content:"\f311"}.fa-inkscape:before{content:"\f312"}.fa-matrix-org:before{content:"\f313"}.fa-pixelfed:before{content:"\f314"}.fa-bootstrap:before{content:"\f315"}.fa-dev-to:before{content:"\f316"}.fa-hashnode:before{content:"\f317"}.fa-jirafeau:before{content:"\f318"}.fa-emby:before{content:"\f319"}.fa-wikidata:before{content:"\f31a"}.fa-gimp:before{content:"\f31b"}.fa-c:before{content:"\f31c"}.fa-digitalocean:before{content:"\f31d"}.fa-att:before{content:"\f31e"}.fa-gitea:before{content:"\f31f"}.fa-file-epub:before{content:"\f321"}.fa-python:before{content:"\f322"}.fa-archlinux:before{content:"\f323"}.fa-pleroma:before{content:"\f324"}.fa-unsplash:before{content:"\f325"}.fa-hackster:before{content:"\f326"}.fa-spell-check:before{content:"\f327"}.fa-moon:before{content:"\f328"}.fa-sun:before{content:"\f329"}.fa-f-droid:before{content:"\f32a"}.fa-biometric:before{content:"\f32b"}.fa-wire:before{content:"\f32c"}.fa-tor-onion:before{content:"\f32e"}.fa-volume-mute:before{content:"\f32f"}.fa-bell-ringing:before{content:"\f32d"}.fa-bell-ringing-o:before{content:"\f330"}.fa-hal:before{content:"\f333"}.fa-jupyter:before{content:"\f335"}.fa-julia:before{content:"\f334"}.fa-classicpress:before{content:"\f331"}.fa-classicpress-circle:before{content:"\f332"}.fa-open-collective:before{content:"\f336"}.fa-orcid:before{content:"\f337"}.fa-researchgate:before{content:"\f338"}.fa-funkwhale:before{content:"\f339"}.fa-askfm:before{content:"\f33a"}.fa-blockstack:before{content:"\f33b"}.fa-boardgamegeek:before{content:"\f33c"}.fa-bunny:before{content:"\f35f"}.fa-buymeacoffee:before{content:"\f33d"}.fa-cc-by:before{content:"\f33e"}.fa-cc-cc:before,.fa-creative-commons-alt:before{content:"\f33f"}.fa-cc-nc-eu:before{content:"\f341"}.fa-cc-nc-jp:before{content:"\f342"}.fa-cc-nc:before{content:"\f340"}.fa-cc-nd:before{content:"\f343"}.fa-cc-pd:before{content:"\f344"}.fa-cc-remix:before{content:"\f345"}.fa-cc-sa:before{content:"\f346"}.fa-cc-share:before{content:"\f347"}.fa-cc-zero:before{content:"\f348"}.fa-conway-glider:before,.fa-conway-hacker:before{content:"\f349"}.fa-csharp:before{content:"\f34a"}.fa-email-bulk:before{content:"\f34b"}.fa-email-bulk-o:before{content:"\f34c"}.fa-gnu:before{content:"\f34d"}.fa-google-play:before{content:"\f34e"}.fa-heroku:before{content:"\f34f"}.fa-hassio:before,.fa-home-assistant:before{content:"\f350"}.fa-java:before{content:"\f351"}.fa-mariadb:before{content:"\f352"}.fa-markdown:before{content:"\f353"}.fa-mysql:before{content:"\f354"}.fa-nordcast:before{content:"\f355"}.fa-plume:before{content:"\f356"}.fa-postgresql:before{content:"\f357"}.fa-sass-alt:before{content:"\f359"}.fa-sass:before{content:"\f358"}.fa-skate:before{content:"\f35a"}.fa-sketchfab:before{content:"\f35b"}.fa-tex:before{content:"\f35c"}.fa-textpattern:before{content:"\f35d"}.fa-unity:before{content:"\f35e"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}/*# sourceMappingURL=fork-awesome.min.css.map */ \ No newline at end of file diff --git a/assets/css/fork-awesome.min.css.map b/assets/css/fork-awesome.min.css.map new file mode 100644 index 000000000..6aa141d4e --- /dev/null +++ b/assets/css/fork-awesome.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["fork-awesome.css"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/assets/css/github-dark-dimmed.min.css b/assets/css/github-dark-dimmed.min.css new file mode 100644 index 000000000..0dae8f398 --- /dev/null +++ b/assets/css/github-dark-dimmed.min.css @@ -0,0 +1,15 @@ +/** + * Skipped minification because the original files appears to be already minified. + * Original file: /npm/highlight.js@11.8.0/styles/github-dark-dimmed.css + * + * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files + */ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: GitHub Dark Dimmed + Description: Dark dimmed theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Colors taken from GitHub's CSS +*/.hljs{color:#adbac7;background:#22272e}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#f47067}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#dcbdfb}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#6cb6ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#96d0ff}.hljs-built_in,.hljs-symbol{color:#f69d50}.hljs-code,.hljs-comment,.hljs-formula{color:#768390}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#8ddb8c}.hljs-subst{color:#adbac7}.hljs-section{color:#316dca;font-weight:700}.hljs-bullet{color:#eac55f}.hljs-emphasis{color:#adbac7;font-style:italic}.hljs-strong{color:#adbac7;font-weight:700}.hljs-addition{color:#b4f1b4;background-color:#1b4721}.hljs-deletion{color:#ffd8d3;background-color:#78191b} \ No newline at end of file diff --git a/assets/css/github.min.css b/assets/css/github.min.css new file mode 100644 index 000000000..f13f3fab7 --- /dev/null +++ b/assets/css/github.min.css @@ -0,0 +1,16 @@ +/** + * Skipped minification because the original files appears to be already minified. + * Original file: /npm/highlight.js@11.8.0/styles/github.css + * + * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files + */ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: GitHub + Description: Light theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-light + Current colors taken from GitHub's CSS +*/.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#005cc5}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-code,.hljs-comment,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0} \ No newline at end of file diff --git a/assets/css/solid.min.css b/assets/css/solid.min.css new file mode 100644 index 000000000..7e1fb2d4c --- /dev/null +++ b/assets/css/solid.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900} \ No newline at end of file diff --git a/assets/css/style.min.css b/assets/css/style.min.css new file mode 100644 index 000000000..b9d676cf2 --- /dev/null +++ b/assets/css/style.min.css @@ -0,0 +1,12 @@ +/*! + * Bootstrap v5.3.0 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root,[data-bs-theme="light"]{--bs-blue: #337ab7;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #337ab7;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #161b22;--bs-primary-rgb: 51,122,183;--bs-secondary-rgb: 108,117,125;--bs-success-rgb: 25,135,84;--bs-info-rgb: 13,202,240;--bs-warning-rgb: 255,193,7;--bs-danger-rgb: 220,53,69;--bs-light-rgb: 248,249,250;--bs-dark-rgb: 22,27,34;--bs-primary-text-emphasis: #143149;--bs-secondary-text-emphasis: #2b2f32;--bs-success-text-emphasis: #0a3622;--bs-info-text-emphasis: #055160;--bs-warning-text-emphasis: #664d03;--bs-danger-text-emphasis: #58151c;--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: #d6e4f1;--bs-secondary-bg-subtle: #e2e3e5;--bs-success-bg-subtle: #d1e7dd;--bs-info-bg-subtle: #cff4fc;--bs-warning-bg-subtle: #fff3cd;--bs-danger-bg-subtle: #f8d7da;--bs-light-bg-subtle: #fcfcfd;--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: #adcae2;--bs-secondary-border-subtle: #c4c8cb;--bs-success-border-subtle: #a3cfbb;--bs-info-border-subtle: #9eeaf9;--bs-warning-border-subtle: #ffe69c;--bs-danger-border-subtle: #f1aeb5;--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255,255,255;--bs-black-rgb: 0,0,0;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255,255,255,0.15), rgba(255,255,255,0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-color-rgb: 33,37,41;--bs-body-bg: #fff;--bs-body-bg-rgb: 255,255,255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0,0,0;--bs-secondary-color: rgba(33,37,41,0.75);--bs-secondary-color-rgb: 33,37,41;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233,236,239;--bs-tertiary-color: rgba(33,37,41,0.5);--bs-tertiary-color-rgb: 33,37,41;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248,249,250;--bs-heading-color: inherit;--bs-link-color: #337ab7;--bs-link-color-rgb: 51,122,183;--bs-link-decoration: underline;--bs-link-hover-color: #296292;--bs-link-hover-color-rgb: 41,98,146;--bs-code-color: #d63384;--bs-highlight-bg: #fff3cd;--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0,0,0,0.175);--bs-border-radius: .375rem;--bs-border-radius-sm: .25rem;--bs-border-radius-lg: .5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0,0,0,0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0,0,0,0.075);--bs-focus-ring-width: .25rem;--bs-focus-ring-opacity: .25;--bs-focus-ring-color: rgba(51,122,183,0.25);--bs-form-valid-color: #198754;--bs-form-valid-border-color: #198754;--bs-form-invalid-color: #dc3545;--bs-form-invalid-border-color: #dc3545}[data-bs-theme="dark"]{color-scheme:dark;--bs-body-color: #c9d1d9;--bs-body-color-rgb: 201,209,217;--bs-body-bg: #0d1117;--bs-body-bg-rgb: 13,17,23;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255,255,255;--bs-secondary-color: rgba(201,209,217,0.75);--bs-secondary-color-rgb: 201,209,217;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52,58,64;--bs-tertiary-color: rgba(201,209,217,0.5);--bs-tertiary-color-rgb: 201,209,217;--bs-tertiary-bg: #2b3035;--bs-tertiary-bg-rgb: 43,48,53;--bs-primary-text-emphasis: #85afd4;--bs-secondary-text-emphasis: #a7acb1;--bs-success-text-emphasis: #75b798;--bs-info-text-emphasis: #6edff6;--bs-warning-text-emphasis: #ffda6a;--bs-danger-text-emphasis: #ea868f;--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: #0a1825;--bs-secondary-bg-subtle: #161719;--bs-success-bg-subtle: #051b11;--bs-info-bg-subtle: #032830;--bs-warning-bg-subtle: #332701;--bs-danger-bg-subtle: #2c0b0e;--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: #1f496e;--bs-secondary-border-subtle: #41464b;--bs-success-border-subtle: #0f5132;--bs-info-border-subtle: #087990;--bs-warning-border-subtle: #997404;--bs-danger-border-subtle: #842029;--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: #85afd4;--bs-link-hover-color: #9dbfdd;--bs-link-color-rgb: 133,175,212;--bs-link-hover-color-rgb: 157,191,221;--bs-code-color: #e685b5;--bs-border-color: #495057;--bs-border-color-translucent: rgba(255,255,255,0.15);--bs-form-valid-color: #75b798;--bs-form-valid-border-color: #75b798;--bs-form-invalid-color: #ea868f;--bs-form-invalid-border-color: #ea868f}*,*::before,*::after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + .9vw)}@media (min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + .6vw)}@media (min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role="button"]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type="date"]):not([type="datetime-local"]):not([type="month"]):not([type="week"]):not([type="time"])::-webkit-calendar-picker-indicator{display:none !important}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width: 576px){.container-sm,.container{max-width:540px}}@media (min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media (min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media (min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media (min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333%}.col-2{flex:0 0 auto;width:16.66667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333%}.col-5{flex:0 0 auto;width:41.66667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333%}.col-8{flex:0 0 auto;width:66.66667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333%}.col-11{flex:0 0 auto;width:91.66667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: .25rem}.g-1,.gy-1{--bs-gutter-y: .25rem}.g-2,.gx-2{--bs-gutter-x: .5rem}.g-2,.gy-2{--bs-gutter-y: .5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media (min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333%}.col-sm-2{flex:0 0 auto;width:16.66667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333%}.col-sm-5{flex:0 0 auto;width:41.66667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333%}.col-sm-8{flex:0 0 auto;width:66.66667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333%}.col-sm-11{flex:0 0 auto;width:91.66667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: .25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: .25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: .5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: .5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media (min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333%}.col-md-2{flex:0 0 auto;width:16.66667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333%}.col-md-5{flex:0 0 auto;width:41.66667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333%}.col-md-8{flex:0 0 auto;width:66.66667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333%}.col-md-11{flex:0 0 auto;width:91.66667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: .25rem}.g-md-1,.gy-md-1{--bs-gutter-y: .25rem}.g-md-2,.gx-md-2{--bs-gutter-x: .5rem}.g-md-2,.gy-md-2{--bs-gutter-y: .5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media (min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333%}.col-lg-2{flex:0 0 auto;width:16.66667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333%}.col-lg-5{flex:0 0 auto;width:41.66667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333%}.col-lg-8{flex:0 0 auto;width:66.66667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333%}.col-lg-11{flex:0 0 auto;width:91.66667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: .25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: .25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: .5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: .5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media (min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333%}.col-xl-2{flex:0 0 auto;width:16.66667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333%}.col-xl-5{flex:0 0 auto;width:41.66667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333%}.col-xl-8{flex:0 0 auto;width:66.66667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333%}.col-xl-11{flex:0 0 auto;width:91.66667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: .25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: .25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: .5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: .5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media (min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333%}.col-xxl-2{flex:0 0 auto;width:16.66667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333%}.col-xxl-5{flex:0 0 auto;width:41.66667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333%}.col-xxl-8{flex:0 0 auto;width:66.66667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333%}.col-xxl-11{flex:0 0 auto;width:91.66667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333%}.offset-xxl-2{margin-left:16.66667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333%}.offset-xxl-5{margin-left:41.66667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333%}.offset-xxl-8{margin-left:66.66667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333%}.offset-xxl-11{margin-left:91.66667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: .25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: .25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: .5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: .5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: var(--bs-body-color);--bs-table-bg: var(--bs-body-bg);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: rgba(0,0,0,0);--bs-table-striped-color: var(--bs-body-color);--bs-table-striped-bg: rgba(0,0,0,0.05);--bs-table-active-color: var(--bs-body-color);--bs-table-active-bg: rgba(0,0,0,0.1);--bs-table-hover-color: var(--bs-body-color);--bs-table-hover-bg: rgba(0,0,0,0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #000;--bs-table-bg: #d6e4f1;--bs-table-border-color: #c1cdd9;--bs-table-striped-bg: #cbd9e5;--bs-table-striped-color: #000;--bs-table-active-bg: #c1cdd9;--bs-table-active-color: #000;--bs-table-hover-bg: #c6d3df;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: #e2e3e5;--bs-table-border-color: #cbccce;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: #d1e7dd;--bs-table-border-color: #bcd0c7;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: #cff4fc;--bs-table-border-color: #badce3;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: #fff3cd;--bs-table-border-color: #e6dbb9;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: #f8d7da;--bs-table-border-color: #dfc2c4;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: #dfe0e1;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #161b22;--bs-table-border-color: #2d3238;--bs-table-striped-bg: #22262d;--bs-table-striped-color: #fff;--bs-table-active-bg: #2d3238;--bs-table-active-color: #fff;--bs-table-hover-bg: #272c33;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);appearance:none;border-radius:var(--bs-border-radius);transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type="file"]{overflow:hidden}.form-control[type="file"]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#99bddb;outline:0;box-shadow:0 0 0 .25rem rgba(51,122,183,0.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#99bddb;outline:0;box-shadow:0 0 0 .25rem rgba(51,122,183,0.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme="dark"] .form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23c9d1d9' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--bs-form-check-bg: var(--bs-body-bg);width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);appearance:none;print-color-adjust:exact}.form-check-input[type="checkbox"]{border-radius:.25em}.form-check-input[type="radio"]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#99bddb;outline:0;box-shadow:0 0 0 .25rem rgba(51,122,183,0.25)}.form-check-input:checked{background-color:#337ab7;border-color:#337ab7}.form-check-input:checked[type="checkbox"]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type="radio"]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type="checkbox"]:indeterminate{background-color:#337ab7;border-color:#337ab7;--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280,0,0,0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2399bddb'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme="dark"] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255,255,255,0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(51,122,183,0.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(51,122,183,0.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#337ab7;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#c2d7e9}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#337ab7;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#c2d7e9}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;transition:opacity 0.1s ease-in-out,transform 0.1s ease-in-out}@media (prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:transparent}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb), .65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-control-plaintext~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb), .65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>:disabled~label{color:#6c757d}.form-floating>:disabled~label::after{background-color:var(--bs-secondary-bg)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n + 3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n + 4),.input-group.has-validation>.form-floating:nth-last-child(n + 3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n + 3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--bs-border-width) * -1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + .75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--bs-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + .75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--bs-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #337ab7;--bs-btn-border-color: #337ab7;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #2b689c;--bs-btn-hover-border-color: #296292;--bs-btn-focus-shadow-rgb: 82,142,194;--bs-btn-active-color: #fff;--bs-btn-active-bg: #296292;--bs-btn-active-border-color: #265c89;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #337ab7;--bs-btn-disabled-border-color: #337ab7}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #5c636a;--bs-btn-hover-border-color: #565e64;--bs-btn-focus-shadow-rgb: 130,138,145;--bs-btn-active-color: #fff;--bs-btn-active-bg: #565e64;--bs-btn-active-border-color: #51585e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #6c757d;--bs-btn-disabled-border-color: #6c757d}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #157347;--bs-btn-hover-border-color: #146c43;--bs-btn-focus-shadow-rgb: 60,153,110;--bs-btn-active-color: #fff;--bs-btn-active-bg: #146c43;--bs-btn-active-border-color: #13653f;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #198754;--bs-btn-disabled-border-color: #198754}.btn-info{--bs-btn-color: #000;--bs-btn-bg: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #31d2f2;--bs-btn-hover-border-color: #25cff2;--bs-btn-focus-shadow-rgb: 11,172,204;--bs-btn-active-color: #000;--bs-btn-active-bg: #3dd5f3;--bs-btn-active-border-color: #25cff2;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #0dcaf0;--bs-btn-disabled-border-color: #0dcaf0}.btn-warning{--bs-btn-color: #000;--bs-btn-bg: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffca2c;--bs-btn-hover-border-color: #ffc720;--bs-btn-focus-shadow-rgb: 217,164,6;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffcd39;--bs-btn-active-border-color: #ffc720;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #ffc107;--bs-btn-disabled-border-color: #ffc107}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #bb2d3b;--bs-btn-hover-border-color: #b02a37;--bs-btn-focus-shadow-rgb: 225,83,97;--bs-btn-active-color: #fff;--bs-btn-active-bg: #b02a37;--bs-btn-active-border-color: #a52834;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #dc3545;--bs-btn-disabled-border-color: #dc3545}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211,212,213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #161b22;--bs-btn-border-color: #161b22;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #393d43;--bs-btn-hover-border-color: #2d3238;--bs-btn-focus-shadow-rgb: 57,61,67;--bs-btn-active-color: #fff;--bs-btn-active-bg: #45494e;--bs-btn-active-border-color: #2d3238;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #161b22;--bs-btn-disabled-border-color: #161b22}.btn-outline-primary{--bs-btn-color: #337ab7;--bs-btn-border-color: #337ab7;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #337ab7;--bs-btn-hover-border-color: #337ab7;--bs-btn-focus-shadow-rgb: 51,122,183;--bs-btn-active-color: #fff;--bs-btn-active-bg: #337ab7;--bs-btn-active-border-color: #337ab7;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #337ab7;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #337ab7;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #6c757d;--bs-btn-hover-border-color: #6c757d;--bs-btn-focus-shadow-rgb: 108,117,125;--bs-btn-active-color: #fff;--bs-btn-active-bg: #6c757d;--bs-btn-active-border-color: #6c757d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #6c757d;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #198754;--bs-btn-hover-border-color: #198754;--bs-btn-focus-shadow-rgb: 25,135,84;--bs-btn-active-color: #fff;--bs-btn-active-bg: #198754;--bs-btn-active-border-color: #198754;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #198754;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #198754;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #0dcaf0;--bs-btn-hover-border-color: #0dcaf0;--bs-btn-focus-shadow-rgb: 13,202,240;--bs-btn-active-color: #000;--bs-btn-active-bg: #0dcaf0;--bs-btn-active-border-color: #0dcaf0;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #0dcaf0;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0dcaf0;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffc107;--bs-btn-hover-border-color: #ffc107;--bs-btn-focus-shadow-rgb: 255,193,7;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffc107;--bs-btn-active-border-color: #ffc107;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #ffc107;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ffc107;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #dc3545;--bs-btn-hover-border-color: #dc3545;--bs-btn-focus-shadow-rgb: 220,53,69;--bs-btn-active-color: #fff;--bs-btn-active-bg: #dc3545;--bs-btn-active-border-color: #dc3545;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #dc3545;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dc3545;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248,249,250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #161b22;--bs-btn-border-color: #161b22;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #161b22;--bs-btn-hover-border-color: #161b22;--bs-btn-focus-shadow-rgb: 22,27,34;--bs-btn-active-color: #fff;--bs-btn-active-bg: #161b22;--bs-btn-active-border-color: #161b22;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #161b22;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #161b22;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: var(--bs-link-color);--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: var(--bs-link-hover-color);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: var(--bs-link-hover-color);--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: 0 0 0 #000;--bs-btn-focus-shadow-rgb: 82,142,194;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: .5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: var(--bs-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size:.875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.fade{transition:opacity 0.15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: .5rem;--bs-dropdown-spacer: .125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: var(--bs-body-color);--bs-dropdown-bg: var(--bs-body-bg);--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-border-radius: var(--bs-border-radius);--bs-dropdown-border-width: var(--bs-border-width);--bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y: .5rem;--bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-dropdown-link-color: var(--bs-body-color);--bs-dropdown-link-hover-color: var(--bs-body-color);--bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #337ab7;--bs-dropdown-link-disabled-color: var(--bs-tertiary-color);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: .25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: .5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg: rgba(255,255,255,0.15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #337ab7;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(var(--bs-border-width) * -1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n + 3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(var(--bs-border-width) * -1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-link-color);--bs-nav-link-hover-color: var(--bs-link-hover-color);--bs-nav-link-disabled-color: var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:none;border:0;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(51,122,183,0.25)}.nav-link.disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: var(--bs-border-width);--bs-nav-tabs-border-color: var(--bs-border-color);--bs-nav-tabs-border-radius: var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color: var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg: var(--bs-body-bg);--bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.disabled,.nav-tabs .nav-link:disabled{color:var(--bs-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius: var(--bs-border-radius);--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #337ab7}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link:disabled{color:var(--bs-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: .125rem;--bs-nav-underline-link-active-color: var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid transparent}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: .5rem;--bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);--bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);--bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);--bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y: .3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x: .5rem;--bs-navbar-toggler-padding-y: .25rem;--bs-navbar-toggler-padding-x: .75rem;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833,37,41,0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);--bs-navbar-toggler-border-radius: var(--bs-border-radius);--bs-navbar-toggler-focus-width: .25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media (min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme="dark"]{--bs-navbar-color: rgba(255,255,255,0.55);--bs-navbar-hover-color: rgba(255,255,255,0.75);--bs-navbar-disabled-color: rgba(255,255,255,0.25);--bs-navbar-active-color: #fff;--bs-navbar-brand-color: #fff;--bs-navbar-brand-hover-color: #fff;--bs-navbar-toggler-border-color: rgba(255,255,255,0.1);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255,255,255,0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme="dark"] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255,255,255,0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion{--bs-accordion-color: var(--bs-body-color);--bs-accordion-bg: var(--bs-body-bg);--bs-accordion-transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color: var(--bs-border-color);--bs-accordion-border-width: var(--bs-border-width);--bs-accordion-border-radius: var(--bs-border-radius);--bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: var(--bs-body-color);--bs-accordion-btn-bg: var(--bs-accordion-bg);--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23143149'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color: #99bddb;--bs-accordion-btn-focus-box-shadow: 0 0 0 .25rem rgba(51,122,183,0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: var(--bs-primary-text-emphasis);--bs-accordion-active-bg: var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}[data-bs-theme="dark"] .accordion-button::after{--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2385afd4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2385afd4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: var(--bs-secondary-color);--bs-breadcrumb-item-padding-x: .5rem;--bs-breadcrumb-item-active-color: var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: .75rem;--bs-pagination-padding-y: .375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: var(--bs-link-color);--bs-pagination-bg: var(--bs-body-bg);--bs-pagination-border-width: var(--bs-border-width);--bs-pagination-border-color: var(--bs-border-color);--bs-pagination-border-radius: var(--bs-border-radius);--bs-pagination-hover-color: var(--bs-link-hover-color);--bs-pagination-hover-bg: var(--bs-tertiary-bg);--bs-pagination-hover-border-color: var(--bs-border-color);--bs-pagination-focus-color: var(--bs-link-hover-color);--bs-pagination-focus-bg: var(--bs-secondary-bg);--bs-pagination-focus-box-shadow: 0 0 0 .25rem rgba(51,122,183,0.25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #337ab7;--bs-pagination-active-border-color: #337ab7;--bs-pagination-disabled-color: var(--bs-secondary-color);--bs-pagination-disabled-bg: var(--bs-secondary-bg);--bs-pagination-disabled-border-color: var(--bs-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width) * -1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: .75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x: .5rem;--bs-pagination-padding-y: .25rem;--bs-pagination-font-size:.875rem;--bs-pagination-border-radius: var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x: .65em;--bs-badge-padding-y: .35em;--bs-badge-font-size:.75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius: var(--bs-border-radius);--bs-alert-link-color: inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--bs-alert-color: var(--bs-primary-text-emphasis);--bs-alert-bg: var(--bs-primary-bg-subtle);--bs-alert-border-color: var(--bs-primary-border-subtle);--bs-alert-link-color: var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color: var(--bs-secondary-text-emphasis);--bs-alert-bg: var(--bs-secondary-bg-subtle);--bs-alert-border-color: var(--bs-secondary-border-subtle);--bs-alert-link-color: var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color: var(--bs-success-text-emphasis);--bs-alert-bg: var(--bs-success-bg-subtle);--bs-alert-border-color: var(--bs-success-border-subtle);--bs-alert-link-color: var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color: var(--bs-info-text-emphasis);--bs-alert-bg: var(--bs-info-bg-subtle);--bs-alert-border-color: var(--bs-info-border-subtle);--bs-alert-link-color: var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color: var(--bs-warning-text-emphasis);--bs-alert-bg: var(--bs-warning-bg-subtle);--bs-alert-border-color: var(--bs-warning-border-subtle);--bs-alert-link-color: var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color: var(--bs-danger-text-emphasis);--bs-alert-bg: var(--bs-danger-bg-subtle);--bs-alert-border-color: var(--bs-danger-border-subtle);--bs-alert-link-color: var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color: var(--bs-light-text-emphasis);--bs-alert-bg: var(--bs-light-bg-subtle);--bs-alert-border-color: var(--bs-light-border-subtle);--bs-alert-link-color: var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color: var(--bs-dark-text-emphasis);--bs-alert-bg: var(--bs-dark-bg-subtle);--bs-alert-border-color: var(--bs-dark-border-subtle);--bs-alert-link-color: var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height: 1rem;--bs-progress-font-size:.75rem;--bs-progress-bg: var(--bs-secondary-bg);--bs-progress-border-radius: var(--bs-border-radius);--bs-progress-box-shadow: var(--bs-box-shadow-inset);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #337ab7;--bs-progress-bar-transition: width 0.6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: var(--bs-body-color);--bs-list-group-bg: var(--bs-body-bg);--bs-list-group-border-color: var(--bs-border-color);--bs-list-group-border-width: var(--bs-border-width);--bs-list-group-border-radius: var(--bs-border-radius);--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: .5rem;--bs-list-group-action-color: var(--bs-secondary-color);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-tertiary-bg);--bs-list-group-action-active-color: var(--bs-body-color);--bs-list-group-action-active-bg: var(--bs-secondary-bg);--bs-list-group-disabled-color: var(--bs-secondary-color);--bs-list-group-disabled-bg: var(--bs-body-bg);--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #337ab7;--bs-list-group-active-border-color: #337ab7;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color: var(--bs-primary-text-emphasis);--bs-list-group-bg: var(--bs-primary-bg-subtle);--bs-list-group-border-color: var(--bs-primary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-primary-border-subtle);--bs-list-group-active-color: var(--bs-primary-bg-subtle);--bs-list-group-active-bg: var(--bs-primary-text-emphasis);--bs-list-group-active-border-color: var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color: var(--bs-secondary-text-emphasis);--bs-list-group-bg: var(--bs-secondary-bg-subtle);--bs-list-group-border-color: var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);--bs-list-group-active-color: var(--bs-secondary-bg-subtle);--bs-list-group-active-bg: var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color: var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color: var(--bs-success-text-emphasis);--bs-list-group-bg: var(--bs-success-bg-subtle);--bs-list-group-border-color: var(--bs-success-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-success-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-success-border-subtle);--bs-list-group-active-color: var(--bs-success-bg-subtle);--bs-list-group-active-bg: var(--bs-success-text-emphasis);--bs-list-group-active-border-color: var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color: var(--bs-info-text-emphasis);--bs-list-group-bg: var(--bs-info-bg-subtle);--bs-list-group-border-color: var(--bs-info-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-info-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-info-border-subtle);--bs-list-group-active-color: var(--bs-info-bg-subtle);--bs-list-group-active-bg: var(--bs-info-text-emphasis);--bs-list-group-active-border-color: var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color: var(--bs-warning-text-emphasis);--bs-list-group-bg: var(--bs-warning-bg-subtle);--bs-list-group-border-color: var(--bs-warning-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-warning-border-subtle);--bs-list-group-active-color: var(--bs-warning-bg-subtle);--bs-list-group-active-bg: var(--bs-warning-text-emphasis);--bs-list-group-active-border-color: var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color: var(--bs-danger-text-emphasis);--bs-list-group-bg: var(--bs-danger-bg-subtle);--bs-list-group-border-color: var(--bs-danger-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-danger-border-subtle);--bs-list-group-active-color: var(--bs-danger-bg-subtle);--bs-list-group-active-bg: var(--bs-danger-text-emphasis);--bs-list-group-active-border-color: var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color: var(--bs-light-text-emphasis);--bs-list-group-bg: var(--bs-light-bg-subtle);--bs-list-group-border-color: var(--bs-light-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-light-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-light-border-subtle);--bs-list-group-active-color: var(--bs-light-bg-subtle);--bs-list-group-active-bg: var(--bs-light-text-emphasis);--bs-list-group-active-border-color: var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color: var(--bs-dark-text-emphasis);--bs-list-group-bg: var(--bs-dark-bg-subtle);--bs-list-group-border-color: var(--bs-dark-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-dark-border-subtle);--bs-list-group-active-color: var(--bs-dark-bg-subtle);--bs-list-group-active-bg: var(--bs-dark-text-emphasis);--bs-list-group-active-border-color: var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color: #000;--bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity: .5;--bs-btn-close-hover-opacity: .75;--bs-btn-close-focus-shadow: 0 0 0 .25rem rgba(51,122,183,0.25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: .25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme="dark"] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: .75rem;--bs-toast-padding-y: .5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width: var(--bs-border-width);--bs-toast-border-color: var(--bs-border-color-translucent);--bs-toast-border-radius: var(--bs-border-radius);--bs-toast-box-shadow: var(--bs-box-shadow);--bs-toast-header-color: var(--bs-secondary-color);--bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color: var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: .5rem;--bs-modal-color: ;--bs-modal-bg: var(--bs-body-bg);--bs-modal-border-color: var(--bs-border-color-translucent);--bs-modal-border-width: var(--bs-border-width);--bs-modal-border-radius: var(--bs-border-radius-lg);--bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: var(--bs-border-color);--bs-modal-header-border-width: var(--bs-border-width);--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: .5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: var(--bs-border-color);--bs-modal-footer-border-width: var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: .5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media (min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media (min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: .5rem;--bs-tooltip-padding-y: .25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:.875rem;--bs-tooltip-color: var(--bs-body-bg);--bs-tooltip-bg: var(--bs-emphasis-color);--bs-tooltip-border-radius: var(--bs-border-radius);--bs-tooltip-opacity: .9;--bs-tooltip-arrow-width: .8rem;--bs-tooltip-arrow-height: .4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:.875rem;--bs-popover-bg: var(--bs-body-bg);--bs-popover-border-width: var(--bs-border-width);--bs-popover-border-color: var(--bs-border-color-translucent);--bs-popover-border-radius: var(--bs-border-radius-lg);--bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: .5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: inherit;--bs-popover-header-bg: var(--bs-secondary-bg);--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: var(--bs-body-color);--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: .5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity 0.15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity 0.6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme="dark"] .carousel .carousel-control-prev-icon,[data-bs-theme="dark"] .carousel .carousel-control-next-icon,[data-bs-theme="dark"].carousel .carousel-control-prev-icon,[data-bs-theme="dark"].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme="dark"] .carousel .carousel-indicators [data-bs-target],[data-bs-theme="dark"].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme="dark"] .carousel .carousel-caption,[data-bs-theme="dark"].carousel .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-border-width: .25em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: .2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media (prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: var(--bs-body-color);--bs-offcanvas-bg: var(--bs-body-bg);--bs-offcanvas-border-width: var(--bs-border-width);--bs-offcanvas-border-color: var(--bs-border-color-translucent);--bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-offcanvas-transition: transform .3s ease-in-out;--bs-offcanvas-title-line-height: 1.5}@media (max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 575.98px) and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media (max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media (min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 767.98px) and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media (max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media (min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 991.98px) and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media (max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media (min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media (max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media (min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media (max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media (min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media (prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0,0,0,0.8) 75%, #000 95%);mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff !important;background-color:RGBA(51,122,183, var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(108,117,125, var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(25,135,84, var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#000 !important;background-color:RGBA(13,202,240, var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#000 !important;background-color:RGBA(255,193,7, var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(220,53,69, var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(248,249,250, var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(22,27,34, var(--bs-bg-opacity, 1)) !important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(41,98,146, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(41,98,146, var(--bs-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(86,94,100, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(86,94,100, var(--bs-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(20,108,67, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(20,108,67, var(--bs-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(61,213,243, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(61,213,243, var(--bs-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(255,205,57, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(255,205,57, var(--bs-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(176,42,55, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(176,42,55, var(--bs-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249,250,251, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249,250,251, var(--bs-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(18,22,27, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(18,22,27, var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:0.2s ease-in-out transform}@media (prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio: calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio: calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media (min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--bs-success-border-subtle) !important}.border-info-subtle{border-color:var(--bs-info-border-subtle) !important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle) !important}.border-light-subtle{border-color:var(--bs-light-border-subtle) !important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--bs-border-opacity: .1}.border-opacity-25{--bs-border-opacity: .25}.border-opacity-50{--bs-border-opacity: .5}.border-opacity-75{--bs-border-opacity: .75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + .9vw) !important}.fs-3{font-size:calc(1.3rem + .6vw) !important}.fs-4{font-size:calc(1.275rem + .3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,0.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,0.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: .25}.text-opacity-50{--bs-text-opacity: .5}.text-opacity-75{--bs-text-opacity: .75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: .1}.link-opacity-10-hover:hover{--bs-link-opacity: .1}.link-opacity-25{--bs-link-opacity: .25}.link-opacity-25-hover:hover{--bs-link-opacity: .25}.link-opacity-50{--bs-link-opacity: .5}.link-opacity-50-hover:hover{--bs-link-opacity: .5}.link-opacity-75{--bs-link-opacity: .75}.link-opacity-75-hover:hover{--bs-link-opacity: .75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--bs-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10{--bs-link-underline-opacity: .1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: .1}.link-underline-opacity-25{--bs-link-underline-opacity: .25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: .25}.link-underline-opacity-50{--bs-link-underline-opacity: .5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: .5}.link-underline-opacity-75{--bs-link-underline-opacity: .75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: .75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-opacity-10{--bs-bg-opacity: .1}.bg-opacity-25{--bs-bg-opacity: .25}.bg-opacity-50{--bs-bg-opacity: .5}.bg-opacity-75{--bs-bg-opacity: .75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media (min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media (min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}@media (min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}/*! + * Bootstrap Docs (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors + * Licensed under the Creative Commons Attribution 3.0 Unported License. + * For details, see https://creativecommons.org/licenses/by/3.0/. + */:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.grid{display:grid;grid-template-rows:repeat(var(--bs-rows, 1), 1fr);grid-template-columns:repeat(var(--bs-columns, 12), 1fr);gap:var(--bs-gap, 1.5rem)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media (min-width: 576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media (min-width: 768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media (min-width: 992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media (min-width: 1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media (min-width: 1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}:root,[data-bs-theme="light"]{--bd-purple: #4c0bce;--bd-violet: #712cf9;--bd-accent: #ffe484;--bd-violet-rgb: 112.520718,44.062154,249.437846;--bd-accent-rgb: 255,228,132;--bd-pink-rgb: 214,51,132;--bd-teal-rgb: 32,201,151;--bd-violet-bg: var(--bd-violet);--bd-toc-color: var(--bd-violet);--bd-sidebar-link-bg: rgba(var(--bd-violet-rgb), .1);--bd-callout-link: 10,88,202;--bd-callout-code-color: #ab296a;--bd-pre-bg: var(--bs-tertiary-bg)}[data-bs-theme="dark"]{--bd-violet: #9461fb;--bd-violet-bg: #712cf9;--bd-toc-color: var(--bs-emphasis-color);--bd-sidebar-link-bg: rgba(84,33,187, .5);--bd-callout-link: 110,168,254;--bd-callout-code-color: #e685b5;--bd-pre-bg: #1b1f22}.bd-navbar{padding:.75rem 0;background-color:transparent;box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15),inset 0 -1px 0 rgba(255,255,255,0.15)}.bd-navbar::after{position:absolute;inset:0;z-index:-1;display:block;content:"";background-image:linear-gradient(rgba(var(--bd-violet-rgb), 1), rgba(var(--bd-violet-rgb), 0.95))}@media (max-width: 991.98px){.bd-navbar .bd-navbar-toggle{width:4.25rem}}.bd-navbar .navbar-toggler{padding:0;margin-right:-.5rem;border:0}.bd-navbar .navbar-toggler:first-child{margin-left:-.5rem}.bd-navbar .navbar-toggler .bi{width:1.5rem;height:1.5rem}.bd-navbar .navbar-toggler:focus{box-shadow:none}.bd-navbar .navbar-brand{color:#fff;transition:transform 0.2s ease-in-out}@media (prefers-reduced-motion: reduce){.bd-navbar .navbar-brand{transition:none}}.bd-navbar .navbar-brand:hover{transform:rotate(-5deg) scale(1.1)}.bd-navbar .navbar-toggler,.bd-navbar .nav-link{padding-right:.25rem;padding-left:.25rem;color:rgba(255,255,255,0.85)}.bd-navbar .navbar-toggler:hover,.bd-navbar .navbar-toggler:focus,.bd-navbar .nav-link:hover,.bd-navbar .nav-link:focus{color:#fff}.bd-navbar .navbar-toggler.active,.bd-navbar .nav-link.active{font-weight:600;color:#fff}.bd-navbar .navbar-nav-svg{display:inline-block;vertical-align:-.125rem}.bd-navbar .offcanvas-lg{background-color:var(--bd-violet-bg);border-left:0}@media (max-width: 991.98px){.bd-navbar .offcanvas-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175)}}.bd-navbar .dropdown-toggle:focus:not(:focus-visible){outline:0}.bd-navbar .dropdown-menu{--bs-dropdown-min-width: 12rem;--bs-dropdown-padding-x: .25rem;--bs-dropdown-padding-y: .25rem;--bs-dropdown-link-hover-bg: rgba(var(--bd-violet-rgb), .1);--bs-dropdown-link-active-bg: rgba(var(--bd-violet-rgb), 1);--bs-dropdown-font-size:.875rem;font-size:.875rem;border-radius:.5rem;box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15)}.bd-navbar .dropdown-menu li+li{margin-top:.125rem}.bd-navbar .dropdown-menu .dropdown-item{border-radius:.25rem}.bd-navbar .dropdown-menu .dropdown-item:active .bi{color:inherit !important}.bd-navbar .dropdown-menu .active{font-weight:600}.bd-navbar .dropdown-menu .active .bi{display:block !important}.bd-navbar .dropdown-menu-end{--bs-dropdown-min-width: 8rem}[data-bs-theme="dark"] .bd-navbar{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15),inset 0 -1px 0 rgba(255,255,255,0.15)}:root{--docsearch-primary-color: var(--bd-violet);--docsearch-logo-color: var(--bd-violet)}[data-bs-theme="dark"]{--docsearch-text-color: #f5f6f7;--docsearch-container-background: rgba(9, 10, 17, .8);--docsearch-modal-background: #15172a;--docsearch-modal-shadow: inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;--docsearch-searchbox-background: #090a11;--docsearch-searchbox-focus-background: #000;--docsearch-hit-color: #bec3c9;--docsearch-hit-shadow: none;--docsearch-hit-background: #090a11;--docsearch-key-gradient: linear-gradient(-26.5deg, #565872, #31355b);--docsearch-key-shadow: inset 0 -2px 0 0 #282d55, inset 0 0 1px 1px #51577d, 0 2px 2px 0 rgba(3, 4, 9, .3);--docsearch-footer-background: #1e2136;--docsearch-footer-shadow: inset 0 1px 0 0 rgba(73, 76, 106, .5), 0 -4px 8px 0 rgba(0, 0, 0, .2);--docsearch-muted-color: #7f8497}.bd-search{position:relative}@media (min-width: 992px){.bd-search{position:absolute;top:.875rem;left:50%;width:200px;margin-left:-100px}}@media (min-width: 1200px){.bd-search{width:280px;margin-left:-140px}}.DocSearch-Container{--docsearch-muted-color: var(--bs-secondary-color);--docsearch-hit-shadow: none;z-index:2000;cursor:auto}@media (min-width: 992px){.DocSearch-Container{padding-top:4rem}}.DocSearch-Button{--docsearch-searchbox-background: rgba(0,0,0,0.1);--docsearch-searchbox-color: #fff;--docsearch-searchbox-focus-background: rgba(0,0,0,0.25);--docsearch-searchbox-shadow: 0 0 0 0.25rem rgba(255,228,132,0.4);--docsearch-text-color: #fff;--docsearch-muted-color: rgba(255,255,255,0.65);width:100%;height:38px;margin:0;border:1px solid rgba(255,255,255,0.4);border-radius:.375rem}.DocSearch-Button .DocSearch-Search-Icon{opacity:.65}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{border-color:#ffe484}.DocSearch-Button:active .DocSearch-Search-Icon,.DocSearch-Button:focus .DocSearch-Search-Icon,.DocSearch-Button:hover .DocSearch-Search-Icon{opacity:1}@media (max-width: 991.98px){.DocSearch-Button,.DocSearch-Button:hover,.DocSearch-Button:focus{background:transparent;border:0;box-shadow:none}.DocSearch-Button:focus{box-shadow:var(--docsearch-searchbox-shadow)}}@media (max-width: 991.98px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch-Button-Keys{min-width:0;padding:.125rem .25rem;background:rgba(0,0,0,0.25);border-radius:.25rem}.DocSearch-Button-Key{top:0;width:auto;height:1.25rem;padding-right:.125rem;padding-left:.125rem;margin-right:0;font-size:.875rem;background:none;box-shadow:none}.DocSearch-Commands-Key{padding-left:1px;font-size:.875rem;background-color:rgba(0,0,0,0.1);background-image:none;box-shadow:none}.DocSearch-Form{border-radius:var(--bs-border-radius)}.DocSearch-Hits mark,.DocSearch-Hits .mark{padding:0}.DocSearch-Hit{padding-bottom:0;border-radius:0}.DocSearch-Hit a{border-radius:0;border:solid var(--bs-border-color);border-width:0 1px 1px}.DocSearch-Hit:first-child a{border-top-left-radius:var(--bs-border-radius);border-top-right-radius:var(--bs-border-radius);border-top-width:1px}.DocSearch-Hit:last-child a{border-bottom-right-radius:var(--bs-border-radius);border-bottom-left-radius:var(--bs-border-radius)}.DocSearch-Hit-icon{display:flex;align-items:center}.DocSearch-Logo svg .cls-1,.DocSearch-Logo svg .cls-2{fill:var(--docsearch-logo-color)}.bd-masthead{--bd-pink-rgb: 214,51,132;padding:3rem 0;background-image:linear-gradient(180deg, rgba(var(--bs-body-bg-rgb), 0.01), rgba(var(--bs-body-bg-rgb), 1) 85%),radial-gradient(ellipse at top left, rgba(var(--bs-primary-rgb), 0.5), transparent 50%),radial-gradient(ellipse at top right, rgba(var(--bd-accent-rgb), 0.5), transparent 50%),radial-gradient(ellipse at center right, rgba(var(--bd-violet-rgb), 0.5), transparent 50%),radial-gradient(ellipse at center left, rgba(var(--bd-pink-rgb), 0.5), transparent 50%)}.bd-masthead h1,.bd-masthead .h1{--bs-heading-color: var(--bs-emphasis-color);font-size:calc(1.525rem + 3.3vw)}@media (min-width: 1200px){.bd-masthead h1,.bd-masthead .h1{font-size:4rem}}.bd-masthead .lead{font-size:1rem;font-weight:400;color:var(--bs-secondary-color)}.bd-masthead .bd-code-snippet{margin:0;border-radius:.5rem}.bd-masthead .highlight{width:100%;padding:.5rem 1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:rgba(var(--bs-body-color-rgb), 0.075);border-radius:.5rem}@media (min-width: 992px){.bd-masthead .highlight{padding-right:4rem}}.bd-masthead .highlight pre{padding:0;margin-top:.625rem;margin-right:1.875rem;margin-bottom:.625rem;overflow:hidden}.bd-masthead .btn-clipboard{position:absolute;top:-.625rem;right:0;background-color:transparent}.bd-masthead #carbonads{margin-inline:auto}@media (min-width: 768px){.bd-masthead .lead{font-size:calc(1.275rem + .3vw)}}@media (min-width: 768px) and (min-width: 1200px){.bd-masthead .lead{font-size:1.5rem}}.masthead-followup h2,.masthead-followup .h2,.masthead-followup h3,.masthead-followup .h3,.masthead-followup h4,.masthead-followup .h4{--bs-heading-color: var(--bs-emphasis-color)}.masthead-followup .lead{font-size:1rem}.masthead-followup .highlight{border-radius:.5rem}@media (min-width: 768px){.masthead-followup .lead{font-size:1.25rem}}.masthead-followup-icon{padding:1rem;color:rgba(var(--bg-rgb), 1);background-color:rgba(var(--bg-rgb), 0.1);background-blend-mode:multiple;border-radius:1rem;mix-blend-mode:darken}.masthead-followup-icon svg{filter:drop-shadow(0 1px 1px var(--bs-body-bg))}.masthead-notice{background-color:var(--bd-accent);box-shadow:inset 0 -1px 1px rgba(var(--bs-body-color-rgb), 0.15),0 0.25rem 1.5rem rgba(var(--bs-body-bg-rgb), 0.75)}.animate-img>img{transition:transform 0.2s ease-in-out}@media (prefers-reduced-motion: reduce){.animate-img>img{transition:none}}.animate-img:hover>img{transform:scale(1.1)}[data-bs-theme="dark"] .masthead-followup-icon{mix-blend-mode:lighten}#carbonads{position:static;display:block;max-width:400px;padding:15px 15px 15px 160px;margin:2rem 0;overflow:hidden;font-size:.8125rem;line-height:1.4;text-align:left;background-color:var(--bs-tertiary-bg)}#carbonads a{color:var(--bs-body-color);text-decoration:none}@media (min-width: 576px){#carbonads{border-radius:.5rem}}.carbon-img{float:left;margin-left:-145px}.carbon-poweredby{display:block;margin-top:.75rem;color:var(--bs-body-color) !important}.bd-content>h2,.bd-content>.h2,.bd-content>h3,.bd-content>.h3,.bd-content>h4,.bd-content>.h4{--bs-heading-color: var(--bs-emphasis-color)}.bd-content>h2:not(:first-child),.bd-content>.h2:not(:first-child){margin-top:3rem}.bd-content>h3,.bd-content>.h3{margin-top:2rem}.bd-content>ul li,.bd-content>ol li{margin-bottom:.25rem}.bd-content>ul li>p~ul,.bd-content>ol li>p~ul{margin-top:-.5rem;margin-bottom:1rem}.bd-content>.table,.bd-content>.table-responsive .table{--bs-table-border-color: var(--bs-border-color);max-width:100%;margin-bottom:1.5rem;font-size:.875rem}@media (max-width: 991.98px){.bd-content>.table.table-bordered,.bd-content>.table-responsive .table.table-bordered{border:0}}.bd-content>.table thead,.bd-content>.table-responsive .table thead{border-bottom:2px solid currentcolor}.bd-content>.table tbody:not(:first-child),.bd-content>.table-responsive .table tbody:not(:first-child){border-top:2px solid currentcolor}.bd-content>.table th:first-child,.bd-content>.table td:first-child,.bd-content>.table-responsive .table th:first-child,.bd-content>.table-responsive .table td:first-child{padding-left:0}.bd-content>.table th:not(:last-child),.bd-content>.table td:not(:last-child),.bd-content>.table-responsive .table th:not(:last-child),.bd-content>.table-responsive .table td:not(:last-child){padding-right:1.5rem}.bd-content>.table th,.bd-content>.table-responsive .table th{color:var(--bs-emphasis-color)}.bd-content>.table strong,.bd-content>.table-responsive .table strong{color:var(--bs-emphasis-color)}.bd-content>.table th,.bd-content>.table td:first-child>code,.bd-content>.table-responsive .table th,.bd-content>.table-responsive .table td:first-child>code{white-space:nowrap}.table-options td:nth-child(2){min-width:160px}.table-options td:last-child,.table-utilities td:last-child{min-width:280px}.table-swatches th{color:var(--bs-emphasis-color)}.table-swatches td code{white-space:nowrap}.bd-title{--bs-heading-color: var(--bs-emphasis-color);font-size:calc(1.425rem + 2.1vw)}@media (min-width: 1200px){.bd-title{font-size:3rem}}.bd-lead{font-size:calc(1.275rem + .3vw);font-weight:300}@media (min-width: 1200px){.bd-lead{font-size:1.5rem}}.bi{width:1em;height:1em;vertical-align:-.125em;fill:currentcolor}@media (min-width: 992px){.border-lg-start{border-left:var(--bs-border-width) solid var(--bs-border-color)}}.bd-summary-link{color:var(--bs-link-color)}.bd-summary-link:hover,details[open]>.bd-summary-link{color:var(--bs-link-hover-color)}[data-bs-theme="blue"]{--bs-body-color: var(--bs-white);--bs-body-color-rgb: 255,255,255;--bs-body-bg: var(--bs-blue);--bs-body-bg-rgb: 13,110,253;--bs-tertiary-bg: #0a58ca}[data-bs-theme="blue"] .dropdown-menu{--bs-dropdown-bg: #0c63e4;--bs-dropdown-link-active-bg: #084298}[data-bs-theme="blue"] .btn-secondary{--bs-btn-bg: #3d8bfc;--bs-btn-border-color: rgba(255,255,255,0.25);--bs-btn-hover-bg: #247cfc;--bs-btn-hover-border-color: rgba(255,255,255,0.25);--bs-btn-active-bg: #0b6dfb;--bs-btn-active-border-color: rgba(255,255,255,0.5);--bs-btn-focus-border-color: rgba(255,255,255,0.5);--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(255, 255, 255, .2)}.skippy{background-color:#4c0bce}.skippy a{color:#fff}@media (min-width: 992px){.bd-sidebar{position:-webkit-sticky;position:sticky;top:5rem;display:block !important;height:calc(100vh - 6rem);padding-left:.25rem;margin-left:-.25rem;overflow-y:auto}}@media (max-width: 991.98px){.bd-sidebar .offcanvas-lg{border-right-color:var(--bs-border-color);box-shadow:0 1rem 3rem rgba(0,0,0,0.175)}}.bd-links-heading{color:var(--bs-emphasis-color)}@media (max-width: 991.98px){.bd-links-nav{font-size:.875rem}}@media (max-width: 991.98px){.bd-links-nav{-moz-column-count:2;column-count:2;-moz-column-gap:1.5rem;column-gap:1.5rem}.bd-links-nav .bd-links-group{-moz-column-break-inside:avoid;break-inside:avoid}.bd-links-nav .bd-links-span-all{-moz-column-span:all;column-span:all}}.bd-links-link{padding:.1875rem .5rem;margin-top:.125rem;margin-left:1.125rem;color:var(--bs-body-color);text-decoration:none}.bd-links-link:hover,.bd-links-link:focus,.bd-links-link.active{color:var(--bs-emphasis-color);background-color:var(--bd-sidebar-link-bg)}.bd-links-link.active{font-weight:600}.bd-gutter{--bs-gutter-x: 3rem}@media (min-width: 992px){.bd-layout{display:grid;grid-template-areas:"sidebar main";grid-template-columns:1fr 5fr;gap:1.5rem}}.bd-sidebar{grid-area:sidebar}.bd-main{grid-area:main}@media (max-width: 991.98px){.bd-main{max-width:760px;margin-inline:auto}}@media (min-width: 768px){.bd-main{display:grid;grid-template-areas:"intro" "toc" "content";grid-template-rows:auto auto 1fr;gap:inherit}}@media (min-width: 992px){.bd-main{grid-template-areas:"intro toc" "content toc";grid-template-rows:auto 1fr;grid-template-columns:4fr 1fr}}.bd-intro{grid-area:intro}.bd-toc{grid-area:toc}.bd-content{grid-area:content;min-width:1px}@media (min-width: 992px){.bd-toc{position:-webkit-sticky;position:sticky;top:5rem;right:0;z-index:2;height:calc(100vh - 7rem);overflow-y:auto}}.bd-toc nav{font-size:.875rem}.bd-toc nav ul{padding-left:0;margin-bottom:0;list-style:none}.bd-toc nav ul ul{padding-left:1rem}.bd-toc nav a{display:block;padding:.125rem 0 .125rem .75rem;color:inherit;text-decoration:none;border-left:.125rem solid transparent}.bd-toc nav a:hover,.bd-toc nav a.active{color:var(--bd-toc-color);border-left-color:var(--bd-toc-color)}.bd-toc nav a.active{font-weight:500}.bd-toc nav a code{font:inherit}.bd-toc-toggle{display:flex;align-items:center}@media (max-width: 575.98px){.bd-toc-toggle{justify-content:space-between;width:100%}}@media (max-width: 767.98px){.bd-toc-toggle{color:var(--bs-body-color);border:1px solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.bd-toc-toggle:hover,.bd-toc-toggle:focus,.bd-toc-toggle:active,.bd-toc-toggle[aria-expanded="true"]{color:var(--bd-violet);background-color:var(--bs-body-bg);border-color:var(--bd-violet)}.bd-toc-toggle:focus,.bd-toc-toggle[aria-expanded="true"]{box-shadow:0 0 0 3px rgba(var(--bd-violet-rgb), 0.25)}}@media (max-width: 767.98px){.bd-toc-collapse nav{padding:1.25rem 1.25rem 1.25rem 1rem;background-color:var(--bs-tertiary-bg);border:1px solid var(--bs-border-color);border-radius:var(--bs-border-radius)}}@media (min-width: 768px){.bd-toc-collapse{display:block !important}}.bd-footer a{color:var(--bs-body-color);text-decoration:none}.bd-footer a:hover,.bd-footer a:focus{color:var(--bs-link-hover-color);text-decoration:underline}.bd-example-snippet{border:solid var(--bs-border-color);border-width:1px 0}@media (min-width: 768px){.bd-example-snippet{border-width:1px}}.bd-example{--bd-example-padding: 1rem;position:relative;padding:var(--bd-example-padding);margin:0 -1.5rem;border:solid var(--bs-border-color);border-width:1px 0}.bd-example::after{display:block;clear:both;content:""}@media (min-width: 768px){.bd-example{--bd-example-padding: 1.5rem;margin-right:0;margin-left:0;border-width:1px;border-top-left-radius:var(--bs-border-radius);border-top-right-radius:var(--bs-border-radius)}}.bd-example+.bd-code-snippet{border-top-left-radius:0;border-top-right-radius:0;border:solid var(--bs-border-color);border-width:0 1px 1px}.bd-example+p{margin-top:2rem}.bd-example>.form-control+.form-control{margin-top:.5rem}.bd-example>.nav+.nav,.bd-example>.alert+.alert,.bd-example>.navbar+.navbar,.bd-example>.progress+.progress{margin-top:1rem}.bd-example>.dropdown-menu{position:static;display:block}.bd-example>:last-child,.bd-example>nav:last-child .breadcrumb{margin-bottom:0}.bd-example>hr:last-child{margin-bottom:1rem}.bd-example>svg+svg,.bd-example>img+img{margin-left:.5rem}.bd-example>.btn,.bd-example>.btn-group{margin:.25rem .125rem}.bd-example>.btn-toolbar+.btn-toolbar{margin-top:.5rem}.bd-example>.list-group{max-width:400px}.bd-example>[class*="list-group-horizontal"]{max-width:100%}.bd-example .fixed-top,.bd-example .sticky-top{position:static;margin:calc(var(--bd-example-padding) * -1) calc(var(--bd-example-padding) * -1) var(--bd-example-padding)}.bd-example .fixed-bottom,.bd-example .sticky-bottom{position:static;margin:var(--bd-example-padding) calc(var(--bd-example-padding) * -1) calc(var(--bd-example-padding) * -1)}.bd-example .pagination{margin-bottom:0}.bd-example-row [class^="col"],.bd-example-cols [class^="col"]>*,.bd-example-cssgrid [class*="grid"]>*{padding-top:.75rem;padding-bottom:.75rem;background-color:rgba(var(--bd-violet-rgb), 0.15);border:1px solid rgba(var(--bd-violet-rgb), 0.3)}.bd-example-row .row+.row,.bd-example-cssgrid .grid+.grid{margin-top:1rem}.bd-example-row-flex-cols .row{min-height:10rem;background-color:rgba(var(--bd-violet-rgb), 0.15)}.bd-example-flex div:not(.vr){background-color:rgba(var(--bd-violet-rgb), 0.15);border:1px solid rgba(var(--bd-violet-rgb), 0.3)}.example-container{width:800px;--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}.example-row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.example-content-main{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}@media (min-width: 576px){.example-content-main{flex:0 0 auto;width:50%}}@media (min-width: 992px){.example-content-main{flex:0 0 auto;width:66.666667%}}.example-content-secondary{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}@media (min-width: 576px){.example-content-secondary{flex:0 0 auto;width:50%}}@media (min-width: 992px){.example-content-secondary{flex:0 0 auto;width:33.333333%}}.bd-example-ratios .ratio{display:inline-block;width:10rem;color:var(--bs-secondary-color);background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color)}.bd-example-ratios .ratio>div{display:flex;align-items:center;justify-content:center}.bd-example-ratios-breakpoint .ratio-4x3{width:16rem}@media (min-width: 768px){.bd-example-ratios-breakpoint .ratio-4x3{--bs-aspect-ratio: 50%}}.bd-example-offcanvas .offcanvas{position:static;display:block;height:200px;visibility:visible;transform:translate(0)}.tooltip-demo a{white-space:nowrap}.tooltip-demo .btn{margin:.25rem .125rem}.custom-tooltip{--bs-tooltip-bg: var(--bs-primary)}.custom-popover{--bs-popover-max-width: 200px;--bs-popover-border-color: var(--bs-primary);--bs-popover-header-bg: var(--bs-primary);--bs-popover-header-color: var(--bs-white);--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: .5rem}.scrollspy-example{height:200px;margin-top:.5rem;overflow:auto}.scrollspy-example-2{height:350px;overflow:auto}.simple-list-example-scrollspy .active{background-color:rgba(var(--bd-violet-rgb), 0.15)}.bd-example-border-utils [class^="border"]{display:inline-block;width:5rem;height:5rem;margin:.25rem;background-color:var(--bs-tertiary-bg)}.bd-example-rounded-utils [class*="rounded"]{margin:.25rem}.bd-example-position-utils{position:relative;padding:2rem}.bd-example-position-utils .position-relative{height:200px;background-color:var(--bs-tertiary-bg)}.bd-example-position-utils .position-absolute{width:2rem;height:2rem;background-color:var(--bs-body-color);border-radius:.375rem}.bd-example-position-examples::after{content:none}.bd-example-placeholder-cards::after{display:none}.bd-example-placeholder-cards .card{width:18rem}.bd-example-toasts{min-height:240px}.bd-example-zindex-levels{min-height:15rem}.bd-example-zindex-levels>div{color:var(--bs-body-bg);background-color:var(--bd-violet);border:1px solid var(--bd-purple)}.bd-example-zindex-levels>div>span{position:absolute;right:5px;bottom:0}.bd-example-zindex-levels>:nth-child(2){top:3rem;left:3rem}.bd-example-zindex-levels>:nth-child(3){top:4.5rem;left:4.5rem}.bd-example-zindex-levels>:nth-child(4){top:6rem;left:6rem}.bd-example-zindex-levels>:nth-child(5){top:7.5rem;left:7.5rem}.highlight{position:relative;padding:0.75rem 1.5rem;margin-bottom:1rem;background-color:var(--bd-pre-bg)}@media (min-width: 768px){.highlight{padding:.75rem 1.25rem;border-radius:var(--bs-border-radius)}}.highlight pre{padding:.25rem 0 .875rem;margin-top:.8125rem;margin-right:1.875rem;margin-bottom:0;overflow:overlay;white-space:pre;background-color:transparent;border:0}.highlight pre code{font-size:inherit;color:var(--bs-body-color);word-wrap:normal}.bd-code-snippet{margin:0 -1.5rem 1rem}.bd-code-snippet .highlight{margin-bottom:0;border-top-left-radius:0;border-top-right-radius:0}.bd-code-snippet .bd-example{margin:0;border:0}@media (min-width: 768px){.bd-code-snippet{margin-right:0;margin-left:0;border-radius:.375rem}}.highlight-toolbar{background-color:var(--bd-pre-bg)}.bd-scss-docs .highlight-toolbar{border-top-left-radius:calc(var(--bs-border-radius) + 1px);border-top-right-radius:calc(var(--bs-border-radius) + 1px)}.btn-bd-primary{--bs-btn-font-weight: 600;--bs-btn-color: var(--bs-white);--bs-btn-bg: var(--bd-violet-bg);--bs-btn-border-color: var(--bd-violet-bg);--bs-btn-hover-color: var(--bs-white);--bs-btn-hover-bg: #6528e0;--bs-btn-hover-border-color: #6528e0;--bs-btn-focus-shadow-rgb: var(--bd-violet-rgb);--bs-btn-active-color: var(--bs-btn-hover-color);--bs-btn-active-bg: #5a23c8;--bs-btn-active-border-color: #5a23c8}.btn-bd-accent{--bs-btn-font-weight: 600;--bs-btn-color: var(--bd-accent);--bs-btn-border-color: var(--bd-accent);--bs-btn-hover-color: var(--bd-dark);--bs-btn-hover-bg: var(--bd-accent);--bs-btn-hover-border-color: var(--bd-accent);--bs-btn-focus-shadow-rgb: var(--bd-accent-rgb);--bs-btn-active-color: var(--bs-btn-hover-color);--bs-btn-active-bg: var(--bs-btn-hover-bg);--bs-btn-active-border-color: var(--bs-btn-hover-border-color)}.btn-bd-light{--btn-custom-color: #9461fb;--bs-btn-color: var(--bs-gray-600);--bs-btn-border-color: var(--bs-border-color);--bs-btn-hover-color: var(--btn-custom-color);--bs-btn-hover-border-color: var(--btn-custom-color);--bs-btn-active-color: var(--btn-custom-color);--bs-btn-active-bg: var(--bs-white);--bs-btn-active-border-color: var(--btn-custom-color);--bs-btn-focus-border-color: var(--btn-custom-color);--bs-btn-focus-shadow-rgb: var(--bd-violet-rgb)}.bd-btn-lg{--bs-btn-border-radius: .5rem;padding:.8125rem 2rem}.bd-callout{--bs-link-color-rgb: var(--bd-callout-link);--bs-code-color: var(--bd-callout-code-color);padding:1.25rem;margin-top:1.25rem;margin-bottom:1.25rem;color:var(--bd-callout-color, inherit);background-color:var(--bd-callout-bg, var(--bs-gray-100));border-left:0.25rem solid var(--bd-callout-border, var(--bs-gray-300))}.bd-callout h4,.bd-callout .h4{margin-bottom:.25rem}.bd-callout>:last-child{margin-bottom:0}.bd-callout+.bd-callout{margin-top:-.25rem}.bd-callout .highlight{background-color:rgba(0,0,0,0.05)}.bd-callout-info{--bd-callout-color: var(--bs-info-text-emphasis);--bd-callout-bg: var(--bs-info-bg-subtle);--bd-callout-border: var(--bs-info-border-subtle)}.bd-callout-warning{--bd-callout-color: var(--bs-warning-text-emphasis);--bd-callout-bg: var(--bs-warning-bg-subtle);--bd-callout-border: var(--bs-warning-border-subtle)}.bd-callout-danger{--bd-callout-color: var(--bs-danger-text-emphasis);--bd-callout-bg: var(--bs-danger-bg-subtle);--bd-callout-border: var(--bs-danger-border-subtle)}.bd-brand-logos{color:#712cf9}.bd-brand-logos .inverse{color:#fff;background-color:#712cf9}.bd-brand-item+.bd-brand-item{border-top:1px solid var(--bs-border-color)}@media (min-width: 768px){.bd-brand-item+.bd-brand-item{border-top:0;border-left:1px solid var(--bs-border-color)}}.color-swatches{margin:0 -5px}.color-swatches .bd-purple{background-color:#4c0bce}.color-swatches .bd-purple-light{background-color:#d5c1fd}.color-swatches .bd-purple-lighter{background-color:#e5e1ea}.color-swatches .bd-gray{background-color:#f9f9f9}.color-swatch{width:4rem;height:4rem}@media (min-width: 768px){.color-swatch{width:6rem;height:6rem}}.swatch-blue{color:#fff;background-color:#0d6efd}.swatch-blue::after{position:absolute;top:1rem;right:1rem;padding-left:1rem;font-size:.75rem;line-height:1.35;white-space:pre;content:"4.50" "\a" "4.50" "\a" "4.66";background-color:#0d6efd;background-image:linear-gradient(to bottom, transparent 0.25rem, #fff 0.25rem 0.75rem, transparent 0.75rem 1.25rem, #fff 1.25rem 1.75rem, transparent 1.75rem 2.25rem, #000 2.25rem 2.75rem, transparent 2.75rem);background-repeat:no-repeat;background-size:.5rem 100%}.swatch-indigo{color:#fff;background-color:#6610f2}.swatch-indigo::after{position:absolute;top:1rem;right:1rem;padding-left:1rem;font-size:.75rem;line-height:1.35;white-space:pre;content:"7.18" "\a" "7.18" "\a" "2.92";background-color:#6610f2;background-image:linear-gradient(to bottom, transparent 0.25rem, #fff 0.25rem 0.75rem, transparent 0.75rem 1.25rem, #fff 1.25rem 1.75rem, transparent 1.75rem 2.25rem, #000 2.25rem 2.75rem, transparent 2.75rem);background-repeat:no-repeat;background-size:.5rem 100%}.swatch-purple{color:#fff;background-color:#6f42c1}.swatch-purple::after{position:absolute;top:1rem;right:1rem;padding-left:1rem;font-size:.75rem;line-height:1.35;white-space:pre;content:"6.51" "\a" "6.51" "\a" "3.22";background-color:#6f42c1;background-image:linear-gradient(to bottom, transparent 0.25rem, #fff 0.25rem 0.75rem, transparent 0.75rem 1.25rem, #fff 1.25rem 1.75rem, transparent 1.75rem 2.25rem, #000 2.25rem 2.75rem, transparent 2.75rem);background-repeat:no-repeat;background-size:.5rem 100%}.swatch-pink{color:#fff;background-color:#d63384}.swatch-pink::after{position:absolute;top:1rem;right:1rem;padding-left:1rem;font-size:.75rem;line-height:1.35;white-space:pre;content:"4.50" "\a" "4.50" "\a" "4.66";background-color:#d63384;background-image:linear-gradient(to bottom, transparent 0.25rem, #fff 0.25rem 0.75rem, transparent 0.75rem 1.25rem, #fff 1.25rem 1.75rem, transparent 1.75rem 2.25rem, #000 2.25rem 2.75rem, transparent 2.75rem);background-repeat:no-repeat;background-size:.5rem 100%}.swatch-red{color:#fff;background-color:#dc3545}.swatch-red::after{position:absolute;top:1rem;right:1rem;padding-left:1rem;font-size:.75rem;line-height:1.35;white-space:pre;content:"4.52" "\a" "4.52" "\a" "4.63";background-color:#dc3545;background-image:linear-gradient(to bottom, transparent 0.25rem, #fff 0.25rem 0.75rem, transparent 0.75rem 1.25rem, #fff 1.25rem 1.75rem, transparent 1.75rem 2.25rem, #000 2.25rem 2.75rem, transparent 2.75rem);background-repeat:no-repeat;background-size:.5rem 100%}.swatch-orange{color:#000;background-color:#fd7e14}.swatch-orange::after{position:absolute;top:1rem;right:1rem;padding-left:1rem;font-size:.75rem;line-height:1.35;white-space:pre;content:"8.17" "\a" "2.57" "\a" "8.17";background-color:#fd7e14;background-image:linear-gradient(to bottom, transparent 0.25rem, #000 0.25rem 0.75rem, transparent 0.75rem 1.25rem, #fff 1.25rem 1.75rem, transparent 1.75rem 2.25rem, #000 2.25rem 2.75rem, transparent 2.75rem);background-repeat:no-repeat;background-size:.5rem 100%}.swatch-yellow{color:#000;background-color:#ffc107}.swatch-yellow::after{position:absolute;top:1rem;right:1rem;padding-left:1rem;font-size:.75rem;line-height:1.35;white-space:pre;content:"12.8" "\a" "1.63" "\a" "12.8";background-color:#ffc107;background-image:linear-gradient(to bottom, transparent 0.25rem, #000 0.25rem 0.75rem, transparent 0.75rem 1.25rem, #fff 1.25rem 1.75rem, transparent 1.75rem 2.25rem, #000 2.25rem 2.75rem, transparent 2.75rem);background-repeat:no-repeat;background-size:.5rem 100%}.swatch-green{color:#fff;background-color:#198754}.swatch-green::after{position:absolute;top:1rem;right:1rem;padding-left:1rem;font-size:.75rem;line-height:1.35;white-space:pre;content:"4.53" "\a" "4.53" "\a" "4.63";background-color:#198754;background-image:linear-gradient(to bottom, transparent 0.25rem, #fff 0.25rem 0.75rem, transparent 0.75rem 1.25rem, #fff 1.25rem 1.75rem, transparent 1.75rem 2.25rem, #000 2.25rem 2.75rem, transparent 2.75rem);background-repeat:no-repeat;background-size:.5rem 100%}.swatch-teal{color:#000;background-color:#20c997}.swatch-teal::after{position:absolute;top:1rem;right:1rem;padding-left:1rem;font-size:.75rem;line-height:1.35;white-space:pre;content:"9.86" "\a" "2.12" "\a" "9.86";background-color:#20c997;background-image:linear-gradient(to bottom, transparent 0.25rem, #000 0.25rem 0.75rem, transparent 0.75rem 1.25rem, #fff 1.25rem 1.75rem, transparent 1.75rem 2.25rem, #000 2.25rem 2.75rem, transparent 2.75rem);background-repeat:no-repeat;background-size:.5rem 100%}.swatch-cyan{color:#000;background-color:#0dcaf0}.swatch-cyan::after{position:absolute;top:1rem;right:1rem;padding-left:1rem;font-size:.75rem;line-height:1.35;white-space:pre;content:"10.7" "\a" "1.95" "\a" "10.7";background-color:#0dcaf0;background-image:linear-gradient(to bottom, transparent 0.25rem, #000 0.25rem 0.75rem, transparent 0.75rem 1.25rem, #fff 1.25rem 1.75rem, transparent 1.75rem 2.25rem, #000 2.25rem 2.75rem, transparent 2.75rem);background-repeat:no-repeat;background-size:.5rem 100%}.swatch-black{color:#fff;background-color:#000}.swatch-black::after{position:absolute;top:1rem;right:1rem;padding-left:1rem;font-size:.75rem;line-height:1.35;white-space:pre;content:"21" "\a" "21" "\a" "1";background-color:#000;background-image:linear-gradient(to bottom, transparent 0.25rem, #fff 0.25rem 0.75rem, transparent 0.75rem 1.25rem, #fff 1.25rem 1.75rem, transparent 1.75rem 2.25rem, #000 2.25rem 2.75rem, transparent 2.75rem);background-repeat:no-repeat;background-size:.5rem 100%}.swatch-white{color:#000;background-color:#fff}.swatch-white::after{position:absolute;top:1rem;right:1rem;padding-left:1rem;font-size:.75rem;line-height:1.35;white-space:pre;content:"21" "\a" "1" "\a" "21";background-color:#fff;background-image:linear-gradient(to bottom, transparent 0.25rem, #000 0.25rem 0.75rem, transparent 0.75rem 1.25rem, #fff 1.25rem 1.75rem, transparent 1.75rem 2.25rem, #000 2.25rem 2.75rem, transparent 2.75rem);background-repeat:no-repeat;background-size:.5rem 100%}.swatch-gray{color:#fff;background-color:#6c757d}.swatch-gray::after{position:absolute;top:1rem;right:1rem;padding-left:1rem;font-size:.75rem;line-height:1.35;white-space:pre;content:"4.68" "\a" "4.68" "\a" "4.47";background-color:#6c757d;background-image:linear-gradient(to bottom, transparent 0.25rem, #fff 0.25rem 0.75rem, transparent 0.75rem 1.25rem, #fff 1.25rem 1.75rem, transparent 1.75rem 2.25rem, #000 2.25rem 2.75rem, transparent 2.75rem);background-repeat:no-repeat;background-size:.5rem 100%}.swatch-gray-dark{color:#fff;background-color:#343a40}.swatch-gray-dark::after{position:absolute;top:1rem;right:1rem;padding-left:1rem;font-size:.75rem;line-height:1.35;white-space:pre;content:"11.5" "\a" "11.5" "\a" "1.82";background-color:#343a40;background-image:linear-gradient(to bottom, transparent 0.25rem, #fff 0.25rem 0.75rem, transparent 0.75rem 1.25rem, #fff 1.25rem 1.75rem, transparent 1.75rem 2.25rem, #000 2.25rem 2.75rem, transparent 2.75rem);background-repeat:no-repeat;background-size:.5rem 100%}.swatch-gray-500{color:#000;background-color:#adb5bd}.swatch-gray-500::after{position:absolute;top:1rem;right:1rem;padding-left:1rem;font-size:.75rem;line-height:1.35;white-space:pre;content:"10.1" "\a" "2.07" "\a" "10.1";background-color:#adb5bd;background-image:linear-gradient(to bottom, transparent 0.25rem, #000 0.25rem 0.75rem, transparent 0.75rem 1.25rem, #fff 1.25rem 1.75rem, transparent 1.75rem 2.25rem, #000 2.25rem 2.75rem, transparent 2.75rem);background-repeat:no-repeat;background-size:.5rem 100%}.bd-blue-100{color:#000;background-color:#cfe2ff}.bd-blue-200{color:#000;background-color:#9ec5fe}.bd-blue-300{color:#000;background-color:#6ea8fe}.bd-blue-400{color:#000;background-color:#3d8bfd}.bd-blue-500{color:#fff;background-color:#0d6efd}.bd-blue-600{color:#fff;background-color:#0a58ca}.bd-blue-700{color:#fff;background-color:#084298}.bd-blue-800{color:#fff;background-color:#052c65}.bd-blue-900{color:#fff;background-color:#031633}.bd-indigo-100{color:#000;background-color:#e0cffc}.bd-indigo-200{color:#000;background-color:#c29ffa}.bd-indigo-300{color:#000;background-color:#a370f7}.bd-indigo-400{color:#fff;background-color:#8540f5}.bd-indigo-500{color:#fff;background-color:#6610f2}.bd-indigo-600{color:#fff;background-color:#520dc2}.bd-indigo-700{color:#fff;background-color:#3d0a91}.bd-indigo-800{color:#fff;background-color:#290661}.bd-indigo-900{color:#fff;background-color:#140330}.bd-purple-100{color:#000;background-color:#e2d9f3}.bd-purple-200{color:#000;background-color:#c5b3e6}.bd-purple-300{color:#000;background-color:#a98eda}.bd-purple-400{color:#000;background-color:#8c68cd}.bd-purple-500{color:#fff;background-color:#6f42c1}.bd-purple-600{color:#fff;background-color:#59359a}.bd-purple-700{color:#fff;background-color:#432874}.bd-purple-800{color:#fff;background-color:#2c1a4d}.bd-purple-900{color:#fff;background-color:#160d27}.bd-pink-100{color:#000;background-color:#f7d6e6}.bd-pink-200{color:#000;background-color:#efadce}.bd-pink-300{color:#000;background-color:#e685b5}.bd-pink-400{color:#000;background-color:#de5c9d}.bd-pink-500{color:#fff;background-color:#d63384}.bd-pink-600{color:#fff;background-color:#ab296a}.bd-pink-700{color:#fff;background-color:#801f4f}.bd-pink-800{color:#fff;background-color:#561435}.bd-pink-900{color:#fff;background-color:#2b0a1a}.bd-red-100{color:#000;background-color:#f8d7da}.bd-red-200{color:#000;background-color:#f1aeb5}.bd-red-300{color:#000;background-color:#ea868f}.bd-red-400{color:#000;background-color:#e35d6a}.bd-red-500{color:#fff;background-color:#dc3545}.bd-red-600{color:#fff;background-color:#b02a37}.bd-red-700{color:#fff;background-color:#842029}.bd-red-800{color:#fff;background-color:#58151c}.bd-red-900{color:#fff;background-color:#2c0b0e}.bd-orange-100{color:#000;background-color:#ffe5d0}.bd-orange-200{color:#000;background-color:#fecba1}.bd-orange-300{color:#000;background-color:#feb272}.bd-orange-400{color:#000;background-color:#fd9843}.bd-orange-500{color:#000;background-color:#fd7e14}.bd-orange-600{color:#000;background-color:#ca6510}.bd-orange-700{color:#fff;background-color:#984c0c}.bd-orange-800{color:#fff;background-color:#653208}.bd-orange-900{color:#fff;background-color:#331904}.bd-yellow-100{color:#000;background-color:#fff3cd}.bd-yellow-200{color:#000;background-color:#ffe69c}.bd-yellow-300{color:#000;background-color:#ffda6a}.bd-yellow-400{color:#000;background-color:#ffcd39}.bd-yellow-500{color:#000;background-color:#ffc107}.bd-yellow-600{color:#000;background-color:#cc9a06}.bd-yellow-700{color:#000;background-color:#997404}.bd-yellow-800{color:#fff;background-color:#664d03}.bd-yellow-900{color:#fff;background-color:#332701}.bd-green-100{color:#000;background-color:#d1e7dd}.bd-green-200{color:#000;background-color:#a3cfbb}.bd-green-300{color:#000;background-color:#75b798}.bd-green-400{color:#000;background-color:#479f76}.bd-green-500{color:#fff;background-color:#198754}.bd-green-600{color:#fff;background-color:#146c43}.bd-green-700{color:#fff;background-color:#0f5132}.bd-green-800{color:#fff;background-color:#0a3622}.bd-green-900{color:#fff;background-color:#051b11}.bd-teal-100{color:#000;background-color:#d2f4ea}.bd-teal-200{color:#000;background-color:#a6e9d5}.bd-teal-300{color:#000;background-color:#79dfc1}.bd-teal-400{color:#000;background-color:#4dd4ac}.bd-teal-500{color:#000;background-color:#20c997}.bd-teal-600{color:#000;background-color:#1aa179}.bd-teal-700{color:#fff;background-color:#13795b}.bd-teal-800{color:#fff;background-color:#0d503c}.bd-teal-900{color:#fff;background-color:#06281e}.bd-cyan-100{color:#000;background-color:#cff4fc}.bd-cyan-200{color:#000;background-color:#9eeaf9}.bd-cyan-300{color:#000;background-color:#6edff6}.bd-cyan-400{color:#000;background-color:#3dd5f3}.bd-cyan-500{color:#000;background-color:#0dcaf0}.bd-cyan-600{color:#000;background-color:#0aa2c0}.bd-cyan-700{color:#fff;background-color:#087990}.bd-cyan-800{color:#fff;background-color:#055160}.bd-cyan-900{color:#fff;background-color:#032830}.bd-gray-100{color:#000;background-color:#f8f9fa}.bd-gray-200{color:#000;background-color:#e9ecef}.bd-gray-300{color:#000;background-color:#dee2e6}.bd-gray-400{color:#000;background-color:#ced4da}.bd-gray-500{color:#000;background-color:#adb5bd}.bd-gray-600{color:#fff;background-color:#6c757d}.bd-gray-700{color:#fff;background-color:#495057}.bd-gray-800{color:#fff;background-color:#343a40}.bd-gray-900{color:#fff;background-color:#212529}.bd-white{color:#000;background-color:#fff}.bd-black{color:#fff;background-color:#000}.bd-clipboard,.bd-edit{position:relative;display:none;float:right}.bd-clipboard+.highlight,.bd-edit+.highlight{margin-top:0}@media (min-width: 768px){.bd-clipboard,.bd-edit{display:block}}.btn-clipboard,.btn-edit{display:block;padding:.5em;line-height:1;color:var(--bs-body-color);background-color:var(--bd-pre-bg);border:0;border-radius:.25rem}.btn-clipboard:hover,.btn-edit:hover{color:var(--bs-link-hover-color)}.btn-clipboard:focus,.btn-edit:focus{z-index:3}.btn-clipboard{position:relative;z-index:2;margin-top:1.25rem;margin-right:.75rem}.bd-placeholder-img{font-size:1.125rem;-webkit-user-select:none;-moz-user-select:none;user-select:none;text-anchor:middle}.bd-placeholder-img-lg{font-size:calc(1.475rem + 2.7vw)}@media (min-width: 1200px){.bd-placeholder-img-lg{font-size:3.5rem}}main a,main button,main h2,main .h2,main h3,main .h3,main h4,main .h4,main [tabindex="0"]{scroll-margin-top:80px;scroll-margin-bottom:100px}:root,[data-bs-theme="light"]{--base02: #c8c8fa;--base03: #565c64;--base04: #666;--base05: #333;--base06: #fff;--base07: #13795b;--base08: #c6303e;--base09: #087990;--base0A: #6f42c1;--base0B: #084298;--base0C: #084298;--base0D: #6f42c1;--base0E: #ab296a;--base0F: #333}[data-bs-theme="dark"]{--base02: #3e4451;--base03: #868e96;--base04: #868e96;--base05: #abb2bf;--base06: #b6bdca;--base07: #feb272;--base08: #6edff6;--base09: #feb272;--base0A: #ffe69c;--base0B: #79dfc1;--base0C: #79dfc1;--base0D: #6ea8fe;--base0E: #c29ffa;--base0F: #ea868f}.hl{background-color:var(--base02)}.c{color:var(--base03)}.err{color:var(--base08)}.k{color:var(--base0E)}.l{color:var(----base09)}.n{color:var(--base08)}.o{color:var(--base05)}.p{color:var(--base05)}.cm{color:var(--base04)}.cp{color:var(--base08)}.c1{color:var(--base03)}.cs{color:var(--base04)}.gd{color:var(--base08)}.ge{font-style:italic}.gh{font-weight:600;color:#fff}.gi{color:var(--bs-success)}.gp{font-weight:600;color:var(--base04)}.gs{font-weight:600}.gu{font-weight:600;color:var(--base0C)}.kc{color:var(--base0E)}.kd{color:var(--base0E)}.kn{color:var(--base0C)}.kp{color:var(--base0E)}.kr{color:var(--base0E)}.kt{color:var(--base0A)}.ld{color:var(--base0C)}.m{color:var(--base09)}.s{color:var(--base0C)}.na{color:var(--base0A)}.nb{color:var(--base05)}.nc{color:var(--base07)}.no{color:var(--base08)}.nd{color:var(--base07)}.ni{color:var(--base08)}.ne{color:var(--base08)}.nf{color:var(--base0B)}.nl{color:var(--base05)}.nn{color:var(--base0A)}.nx{color:var(--base0A)}.py{color:var(--base08)}.nt{color:var(--base08)}.nv{color:var(--base08)}.ow{color:var(--base0C)}.w{color:#fff}.mf{color:var(--base09)}.mh{color:var(--base09)}.mi{color:var(--base09)}.mo{color:var(--base09)}.sb{color:var(--base0C)}.sc{color:#fff}.sd{color:var(--base04)}.s2{color:var(--base0C)}.se{color:var(--base09)}.sh{color:var(--base0C)}.si{color:var(--base09)}.sx{color:var(--base0C)}.sr{color:var(--base0C)}.s1{color:var(--base0C)}.ss{color:var(--base0C)}.bp{color:var(--base05)}.vc{color:var(--base08)}.vg{color:var(--base08)}.vi{color:var(--base08)}.il{color:var(--base09)}.m+.o{color:var(--base03)}.language-sh .c{color:var(--base03)}.chroma .language-bash .line::before,.chroma .language-sh .line::before{color:var(--base03);content:"$ ";-webkit-user-select:none;-moz-user-select:none;user-select:none}.chroma .language-powershell::before{color:var(--base0C);content:"PM> ";-webkit-user-select:none;-moz-user-select:none;user-select:none}.anchor-link{padding:0 .175rem;font-weight:400;color:rgba(13,110,253,0.5);text-decoration:none;opacity:0;transition:color 0.15s ease-in-out,opacity 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.anchor-link{transition:none}}.anchor-link::after{content:"#"}.anchor-link:focus,.anchor-link:hover,:hover>.anchor-link,:target>.anchor-link{color:#0d6efd;text-decoration:none;opacity:1}a{text-decoration:none}blockquote{display:block;border-width:2px 0;border-style:solid;border-color:#dee2e6;padding:1.5em 0 0.5em;margin:1.5em 0;position:relative}blockquote:before{content:'\201C';position:absolute;top:1rem;left:50%;transform:translate(-50%, -50%);width:3rem;height:2rem;font-size:x-large;text-align:center}h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{margin:0;padding-top:0.5em;padding-bottom:0.17em;overflow:hidden}h1,.h1,h2,.h2,h3,.h3{margin-bottom:0.6em;border-bottom:1px solid #ced4da}h4,.h4,h5,.h5,h6,.h6{font-weight:bold}h3,.h3,h4,.h4,h5,.h5{margin-bottom:0.3em}h1,.h1{font-size:188%}h2,.h2{font-size:150%}h3,.h3{font-size:128%}h4,.h4{font-size:116%}h5,.h5{font-size:108%}h6,.h6{font-size:100%}img{max-width:100%;height:auto}pre{border-width:2px;border-style:solid;border-radius:0.50rem}table{width:100%;border-collapse:collapse;margin-bottom:1em}table thead>tr>th{color:#f8f9fa;background-color:#161b22}table thead>tr>th,table tbody>tr>td{text-align:left;padding:5px 10px;border-width:1px;border-style:solid}#scrollButton{display:none;position:fixed;bottom:20px;right:30px;z-index:99;font-size:18px;border:none;outline:none;background-color:rgba(255,255,255,0.5);color:rgba(22,27,34,0.5);cursor:pointer;padding:6px;border-radius:50%}#scrollButton:hover{background-color:rgba(255,255,255,0.8)}.navbar-brand img{height:30px}[data-bs-theme="light"]{--bs-body-bg: $body-bg;--bs-body-color: $body-color}[data-bs-theme="light"] h1,[data-bs-theme="light"] .h1,[data-bs-theme="light"] h2,[data-bs-theme="light"] .h2,[data-bs-theme="light"] h3,[data-bs-theme="light"] .h3{color:#212529}[data-bs-theme="light"] pre,[data-bs-theme="light"] table,[data-bs-theme="light"] thead,[data-bs-theme="light"] th,[data-bs-theme="light"] td{border-color:#dee2e6}[data-bs-theme="dark"]{--bs-body-bg-dark: $body-bg-dark;--bs-body-color-dark: $body-color-dark}[data-bs-theme="dark"] h1,[data-bs-theme="dark"] .h1,[data-bs-theme="dark"] h2,[data-bs-theme="dark"] .h2,[data-bs-theme="dark"] h3,[data-bs-theme="dark"] .h3{color:#c9d1d9}[data-bs-theme="dark"] pre,[data-bs-theme="dark"] table,[data-bs-theme="dark"] thead,[data-bs-theme="dark"] th,[data-bs-theme="dark"] td{border-color:#343a40} + +/*# sourceMappingURL=style.min.css.map */ \ No newline at end of file diff --git a/assets/css/style.min.css.map b/assets/css/style.min.css.map new file mode 100644 index 000000000..ef0c8143b --- /dev/null +++ b/assets/css/style.min.css.map @@ -0,0 +1,98 @@ +{ + "version": 3, + "file": "style.min.css", + "sources": [ + "../../../assets/scss/style.scss", + "../../../assets/scss/_variables.scss", + "../../../.bootstrap/scss/bootstrap.scss", + "../../../.bootstrap/scss/mixins/_banner.scss", + "../../../.bootstrap/scss/_functions.scss", + "../../../.bootstrap/scss/_variables.scss", + "../../../.bootstrap/scss/_variables-dark.scss", + "../../../.bootstrap/scss/_maps.scss", + "../../../.bootstrap/scss/_mixins.scss", + "../../../.bootstrap/scss/vendor/_rfs.scss", + "../../../.bootstrap/scss/mixins/_deprecate.scss", + "../../../.bootstrap/scss/mixins/_breakpoints.scss", + "../../../.bootstrap/scss/mixins/_color-mode.scss", + "../../../.bootstrap/scss/mixins/_color-scheme.scss", + "../../../.bootstrap/scss/mixins/_image.scss", + "../../../.bootstrap/scss/mixins/_resize.scss", + "../../../.bootstrap/scss/mixins/_visually-hidden.scss", + "../../../.bootstrap/scss/mixins/_reset-text.scss", + "../../../.bootstrap/scss/mixins/_text-truncate.scss", + "../../../.bootstrap/scss/mixins/_utilities.scss", + "../../../.bootstrap/scss/mixins/_backdrop.scss", + "../../../.bootstrap/scss/mixins/_buttons.scss", + "../../../.bootstrap/scss/mixins/_caret.scss", + "../../../.bootstrap/scss/mixins/_pagination.scss", + "../../../.bootstrap/scss/mixins/_lists.scss", + "../../../.bootstrap/scss/mixins/_forms.scss", + "../../../.bootstrap/scss/mixins/_table-variants.scss", + "../../../.bootstrap/scss/mixins/_border-radius.scss", + "../../../.bootstrap/scss/mixins/_box-shadow.scss", + "../../../.bootstrap/scss/mixins/_gradients.scss", + "../../../.bootstrap/scss/mixins/_transition.scss", + "../../../.bootstrap/scss/mixins/_clearfix.scss", + "../../../.bootstrap/scss/mixins/_container.scss", + "../../../.bootstrap/scss/mixins/_grid.scss", + "../../../.bootstrap/scss/_utilities.scss", + "../../../.bootstrap/scss/_root.scss", + "../../../.bootstrap/scss/_reboot.scss", + "../../../.bootstrap/scss/_type.scss", + "../../../.bootstrap/scss/_images.scss", + "../../../.bootstrap/scss/_containers.scss", + "../../../.bootstrap/scss/_grid.scss", + "../../../.bootstrap/scss/_tables.scss", + "../../../.bootstrap/scss/_forms.scss", + "../../../.bootstrap/scss/forms/_labels.scss", + "../../../.bootstrap/scss/forms/_form-text.scss", + "../../../.bootstrap/scss/forms/_form-control.scss", + "../../../.bootstrap/scss/forms/_form-select.scss", + "../../../.bootstrap/scss/forms/_form-check.scss", + "../../../.bootstrap/scss/forms/_form-range.scss", + "../../../.bootstrap/scss/forms/_floating-labels.scss", + "../../../.bootstrap/scss/forms/_input-group.scss", + "../../../.bootstrap/scss/forms/_validation.scss", + "../../../.bootstrap/scss/_buttons.scss", + "../../../.bootstrap/scss/_transitions.scss", + "../../../.bootstrap/scss/_dropdown.scss", + "../../../.bootstrap/scss/_button-group.scss", + "../../../.bootstrap/scss/_nav.scss", + "../../../.bootstrap/scss/_navbar.scss", + "../../../.bootstrap/scss/_card.scss", + "../../../.bootstrap/scss/_accordion.scss", + "../../../.bootstrap/scss/_breadcrumb.scss", + "../../../.bootstrap/scss/_pagination.scss", + "../../../.bootstrap/scss/_badge.scss", + "../../../.bootstrap/scss/_alert.scss", + "../../../.bootstrap/scss/_progress.scss", + "../../../.bootstrap/scss/_list-group.scss", + "../../../.bootstrap/scss/_close.scss", + "../../../.bootstrap/scss/_toasts.scss", + "../../../.bootstrap/scss/_modal.scss", + "../../../.bootstrap/scss/_tooltip.scss", + "../../../.bootstrap/scss/_popover.scss", + "../../../.bootstrap/scss/_carousel.scss", + "../../../.bootstrap/scss/_spinners.scss", + "../../../.bootstrap/scss/_offcanvas.scss", + "../../../.bootstrap/scss/_placeholders.scss", + "../../../.bootstrap/scss/_helpers.scss", + "../../../.bootstrap/scss/helpers/_clearfix.scss", + "../../../.bootstrap/scss/helpers/_color-bg.scss", + "../../../.bootstrap/scss/helpers/_colored-links.scss", + "../../../.bootstrap/scss/helpers/_focus-ring.scss", + "../../../.bootstrap/scss/helpers/_icon-link.scss", + "../../../.bootstrap/scss/helpers/_ratio.scss", + "../../../.bootstrap/scss/helpers/_position.scss", + "../../../.bootstrap/scss/helpers/_stacks.scss", + "../../../.bootstrap/scss/helpers/_visually-hidden.scss", + "../../../.bootstrap/scss/helpers/_stretched-link.scss", + "../../../.bootstrap/scss/helpers/_text-truncation.scss", + "../../../.bootstrap/scss/helpers/_vr.scss", + "../../../.bootstrap/scss/utilities/_api.scss", + "../../../assets/scss/_docs.scss" + ], + "names": [], + "mappings": "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AC,OAAO,CAAE,AAAD,AAAA,YAAY,AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAE,AAAD,AAAA,YAAY,AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAE,AAAD,AAAA,YAAY,AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAE,AAAD,AAAA,YAAY,AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAE,AAAD,AAAA,YAAY,AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAE,AAAD,AAAA,YAAY,AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAE,AAAD,AAAA,YAAY,AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAE,AAAD,AAAA,YAAY,AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAE,AAAD,AAAA,YAAY,AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAE,AAAD,AAAA,YAAY,AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAE,AAAD,AAAA,YAAY,AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAE,AAAD,AAAA,YAAY,AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAE,AAAD,AAAA,YAAY,AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAE,AAAD,AAAA,YAAY,AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAE,AAAD,AAAA,YAAY,AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAE,AAAD,AAAA,YAAY,AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAE,AAAD,AAAA,YAAY,AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAE,AAAD,AAAA,YAAY,AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,gBA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,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,EAAE,AAAA,CAAC,KAAK,CAAC,IAAI,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,IAAI,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD,AAAA,GAAG,AAAA,CAAC,KAAK,CAAC,aAAa,CAAE,AAAD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" +} \ No newline at end of file diff --git a/assets/css/v4-font-face.min.css b/assets/css/v4-font-face.min.css new file mode 100644 index 000000000..dadd6c56f --- /dev/null +++ b/assets/css/v4-font-face.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a} \ No newline at end of file diff --git a/assets/ico/android-chrome-144x144.png b/assets/ico/android-chrome-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..288a80f04a5d4daaf0e816cb08e61f06c120f6d8 GIT binary patch literal 10706 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 literal 0 HcmV?d00001 diff --git a/assets/ico/apple-touch-icon.png b/assets/ico/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..53982469afaebe442acc523d410b1960441574f3 GIT binary patch literal 13769 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 Ofaqu$XjZ7(M*Kg&q%!jW literal 0 HcmV?d00001 diff --git a/assets/ico/browserconfig.xml b/assets/ico/browserconfig.xml new file mode 100644 index 000000000..09f793b9d --- /dev/null +++ b/assets/ico/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #da532c + + + diff --git a/assets/ico/favicon-16x16.png b/assets/ico/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..cf4a5afe6790373d04e96f546a37fce3e90743f2 GIT binary patch literal 1138 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>g((O|Nr07 z(UF#x2Gk1#OO`BIy?XWX6)To5TefKNVxXBC>lo zb#;}NmIBpJnKGrdt*rqJfPz47eM3Ve5JW`*6#zkJXD869$;rtzH8t%W9nHdCIy1Kf%yQin81MTwj^9uFetQYN@TQ1u8BtFVD!xu(7cL zhC_IGxUsP@kOZ1(Zf@@H@4siy9-z3dudk1fPjqxNP-T98zP-IYkQ)^h<>uxF)b8x; ztfQk78yj0)T@BQ0Z|`7bW#!@Fk&=?KaN$CrONxt&frbDL1d4Ciu%WfJ6&RR6zXR0+ z0WfTVCIHO@T9=rZICJJqptFmLih$zzmqot=1Gldv$PX0xn1EG~MXYUa0V8AQiPRWj z8(R@(n@6kp)$HUHgvB;YU$I$f@$ZEx$6npqrKj^^dwh-XoTuukNrfkqm|4{;UtQG~ zy10WQsnS#1@LX8N_XzWk6>Qy4rgu~ccCMHCy&nOiTJTUc4xd$I_#u!2j2$>9`c<;@`qr*B+2apcSqnIr6{8$1?x=`p+#7cBYY SWI7dS1%s!npUXO@geCx+{kVSs literal 0 HcmV?d00001 diff --git a/assets/ico/favicon-32x32.png b/assets/ico/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..d210f70222b9fab2c7cd2e12fee21f6f7a9f48b4 GIT binary patch literal 2294 zcmZ`)dpy(o8~>8CE!Pz_v^0#Iav34FYRcFWnOh^t*j&mr`<1y{+BqqsiE><-6!L;`?};!lwPa`Kcx5K1FB;GjY& z1Y)-V6l0zSA`F6!wJWJrloc1OxUSM(81rqEb(y{FWx0>8?jcE6PfzDzhOm+z8p^~W zb)Vv2(;ul@=y8qp@NV^{4D1Lj1(xv6x|WIk6;4W$ua?!eE%KFOe<&rJrTFokz!OgOdV{8PB-f zp)LXXT0)>ssA+Ddusv;O(rTM7Q+26fKT;mLvbsvW3Y(tg>0UUJ!tkH{xGj3!f&Wrs zmp1aL>%p!rp1}k*B4UpjQhwv}bel6aJ+xrf-brbd@B2baHPzpZNF)YMy}4CJV8?PL zR_LQurko1aN$`Zhog;kqV;WTY#b`=?%7Ym zFD-rj`mU$@*|UTttLA@ZbM>*r$3+~@%#kjh5(71bM=xpSaP)LixIt+8X?Sw$9@f@z z2C6}YS&_9*s{oGE_-i=|t!ff6^>w`tPq__gzZBoxJm&kN`w;-p#o`ttS=enp1Dn|S z(M(=a$<4Wj7IZJhcREQx*|ez|#!+#P%vg#tGBR}8Rx4wN+~PhRos_*<8G_{l$3wTR zG&RpqJZko~zeqDt{&B3~?ND&_=#TrMwF(O>(Zs5L2QIh1xv?>hS6R7OuJ`qi@uKqt z3G?jOVs58bvam&T-2klfmYIpk>cN89UJ8ZsXOc$8Sj^hzY*w4F1#^y$QGU5(r2u0@ zY3%7SF*Aepf$dHn`Q5f8JMPPkFLAFUrWCnc3yKFzMUI(3R{l}0X~**NsJ&isnyBOh z0Nz!Izx(^uRZ}4j+KS=Gb=5AOMHbol-?}4dobZu>5 zV8Gdf*s_))n&ybXKhG+JD5@ zmRPH(sfn-1H8eD+D@l`0b1Se})bZ}_yLRP+Lv`beSptE;naGA$3-0S0B#3Tqt$+C* z-<74ub1%;yo}5hh^i9}q-|b)R>h8X_z+$odJUl$!O-#tM(WRTQO`@srKlTg0pt6waPhd7x7^Eg#mnRL1;#Q^QC|9ps7CJ=uv^rT@{w%x zzV5zA`U*0i0OzmELe5OI{-!V~ee1M}SS;3Do_V`4H$R`FtE+oXMOis2AojhRkFjb- zTU(o5Lw!A@CUji-wNLoy+}xZR1Eo>K#iREU$jY_|Sx7~EbAmccI0G`cIop%paD8D& zkLvFaNpHJ@xY_@2GC1qHO!5RwO0w#zvFZV9I6SSr7398t*H#z+RZv4(#;iT-jPQyN z3#;;@(Tu}JdDNY!Po9jBE?+)ndg6qfi;Ih!5-z0w%Bw>JHbwfk)>A$nHLh%QxqJEQ zm}qS|3HzaQez083;c&tx7&9~e;N9@v-US7mphgtzNnfB6TR<@~Ffh1~^$8ymQc+u0 z7SQ_CrOc7Qe(cd4AGZaPiYF?y_4GK-i9}k@+{@SgF16p@7BBD15G3n+zSP07(U&yt z!S%iW?8rbr{rMP=rS;{QTunq1NY8yQ!C_K9fq@;l1qD4I)rXE{%d;~x1uw@$Pz9vf2QVkLe@kM9#fqBFp+R|y0OfUsNz&YAfp7vq<7e9zB Af&c&j literal 0 HcmV?d00001 diff --git a/assets/ico/favicon.ico b/assets/ico/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..cad25b2aa9663c37497294ca958a3fea1834dc7d GIT binary patch literal 15086 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 Jo?E-_e*iA13?~2p literal 0 HcmV?d00001 diff --git a/assets/ico/mstile-150x150.png b/assets/ico/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..c1ca244403e2757d2abeddd3de232b16fc30af95 GIT binary patch literal 6133 zcmcIoS5y;9w~j}VUj)1!M5G=)2pUjIkkH|96fkrMMXCpZKnNk!Al)BS6a+MYkWhk@ zKoUa>od5z#2~8oigaAqjp(@o-hx>BZx(_pZ?LD*itTnS|?QefCtu0N21SA9i z0DutW{ykd&;FR!x#=p*-ScV%^l}^MNA43a60H7-E{GkWmiGJ1dzO4lS5GfA;Jb4NL z?4OvPECB#vDgeOpKLCJsHUJEdd$RD`BQukGfaAop{{SQneOU{z50D-pr2%G53fg0zP)Ak_BL2~wnX)xS5f_dfngyw zA?I2_qFnaQyW@n2{1*|~*-I~9X21M5?CM#SF7{vbV!kR}U03RnG!~}T$qY_zsSeiL zdR@PJs}T#(q5h0bvYx=&V;v*fbU9NYtsAa?|LfY*|N4KMW*$!F!~oc`-XK0BtRQ5V z@w$2&_Q&Lg>6vbWyMBB|5cn<%w=A(t@{>?h`|D3lcN3W_G5gz-zKMBYNjqya)8ob~ zMMW~aoCbI~+fbGPuT_&okeG(jG|b*zWbRQ zxWIOkoqlu=WpKgNCC}P?CzDZiX?peak}ePm`lnR60cxecUrhR+;hi211tEXBb zed2;Yy?EHTlc_)sEkQBZ$vBZ12vF z8&W~T*&aSq8=qG%X=5R2TI8l-n5nGh<@;DnEGvdNZM62+fT1j%F0VHi!13ncA$t*@ zUsNyV#2mJ{eWBdS;Hu4{>w*1}hS#wd6Ep1X$<4~Rz@D;`cNBOFl8Zs} zp6;0C>#jAx?Jev@+_%EgnAgOEJNSy^DP@YHe`;Q)Z(j**u2*ha@423sr%q9V5Y+93 zR%|}sq2wA+JMIPcJ2E%|#~rvs(_*<^b8RnwSPvGbuuQn*%^N;SatW1<_sq}Ws?J`Z z)efY03g_4&QxvMNmlW%7&6^4e{;9dBxJ+dqP*5X=x#*4>=G5zulCvM9gMc|^SQ#>{ zQ>QYpRvQ{Vp*7;ycHx@pjd)LE!-}104u)?oWlV4><8GHdr7}8Yd}N1hio+&3Ybw9F zQ!;atS6|jGI$bhBfQqB96IBeBUme8(yg z?&s(0Tin$33G{KKpWFW)v}By6?5A;6YrUq4@HhQ(qAT4if*AyX7@o3#tmLi0dk;$E zF*15dxMdP?nkeq&CN9N0$F(0WnsHu1Ru2C4>)+$%;%a^$8>&e-KfiQ9F6fyqo>t)d z!Lt6r=;GRPDsf4@KvOc9M=puSxVP*hD<@%yodSObUuRe5=qSV1twr=t;7HMo%t3~E z)HEDQyz7#tB$%23T&9|~A$Oz5G3W=VT74sI@w-REW$D5ZU(76X?7%J8{}PC#)H=1v z7?EkC>d4D%HE)qR;N*J(Y|05r8eR>0UptdhUfXAUItfEMCnmL*lqH28dx|4DlMr;l zrjKnqhFIY7X#J?tm`4k?NlDYz5Yl$4d1?_oK2a8j)lKqZRyyjgUaOE$BVraSa^7w? z4rFC+3d37&BOjJ7wFFp?FzmiJ923g(F&O)^Yd=)~sOg@?6gAjP@|hemN8E$DGDy!0 zPw~^bh0R$3ALet8uu7$U@v@@Z5|zFDQw!SUt>TVVU-|N2x5!F!()PF8O0RiGFyxe8dz_XxVe+e)zULZktPtK)lpj2tQD{*f-Yk9I(xJK?&)phdmLOu)Yg<`} zHHU1yql#mpL57?4n{Dy$v2ot`{Gq?3_o(+#oP~-8OFgj7dJ?2ReMRa@J+~yW#~cznT&_`Un0!wJXx`XGeS>&SuYSCcHg^PzkVa^tdr|KuDvtB+8Q=;y6w$~5@ z+_|u#v;LJV<2B3gPsOByyNcx{mKB!vEbCodOE9n*&dzmgh)gKsscC7dW)o0Tz_hLb zlE%An6)4ePO3I<^UR7OpI`$gJWERCDwy=z+*!QnUn6
9E|b>T5omZ#`j8n%kw( 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 literal 0 HcmV?d00001 diff --git a/assets/ico/safari-pinned-tab.svg b/assets/ico/safari-pinned-tab.svg new file mode 100644 index 000000000..6cecafc80 --- /dev/null +++ b/assets/ico/safari-pinned-tab.svg @@ -0,0 +1,65 @@ + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + + + diff --git a/assets/ico/site.webmanifest b/assets/ico/site.webmanifest new file mode 100644 index 000000000..284516bc6 --- /dev/null +++ b/assets/ico/site.webmanifest @@ -0,0 +1,14 @@ +{ + "name": "SFZ Format", + "short_name": "SFZ Format", + "icons": [ + { + "src": "/assets/ico/android-chrome-144x144.png", + "sizes": "144x144", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/assets/img/ampeg_attack_shape/sine_0.jpg b/assets/img/ampeg_attack_shape/sine_0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f8fc4591f290c1ac7606f52795052d382897a2e3 GIT binary patch literal 14896 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 NFb~MrF_GZQe*q8dMSTDO literal 0 HcmV?d00001 diff --git a/assets/img/ampeg_attack_shape/sine_pos2p1.jpg b/assets/img/ampeg_attack_shape/sine_pos2p1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0ea27ce9305cdba2ef257b12a3168d927f9f05a7 GIT binary patch literal 15047 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 WrSpOe)3L|r`9KGMR-!1q`+oq|;eq1- literal 0 HcmV?d00001 diff --git a/assets/img/ampeg_attack_shape/sine_pos8.jpg b/assets/img/ampeg_attack_shape/sine_pos8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9723b5640a1659a130c869648478a29735238537 GIT binary patch literal 14456 zcmeHO2|Sc*+keK;NKUeqN<)@RqY^r0L}NLY(LoYUC>2F2vM$;x*b=^0x9qb2I z>1pG%0T}di1o{C$79jSsmikZP2aa3YIXIqnv^{y;MI7f~y-nOye%p3=0PF%T0$f~N z++5te2m~+h^5x5Uf8d3lAHLv$adC6=Ab8$Q@B=T;7Y+Sm6|fwZ001y9*gqcNpAU=! z&dIe5!M&Vk1q^`y(FXngqxHSURR9MJ4(H&6b8&HULeuy_Z2%`fm%v7O^<{!aM-dWE zLJIz2x40!WGM@@+Jm!31InU}fB5T)4Z<0Z6M(_A>=Po6TvgS`(+B&*8J>vr= zre?n!G`F@ne!|x7q`ix)o4bdnmv_L$UoQn-zCs9(h>VJkxfXjpAu;Lpo#d3e_p*L} zn4OcGmtRm?R$ftARb5lt{JiBwYg>Cq=fKOsq2X8L*CV5EsZ-N4v$Q$-JU>J-2PY?- z6Y-8@7>5T`;QX9i8|9Y?s2d@UItfZB_;U+sgx$(~vRqPe|D^CS=O&)jQac8u-@c>z zA4LCqG++2CqW?wnzeolj1N__^_8by$m;}JV4}U5h#Wc_r zXQsqdJ#u>$U!2n{;BIh#)Z7*d%S` zYe`Ilk%3DbGck@5fwhvKYCGpMctYirK^6 zH-pF+Elh(8HN>U(=Y{iCjfci*!GsJu5B0ST&IFe@@~|lReC#}(NP5&oS+zpQNDEl3 zeCdqqg#aTh_Qm9!bv_^FuL7+w%h??|6;D!cQ)lJ)E|f+RY6v@sTb!sJ3IT_IOhq3qQZ~m(F;4 zA52S#eK8pi8B!sWL){v2BG!}=gKO1Q`eB207Q%!!J{TV;~IUesQB$? zm*)D?88bhl*q>I9(`@vqg`;9IGlAMxksd}Sr%3~bpOGQVWSotYN$uS5OxqtOme`4(G~(`OmwpIut`3ummXSkywqLgidW;aEz#&PQE7Bydlf z70bsE1Yr1~|F10EE6VH+jAK$)=8s77`p`z6uN4`|Qt>)f4+5oDd`t$kJwqiRAa%gW zGYeJ8yGG`fH3)3+Run)yb*}PrY7;$wFZEZ%i&PM3ybA*Ta?AjdYFn@S0W(PuSbiQm zMR9@l1_YR4I!x(Fs8dlRYcB{;wZu#_KwwWY2>6vyS9;Q{yxNQ`i63>Dj46Zq(6Dql zXv>6r%uAT_@hlDysKyNT_>d22Ib%QUf&YMFqZxY;m>R{;tpEXWGSQ88!%evQBd&}- zCh}uO+*_+tyy-dUL8+}>k<7@R){RK5P#ergG*bd6F1>Lv%f!Uoh< zRjZwV}-O9e5kg+I6|DL7mBV=S{?zCtM z;4^X0|Bgi#X$hIV(n((|_GicP*M-cmD$gv6gse16@l^>UGwgwn`On*DgCD)jN0X?O zahgI8Jj%Um?fCE}4eN!N-M7VNo-J?+(>&MhsSGl1-cO5fbS$m?|B`Q+?Y}v+LXLw3_-C;Q)wcGb1 zkVC=orBId zjsO5hQQWp=CJXa1!Pv^fq{Al!QxX&UsIdI2xQ#thL5I3t5G~zGLkLB}YDSN5ClDB@ z3UyS)L1~*uNZGm$WYq*fNQW2=eGfk2ydpfEICBqJ8%@xVB zh>o&xlQx?L_(@5Zyw*sD@>&!uThXArQ6tUpf`IRpE=qfh^oGve>ohciNI(WAzT7;x zQbQyylC*PkxSFa;%^pn>J;3iQhMp>5vkUu{O0{%0kal;g8PyORzB}DX0Qv!?3_X&C zxp%{}!w!@QGp4z`+p(OMiEYe-r}#J9rMZ{QC88w|4-_&1qVcL22X09fq&AB>Xo@M6 zw6!xnd)XzdP>|6odcFY=sZ9`lg^V1 zEeRo|MF%C4uu~J*^H2mM{`&+7@KKfUb9#;-@Op#Xup0!X58z9U@gSf!f|t!;X{5g- zVE$ZV#dlkx!J*K~Ydz4UWgV)!W`(>QYhot5-=mV1xcgiy#9+f1>)b(n-wzPBF&UXQ zeVe9-ZoajeG4<3pDX%W+I$g3JJD>@V4v(Fk&)faz}EsC$|j;Bp@fk2R1$|~+BL+ff;kDueo z&0Q>}76_ELJ}BQ8ObH~iIQv+U@%=K(@rsNPL52ksLd4(2QhIVhK;)j@lz)JetKr@J zINM1xz!%`NpC-QfVHeA1YYC;?im89Xe9lVW)99kZE{XVPuTm zrt_xln4fGxOzF-b^z+T0u%5$W)0q-q;PGWuRM>?d?bl+xbjNS^aDW7OMRBOAJQf4+E7onj(+A2OQ$gZkaR+` zunev@F3u|A!F5AzqI_Xf#>1&-!-o}}y24laXt(N=#-Px;J`uk4p{b?w{n&QjktZ8? z!dkW~q092b`Mb?BO}E{>*)z#qYX}V-->Nm9qjfL zIflbWFjWms8d=#IR!+rqJ9e7(Y23Psf&mQJmEa6-cRVy zc3fF>Y3!=pby%I6(1dz-xl3(Gv1zyejUcrH8EOdyn@veb%jur@!%yAqVzqDwNqd4s zml=n8aT=#4wLMfkZ9ef$SG`CHtHm%h?%H%6nkIkslfl%swVD_1!#IxwREy7WdYeV| zm~T+_c!(*t5vidF+SXx4b)N)Z8GT)KDv^y4ysUS?tDFW9@U&PD0+bGppGkyt#MVQH zG@W?5f11qg2|LKwIga6lAzF~?8CiAq zQ_Zty#t@DSx6zUVXHAG((hEYM+*KE*^rMs($5+(<6KSv-+shV~`rQ3GJN)>xtc!G> z$@;0Lwx%|!;LgmR8bA#=SoeSc{3>_VTTKzMiTJYiI@=nnsBx*bMmM^MiCHj1B+^LB z=Pr3s9bZiU-)sB+sV~4x?&Tw&+0?VjUDfyTJ@}s7{#}9C3139Yy|(DObDYr>+Hq~o zHzNFD6N+IJ^XI=ME45fuB-7-7bZr_wU~O-QitPm<Jc7&xMb5u)tLgZDJs^}dGGI= zjm+>_ZesMA2o}o%|8^exeq~RtCd*fcvJ&Th9F3;T8YDsyP!_(g&XI-H`LNdd8sAvG zFi`V3eqPV_@X_gFg&66M$duHQ4rL;9z6J#FTTA8^#6GN9+yVitBrQ`r>D@1X4IAr9@IqN_r6B^U7f)H&V71D=Y#H|qAsqY^)yByr3YOCIu_ z9Ev%yKOr3iY(}wDV=@cO91s|s#(z-rS=xnnyWql*+xO31fDWd_5e^rZlHGas$T;#s%1NF2tXvOz?5)e;UQ&_!aWdh!p$IjBzq#b6hAVFUWxvBYL# z>~ROml%gg-bW;G86mBRLQL`xnqV8|A{vI7{{z=6Z677K<&x<#0tr4{3C3#w0G0{== k17Pg{LI@`P&Gz75gus<%l2V5eH<>Bzs)%7VF|gx*08VvD=>Px# literal 0 HcmV?d00001 diff --git a/assets/img/ampeg_decay_shape/sine_0.jpg b/assets/img/ampeg_decay_shape/sine_0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..737bcb131f5d2d39851240141d5424fdd0108323 GIT binary patch literal 14596 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 literal 0 HcmV?d00001 diff --git a/assets/img/ampeg_decay_shape/sine_neg3p8.jpg b/assets/img/ampeg_decay_shape/sine_neg3p8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e3bdcabf2e71e654c6a09348b18900a298b9be7 GIT binary patch literal 14969 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 literal 0 HcmV?d00001 diff --git a/assets/img/ampeg_decay_shape/sine_neg8.jpg b/assets/img/ampeg_decay_shape/sine_neg8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80912af4549a84130764498e606f723403a36e61 GIT binary patch literal 14857 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 Mw>kY669qQ^4-W>jc>n+a literal 0 HcmV?d00001 diff --git a/assets/img/ampeg_decay_shape/sine_pos2p1.jpg b/assets/img/ampeg_decay_shape/sine_pos2p1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3be22d6d60ae648dbecce1ff2a946eb22fe88f23 GIT binary patch literal 14534 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 literal 0 HcmV?d00001 diff --git a/assets/img/effect/routing.svg b/assets/img/effect/routing.svg new file mode 100644 index 000000000..e7ef58491 --- /dev/null +++ b/assets/img/effect/routing.svg @@ -0,0 +1,3 @@ + + +Bus fx1<effect>...<effect>Main bus<effect>...<effect>Bus fx2<effect>...<effect>Bus fx3<effect>...<effect>Bus fx4<effect>...<effect>
Region
Region
fx1tomain
fx1tomain
fx1tomix
fx1tomix
fx2tomain
fx2tomain
fx2tomix
fx2tomix
fx3tomain
fx3tomain
fx3tomix
fx3tomix
fx4tomain
fx4tomain
fx4tomix
fx4tomix
directtomain
directtomain
Mix
Mix
Main
Main
effect1
effect1
effect2
effect2
effect4
effect4
effect3
effect3
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/assets/img/logo.svg b/assets/img/logo.svg new file mode 100644 index 000000000..505534a32 --- /dev/null +++ b/assets/img/logo.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/assets/img/opcodes/label_cc.jpg b/assets/img/opcodes/label_cc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fba11eee1f4e9dd489e97be77dd46870bf8ff24d GIT binary patch literal 16782 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 literal 0 HcmV?d00001 diff --git a/assets/img/opcodes/labels.jpg b/assets/img/opcodes/labels.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7997eb0a30f7c4da257b41e9caa320501b95a008 GIT binary patch literal 33698 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

t7-> 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 literal 0 HcmV?d00001 diff --git a/assets/img/opcodes/sw_label.jpg b/assets/img/opcodes/sw_label.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c6506459ffa8bca486a8d13434d26eae0d0dfe4 GIT binary patch literal 31752 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 K^3VUZ@&5p(LBkUO literal 0 HcmV?d00001 diff --git a/assets/img/tutorials/brush_stirs/stir1.jpg b/assets/img/tutorials/brush_stirs/stir1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e02e9d93ac786fa146046d1b5bfc77972b38a05 GIT binary patch literal 24989 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 literal 0 HcmV?d00001 diff --git a/assets/img/tutorials/brush_stirs/stir4.jpg b/assets/img/tutorials/brush_stirs/stir4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6c8eec5ad4ccb3cbc5c90354f56c4655083fcb90 GIT binary patch literal 35721 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"); + } + $("#stringLength").html("character count: " + amp_velcurve.length); + $('#output').append('

output

'); + $('#output').text(amp_velcurve); + $('#line0').show(); + $('#line1').show(); + $('#line2').show(); + }); +}); diff --git a/assets/js/anchor.min.js b/assets/js/anchor.min.js new file mode 100644 index 000000000..1c2b86fae --- /dev/null +++ b/assets/js/anchor.min.js @@ -0,0 +1,9 @@ +// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat +// +// AnchorJS - v4.3.1 - 2021-04-17 +// https://www.bryanbraun.com/anchorjs/ +// Copyright (c) 2021 Bryan Braun; Licensed MIT +// +// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat +!function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(this,function(){"use strict";return function(A){function d(A){A.icon=Object.prototype.hasOwnProperty.call(A,"icon")?A.icon:"",A.visible=Object.prototype.hasOwnProperty.call(A,"visible")?A.visible:"hover",A.placement=Object.prototype.hasOwnProperty.call(A,"placement")?A.placement:"right",A.ariaLabel=Object.prototype.hasOwnProperty.call(A,"ariaLabel")?A.ariaLabel:"Anchor",A.class=Object.prototype.hasOwnProperty.call(A,"class")?A.class:"",A.base=Object.prototype.hasOwnProperty.call(A,"base")?A.base:"",A.truncate=Object.prototype.hasOwnProperty.call(A,"truncate")?Math.floor(A.truncate):64,A.titleText=Object.prototype.hasOwnProperty.call(A,"titleText")?A.titleText:""}function w(A){var e;if("string"==typeof A||A instanceof String)e=[].slice.call(document.querySelectorAll(A));else{if(!(Array.isArray(A)||A instanceof NodeList))throw new TypeError("The selector provided to AnchorJS was invalid.");e=[].slice.call(A)}return e}this.options=A||{},this.elements=[],d(this.options),this.isTouchDevice=function(){return Boolean("ontouchstart"in window||window.TouchEvent||window.DocumentTouch&&document instanceof DocumentTouch)},this.add=function(A){var e,t,o,i,n,s,a,c,r,l,h,u,p=[];if(d(this.options),"touch"===(l=this.options.visible)&&(l=this.isTouchDevice()?"always":"hover"),0===(e=w(A=A||"h2, h3, h4, h5, h6")).length)return this;for(null===document.head.querySelector("style.anchorjs")&&((u=document.createElement("style")).className="anchorjs",u.appendChild(document.createTextNode("")),void 0===(A=document.head.querySelector('[rel="stylesheet"],style'))?document.head.appendChild(u):document.head.insertBefore(u,A),u.sheet.insertRule(".anchorjs-link{opacity:0;text-decoration:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}",u.sheet.cssRules.length),u.sheet.insertRule(":hover>.anchorjs-link,.anchorjs-link:focus{opacity:1}",u.sheet.cssRules.length),u.sheet.insertRule("[data-anchorjs-icon]::after{content:attr(data-anchorjs-icon)}",u.sheet.cssRules.length),u.sheet.insertRule('@font-face{font-family:anchorjs-icons;src:url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype")}',u.sheet.cssRules.length)),u=document.querySelectorAll("[id]"),t=[].map.call(u,function(A){return A.id}),i=0;i\]./()*\\\n\t\b\v\u00A0]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),A=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||A||!1}}}); +// @license-end \ No newline at end of file diff --git a/assets/js/base.min.js b/assets/js/base.min.js new file mode 100644 index 000000000..5c9d17f3a --- /dev/null +++ b/assets/js/base.min.js @@ -0,0 +1 @@ +function getSearchTerm(){var sPageURL=window.location.search.substring(1);var sURLVariables=sPageURL.split('&');for(var i=0;i{var e=(()=>{"use strict";return e=>{const s=e.regex,t={},n={begin:/\$\{/, +end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]};Object.assign(t,{ +className:"variable",variants:[{ +begin:s.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},n]});const a={ +className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},i={ +begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/, +end:/(\w+)/,className:"string"})]}},c={className:"string",begin:/"/,end:/"/, +contains:[e.BACKSLASH_ESCAPE,t,a]};a.contains.push(c);const o={begin:/\$?\(\(/, +end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t] +},r=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10 +}),l={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0, +contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{ +name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/, +keyword:["if","then","else","elif","fi","for","while","until","in","do","done","case","esac","function","select"], +literal:["true","false"], +built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"] +},contains:[r,e.SHEBANG(),l,o,e.HASH_COMMENT_MODE,i,{match:/(\/[a-z._-]+)+/},c,{ +className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},t]}}})() +;hljs.registerLanguage("bash",e)})(); \ No newline at end of file diff --git a/assets/js/bootstrap-table-filter-control.min.js b/assets/js/bootstrap-table-filter-control.min.js new file mode 100644 index 000000000..0b7e0aeb3 --- /dev/null +++ b/assets/js/bootstrap-table-filter-control.min.js @@ -0,0 +1,10 @@ +/** + * bootstrap-table - An extended table to integration with some of the most widely used CSS frameworks. (Supports Bootstrap, Semantic UI, Bulma, Material Design, Foundation) + * + * @version v1.22.1 + * @homepage https://bootstrap-table.com + * @author wenzhixin (http://wenzhixin.net.cn/) + * @license MIT + */ + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).jQuery)}(this,(function(t){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},e(t)}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=new Array(e);r0&&j[0]<4?1:+(j[0]+j[1])),!E&&st&&(!(j=st.match(/Edge\/(\d+)/))||j[1]>=74)&&(j=st.match(/Chrome\/(\d+)/))&&(E=+j[1]);var vt=E,gt=vt,yt=g,bt=!!Object.getOwnPropertySymbols&&!yt((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&>&><41})),mt=bt&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,St=at,Ct=Z,wt=ct,Ot=Object,Tt=mt?function(t){return"symbol"==typeof t}:function(t){var e=St("Symbol");return Ct(e)&&wt(e.prototype,Ot(t))},xt=String,jt=function(t){try{return xt(t)}catch(t){return"Object"}},Et=Z,Pt=jt,kt=TypeError,It=function(t){if(Et(t))return t;throw kt(Pt(t)+" is not a function")},At=It,Rt=B,_t=function(t,e){var r=t[e];return Rt(r)?void 0:At(r)},Lt=C,Dt=Z,Ft=rt,Mt=TypeError,Nt={},$t={get exports(){return Nt},set exports(t){Nt=t}},Vt=d,Ht=Object.defineProperty,zt=function(t,e){try{Ht(Vt,t,{value:e,configurable:!0,writable:!0})}catch(r){Vt[t]=e}return e},Bt=zt,Ut="__core-js_shared__",Gt=d[Ut]||Bt(Ut,{}),Wt=Gt;($t.exports=function(t,e){return Wt[t]||(Wt[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.29.0",mode:"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.29.0/LICENSE",source:"https://github.com/zloirock/core-js"});var Kt=W,qt=Object,Yt=function(t){return qt(Kt(t))},Jt=Yt,Xt=_({}.hasOwnProperty),Qt=Object.hasOwn||function(t,e){return Xt(Jt(t),e)},Zt=_,te=0,ee=Math.random(),re=Zt(1..toString),ne=function(t){return"Symbol("+(void 0===t?"":t)+")_"+re(++te+ee,36)},oe=Nt,ie=Qt,ae=ne,ce=bt,le=mt,ue=d.Symbol,se=oe("wks"),fe=le?ue.for||ue:ue&&ue.withoutSetter||ae,pe=function(t){return ie(se,t)||(se[t]=ce&&ie(ue,t)?ue[t]:fe("Symbol."+t)),se[t]},he=C,de=rt,ve=Tt,ge=_t,ye=function(t,e){var r,n;if("string"===e&&Dt(r=t.toString)&&!Ft(n=Lt(r,t)))return n;if(Dt(r=t.valueOf)&&!Ft(n=Lt(r,t)))return n;if("string"!==e&&Dt(r=t.toString)&&!Ft(n=Lt(r,t)))return n;throw Mt("Can't convert object to primitive value")},be=TypeError,me=pe("toPrimitive"),Se=function(t,e){if(!de(t)||ve(t))return t;var r,n=ge(t,me);if(n){if(void 0===e&&(e="default"),r=he(n,t,e),!de(r)||ve(r))return r;throw be("Can't convert object to primitive value")}return void 0===e&&(e="number"),ye(t,e)},Ce=Tt,we=function(t){var e=Se(t,"string");return Ce(e)?e:e+""},Oe=rt,Te=d.document,xe=Oe(Te)&&Oe(Te.createElement),je=function(t){return xe?Te.createElement(t):{}},Ee=je,Pe=!y&&!g((function(){return 7!=Object.defineProperty(Ee("div"),"a",{get:function(){return 7}}).a})),ke=y,Ie=C,Ae=w,Re=P,_e=Y,Le=we,De=Qt,Fe=Pe,Me=Object.getOwnPropertyDescriptor;v.f=ke?Me:function(t,e){if(t=_e(t),e=Le(e),Fe)try{return Me(t,e)}catch(t){}if(De(t,e))return Re(!Ie(Ae.f,t,e),t[e])};var Ne={},$e=y&&g((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),Ve=rt,He=String,ze=TypeError,Be=function(t){if(Ve(t))return t;throw ze(He(t)+" is not an object")},Ue=y,Ge=Pe,We=$e,Ke=Be,qe=we,Ye=TypeError,Je=Object.defineProperty,Xe=Object.getOwnPropertyDescriptor,Qe="enumerable",Ze="configurable",tr="writable";Ne.f=Ue?We?function(t,e,r){if(Ke(t),e=qe(e),Ke(r),"function"==typeof t&&"prototype"===e&&"value"in r&&tr in r&&!r.writable){var n=Xe(t,e);n&&n.writable&&(t[e]=r.value,r={configurable:Ze in r?r.configurable:n.configurable,enumerable:Qe in r?r.enumerable:n.enumerable,writable:!1})}return Je(t,e,r)}:Je:function(t,e,r){if(Ke(t),e=qe(e),Ke(r),Ge)try{return Je(t,e,r)}catch(t){}if("get"in r||"set"in r)throw Ye("Accessors not supported");return"value"in r&&(t[e]=r.value),t};var er=Ne,rr=P,nr=y?function(t,e,r){return er.f(t,e,rr(1,r))}:function(t,e,r){return t[e]=r,t},or={},ir={get exports(){return or},set exports(t){or=t}},ar=y,cr=Qt,lr=Function.prototype,ur=ar&&Object.getOwnPropertyDescriptor,sr=cr(lr,"name"),fr={EXISTS:sr,PROPER:sr&&"something"===function(){}.name,CONFIGURABLE:sr&&(!ar||ar&&ur(lr,"name").configurable)},pr=Z,hr=Gt,dr=_(Function.toString);pr(hr.inspectSource)||(hr.inspectSource=function(t){return dr(t)});var vr,gr,yr,br=hr.inspectSource,mr=Z,Sr=d.WeakMap,Cr=mr(Sr)&&/native code/.test(String(Sr)),wr=ne,Or=Nt("keys"),Tr=function(t){return Or[t]||(Or[t]=wr(t))},xr={},jr=Cr,Er=d,Pr=rt,kr=nr,Ir=Qt,Ar=Gt,Rr=Tr,_r=xr,Lr="Object already initialized",Dr=Er.TypeError,Fr=Er.WeakMap;if(jr||Ar.state){var Mr=Ar.state||(Ar.state=new Fr);Mr.get=Mr.get,Mr.has=Mr.has,Mr.set=Mr.set,vr=function(t,e){if(Mr.has(t))throw Dr(Lr);return e.facade=t,Mr.set(t,e),e},gr=function(t){return Mr.get(t)||{}},yr=function(t){return Mr.has(t)}}else{var Nr=Rr("state");_r[Nr]=!0,vr=function(t,e){if(Ir(t,Nr))throw Dr(Lr);return e.facade=t,kr(t,Nr,e),e},gr=function(t){return Ir(t,Nr)?t[Nr]:{}},yr=function(t){return Ir(t,Nr)}}var $r={set:vr,get:gr,has:yr,enforce:function(t){return yr(t)?gr(t):vr(t,{})},getterFor:function(t){return function(e){var r;if(!Pr(e)||(r=gr(e)).type!==t)throw Dr("Incompatible receiver, "+t+" required");return r}}},Vr=_,Hr=g,zr=Z,Br=Qt,Ur=y,Gr=fr.CONFIGURABLE,Wr=br,Kr=$r.enforce,qr=$r.get,Yr=String,Jr=Object.defineProperty,Xr=Vr("".slice),Qr=Vr("".replace),Zr=Vr([].join),tn=Ur&&!Hr((function(){return 8!==Jr((function(){}),"length",{value:8}).length})),en=String(String).split("String"),rn=ir.exports=function(t,e,r){"Symbol("===Xr(Yr(e),0,7)&&(e="["+Qr(Yr(e),/^Symbol\(([^)]*)\)/,"$1")+"]"),r&&r.getter&&(e="get "+e),r&&r.setter&&(e="set "+e),(!Br(t,"name")||Gr&&t.name!==e)&&(Ur?Jr(t,"name",{value:e,configurable:!0}):t.name=e),tn&&r&&Br(r,"arity")&&t.length!==r.arity&&Jr(t,"length",{value:r.arity});try{r&&Br(r,"constructor")&&r.constructor?Ur&&Jr(t,"prototype",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(t){}var n=Kr(t);return Br(n,"source")||(n.source=Zr(en,"string"==typeof e?e:"")),t};Function.prototype.toString=rn((function(){return zr(this)&&qr(this).source||Wr(this)}),"toString");var nn=Z,on=Ne,an=or,cn=zt,ln=function(t,e,r,n){n||(n={});var o=n.enumerable,i=void 0!==n.name?n.name:e;if(nn(r)&&an(r,i,n),n.global)o?t[e]=r:cn(e,r);else{try{n.unsafe?t[e]&&(o=!0):delete t[e]}catch(t){}o?t[e]=r:on.f(t,e,{value:r,enumerable:!1,configurable:!n.nonConfigurable,writable:!n.nonWritable})}return t},un={},sn=Math.ceil,fn=Math.floor,pn=Math.trunc||function(t){var e=+t;return(e>0?fn:sn)(e)},hn=function(t){var e=+t;return e!=e||0===e?0:pn(e)},dn=hn,vn=Math.max,gn=Math.min,yn=function(t,e){var r=dn(t);return r<0?vn(r+e,0):gn(r,e)},bn=hn,mn=Math.min,Sn=function(t){return t>0?mn(bn(t),9007199254740991):0},Cn=Sn,wn=function(t){return Cn(t.length)},On=Y,Tn=yn,xn=wn,jn=function(t){return function(e,r,n){var o,i=On(e),a=xn(i),c=Tn(n,a);if(t&&r!=r){for(;a>c;)if((o=i[c++])!=o)return!0}else for(;a>c;c++)if((t||c in i)&&i[c]===r)return t||c||0;return!t&&-1}},En={includes:jn(!0),indexOf:jn(!1)},Pn=Qt,kn=Y,In=En.indexOf,An=xr,Rn=_([].push),_n=function(t,e){var r,n=kn(t),o=0,i=[];for(r in n)!Pn(An,r)&&Pn(n,r)&&Rn(i,r);for(;e.length>o;)Pn(n,r=e[o++])&&(~In(i,r)||Rn(i,r));return i},Ln=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Dn=_n,Fn=Ln.concat("length","prototype");un.f=Object.getOwnPropertyNames||function(t){return Dn(t,Fn)};var Mn={};Mn.f=Object.getOwnPropertySymbols;var Nn=at,$n=un,Vn=Mn,Hn=Be,zn=_([].concat),Bn=Nn("Reflect","ownKeys")||function(t){var e=$n.f(Hn(t)),r=Vn.f;return r?zn(e,r(t)):e},Un=Qt,Gn=Bn,Wn=v,Kn=Ne,qn=g,Yn=Z,Jn=/#|\.prototype\./,Xn=function(t,e){var r=Zn[Qn(t)];return r==eo||r!=to&&(Yn(e)?qn(e):!!e)},Qn=Xn.normalize=function(t){return String(t).replace(Jn,".").toLowerCase()},Zn=Xn.data={},to=Xn.NATIVE="N",eo=Xn.POLYFILL="P",ro=Xn,no=d,oo=v.f,io=nr,ao=ln,co=zt,lo=function(t,e,r){for(var n=Gn(e),o=Kn.f,i=Wn.f,a=0;ao;)for(var c,l=Oo(arguments[o++]),u=i?jo(mo(l),i(l)):mo(l),s=u.length,f=0;s>f;)c=u[f++],vo&&!yo(a,l,c)||(r[c]=l[c]);return r}:To,Po=Eo;so({target:"Object",stat:!0,arity:2,forced:Object.assign!==Po},{assign:Po});var ko=M,Io=_,Ao=function(t){if("Function"===ko(t))return Io(t)},Ro=It,_o=b,Lo=Ao(Ao.bind),Do=function(t,e){return Ro(t),void 0===e?t:_o?Lo(t,e):function(){return t.apply(e,arguments)}},Fo=M,Mo=Array.isArray||function(t){return"Array"==Fo(t)},No={};No[pe("toStringTag")]="z";var $o="[object z]"===String(No),Vo=$o,Ho=Z,zo=M,Bo=pe("toStringTag"),Uo=Object,Go="Arguments"==zo(function(){return arguments}()),Wo=Vo?zo:function(t){var e,r,n;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=function(t,e){try{return t[e]}catch(t){}}(e=Uo(t),Bo))?r:Go?zo(e):"Object"==(n=zo(e))&&Ho(e.callee)?"Arguments":n},Ko=_,qo=g,Yo=Z,Jo=Wo,Xo=br,Qo=function(){},Zo=[],ti=at("Reflect","construct"),ei=/^\s*(?:class|function)\b/,ri=Ko(ei.exec),ni=!ei.exec(Qo),oi=function(t){if(!Yo(t))return!1;try{return ti(Qo,Zo,t),!0}catch(t){return!1}},ii=function(t){if(!Yo(t))return!1;switch(Jo(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return ni||!!ri(ei,Xo(t))}catch(t){return!0}};ii.sham=!0;var ai=!ti||qo((function(){var t;return oi(oi.call)||!oi(Object)||!oi((function(){t=!0}))||t}))?ii:oi,ci=Mo,li=ai,ui=rt,si=pe("species"),fi=Array,pi=function(t){var e;return ci(t)&&(e=t.constructor,(li(e)&&(e===fi||ci(e.prototype))||ui(e)&&null===(e=e[si]))&&(e=void 0)),void 0===e?fi:e},hi=function(t,e){return new(pi(t))(0===e?0:e)},di=Do,vi=z,gi=Yt,yi=wn,bi=hi,mi=_([].push),Si=function(t){var e=1==t,r=2==t,n=3==t,o=4==t,i=6==t,a=7==t,c=5==t||i;return function(l,u,s,f){for(var p,h,d=gi(l),v=vi(d),g=di(u,s),y=yi(v),b=0,m=f||bi,S=e?m(l,y):r||a?m(l,0):void 0;y>b;b++)if((c||b in v)&&(h=g(p=v[b],b,d),t))if(e)S[b]=h;else if(h)switch(t){case 3:return!0;case 5:return p;case 6:return b;case 2:mi(S,p)}else switch(t){case 4:return!1;case 7:mi(S,p)}return i?-1:n||o?o:S}},Ci={forEach:Si(0),map:Si(1),filter:Si(2),some:Si(3),every:Si(4),find:Si(5),findIndex:Si(6),filterReject:Si(7)},wi=g,Oi=vt,Ti=pe("species"),xi=function(t){return Oi>=51||!wi((function(){var e=[];return(e.constructor={})[Ti]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},ji=Ci.filter;so({target:"Array",proto:!0,forced:!xi("filter")},{filter:function(t){return ji(this,t,arguments.length>1?arguments[1]:void 0)}});var Ei=Wo,Pi=$o?{}.toString:function(){return"[object "+Ei(this)+"]"};$o||ln(Object.prototype,"toString",Pi,{unsafe:!0});var ki=Yt,Ii=ho;so({target:"Object",stat:!0,forced:g((function(){Ii(1)}))},{keys:function(t){return Ii(ki(t))}});var Ai=TypeError,Ri=we,_i=Ne,Li=P,Di=function(t,e,r){var n=Ri(e);n in t?_i.f(t,n,Li(0,r)):t[n]=r},Fi=so,Mi=g,Ni=Mo,$i=rt,Vi=Yt,Hi=wn,zi=function(t){if(t>9007199254740991)throw Ai("Maximum allowed index exceeded");return t},Bi=Di,Ui=hi,Gi=xi,Wi=vt,Ki=pe("isConcatSpreadable"),qi=Wi>=51||!Mi((function(){var t=[];return t[Ki]=!1,t.concat()[0]!==t})),Yi=function(t){if(!$i(t))return!1;var e=t[Ki];return void 0!==e?!!e:Ni(t)};Fi({target:"Array",proto:!0,arity:1,forced:!qi||!Gi("concat")},{concat:function(t){var e,r,n,o,i,a=Vi(this),c=Ui(a,0),l=0;for(e=-1,n=arguments.length;ea;)Zi.f(t,r=o[a++],n[r]);return t};var na,oa=at("document","documentElement"),ia=Be,aa=Ji,ca=Ln,la=xr,ua=oa,sa=je,fa=Tr("IE_PROTO"),pa=function(){},ha=function(t){return" + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

XML instrument bank

An ARIA-specific element, an XML bank is a collection of several SFZ instruments +in one instrument bank. Though technically not part of the SFZ format, it is +relevant to instrument creation for ARIA. The #define directive can also +be used at the bank level, but otherwise there is no SFZ there. +XML banks for ARIA must be digitally signed by Plogue - contact them if +interested in creating instruments with banks and graphical user interfaces.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/midi_ccs/index.html b/extensions/midi_ccs/index.html new file mode 100644 index 000000000..ab9d6a360 --- /dev/null +++ b/extensions/midi_ccs/index.html @@ -0,0 +1,776 @@ + + + + + + + + + Extended MIDI CCs - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Extended MIDI CCs

In the MIDI specification, MIDI Control Change Messages can have numbers from 0 to 127.

+

SFZ 2 and ARIA add some special CCs numbered 128 and above.

+

The additions in SFZ 2 are:

+
    +
  • pitch bend: 128
  • +
  • channel aftertouch: 129
  • +
  • polyphonic aftertouch: 130
  • +
  • note on velocity: 131
  • +
  • note off velocity: 132
  • +
  • keyboard note number: 133
  • +
  • keyboard note gate: 134
  • +
  • unipolar random: 135
  • +
  • bipolar random: 136
  • +
  • alternate: 137
  • +
+

Values such as note on velocity and MIDI note number, when used as CCs, do not +behave exactly the same as note number or velocity of the note itself, in +some contexts. This is because once a note is played, its MIDI note number and +note on velocity remain the same for that note. MIDI CC, however, is shared +across the entire instrument, and this means another note on or note off event +will change CC 131, 132 and 133. This can give unexpected results when using +these CCs to adjust keytracking or velocity tracking of various parameters, +especially in polyphonic instruments with long-sustaining sounds.

+

Note gate is an on/off - it's 0 when no MIDI notes are pressed, and 1 when +at least one note is currently pressed. Unipolar random is from 0 to 1. +Bipolar random is from -1 to 1. Alternate changes between 0 and 1 every time +a note on message is received.

+

Some of the parameters, such as aftertouch and note off velocity, are rarely +supported by modern MIDI hardware controllers, though they are part of the MIDI +specification and can be edited in DAWs. Many MIDI keyboards will send a +default note off velocity, such as 64, with every note off event regardless of +how fast the key was actually moving at the time.

+

Anything above 137 is not specified in the SFZ 2 standard and strictly +engine-dependent. ARIA adds more. Some of these might not work properly in +all DAWs.

+
    +
  • keydelta: 140
  • +
  • keydelta absolute: 141
  • +
  • host tempo (bpm): 142
  • +
  • host transport status (0 is off, 1 on in non-loop mode, 2 is playing in loop mode): 143
  • +
  • host sample rate: 144
  • +
  • time since the engine has been up: 145
  • +
  • current time signature numerator: 146
  • +
  • current time signature denominator: 147
  • +
  • position since song start in PPQ (pulses per quarter note): 148
  • +
  • position since bar start in PPQ: 149
  • +
  • time since the instrument has been up: 150
  • +
  • time since last key on (in seconds): 151
  • +
  • time since last key off (in seconds): 152
  • +
  • number of keys currently down: 153
  • +
  • number of currently active voices: 154
  • +
  • last playahead (offset) of any sample in the instrument: 155
  • +
+

Practical Considerations

+

While all the "regular" CCs have the same range of 0 to 127, and some of these extended CCs +behave the same way (for example CC 131 or note on velocity), others do not. CC136 or bipolar +random can have a negative value, for example. Many will often have non-integer values. +These CCs will not always behave the same as others and have not been thoroughly documented.

+

Some of the additional CCs are shared across all instances of the ARIA engine currently running, +for example the host tempo. Others can have concurrently have a different value for different +instances or different instruments concurrently, for example keydelta.

+

CC 140 and 141 are measured in half-steps. So, the below will result in an envelope with a depth +of 100 cents per half-step. This is typically what would be used for portamento glides.

+
eg07_pitch_oncc140=100
+
+

Using locc and hicc with CC 140 and 141 does not work the same as for other CCs. However, they +can be used with lohdcc and hihdcc. For example, the below will restrict a region to play only +when the interval between the current note and the previous one is an octave, ascending. Whether +the decimal is necessary needs to be tested, but the below is confirmed to work.

+
lohdcc140=12
+hihdcc140=12.1
+
+

Using lohdcc alone does not work and will result in the region not triggering, but adding hihdcc +with a high value will. The below example was tested in an instrument with a range of less than +two octaves, and there works as a way to trigger some regions only when the interval is more than +one octave in either direction.

+
lohdcc141=12.1
+hihdcc141=24
+
+

CC 151 is reset as soon as a new note is hit, so it cannot be used to measure +the time between the previous note and the current one, for adaptive legato +speed purposes. It can, however, be used to control the triggering of release samples. Like +CC140 and CC141, it also requires using hdcc to function properly - which makes sense, as +time since note-on as measured in seconds usually involves fractions of a second in real +scenarios.

+

In Cakewalk Dimension Pro, 140 is bitred and 141 is decim.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/headers/control/index.html b/headers/control/index.html new file mode 100644 index 000000000..44f30ccf9 --- /dev/null +++ b/headers/control/index.html @@ -0,0 +1,709 @@ + + + + + + + + + ‹control› - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

‹control›

SFZ 2 header which should come before ‹global› in the file, +and can contain the following special directives, +which should not be used under other headers:

+ +

Multiple ‹control› headers can be used in one file, and this can be very +useful when specifying default_path. This path will then be used for +all regions until another ‹control› header is encountered. Whether settings +other than default_path should also be reset by a new control header is not +entirely clear. As implemented in ARIA, a new control header resets +default_path only and not other control settings, and this does not seem +unreasonable.

+

See also ARIA Extensions.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/headers/curve/index.html b/headers/curve/index.html new file mode 100644 index 000000000..a30436226 --- /dev/null +++ b/headers/curve/index.html @@ -0,0 +1,748 @@ + + + + + + + + + ‹curve› - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

‹curve›

A header for defining curves for MIDI CC controls.

One curve header is used to define each curve. +The values for various points along the curve can then be set, from v000 to v127. +The default is v000=0 and v127=1. Any points along the curve not defined explicitly +will be interpolated linearly between points which are defined.

+

There are default built-in curves in ARIA. If no curve is specified for a +modulation, curve 0 is used. The built-in ARIA curves are:

+

Default curve (number 0). linear, from 0 to 1 +1. bipolar, from -1 to 1 (useful for things such as tuning and panning, + used by CC10 panning by default) +2. linear inverted, from 1 to 0 +3. bipolar inverted, from 1 to -1 +4. concave (used for CC7 volume tracking and amp_veltrack) +5. Xfin power curve +6. Xfout power curve

+

These can be overwritten, but as they are used by the engine for their normal +functions, it's safer to use curve_index numbers of 7 and above for custom curves. +Curve_index in ARIA can be any integer from 0 to 255.

+

Examples

+
<curve>curve_index=17
+v000=0
+v095=1
+v127=1
+
+<curve>curve_index=18
+v000=0
+v095=0.5
+v127=1
+
+

Here's a scenario using one MIDI CC to control the amplitude of two samples +along two different curves.

+
<region>
+amplitude_oncc110=100
+amplitude_curvecc110=9
+sample=bigger.wav
+
+<region>
+amplitude_oncc110=100
+amplitude_curvecc110=10
+sample=smaller.wav
+
+//The curves for the room ambiences - bigger room first
+
+<curve>curve_index=9
+v000=0
+v063=0
+v127=1
+
+<curve>curve_index=10
+v000=0
+v063=1
+v127=0.1
+
+

And how to use the default curve 1 to create a tuning control which +goes down and up, with the pitch unmodulated when the control is in +the middle.

+
pitch_oncc27=100
+pitch_curvecc27=1
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/headers/effect/index.html b/headers/effect/index.html new file mode 100644 index 000000000..2abdedc38 --- /dev/null +++ b/headers/effect/index.html @@ -0,0 +1,699 @@ + + + + + + + + + ‹effect› - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

‹effect›

SFZ v2 header for effects controls.

In SFZ v1 only effect1 and effect2 opcodes was available +and only at ‹region› level.

+

From SFZ v2 this header was added together with the addition of +effect3 and effect4 opcodes also to modulate the related bus. +Other opcodes listed in the book are bus, type and dsp_order.

+

The specifics of what can be used under this header differ widely +between SFZ players. The information on available effects and +how to control them in ARIA and Cakewalk products can be found on +the type page.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/headers/global/index.html b/headers/global/index.html new file mode 100644 index 000000000..3ec0484da --- /dev/null +++ b/headers/global/index.html @@ -0,0 +1,727 @@ + + + + + + + + + ‹global› - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

‹global›

Allows entering parameters which are common for all regions.

If the same opcode defined in global is also defined in group or +region, the group or region setting is used. This means global can be used to +set values which are common for most regions in the SFZ file, but if a few +regions need something different, they can override the global setting at a +lower level. Here is a typical example with two opcodes set at the global header +level, some at the group level, and others at the region level. The seq_length +(number of round robins) is set to 4 in global, but as the fourth dynamic layer +only contains three samples, seq_length is set to for that layer at the group +header level.

+

It is possible to have multiple global headers in one file, at least under +ARIA. As with any other header, anything specified under a global header is +active until another global header is encountered in the SFZ file.

+
<global>loop_mode=one_shot seq_length=4
+
+<group>key=36 hivel=31 amp_velcurve_31=1
+<region>seq_position=1 sample=kick_vl1_rr1.wav
+<region>seq_position=2 sample=kick_vl1_rr2.wav
+<region>seq_position=3 sample=kick_vl1_rr3.wav
+<region>seq_position=4 sample=kick_vl1_rr4.wav
+
+<group>key=36 lovel=32 hivel=63 amp_velcurve_63=1
+<region>seq_position=1 sample=kick_vl2_rr1.wav
+<region>seq_position=2 sample=kick_vl2_rr2.wav
+<region>seq_position=3 sample=kick_vl2_rr3.wav
+<region>seq_position=4 sample=kick_vl2_rr4.wav
+
+<group>key=36 lovel=64 hivel=95 amp_velcurve_95=1
+<region>seq_position=1 sample=kick_vl3_rr1.wav
+<region>seq_position=2 sample=kick_vl3_rr2.wav
+<region>seq_position=3 sample=kick_vl3_rr3.wav
+<region>seq_position=4 sample=kick_vl3_rr4.wav
+
+<group>key=36 lovel=96 seq_length=3
+<region>seq_position=1 sample=kick_vl4_rr1.wav
+<region>seq_position=2 sample=kick_vl4_rr2.wav
+<region>seq_position=3 sample=kick_vl4_rr3.wav
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/headers/group/index.html b/headers/group/index.html new file mode 100644 index 000000000..99d670382 --- /dev/null +++ b/headers/group/index.html @@ -0,0 +1,721 @@ + + + + + + + + + ‹group› - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

‹group›

Multiple regions can be arranged in a group. Groups allow entering common parameters for multiple regions.

The group header is different than the group opcode, and +it's important to avoid confusing the two. ARIA adds the polyphony_group +opcode as an alias for group, to reduce this confusion.

+

Groups allow entering common parameters for multiple regions. A group is defined +with the ‹group› opcode, and the parameters enumerated on it last till the next +group opcode, or till the end of the file.

+
<group>
+ampeg_attack=0.04 ampeg_release=0.45
+<region> sample=trumpet_pp_c4.wav key=c4
+<region> sample=trumpet_pp_c#4.wav key=c#4
+<region> sample=trumpet_pp_d4.wav key=d4
+<region> sample=trumpet_pp_d#4.wav key=d#4
+
+<group>
+ampeg_attack=0.03 ampeg_release=0.42
+<region> sample=trumpet_pp_e4.wav key=e4
+<region> sample=trumpet_pp_f4.wav key=f4
+
+

If the same opcode is defined at both the group and region levels, the region +setting overrides the group setting and is used. If an opcode is defined under +the global level and group level but not region, the group setting overrides +the global setting. For example:

+
<group>
+ampeg_attack=0.04 ampeg_release=0.45
+<region> sample=trumpet_pp_c4.wav key=c4
+<region> ampeg_attack=0.05 sample=trumpet_pp_c#4.wav key=c#4
+<region> sample=trumpet_pp_d4.wav key=d4
+<region> sample=trumpet_pp_d#4.wav key=d#4
+
+

With the above code, C#4 would use an attack time of 0.05 seconds, +while C4, D4 and D#4 would use the 0.04 seconds set at the group level.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/headers/index.html b/headers/index.html new file mode 100644 index 000000000..5de00edf7 --- /dev/null +++ b/headers/index.html @@ -0,0 +1,737 @@ + + + + + + + + + Headers - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Headers

SFZ files are subdivided into sections by headers. The region header is the most +essential, and is the basic unit from which instruments are constructed. A group +is an optional organizational level containing one or more regions. The global +header (one per file) contains opcodes which apply to all regions in the file. +The master header is an extra level added inbetween group and global for the +ARIA player. So, the global/group/region or global/master/group/region hierarchy +contains the opcodes which define which samples are played, when they are to be +played, and how.

+

The control header would be found at the beginning of the file and includes +special opcodes for setting up MIDI CC controls. The curve headers, when used, +are normally found at the end of the file, and define the curves used for +shaping envelopes, parameter response etc. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HeaderVersion
<region>SFZ v1
<group>SFZ v1
<control>SFZ v2
<global>SFZ v2
<curve>SFZ v2
<effect>SFZ v2
<master>ARIA
<midi>ARIA
<sample>SFZ v2

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/headers/master/index.html b/headers/master/index.html new file mode 100644 index 000000000..95fd8e7bd --- /dev/null +++ b/headers/master/index.html @@ -0,0 +1,725 @@ + + + + + + + + + ‹master› - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

‹master›

An intermediate level in the header hierarchy, between global and group.

Example

+
<global>
+loop_mode=one_shot
+ampeg_attack=0.001
+ampeg_decay=0.7
+ampeg_sustain=100
+
+<master>
+amplitude_cc30=100
+offset_cc33=3000
+ampeg_sustain_oncc33=-100
+<group> key=36
+<region>
+sample=../Samples/bobobo/bobobo_bass_vl1_rr1.wav hirand=0.250
+<region>
+sample=../Samples/bobobo/bobobo_bass_vl1_rr2.wav lorand=0.250 hirand=0.500
+<region>
+sample=../Samples/bobobo/bobobo_bass_vl1_rr3.wav lorand=0.500 hirand=0.750
+<region>
+sample=../Samples/bobobo/bobobo_bass_vl1_rr4.wav lorand=0.750
+
+<master>
+amplitude_cc35=100
+offset_cc38=1500
+ampeg_sustain_oncc38=-100
+<group>key=38
+<region>
+sample=../Samples/bobobo/bobobo_tenor_l_vl1_rr1.wav hirand=0.250
+<region>
+sample=../Samples/bobobo/bobobo_tenor_l_vl1_rr2.wav lorand=0.250 hirand=0.500
+<region>
+sample=../Samples/bobobo/bobobo_tenor_l_vl1_rr3.wav lorand=0.500 hirand=0.750
+<region>
+sample=../Samples/bobobo/bobobo_tenor_l_vl1_rr4.wav lorand=0.750
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/headers/midi/index.html b/headers/midi/index.html new file mode 100644 index 000000000..26fcc656b --- /dev/null +++ b/headers/midi/index.html @@ -0,0 +1,691 @@ + + + + + + + + + ‹midi› - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

‹midi›

ARIA extension, was added for MIDI pre-processor effects. From ARIA v1.0.8.0+ an ‹effect› section with a bus=midi can be used instead.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/headers/region/index.html b/headers/region/index.html new file mode 100644 index 000000000..7b3017cae --- /dev/null +++ b/headers/region/index.html @@ -0,0 +1,729 @@ + + + + + + + + + ‹region› - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

‹region›

The basic component of an instrument. An instrument is defined by one or more regions.

Inside the definition file, a region starts with the ‹region› header. A region +is defined between two ‹region› headers, or between a ‹region› header and a +‹group› header, or between a ‹region› header and the end of the file.

+

Following the ‹region› header one or more opcodes can be defined. The opcodes are +special keywords which instruct the player on what, when and how to play a sample.

+

Opcodes within a region can appear in any order, and they have to be separated +by one or more spaces or tabulation controls. Opcodes can appear in separated +lines within a region.

+

Opcodes and assigned opcode values are separated by the equal to sign (=), +without spaces between the opcode and the sign. For instance:

+
sample=trombone_a4_ff.wav
+sample=cello_a5_pp_first_take.wav
+
+

are valid examples, while:

+
sample = cello_a4_pp.wav
+
+

Is not (note the spaces at the sides of the = sign). Input Controls and +Performance Parameters opcodes are optional, so they might not be present in the +definition file. An 'expectable' default value for each parameter is pre-defined, +and will be used if there's no definition.

+

Example region definitions:

+
<region> sample=440.wav
+
+

This region definition instructs the player to play the sample file '440.wav' +for the whole keyboard range.

+
<region> lokey=64 hikey=67 sample=440.wav
+
+

This region features a very basic set of input parameters (lokey and hikey, which +represent the low and high MIDI notes in the keyboard), and the sample definition. +This instructs the player to play the sample '440.wav', +if a key in the 64-67 range is played.

+

It is very important to note that all Input Controls defined in a region act +using the AND boolean operator. Consequently, all conditions must be matched for +the region to play. For instance:

+
<region> lokey=64 hikey=67 lovel=0 hivel=34 locc1=0 hicc1=40 sample=440.wav
+
+

This region definition instructs the player to play the sample '440.wav' if +there is an incoming note event in the 64-67 range AND the note has a velocity +in the 0~34 range AND last modulation wheel (cc1) message was in the 0-40 range.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/headers/sample/index.html b/headers/sample/index.html new file mode 100644 index 000000000..3e5fef90e --- /dev/null +++ b/headers/sample/index.html @@ -0,0 +1,1070 @@ + + + + + + + + + ‹sample› - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

‹sample›

Allows to embed sample data directly in SFZ files (Rapture).

Example

+
<region> sample=mysample.wav
+<sample> name=mysample.wav data=[encoded-content-of-mysample.wav]
+
+

The content encoding is an alphabet mapping of 256 entries that map to each byte. +(in the encoding, a WAV file is immediately recognizable by having its four byte +"RIFF" header encoded to "|spp")

+

This C source file can be compiled to convert a wav file to an embedded sample.

+

Decoding

+

The decoding algorithm is as follows:

+
    +
  • Loop while there is an input byte b1
  • +
  • if b1 is the end marker $24, stop reading
  • +
  • if b1 is '\r' (\(0D) or '\n' (\)0A), discard it
  • +
  • if b1 is the escape character '=' ($3D),
      +
    • extract the next byte b2, and compute the next output byte as (b2+$C0)%256
    • +
    +
  • +
  • otherwise, compute the next output byte as (b2+$D6)%256
  • +
+

Encoding

+
    +
  • Loop while there is an input byte b1
  • +
  • if (b1+$2A)%256 is one of the "forbidden characters" ($3D, $00, $09, $0A, $0D, $24)
      +
    • output the escape character $3D, and then output the byte (b1+$40)%256
    • +
    +
  • +
  • otherwise, output (b1+$2A)%256
  • +
  • Output the end marker $24
  • +
+

Alphabet

+

The alphabet used for the coding is as following:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
$00$10$20$30$40$50$60$70$80$90$A0$B0$C0$D0$E0$F0
$00$2A$3A$4A$5A$6A$7A$8A$9A$AA$BA$CA$DA$EA$FA$3D20$1A
$01$2B$3B$4B$5B$6B$7B$8B$9B$AB$BB$CB$DB$EB$FB$0B$1B
$02$2C$3C$4C$5C$6C$7C$8C$9C$AC$BC$CC$DC$EC$FC$0C$1C
$03$2D$3D53$4D$5D$6D$7D$8D$9D$AD$BD$CD$DD$ED$FD$3D23$1D
$04$2E$3E$4E$5E$6E$7E$8E$9E$AE$BE$CE$DE$EE$FE$0E$1E
$05$2F$3F$4F$5F$6F$7F$8F$9F$AF$BF$CF$DF$EF$FF$0F$1F
$06$30$40$50$60$70$80$90$A0$B0$C0$D0$E0$F0$3D16$10$20
$07$31$41$51$61$71$81$91$A1$B1$C1$D1$E1$F1$01$11$21
$08$32$42$52$62$72$82$92$A2$B2$C2$D2$E2$F2$02$12$22
$09$33$43$53$63$73$83$93$A3$B3$C3$D3$E3$F3$03$13$23
$0A$34$44$54$64$74$84$94$A4$B4$C4$D4$E4$F4$04$14$3D3A
$0B$35$45$55$65$75$85$95$A5$B5$C5$D5$E5$F5$05$15$25
$0C$36$46$56$66$76$86$96$A6$B6$C6$D6$E6$F6$06$16$26
$0D$37$47$57$67$77$87$97$A7$B7$C7$D7$E7$F7$07$17$27
$0E$38$48$58$68$78$88$98$A8$B8$C8$D8$E8$F8$08$18$28
$0F$39$49$59$69$79$89$99$A9$B9$C9$D9$E9$F9$3D1F$19$29
{: .table .table-sm .table-bordered .table-striped }
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 000000000..4e7313c03 --- /dev/null +++ b/index.html @@ -0,0 +1,780 @@ + + + + + + + + + Home - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+

Welcome to SFZFormat.com!

+

+ +This is the main reference point for anyone who wants to create virtual musical +instruments using the SFZ format. + +The SFZ format is a file format to define how a collection of samples 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. + +
+

+

What SFZ is not

+

To clarify, the term SFZ as used on this site does not mean a sforzando dynamic marking, +and it also is not the same thing as a soundfont. Soundfonts are a completely different +file format which includes both the samples and the definitions of sample behavior in the +same binary file, while SFZ is a file format which only defines the behavior of musical +instruments and does not include the sample content. SF2 may look a bit like SFZ visually, +but that's a coincidence.

+

Features

+
    +
  • A .sfz definition file is just a text file. Consequently, + it can be created by using any text editor.
  • +
  • Samples of any bit depth (8/16/24/32-bit) + and sample rate (44.1 kHz, 48 kHz, 384 kHz etc.), mono or stereo.
  • +
  • Compressed and uncompressed sample formats can both be used within the same instrument.
  • +
  • Loops embedded in sample files or configured in the SFZ.
  • +
  • Velocity layers, round robins, keyboard splits and layers.
  • +
  • Sample playback based on MIDI controllers (note on, note off, + continuous controllers, pitch bend, channel - and polyphonic aftertouch, + keyboard switches) and internal generators (random, sequence counters).
  • +
  • Unidirectional and bidirectional exclusive regions (mute groups).
  • +
  • Release trigger regions with release trigger attenuation control.
  • +
  • Crossfade layer controls.
  • +
  • Ability to distinguish legato notes from first notes.
  • +
  • Envelope and LFO modulation sources with possible targets including volume, + pitch, filter cutoff and more.
  • +
+

Requirements

+

To make use of the SFZ format requires three things:

+ +

which tells the player how to use the samples. The SFZ file itself can be created +using any text editor, though for more complex cases with hundreds or thousands +of samples, additional tools can make this easier - some people use spreadsheets, +and there are also dedicated SFZ creation tools.

+

Here's a basic SFZ file you can copy to start your own.

+

Making Instruments

+

Text guides on how to make a simple instrument, covering the essential opcodes

+
    +
  • +

    Drum basics - covers global, group and + region headers, sample, key, lovel / hivel, amp_velcurve_N, + seq_length, seq_position and lorand / hirand.

    +
  • +
  • +

    Sustained note basics - using a flute + as an example. + Adds lokey / hikey, pitch_keycenter, xfin / xfout, locc / hicc, + keyswitching, group, off_by and off_mode.

    +
  • +
+

Some more advanced topics

+
    +
  • +

    Vibrato - typical string vibrato, humanized vibrato, + asymmetrical vibrato, and even filter wobble.

    +
  • +
  • +

    Legato - simulated legato and portamento as well as + true sampled legato.

    +
  • +
  • +

    Cymbal muting - using group, off_by, off_mode + and polyphony to make hi-hat and cymbal notes mute previous notes + in a musically useful way.

    +
  • +
  • +

    Brush stirs - two different approaches to brushed + drum techniques which produce a continuous sound rather than a hit.

    +
  • +
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/background.gif b/legacy/background.gif new file mode 100644 index 0000000000000000000000000000000000000000..92c4e1153748dc01af70c3ca2e420bd7ca56dd47 GIT binary patch literal 70 zcmZ?wbhEHbOkrSVn8?8J;LYbdFF*eO|DS<@LGdRGkYr%c0TCd11}1TrzLlrn@-NO= WbgO&wy* literal 0 HcmV?d00001 diff --git a/legacy/index.html b/legacy/index.html new file mode 100644 index 000000000..ae285b8c6 --- /dev/null +++ b/legacy/index.html @@ -0,0 +1,4429 @@ +The SFZ Format + + +
+ + + + + +
  +
+The sfz Format: +Basics 

What's + The sfz Format?
+
The sfz format is a file format to define how +a collection of samples 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.

+

A sfz format + file can be played in our freeware sfz player.
+
+ Soundware, software and hardware developers can create, use and distribute the sfz format files + for free, for either free or commercial applications.

+

Some + of the features of the sfz format are:

+

- Samples of + any bit depth (8/16/24/32-bit) support, mono or stereo.
+ - Samples taken at any samplerate (i.e. 44.1k, 48k, 88.2k, 96k, 176.4k, + 192k, 384k).
+ - Compressed samples. Compressed and uncompressed can be combined.
+ - Looped samples.
+ - Unlimited keyboard splits and layers.
+ - Unlimited velocity splits and layers.
+ - Unlimited regions of sample playback based on MIDI controllers (continuous + controllers, pitch bend, channel and polyphonic aftertouch, keyboard switches) + and internal generators (random, sequence counters).
+ - Sample playback on MIDI control events.
+ - Unlimited unidirectional and bidirectional exclusive regions (mute groups).
+ - Unlimited release trigger regions with release trigger attenuation control.
+ - Unlimited crossfade controls.
+ - Trigger on first-note and legato notes.
+ - Sample playback synchronized to host tempo.
+ - Dedicated Envelope Generators for pitch, filter and amplifier.
+ - Dedicated LFO for pitch, filter and amplifier.
+

+


+ How the + sfz format + is structured?
+
The + sfz format + is a collection of sample files plus + one or multiple .sfz definition files. This structure, containing multiple + files instead of a single file is defined as non-monolithic.
+
+ Two kinds of sample files were selected to be included in the sfz format: + a basic PCM uncompressed format (standard Windows wave files) and a + basic, adjustable-quality, royalty free compressed format (ogg-vorbis + encoded files).
+
+ The + inclusion of a compressed + format allows sample developers and soundware creators to easily + create preview or demonstration files in a small package so they + can be transferred with minimum bandwidth, while retaining + complete + performance functionality.

+

Both + formats are 100% royalty-free, so players can be created to reproduce + them without fixed or per-copy fees. They can also be freely distributed + on the web (provided that the contents of the files are copyright cleared).
+
+ Each .sfz definition file represents one or a collection of instruments. + An instrument is defined as a collection of regions. Regions + include the definition for the input controls, the samples (the wav/ogg + files) and the performance parameters to play those samples.

+

 

+

How + the .sfz definition file is created?
+
A + .sfz definition file is just a text file. Consequently, it can be + created by using any text editor (i.e. Notepad).

+

 

+

Why + non-monolithic?
+
While both monolithic and + non-monolithic formats have advantages and + disadvantages, there are several reasons which moved + us to adopt + a non-monolithic sample + format. Technological and conceptual reasons + can hardly be separated, so here's a basic explanation.

+

The + most important + reason is the file size limitation of a non-monolitic + file on FAT32 partitions. Samples are getting really big + nowadays, with thousands of individual samples + collected in single instruments, and triggered according to + many input control combinations.

+

Samples + with high bit resolution (i.e. 24-bit samples) and high samplerate settings + (96kHz, 192kHz) make the collection size even bigger. In the case of + a non-monolithic format, the limitation still applies, but it applies + to + each sample instead + of to the sum of all samples, making the limit virtually unreachable.
+
+ While + this limitation doesn't apply to NTFS, NTFS partitions are + less efficient than FAT32 + disks in terms of raw disk performance for + streaming applications.
+
+ Additionally, editing a single sample in a monolithic file implies + loading the whole file, and after edit, saving the whole file again + to disk. When collection size is big, the loading and saving operation + is very time-consuming.
+
+ However, we have not discharged the possibility + of incorporating a monolithic format for the + sfz format, as soon as the format structure is completely + implemented. Small sound sets (or NTFS users) could chose between + the two options appropriately.

+

 

+

Why + not XML?
+ XML was actually the first choice for the .sfz + definition file, mainly due the simplicity + from the development + point of view as the XML parser and + transaction code is already available.

+

However, XML + was designed to exchange data over the web. Musicians, players, composers, + soundware developers and audio technicians generally do not know about + XML at all.

+

In addition, + as a universal information exchange format designed for general-purpose + applications, XML is inefficient (in terms of information over total data + terms), and editing a XML file requires + the use + of + a XML editor instead of a text editor.

+

A .sfz file + is extremely self-explanatory. Most of the functionality of an instrument + can be easily discovered by reading the file.

+

 

+

Is there a + .sfz dedicated editor?
+
From + rgc:audio, not yet... and not anytime soon.
+ However, we're working with several developers + in the industry, creators of sample-conversion software to implement the .sfz + format in their converters and editors.

+

The nature + of the format allows creating instruments using other general-purpose + software, like spreadsheets, wordprocessors, simple-scripting languages + and other custom + tailored software applications. +

+
+
+Implementation
+

How + an instrument is defined?
+
The +basic component of an instrument is a region. An instrument +then, +is defined by one or more regions. Multiple regions can be arranged in a group. +Groups allow entering common parameters for multiple regions.
+
+A region can include three main components: the definition for a sample, +a +set +of input +controls and a +set of performance parameters.
+

+

Sample
+ The + sample opcode defines which + sample file will be played when the region is defined to play.
+ If a sample opcode + is not present in the region, the region will play the sample defined in + the last <group>. If there's no previous group defined, + or if the previous group doesn't specify a sample opcode, + the region will be ignored.

+


+
Input Controls
+
Input controls define when the + sample defined in a region will play, based in real-world controller + values and/or internally calculated values. +
+
+ Real-world controllers are + the + elements + that players, + musicians + or + composers actually
use + to play music. Internal values are calculated by the player, like sequence + counters and random generators.
+
+ The sfz format relies in the standard Musical Instruments Digital + Interface (MIDI) specification for all input controls. Most available performance + controllers implement MIDI, and it's still the dominating specification + for software audio + sequencers in all platforms.

+

Keyboard + controllers are the most significant example of an Input Controls generator. + Other generators could be MIDI guitars and string instruments, wind controllers, + drum and percussion controllers. With individual differences, they all + generate a common set of messages defined in the MIDI specification.
+
+ A set of input controls then, are the combination of a played MIDI note + with its velocity, continuous controllers, pitch bend, channel and polyphonic + aftertouch, etc.
+
+ When a particular set of input controls matches the definition for + a region, the sample specified in that region + plays, using a particular set of performance parameters also specified in + the region.

+

Inside the + definition file, a region starts with the <region> header. + A region is defined between two <region> headers, + or between a <region> header and a <group> header, + or between a <region> header and the end of the + file,.

+

Following the <region> header + one or more opcodes can be defined. The opcodes are special keywords which + instruct the player on what, when and how to play a sample.

+

Opcodes within + a region can appear in any order, and they have to be separated by one + or more spaces or tabulation controls. Opcodes can appear in separated + lines + within + a region.

+

Opcodes and + assigned opcode values are separated by the equal to sign (=), + without spaces between the opcode and the sign. For instance:

+

sample=trombone_a4_ff.wav
+ sample=cello_a5_pp first take.wav

+
+ are valid examples, while:
+
+ sample = cello_a4_pp.wav +
+
+ Is not (note the spaces at the sides of the = sign).
+ Input Controls and Performance Parameters opcodes are optional, so they might + not be present in the definition file. An 'expectable' default value for + each parameter is pre-defined, and will be used if there's no definition.

+

Example + region definitions:

+

<region> sample=440.wav
+
+
This region + definition instructs the player to play the sample file '440.wav' for the whole + keyboard range.

+

<region> lokey=64 hikey=67 sample=440.wav
+

+ This region features a very basic set of input parameters (lokey and hikey, + which represent the low and high MIDI notes in the keyboard), and the sample + definition.
+ This instructs the player to play the sample '440.wav', + if a key in the 64-67 range is played.

+

It is very + important to note that all Input Controls defined in a region act using + the AND boolean operator. Consequently, all conditions must be matched + for the region to play. For instance:

+

<region> lokey=64 + hikey=67 lovel=0 hivel=34 locc1=0 hicc1=40 sample=440.wav

+

This region + definition instructs the player to play the sample '440.wav' if there is + an incoming note event in the 64-67 range AND the note has a velocity in + the 0~34 range AND last modulation wheel (cc1) message was in the 0~40 + range.

+


+ Performance + parameters
+
The Performance Parameters define how the + sample specified will play, once the region is defined to play.
+ A simple example of a Performance Parameter is volume. It + defines how loud the sample will be played when the region plays.
+
+
+
Groups
+ As previously + stated, groups allow entering common parameters for multiple regions. A group + is defined with the <group> opcode, and the parameters + enumerated on it last till the next group opcode, or till the end of the file.

+

<group>
+ ampeg_attack=0.04 ampeg_release=0.45
+
+ <region> + sample=trumpet_pp_c4.wav key=c4
+
<region> sample=trumpet_pp_c#4.wav key=c#4
+
<region> sample=trumpet_pp_d4.wav key=d4
+
<region> sample=trumpet_pp_d#4.wav + key=d#4

+

<group>
+ <region> +
sample=trumpet_pp_e4.wav + key=e4 // previous group parameters reset
+

+

Comments
+
Comment + lines can be inserted anywhere inside the file. A comment line starts with + the slash character ('/'), and it extends till the end of the line.

+

<region>
+ sample=trumpet_pp_c4.wav
+
// + middle C in the keyboard
+ lokey=60

+ // + pianissimo layer
+ lovel=0 hivel=20 // another comment

+


+ Where the sample + files have to be stored?
+ Sample + files can be stored either in the same folder where the .sfz definition + file resides, or in any alternative route, specified relatively to + the location of the definition file. Consequently:
+
+ sample=trumpet_pp_c3.wav
+ sample=samples\trumpet_pp_c3.wav
+ sample=..\trumpet_pp_c3.wav
+

+ Are all valid sample names.
+
+ Alternatively, the player might specify one or several 'user folders', + where it will search for samples if it doesn't find them in the same + folder as the definition file.

+


+
What + the sfz format can do?
+
The + sfz format is aimed to allow the arrange of a sample collection + in a flexible and expandable way. It's up to the player to decide + which functionality it wants to implement.
+

+

Units
+
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.

+

+
+

Opcode list


+ +
+

The following + is a description of all valid opcodes for the sfz format version 1.0:
+
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OpcodeDescription
Type
Default
Range

Sample + Definition

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 will play unchanged when a note equal to the pitch_keycenter opcode + value is played. If pitch_keycenter is not defined for the region, + sample will play unchanged on note 60 (middle C).

+

Examples:
+ sample=guitar_c4_ff.wav
+ sample=dog kick.ogg
+ sample=out of tune trombone (redundant).wav
+ sample=staccatto_snare.ogg
+

string
+ (filename)
n/a
n/a
+
Input Controls
lochan
+ hichan
+

If + incoming notes have a MIDI channel between lochan and hichan, + the region will play.

+

Examples:
+ lochan=1 hichan=5

+
integer
+
lochan=1
+ hichan=16
+
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.
+
+ lokey and hikey can be entered + in either MIDI note numbers (0 to 127) or in MIDI note names + (C-1 to G9)
+
+ The key opcode sets lokey, hikey and pitch_keycenter to the same note.
+
+ Examples:
+ lokey=60 // middle C
+ hikey=63 // middle D#
+ lokey=c4 // middle C
+ hikey=d#4 // middle D# +
+ hikey=eb4 + // middle Eb (D#)
+
+
integer
lokey=0, + hikey=127
0 to + 127
+ C-1 to G9
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
lovel=0, +
+ hivel=127
0 + to 127
+
loccN
+ hiccN
+

Defines + the range of the last MIDI controller N required for the region + to play.
+
+ Examples:
+ locc74=30 hicc74=100

+

The + region will play only if last MIDI controller 74 received was in + the 30~100 range.
+
+

integer
locc=0, + hicc=127
+
+ for all controllers +
0 + to 127
+
lobend
+ hibend
+

Defines + the range of the last Pitch Bend message required for the region + to play.
+
+ Examples:
+ lobend=0 hibend=4000

+

The + region will play only if last Pitch Bend message received was + in the 0~4000 range.
+
+

+
integer
lobend=-8192, + hibend=8192
+
-8192 + to 8192
+
lochanaft
+ hichanaft
+

Defines + the range of last Channel Aftertouch message required for the + region to play.
+
+ Examples:
+ lochanaft=30 hichanaft=100

+

The + region will play only if last Channel Aftertouch message received + was in the 30~100 range.
+
+

+
integer
lochanaft=0, + hichanaft=127
+
0 + to 127
+
lopolyaft
+ hipolyaft
+

Defines + the range of last Polyphonic Aftertouch message required for + the region to play.
+
+ The incoming note information + in the Polyphonic Aftertouch message is not relevant.
+
+ Examples:
+ lopolyaft=30 hipolyaft=100

+

The + region will play only if last Polyphonic Aftertouch message + received was in the 30~100 range.
+
+

+
integer
lopolyaft=0, + hipolyaft=127
+
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.

+

Examples:
+ lorand=0.2 hirand=0.4
+
lorand=0.4 + hirand=1

+
+

+
floating + point
+
lorand + = 0
+ hirand = 1
+
0 + to 1
+
lobpm
+ hibpm
+

Host + tempo + value. + The region will play if the host tempo is equal to or higher than lobpm, + and lower than hibpm.

+

Examples:
+ lobpm=0 hibpm=100
+ lobpm=100 hibpm=200.5
+

+
floating + point
+
lobpm + = 0
+ hibpm = 500
+
0 + to 500 bpm
+
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.

+

Examples:
+ seq_length=3
+

+
integer
+
1
+
1 + to 100
+
seq_position
+

Sequence + position. The region will play if the internal sequence counter + is equal to seq_position.

+

Examples:
+ seq_length=4 seq_position=2
+
+ In above example, the region will play on the second note every + four notes.
+

+
integer
+
1
+
1 + to 100
+
sw_lokey
+ sw_hikey
+

Defines + the range of the keyboard to be used as trigger selectors for + the sw_last opcode.
+
+ sw_lokey and sw_hikey can + be entered in either MIDI note numbers (0 to 127) or in MIDI + note + names + (C-1 to G9)
+
+ Examples:
+ sw_lokey=48 sw_hikey=53

+
+

+
integer
+
sw_lokey=0, + sw_hikey=127
+
0 + to 127
+ C-1 to G9
+
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.
+
+ sw_last can + be entered in either MIDI note numbers (0 to 127) or + in MIDI note names (C-1 to G9)
+
+ Examples:
+ sw_last=49

+
+

+
integer
+
0
+
0 + to 127
+ C-1 to G9
+
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.
+
+ sw_down can be entered in either MIDI + note numbers (0 to 127) or in MIDI note names (C-1 to + G9)
+
+ Examples:
+ sw_down=Cb3

+
+

+
integer
+
0
+
+
0 + to 127
+ C-1 to G9
+
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.
+
+ sw_up can be entered in either MIDI + note numbers (0 to 127) or in MIDI note names (C-1 to + G9)
+
+ Examples:
+ sw_up=49

+
+

+
integer
+
0
+
+
0 + to 127
+ C-1 to G9
+
sw_previous
+

Previous + note value. The region will play if last note-on message was + equal to sw_previous value.
+
+ sw_previous can be entered in either MIDI + note numbers (0 to 127) or in MIDI note names (C-1 to G9)

+

Examples:
+ sw_previous=60
+
+

integer
+
none
+
0 + to 127
+ C-1 to G9
+
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.
+
+
Examples:
+ sw_vel=previous
+
+

text
+
current
+
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).

+

Examples:
+ trigger=release

+
integer
+
attack
+
attack,
+ release, first, legato
+
group
+

Exclusive + group number for this region.
+

+

Examples:
+ group=3
+ group=334
+
+

+
integer
+
0
+
0 + to 4Gb (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.
+

+

Examples:
+ off_by=3
+ off_by=334
+
+

+
integer
+
0
+
0 + to 4Gb (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.
+

+

Examples:
+ off_mode=fast
+ off
_mode=normal
+
+

+
text
+
fast
+
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.
+

+

Examples:
+ on_locc1=0 on_hicc1=0
+
+ Region will play when a MIDI CC1 (modulation wheel) message with zero value + is received.
+
+

+
integer
+
-1 + (unassigned)
+
0 + to 127
+
Performance Parameters
Sample + Player
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.

+

Examples:
+ delay=1
+ delay=0.2
+
+

+
floating + point
+
0
+
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.
+
+
Examples:
+ delay_random=1
+ delay_random=0.2
+
+

+
floating + point
+
0
+
0 + to 100 seconds
+
delay_ccN
+

Region + delay time after MIDI continuous controller N messages are + received, in seconds.
+ If the region receives a note-off message before delay time, the region + won't play.
+
+
Examples:
+ delay_cc1=1
+ delay_cc2=.5
+
+

+
floating + point
+
0
+
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.
+

+

Examples:
+ offset=3000
+ offset=32425
+
+

integer
0
0 + to 4 Gb (4294967296)
offset_random
+

Random + offset added to the region offset, in + sample + units.
+

+

Examples:
+ offset_random=300
+ offset_random=100
+
+

+
integer
+
0
+
0 + to 4 Gb (4294967296)
+
offset_ccN
+

The + offset used to play the sample according to last position of + MIDI continuous controller N, in sample units.
+
+ This opcode is useful to specify an alternate sample start + point based on MIDI controllers.
+

+

Examples:
+ offset_cc1=3000
+ offset_cc64=1388
+
+

+
integer
+
0
+
0 + to 4 Gb (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.

+

Examples:
+ end=133000
+ end=4432425
+
+

+
integer
+
0
+
-1 + to 4 Gb (4294967296)
+
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.

+

Examples:
+ count=3
+ count=2
+
+

+
integer
+
0
+
0 + to 4 Gb (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.
+ 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.
+
+ Examples:
+ loop_mode=no_loop
+ loop
_mode=loop_continuous
+

+

+
text
+
no_loop for + samples without a loop defined,
+ loop_continuous for samples with defined loop(s).
+
+
n/a
+
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.

Examples:
+ loop_start=4503
+
loop_start=12445
+
+

+
integer
+
0
+
0 + to 4 Gb (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.

+

Examples:
+ loop_end=34503
+ loop
_end=212445
+
+

+
integer
+
0
+
0 + to 4 Gb (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.
+
+
Examples:
+ sync_beats=4
+
+ In this example, if note is pressed in + beat 2 of current track, note won't be played until beat 4 reaches.
+
+ This opcode will only work in hosts featuring song position information + (vstTimeInfo ppqPos).
+
+

+
floating + point
+
0
+
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.
+
+
Examples:
+ sync_beats=4 sync_offset=1
+
+ In this example, if note is pressed in + beat 2 of current track, note won't be played until beat 5 + reaches.
+
+ This opcode will only work in hosts + featuring song position information (vstTimeInfo ppqPos).
+
+

+
floating + point
+
0
+
0 + to 32 beats
+
Pitch
transpose
+

The + transposition value for this region which will be applied to + the sample.
+
+ Examples:
+ transpose=3
+ transpose=-4

+
+

+
integer
+
0
+
-127 + to 127
+
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.
+
+ Examples:
+ tune=33
+ tune=-30
+ tune=94
+
+

+
integer
0
-100 + to 100
pitch_keycenter
+

Root + key for the sample.
+
+ Examples:
+ pitch_keycenter=56
+ pitch_keycenter=c#2

+
+

+
integer
+
60 + (C4)
+
-127 + to 127
+ C-1 to G9
+
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.
+
+ Examples:
+ pitch_keytrack=20
+
pitch_keytrack=0
+
+

+
integer
100
-1200 + to 1200
pitch_veltrack
+

Pitch + velocity tracking, represents how much the pitch changes with + incoming note velocity, in cents.
+
+ Examples:
+ pitch_veltrack=0
+ pitch_veltrack=1200

+
+

+
integer
+
0
+
-9600 + to 9600 +cents
+
pitch_random
+

Random + tuning for the region, in cents. Random pitch will be centered, + with positive and negative values.
+
+ Examples:
+ pitch_random=100
+ pitch_random=400

+
+

+
integer
+
0
+
0 + to 9600 cents
+
bend_up
+

Pitch + bend range when Bend Wheel or Joystick is moved up, in cents.
+
+ Examples:
+ bend_up=1200
+ bend
_up=100
+
+

+
integer
+
200
+
-9600 + to 9600
+
bend_down
+

Pitch + bend range when Bend Wheel or Joystick is moved down, in cents.
+
+ Examples:
+ bend_down=1200
+ bend
_down=100
+
+

+
integer
+
-200
+
-9600 + to 9600
+
bend_step
+

Pitch + bend step, in cents.
+
+ Examples:
+ bend_step=100 + // glissando in semitones
+ bend
_step=200 + // glissando in whole tones
+

+
integer
+
1
+
1 + to 1200
+

Pitch + EG

+
pitcheg_delay
+

Pitch + EG delay time, in seconds. This is the time elapsed from note + on to the start of the Attack stage.
+
+ Examples:
+ pitcheg_delay=1.5
+ pitcheg_delay=0

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
pitcheg_start
+

Pitch + EG start level, in percentage.
+
+ Examples:
+ pitcheg_start=20
+ pitcheg_start=100
+

+
+

+
floating + point
+
0 + %
+
0 + to 100 %
+
pitcheg_attack
+

Pitch + EG attack time, in seconds.
+
+ Examples:
+ pitcheg_attack=1.2
+ pitcheg_attack=0.1
+

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
pitcheg_hold
+

Pitch + EG hold time, in seconds. During the hold stage, EG output + will remain at its maximum value.
+
+ Examples:
+ pitcheg_hold=1.5
+ pitcheg_hold=0.1

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
pitcheg_decay
+

Pitch + EG decay time, in seconds.

+


+ Examples:
+ pitcheg_decay=1.5
+
pitcheg_decay=3
+

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
pitcheg_sustain
+

Pitch + EG sustain level, in percentage.
+
+ Examples:
+ pitcheg_sustain=40.34
+ pitcheg_sustain=10
+

+
+

+
floating + point
+
100 + %
+
0 + to 100 %
+
pitcheg_release
+

Pitch + EG release time (after note release), in seconds.
+
+ Examples:
+ pitcheg_release=1.34
+ pitcheg_release=2
+

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
pitcheg_depth
+

Depth + for the pitch EG, in cents.
+
+ Examples:
+ pitcheg_depth=1200
+ pitcheg_depth=-100
+

+
+

+
integer
+
0
+
-12000 + to 12000
+
pitcheg_vel2delay
+

Velocity + effect on pitch EG delay time, in seconds.
+
+ Examples:
+ pitcheg_vel2delay=1.2
+ pitcheg_vel2delay=0.1
+

+ Delay time will be calculated as
+
+ delay time = pitcheg_delay
+ pitcheg_vel2delay * velocity + / 127
+

+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+
pitcheg_vel2attack
+

Velocity + effect on pitch EG attack time, in seconds.
+
+ Examples:
+ pitcheg_vel2attack=1.2
+ pitcheg_vel2attack=0.1
+

+ Attack time will be calculated as
+
+ attack time = pitcheg_attack
+ pitcheg_vel2attack * velocity + / 127
+

+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+
pitcheg_vel2hold
+

Velocity + effect on pitch EG hold time, in seconds.
+
+ Examples:
+ pitcheg_vel2hold=1.2
+ pitcheg_vel2hold=0.1
+

+ Hold time will be calculated as
+
+ hold time = pitcheg_hold
+ pitcheg_vel2hold * velocity + / 127
+

+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+
pitcheg_vel2decay
+

Velocity + effect on pitch EG decay time, in seconds.
+
+ Examples:
+ pitcheg_vel2decay=1.2
+ pitcheg_vel2decay=0.1
+

+ Decay time will be calculated as
+
+ decay time = pitcheg_decay
+ pitcheg_vel2decay * velocity + / 127
+

+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+
pitcheg_vel2sustain
+

Velocity + effect on pitch EG sustain level, in percentage.
+
+ Examples:
+ pitcheg_vel2sustain=30
+ pitcheg_vel2sustain=20
+

+ Sustain level will be calculated as
+
+ sustain level = pitcheg_sustain
+ pitcheg_vel2sustain
+

+

+
floating + point
+
0 + %
+
-100 + % to 100 %
+
pitcheg_vel2release
+

Velocity + effect on pitch EG release time, in seconds.
+
+ Examples:
+ pitcheg_vel2release=1.2
+ pitcheg_vel2release=0.1
+

+ Release time will be calculated as
+
+ release time = pitcheg_release
+ pitcheg_vel2release * + velocity / 127
+

+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+
pitcheg_vel2depth
+

Velocity + effect on pitch EG depth, in cents.
+
+ Examples:
+ pitcheg_vel2depth=100
+ pitcheg_vel2depth=-1200

+

+
integer
+
0 + cents
+
-12000 + to 12000 cents
+

Pitch + LFO

+
pitchlfo_delay
+

The + time before the Pitch LFO starts oscillating, in + seconds.
+
+ Examples:
+ pitchlfo_delay=1
+ pitchlfo_delay=0.4
+

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
pitchlfo_fade
+

Pitch + LFO fade-in effect time.
+
+ Examples:
+ pitchlfo_fade=1
+ pitchlfo_fade=0.4
+

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
pitchlfo_freq
+

Pitch + LFO frequency, in hertz.
+
+ Examples:
+ pitchlfo_freq=0.4
+ pitchlfo_freq=1.3

+
+

+
floating + point
+
0 + Hertz
+
0 + to 20 hertz
+
pitchlfo_depth
+

Pitch + LFO depth, in cents.
+
+ Examples:
+ pitchlfo_depth=1
+ pitchlfo_depth=4

+
+

+
integer
+
0 + cent
+
-1200 + to 1200 cents
+
pitchlfo_depthccN
+

Pitch + LFO depth when MIDI continuous controller N is received, in + cents.
+
+ Examples:
+ pitchlfo_depthcc1=100
+ pitchlfo_depthcc32=400

+
+

+
integer
+
0 + cent
+
-1200 + to 1200 cents
+
pitchlfo_depthchanaft
+

Pitch + LFO depth when channel aftertouch MIDI messages are received, + in cents.
+
+ Examples:
+ pitchlfo_depthchanaft=100
+ pitchlfo_depthchanaft=400

+
+

+
integer
+
0 + cent
+
-1200 + to 1200 cents
+
pitchlfo_depthpolyaft
+

Pitch + LFO depth when polyphonic aftertouch MIDI messages are received, + in cents.
+
+ Examples:
+ pitchlfo_depthpolyaft=100
+
pitchlfo_depthpolyaft=400
+
+

+
integer
+
0 + cent
+
-1200 + to 1200 cents
+
pitchlfo_freqccN
+

Pitch + LFO frequency change when MIDI continuous controller N is received, + in hertz.
+
+ Examples:
+ pitchlfo_freqcc1=5
+ pitchlfo_freqcc1=-12

+
+

+
floating + point
+
0 + hertz
+
-200 + to 200 hertz
+
pitchlfo_freqchanaft
+

Pitch + LFO frequency change when channel aftertouch MIDI messages + are received, in hertz.
+
+ Examples:
+ pitchlfo_freqchanaft=10
+ pitchlfo_freqchanaft=-40

+
+

+
floating + point
+
0 + hertz
+
-200 + to 200 hertz
+
pitchlfo_freqpolyaft
+

Pitch + LFO frequency change when polyphonic aftertouch MIDI messages + are received, in hertz.
+
+ Examples:
+ pitchlfo_freqpolyaft=10
+ pitchlfo_freqpolyaft=-4

+
+

+
floating + point
+
0 + hertz
+
-200 + to 200 hertz
+

Filter

fil_type
+

Filter + type. Avaliable types are:

+

lpf_1p: + one-pole low pass filter (6dB/octave).
+ hpf_1p: one-pole high 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).
+
+ Examples:
+ fil_type=lpf_2p
+ fil
_type=hpf_1p
+
+

+
text
+
lpf_2p
+
lpf_1p, + hpf_1p, lpf_2p, hpf_2p, bpf_2p, brf_2p
+
cutoff
+

The + filter cutoff frequency, in Hertz.
+
+ If the cutoff is not specified, the filter will be disabled, with the consequent + CPU drop in the player.

+

Examples:
+ cutoff=343
+ cutoff=4333

+
+

+
floating + point
+
filter + disabled
+
0 + to
+ SampleRate / 2
+
cutoff_ccN
+

The + variation in the cutoff frequency when MIDI continuous controller + N is received, in cents.
+
+ Examples:
+ cutoff_cc1=1200
+ cutoff_cc2=-100

+
+

+
integer
+
0
+
-9600 + to 9600 cents
+
cutoff_chanaft
+

The + variation in the cutoff frequency when MIDI channel aftertouch + messages are received, in cents.
+
+ Examples:
+ cutoff_chanaft=1200
+ cutoff_chanaft=-100

+
+

+
integer
+
0
+
-9600 + to 9600 cents
+
cutoff_polyaft
+

The + variation in the cutoff frequency when MIDI polyphonic aftertouch + messages are received, in cents.
+
+ Examples:
+ cutoff_polyaft=1200
+ cutoff_polyaft=-100

+
+

+
integer
+
0
+
-9600 + to 9600 cents
+
resonance
+

The + filter cutoff resonance value, in decibels.
+
+ Examples:
+ resonance=30
+

+
+

+
floating + point
+
0 + dB
+
0 to + 40 dB
+
fil_keytrack
+

Filter + keyboard tracking (change on cutoff for each key) in cents.
+
+ Examples:
+ fil_keytrack=100
+ fil_keytrack=0

+
+

+
integer
+
0 + cents
+
0 + to 1200 cents
+
fil_keycenter
+

Center + key for filter keyboard tracking. In this key, the filter keyboard + tracking will have no effect.
+
+ Examples:
+ fil_keycenter=60
+ fil_keycenter=48

+
+

+
integer
+
60
+
0 + to 127
+
fil_veltrack
+

Filter + velocity tracking, represents how much the cutoff changes + with incoming note velocity.
+
+ Examples:
+ fil_veltrack=0
+ fil_veltrack=1200

+
+

+
integer
+
0
+
-9600 + + to 9600 +cents
+
fil_random
+

Random + cutoff added to the region, in cents.
+
+ Examples:
+ fil_random=100
+ fil_random=400

+
+

+
integer
+
0
+
0 + to 9600 cents
+

Filter + EG

+
fileg_delay
+

Filter + EG delay time, in seconds. This is the time elapsed from note + on to the start of the Attack stage.
+
+ Examples:
+ fileg_delay=1.5
+ fileg_delay=0

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
fileg_start
+

Filter + EG start level, in percentage.
+
+ Examples:
+ fileg_start=20
+ fileg_start=100
+

+
+

+
floating + point
+
0 + %
+
0 + to 100 %
+
fileg_attack
+

Filter + EG attack time, in seconds.
+
+ Examples:
+ fileg_attack=1.2
+ fileg_attack=0.1

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
fileg_hold
+

Filter + EG hold time, in seconds. During the hold stage, EG output + will remain at its maximum value.
+
+ Examples:
+ fileg_hold=1.5
+ fileg_hold=0.1

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
fileg_decay
+

Filter + EG decay time, in seconds.

+

Examples:
+ fileg_decay=1.5
+ fileg_decay=3

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
fileg_sustain
+

Filter + EG sustain level, in percentage.
+
+ Examples:
+ fileg_sustain=40.34
+ fileg_sustain=10

+
+

+
floating + point
+
100 + %
+
0 + to 100 %
+
fileg_release
+

Filter + EG release time (after note release), in seconds.
+
+ Examples:
+ fileg_release=1.34
+ fileg_release=2

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
fileg_depth
+

Depth + for the filter EG, in cents.
+
+ Examples:
+ fileg_depth=1200
+ fileg_depth=-100

+
+

+
integer
+
0
+
-12000 + to 12000
+
fileg_vel2delay
+

Velocity + effect on filter EG delay time, in seconds.
+
+ Examples:
+ fileg_vel2delay=1.2
+ fileg_vel2delay=0.1
+

+ Delay time will be calculated as
+
+ delay time = fileg_delay
+ fileg_vel2delay * velocity + / 127
+

+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+
fileg_vel2attack
+

Velocity + effect on filter EG attack time, in seconds.
+
+ Examples:
+ fil_vel2attack=1.2
+ fil_vel2attack=0.1
+

+ Attack time will be calculated as
+
+ attack time = fileg_attack
+ fileg_vel2attack * velocity + / 127
+

+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+
fileg_vel2hold
+

Velocity + effect on filter EG hold time, in seconds.
+
+ Examples:
+ fileg_vel2hold=1.2
+ fileg_vel2hold=0.1
+

+ Hold time will be calculated as
+
+ hold time = fileg_hold
+ fileg_vel2hold * velocity / 127
+

+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+
fileg_vel2decay
+

Velocity + effect on filter EG decay time, in seconds.
+
+ Examples:
+ fileg_vel2decay=1.2
+ fileg_vel2decay=0.1
+

+ Decay time will be calculated as
+
+ decay time = fileg_decay
+ fileg_vel2decay * velocity + / 127
+

+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+
fileg_vel2sustain
+

Velocity + effect on filter EG sustain level, in percentage.
+
+ Examples:
+ fileg_vel2sustain=30
+ fileg_vel2sustain=-30
+

+ Sustain level will be calculated as
+
+ sustain level = fileg_sustain
+ fileg_vel2sustain
+
+
Result will be clipped to 0~100%.
+

+

+
floating + point
+
0 + %
+
-100 + % to 100 %
+
fileg_vel2release
+

Velocity + effect on filter EG release time, in seconds.
+
+ Examples:
+ fileg_vel2release=1.2
+ fileg_vel2release=0.1
+

+ Release time will be calculated as
+
+ release time = fileg_release
+ fileg_vel2release * velocity + / 127
+

+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+
fileg_vel2depth
+

Velocity + effect on filter EG depth, in cents.
+
+ Examples:
+ fileg_vel2depth=100
+ fileg_vel2depth=-1200

+

+
integer
+
0 + cents
+
-12000 + to 12000 cents
+

Filter + LFO

+
fillfo_delay
+

The + time before the filter LFO starts oscillating, in seconds.
+
+ Examples:
+ fillfo_delay=1
+ fillfo_delay=0.4
+

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
fillfo_fade
+

Filter + LFO fade-in effect time.
+
+ Examples:
+ fillfo_fade=1
+ fillfo_fade=0.4
+

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
fillfo_freq
+

Filter + LFO frequency, in hertz.
+
+ Examples:
+ fillfo_freq=0.4
+ fillfo_freq=1.3

+
+

+
floating + point
+
0 + Hertz
+
0 + to 20 hertz
+
fillfo_depth
+

Filter + LFO depth, in cents.
+
+ Examples:
+ fillfo_depth=1
+ fillfo_depth=4

+
+

+
floating + point
+
0 + dB
+
-1200 + to 1200 cents
+
fillfo_depthccN
+

Filter + LFO depth when MIDI continuous controller N is received, in + cents.
+
+ Examples:
+ fillfo_depthcc1=100
+ fillfo_depthcc32=400

+
+

+
integer
+
0 + cent
+
-1200 + to 1200 cents
+
fillfo_depthchanaft
+

Filter + LFO depth when channel aftertouch MIDI messages are received, + in cents.
+
+ Examples:
+ fillfo_depthchanaft=100
+ fillfo_depthchanaft=400

+
+

+
integer
+
0 + cent
+
-1200 + to 1200 cents
+
fillfo_depthpolyaft
+

Filter + LFO depth when polyphonic aftertouch MIDI messages are received, + in cents.
+
+ Examples:
+ fillfo_depthpolyaft=100
+ fillfo_depthpolyaft=400

+
+

+
integer
+
0 + cent
+
-1200 + to 1200 cents
+
fillfo_freqccN
+

Filter + LFO frequency change when MIDI continuous controller N is received, + in hertz.
+
+ Examples:
+ fillfo_freqcc1=5
+ fillfo_freqcc1=-12

+
+

+
floating + point
+
0 + hertz
+
-200 + to 200 hertz
+
fillfo_freqchanaft
+

Filter + LFO frequency change when channel aftertouch MIDI messages + are received, in hertz.
+
+ Examples:
+ fillfo_freqchanaft=10
+ fillfo_freqchanaft=-40

+
+

+
floating + point
+
0 + hertz
+
-200 + to 200 hertz
+
fillfo_freqpolyaft
+

Filter + LFO frequency change when polyphonic aftertouch MIDI messages + are received, in hertz.
+
+ Examples:
+ fillfo_freqpolyaft=10
+ fillfo_freqpolyaft=-4

+
+

+
floating + point
+
0 + hertz
+
-200 + to 200 hertz
+

Amplifier

+
volume
+

The + volume for the region, in decibels.
+
+ Examples:
+ volume=-24
+ volume=0
+ volume=3.5
+
+

+
floating + point
+
0.0
+
-144 + to 6 dB
+
pan
+

The + panoramic position for the region.
+
+ 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.
+
+ Examples:
+ pan=-30.5
+ pan=0
+ pan=43
+
+

+
floating + point
+
0.0
+
-100 + to 100
+
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.

+

Examples:
+ width=100 // stereo
+ width=0 // play this stereo sample as mono
+ width=50 // mix 50% of one channel with the other
+

floating + point
+
0.0
+
-100 + to 100 %
+
position
+

Only + operational for stereo samples, position defines + the position in the stereo field of a stereo signal, after + channel mixing as defined in the width opcode.

+


+A value of zero means centered, negative values move the panoramic to the left, + positive to the right.

+


+ Examples:
+ // + mix both channels and play the result at left
+ width=0 position=-100
+
+
// + make the stereo image narrower and play it
+ // slightly right

+ width=50 position=30

+
floating + point
+
0.0
+
-100 + to 100 %
+
amp_keytrack
+

Amplifier + keyboard tracking (change in amplitude per key) in dB.
+
+ Examples:
+ amp_keytrack=-1.4
+ amp_keytrack=3

+
+

+
floating + point
+
0 + dB
+
-96 + to 12 dB
+
amp_keycenter
+

Center + key for amplifier keyboard tracking. In this key, the amplifier + keyboard tracking will have no effect.
+
+ Examples:
+ amp_keycenter=60
+ amp_keycenter=48

+
+

+
integer
+
60
+
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.
+
+ Examples:
+ amp_veltrack=0
+ amp_veltrack=100

+
+

floating + point
+
100 + %
+
-100 + to 100 %
+
amp_velcurve_1
+ amp_velcurve_127
+

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.

+

The + player will interpolate lineraly between specified opcodes + for unspecified ones:
+
+ amp_velcurve_1=0.2 amp_velcurve_3=0.3
+
// amp_velcurve_2 is calculated + to 0.25
+

+ If amp_velcurve_127 is + not specified, the player will assign it the value of 1.
+
+ Examples:
+ // linear, compressed dynamic range
+ // amplitude changes from 0.5 to 1
+ amp_velcurve_1=0.5
+

+

+
floating + point
+
standard + curve (see amp_veltrack)
+
0 + to 1
+
amp_random
+

Random + volume for the region, in decibels.
+
+ Examples:
+ amp_random=10
+ amp_random=3

+
+

+
floating + point
+
0
+
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.
+
+ Examples:
+ rt_decay=6.5
+

+
+

+
floating + point
+
0 + dB
+
0 + to 200 dB
+
output
+

The + stereo output number for this region.
+ If the player doesn't feature multiple + outputs, this opcode is ignored.
+
+ Examples:
+ output=0
+ output=4
+
+

+
integer
+
0
+
0 + to 1024
+
gain_ccN
+

Gain + applied on MIDI control N, in decibels.

+

Examples:
+ gain_cc1=12
+
+

+
floating + point
+
0
+
-144 + to 48 dB
+
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.
+

+

Examples:
+ xfin_lokey=c3 xfin_hikey=c4
+
+

+
integer
+
xfin_lokey=0
+ xfin_hikey=0
+
0 + to 127
+ C-1 to G9
+
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.
+

+

Examples:
+ xfout_lokey=c5 xfout_hikey=c6
+
+
+

+
integer
+
xfout_lokey=127
+ xfout_hikey=127
+
0 + to 127
+ C-1 to G9
+
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.
+
+

text
+
power
+
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.
+

+

Examples:
+ xfin_lovel=0 xfin_hivel=127
+
+

+
integer
+
xfin_lovel=0
+ xfin_hivel=0
+
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.
+

+

Examples:
+ xfout_lovel=0 xfout_hivel=127
+
+
+

+
integer
+
xfout_lokey=127
+ xfout_hikey=127
+
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.
+
+

+
text
+
power
+
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.
+

+

Examples:
+ xfin_locc1=64 xfin_hicc1=127
+
+
+

+
integer
+
0
+
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.
+

+

Examples:
+ xfout_locc1=64 xfout_hicc1=127
+
+
+

+
integer
+
0
+
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.
+
+

+
text
+
power
+
gain, + power
+

Amplifier + EG

+
ampeg_delay
+

Amplifier + EG delay time, in seconds. This is the time elapsed from note + on to the start of the Attack stage.
+
+ Examples:
+ ampeg_delay=1.5
+ ampeg_delay=0

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
ampeg_start
+

Amplifier + EG start level, in percentage.
+
+ Examples:
+ ampeg_start=20
+ ampeg_start=100
+

+
+

+
floating + point
+
0 + %
+
0 + to 100 %
+
ampeg_attack
+

Amplifier + EG attack time, in seconds.
+
+ Examples:
+ ampeg_attack=1.2
+ ampeg_attack=0.1
+

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
ampeg_hold
+

Amplifier + EG hold time, in seconds. During the hold stage, EG output + will remain at its maximum value.
+
+ Examples:
+ ampeg_hold=1.5
+ ampeg_hold=0.1

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
ampeg_decay
+

Amplifier + EG decay time, in seconds.

+


+ Examples:
+ ampeg_decay=1.5
+ ampeg_decay=3
+

+
+

floating + point
+
0 + seconds
+
0 + to 100 seconds
+
ampeg_sustain
+

Amplifier + EG sustain level, in percentage.
+
+ Examples:
+ ampeg_sustain=40.34
+ ampeg_sustain=10
+

+
+

+
floating + point
+
100 + %
+
0 + to 100 %
+
ampeg_release
+

Amplifier + EG release time (after note release), in seconds.
+
+ Examples:
+ ampeg_release=1.34
+ ampeg_release=2
+

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
ampeg_vel2delay
+

Velocity + effect on amplifier EG delay time, in seconds.
+
+ Examples:
+ ampeg_vel2delay=1.2
+ ampeg_vel2delay=0.1
+

+ Delay time will be calculated as
+
+ delay time = ampeg_delay
+ ampeg_vel2delay * velocity + / 127
+

+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+
ampeg_vel2attack
+

Velocity + effect on amplifier EG attack time, in seconds.
+
+ Examples:
+ ampeg_vel2attack=1.2
+ ampeg_vel2attack=0.1
+

+ Attack time will be calculated as
+
+ attack time = ampeg_attack
+ ampeg_vel2attack * velocity + / 127
+

+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+
ampeg_vel2hold
+

Velocity + effect on amplifier EG hold time, in seconds.
+
+ Examples:
+ ampeg_vel2hold=1.2
+ ampeg_vel2hold=0.1
+

+ Hold time will be calculated as
+
+ hold time = ampeg_hold
+ ampeg_vel2hold * velocity / + 127
+

+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+
ampeg_vel2decay
+

Velocity + effect on amplifier EG decay time, in seconds.
+
+ Examples:
+ ampeg_vel2decay=1.2
+ ampeg_vel2decay=0.1
+

+ Decay time will be calculated as
+
+ decay time = ampeg_decay
+ ampeg_vel2decay * velocity + / 127
+

+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+
ampeg_vel2sustain
+

Velocity + effect on amplifier EG sustain level, in percentage.
+
+ Examples:
+ ampeg_vel2sustain=30
+ ampeg_vel2sustain=-30
+

+ Sustain level will be calculated as
+
+ sustain level= ampeg_sustain
+ ampeg_vel2sustain
+
+
The result will be clipped to 0~100%.
+

+

+
floating + point
+
0%
+
-100 + % to 100 %
+
ampeg_vel2release
+

Velocity + effect on amplifier EG release time, in seconds.
+
+ Examples:
+ ampeg_vel2release=1.2
+ ampeg_vel2release=0.1
+

+ Release time will be calculated as
+
+ release time = ampeg_release
+ ampeg_vel2release * velocity + / 127
+

+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+
ampeg_delayccN
+

Amplifier + EG delay time added on MIDI control N, in seconds.
+
+ Examples:
+ ampeg_delaycc20=1.5
+ ampeg_delay
cc1=0
+
+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+
ampeg_startccN
+

Amplifier + EG start level added on MIDI control N, in percentage.
+
+ Examples:
+ ampeg_startcc20=20
+ ampeg_startcc1=100
+
+
+

+
floating + point
+
0 + %
+
-100 + to 100 %
+
ampeg_attackccN
+

Amplifier + EG attack time added on MIDI control N, in seconds.
+
+ Examples:
+ ampeg_attackcc20=1.2
+ ampeg_attackcc1=0.1
+
+
+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+
ampeg_holdccN
+

Amplifier + EG hold time added on MIDI control N, in seconds.
+
+ Examples:
+ ampeg_holdcc20=1.5
+ ampeg_hold
cc1=0.1
+
+

+
floating + point
+
0 + seconds
+
-100 to 100 seconds
+
ampeg_decayccN
+

Amplifier + EG decay time added on MIDI control N, in seconds.

+


+ Examples:
+ ampeg_decaycc20=1.5
+ ampeg_decaycc1=3

+
+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+
ampeg_sustainccN
+

Amplifier + EG sustain level added on MIDI control N, in percentage.
+
+ Examples:
+ ampeg_sustaincc20=40.34
+ ampeg_sustaincc1=10

+
+

+
floating + point
+
100 + %
+
-100 + to 100 %
+
ampeg_releaseccN
+

Amplifier + EG release time added on MIDI control N, + in seconds.
+
+ Examples:
+ ampeg_releasecc20=1.34
+ ampeg_releasecc1=2

+
+

+
floating + point
+
0 + seconds
+
-100 + to 100 seconds
+

Amplifier + LFO

+
amplfo_delay
+

The + time before the Amplifier LFO starts oscillating, in seconds.
+
+ Examples:
+ amplfo_delay=1
+ amplfo_delay=0.4
+

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
amplfo_fade
+

Amplifier + LFO fade-in effect time.
+
+ Examples:
+ amplfo_fade=1
+ amplfo_fade=0.4
+

+
+

+
floating + point
+
0 + seconds
+
0 + to 100 seconds
+
amplfo_freq
+

Amplifier + LFO frequency, in hertz.
+
+ Examples:
+ amplfo_freq=0.4
+ amplfo_freq=1.3

+
+

+
floating + point
+
0 + Hertz
+
0 + to 20 hertz
+
amplfo_depth
+

Amplifier + LFO depth, in decibels.
+
+ Examples:
+ amplfo_depth=1
+ amplfo_depth=4

+
+

+
floating + point
+
0 + dB
+
-10 + to 10 dB
+
amplfo_depthccN
+

Amplifier + LFO depth when MIDI continuous controller N is received, in + decibels.
+
+ Examples:
+ amplfo_depthcc1=100
+ amplfo_depthcc32=400

+
+

+
floating + point
+
0 + dB
+
-10 + to 10 dB
+
amplfo_depthchanaft
+

Amplifier + LFO depth when channel aftertouch MIDI messages are received, + in cents.
+
+ Examples:
+ amplfo_depthchanaft=100
+ amplfo_depthchanaft=400

+
+

+
floating + point
+
0 + dB
+
-10 + to 10 dB
+
amplfo_depthpolyaft
+

Amplifier + LFO depth when polyphonic aftertouch MIDI messages are received, + in cents.
+
+ Examples:
+ amplfo_depthpolyaft=100
+ amplfo_depthpolyaft=400

+
+

+
floating + point
+
0 + dB
+
-10 + to 10 dB
+
amplfo_freqccN
+

Amplifier + LFO frequency change when MIDI continuous controller N is received, + in hertz.
+
+ Examples:
+ amplfo_freqcc1=5
+ amplfo_freqcc1=-12

+
+

+
floating + point
+
0 + hertz
+
-200 + to 200 hertz
+
amplfo_freqchanaft
+

Amplifier + LFO frequency change when channel aftertouch MIDI messages + are received, in hertz.
+
+ Examples:
+ amplfo_freqchanaft=10
+ amplfo_freqchanaft=-40

+
+

+
floating + point
+
0 + hertz
+
-200 + to 200 hertz
+
amplfo_freqpolyaft
+

Amplifier + LFO frequency change when polyphonic aftertouch MIDI messages + are received, in hertz.
+
+ Examples:
+ amplfo_freqpolyaft=10
+ amplfo_freqpolyaft=-4

+
+

+
floating + point
+
0 + hertz
+
-200 + to 200 hertz
+

Equalizer

+
eq1_freq
+ eq2_freq
+ eq3_freq
+

Frequency + of the equalizer band, in Hertz.
+
+ Examples:
+ eq1_freq=80 eq2_freq=1000 eq3_freq=4500
+

+
+

+
floating + point
+
eq1_freq=50
+ eq2_freq=500
+ eq3_freq=5000 +
+
0 + to 30000 Hz
+
eq1_freqccN
+ eq2_freqccN
+ eq3_freqccN
+

Frequency + change of the equalizer band when MIDI continuous control N + messages are received, in Hertz.
+
+ Examples:
+ eq1_freqcc1=80
+

+
floating + point
+
0
+
-30000 + to 30000 Hz
+
eq1_vel2freq
+ eq2_vel2freq
+ eq3_vel2freq
+

Frequency + change of the equalizer band with MIDI velocity, in Hertz.
+
+ Examples:
+ eq1_vel2freq=1000
+

+
floating + point
+
0
+
-30000 + to 30000 Hz
+
eq1_bw
+ eq2_bw
+ eq3_bw
+
+

Bandwidth + of the equalizer band, in octaves.
+
+ Examples:
+ eq1_bw=1 eq2_bw=0.4 eq3_bw=1.4
+

+
+

+
floating + point
+
1 + octave
+
0.001 + to 4 octaves
+
eq1_bwccN
+ eq2_bwccN
+ eq3_bwccN
+
+

Bandwidth + change of the equalizer band when MIDI continuous control N + messages are received, in octaves.
+
+ Examples:
+ eq1_bwcc29=1.3
+

+
+

+
floating + point
+
0
+
-4 + to 4 octaves
+
eq1_gain
+ eq2_gain
+ eq3_gain
+
+

Gain + of the equalizer band, in decibels.
+
+ Examples:
+ eq1_gain=-3 eq2_gain=6 eq3_gain=-6
+

+
+

+
floating + point
+
0 + dB
+
-96 + to 24 dB
+
eq1_gainccN
+ eq2_gainccN
+ eq3_gainccN
+
+

Gain + change of the equalizer band when MIDI continuous control N + messages are received, in decibels.
+
+ Examples:
+ eq1_gaincc23=-12
+

+
+

+
floating + point
+
0 + dB
+
-96 + to 24 dB
+
eq1_vel2gain
+ eq2_vel2gain
+ eq3_vel2gain
+

Gain + change of the equalizer band with MIDI velocity, in decibels.
+
+ Examples:
+ eq1_vel2gain=12
+

+
floating + point
+
0
+
-96 + to 24 dB
+

Effects

+
effect1
+

Level + of effect1 send, in percentage (reverb in sfz).
+
+ Examples:
+ effect1=100
+

+
+

+
floating + point
+
0
+
0 + to 100 %
+
effect2
+

Level + of effect2 send, in percentage (chorus in sfz).
+
+ Examples:
+ effect2=100
+

+
+

+
floating + point
+
0
+
0 + to 100 %
+
+
+
+
diff --git a/misc/all_opcodes/index.html b/misc/all_opcodes/index.html new file mode 100644 index 000000000..4aeb292fa --- /dev/null +++ b/misc/all_opcodes/index.html @@ -0,0 +1,8432 @@ + + + + + + + + + Opcodes - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Opcodes

All opcode versions, including extensions, starting in alphabetical order. +Note that modulations such as (on)ccN and vel2* are included in the pages +describing the parameters they modulate.

+

Opcode links in red color +represent obsolete opcodes which should not be used in new instruments.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OpcodeDescriptionTypeDefaultRangeVersion
Real-Time Instrument ScriptscriptAllows to load real-time instrument scripts for SFZ instruments.stringN/ALinuxSampler
Sample PlaybackcountThe number of times the sample will be played.integer00 to 4294967296SFZ v1
Sample PlaybackdelayRegion delay time.float00 to 100SFZ v1
Sample Playbackdelay_ccNRegion delay time after MIDI continuous controller N messages are received. If the region receives a note-off message before delay time, the region won't play.float0-100 to 100
Sample Playbackdelay_onccNdelay_ccN alias.N/AN/ASFZ v2
Sample Playbackdelay_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate delay.integer00 to 255ARIA
Sample Playbackdelay_randomRegion random delay time.float00 to 100SFZ v1
Sample Playbackdelay_samplesAllows the region playback to be postponed for the specified time, measured in samples (and therefore dependent on current sample rate).integerN/ASFZ v2
Sample Playbackdelay_samples_onccNintegerN/A
Sample PlaybackendThe endpoint of the sample. If unspecified, the entire sample will play.integerunspecified0 to 4294967296SFZ v1
Sample Playbackloop_countThe number of times a loop will repeat.integerN/ASFZ v2
Sample Playbackloopcountloop_count alias.N/AN/AARIA
Sample Playbackloop_crossfadeLoop cross fade.floatN/ASFZ v2
Sample Playbackloop_endThe loop end point, in samples.integer00 to 4294967296SFZ v1
Sample Playbackloopendloop_end alias.N/AN/A
Sample Playbackloop_lengthccNChange of loop end point.N/AN/ASFZ v2
Sample Playbackloop_length_onccNloop_lengthccN alias.N/AN/A
Sample Playbackloop_modeAllows playing samples with loops defined in the unlooped mode.stringno_loop for samples without a loop defined,
loop_continuous for samples with defined loop(s).
SFZ v1
Sample Playbackloopmodeloop_mode alias.N/AN/A
Sample Playbackloop_startThe loop start point, in samples.integer00 to 4294967296SFZ v1
Sample Playbackloopstartloop_start alias.N/AN/A
Sample Playbackloop_startccNChange of loop start point.N/AN/ASFZ v2
Sample Playbackloop_start_onccNloop_startccN alias.N/AN/A
Sample Playbackloop_tuneTuning for only the loop segment.float0SFZ v2
Sample Playbacklooptuneloop_tune alias.N/AN/AARIA
Sample Playbackloop_typeDefines the looping mode.stringforwardSFZ v2
Sample Playbacklooptypeloop_type alias.N/AN/AARIA
Sample PlaybackoffsetThe offset used to play the sample.integer00 to 4294967296SFZ v1
Sample Playbackoffset_ccNThe offset used to play the sample according to last position of MIDI continuous controller N.integer00 to 4294967296
Sample Playbackoffset_onccNoffset_ccN alias.N/AN/ASFZ v2
Sample Playbackoffset_randomRandom offset added to the region offset.integer00 to 4294967296SFZ v1
Sample Playbackoffset_modeDefines whether offset is measured in samples or percentage of sample length.stringsamplesARIA
Sample PlaybacksampleDefines which sample file the region will play.stringN/ASFZ v1
Sample Playbacksample_fadeoutNumber of seconds before the end of sample playback that the player should begin a realtime fadeout.floatN/ASFZ v2
Sample Playbacksample_dyn_paramNfloatN/AARIA
Sample Playbacksample_dyn_paramN_onccXfloatN/A
Sample Playbacksync_beatsRegion playing synchronization to host position.float00 to 32SFZ v1
Sample Playbacksync_offsetRegion playing synchronization to host position offset.float00 to 32SFZ v1
Sample Playbackdelay_beatsDelays the start of the region until a certain amount of musical beats are passed.floatN/ASFZ v2
Sample Playbackdelay_beats_onccNN/AN/AARIA
Sample Playbackdelay_beats_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate delay_beats.integer00 to 255ARIA
Sample Playbackdelay_beats_randomDelays the start of the region after a random amount of musical beats.floatN/AARIA
Sample Playbackstop_beatsStops a region after a certain amount of beats have played.floatN/ASFZ v2
Sample PlaybackdirectionThe direction in which the sample is to be played.stringforwardSFZ v2
Sample Playbackmd5Calculates the MD5 digital fingerprint hash of a sample file, represented as a sequence of 32 hexadecimal digits.stringnullSFZ v2
Sample Playbackreverse_loccNIf MIDI CC N is between reverse_loccN and reverse_hiccN, the region plays reversed.integerN/A0 to 127SFZ v2
Sample Playbackreverse_hiccNIf MIDI CC N is between reverse_loccN and reverse_hiccN, the region plays reversed.integerN/A0 to 127SFZ v2
Sample PlaybackwaveguideEnables waveguide synthesis for the region.stringN/ASFZ v2
Instrument SettingsdefineCreates a variable and gives it a value.stringN/ASFZ v2
Instrument Settingsdefault_pathDefault file path.stringN/ASFZ v2
Instrument Settingsnote_offsetMIDI note transpose; tells the SFZ player to offset all incoming MIDI notes by the specified number of semitones.integer0-127 to 127SFZ v2
Instrument Settingsoctave_offsetMIDI octave transpose; tells the SFZ player to offset all incoming MIDI notes by the specified number of octaves.integer0-10 to 10SFZ v2
Instrument Settingslabel_ccNCreates a label for the MIDI CC.stringN/AARIA
Instrument Settingslabel_keyNCreates a label for a key.stringN/Asfizz
Instrument Settingslabel_outputNCreates a label for the output N.stringN/ACalfbox
Instrument Settingsset_ccNSets a default initial value for MIDI CC number N, when the instrument is initially loaded.integerN/A0 to 127SFZ v2
Instrument SettingsincludeA special directive, which allows using SFZ files as building blocks for creating larger, more complex SFZ files.stringN/AARIA
Instrument Settingshint_Its a 'hint' to the ARIA engine, others implementations don't have to follow.N/AN/AARIA
Instrument Settings_modDetermines whether a parameter is modulated by addition or multiplication.stringN/AARIA
Instrument Settingsset_hdccNLike set_ccN but with floating point MIDI CCs.floatN/A0 to 1ARIA
Instrument Settingsset_realccNset_hdccN alias.N/AN/A
Instrument Settingssw_note_offsetFollows the same logic as SFZ 2.0’s note_offset but for key switches.integerN/AARIA
Instrument Settingssw_octave_offsetFollows the same logic as SFZ 2.0’s octave_offset but for key switches.integerN/AARIA
Instrument Settingsglobal_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Instrument Settingsmaster_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Instrument Settingsgroup_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Instrument Settingsregion_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Voice LifecyclegroupExclusive group number for this region.integer0-2147483648 to 2147483647SFZ v1
Voice Lifecyclepolyphony_groupgroup alias.N/AN/AARIA
Voice Lifecycleoff_byRegion off group.integer0-2147483648 to 2147483647SFZ v1
Voice Lifecycleoffbyoff_by alias.N/AN/A
Voice Lifecycleoff_modeRegion off mode.stringfastSFZ v1
Voice LifecycleoutputThe stereo output number for this region.integer00 to 1024SFZ v1
Voice LifecyclepolyphonyPolyphony voice limit.integerN/ASFZ v2
Voice Lifecyclenote_polyphonyPolyphony limit for playing the same note repeatedly.integerN/ASFZ v2
Voice Lifecyclepolyphony_stealingintegerN/AARIA
Voice Lifecyclenote_selfmaskControls note-stealing behavior for a single pitch, when using note_polyphony.stringonSFZ v2
Voice Lifecyclert_deadControls whether a release sample should play if its sustain sample has ended, or not.stringoffSFZ v2
Voice Lifecycleoff_curveWhen off_mode is set to time, this specifies the math to be used to fade out the regions being muted by voice-stealing.integer10-2 to 10ARIA
Voice Lifecycleoff_shapeThe coefficient used by off_curve.float-10.3616ARIA
Voice Lifecycleoff_timeWhen off_mode is set to time, this specifies the fadeout time for regions being muted by voice-stealing.float0.006ARIA
Key MappingkeyEquivalent to using lokey, hikey and pitch_keycenter and setting them all to the same note value.integerN/A0 to 127SFZ v1
Key MappinglokeyDetermine the low boundary of a certain region.integer00 to 127SFZ v1
Key MappinghikeyDetermine the high boundary of a certain region.integer1270 to 127SFZ v1
Key MappinglovelIf a note with velocity value equal to or higher than lovel AND equal to or lower than hivel is played, the region will play.integer11 to 127SFZ v1
Key MappinghivelIf a note with velocity value equal to or higher than lovel AND equal to or lower than hivel is played, the region will play.integer1271 to 127SFZ v1
MIDI ConditionslochanIf incoming notes have a MIDI channel between lochan and hichan, the region will play.integer11 to 16SFZ v1
MIDI ConditionshichanIf incoming notes have a MIDI channel between lochan and hichan, the region will play.integer161 to 16SFZ v1
MIDI ConditionsloccNDefines the range of the last MIDI controller N required for the region to play.integer00 to 127SFZ v1
MIDI ConditionshiccNDefines the range of the last MIDI controller N required for the region to play.integer1270 to 127SFZ v1
MIDI ConditionslobendDefines the range of the last Pitch Bend message required for the region to play.integer-8192-8192 to 8192SFZ v1
MIDI ConditionshibendDefines the range of the last Pitch Bend message required for the region to play.integer8192-8192 to 8192SFZ v1
MIDI Conditionssostenuto_ccReassigns the sostenuto pedal CC to a non-standard value.integer660 to 127ARIA
MIDI Conditionssostenuto_loSets the minimum point at which the sostenuto pedal (MIDI CC 66) is considered 'down'.float0.50 to 127ARIA
MIDI Conditionssostenuto_swTurns the sostenuto switch on or off.stringN/ASFZ v2
MIDI Conditionssustain_ccReassigns the sustain pedal CC to a non-standard value.integer640 to 127ARIA
MIDI Conditionssustain_loSets the minimum point at which the sustain pedal (MIDI CC 64) is considered 'down'.float0.50 to 127ARIA
MIDI Conditionssustain_swTurns the sustain switch on or off.stringN/ASFZ v2
MIDI Conditionssw_lokeyDefines the range of the keyboard to be used as trigger selectors for the sw_last opcode.integer00 to 127SFZ v1
MIDI Conditionssw_hikeyDefines the range of the keyboard to be used as trigger selectors for the sw_last opcode.integer1270 to 127SFZ v1
MIDI Conditionssw_lastEnables 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.integer00 to 127SFZ v1
MIDI Conditionssw_downEnables 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.integer00 to 127SFZ v1
MIDI Conditionssw_upEnables the region to play if the key equal to sw_up value is not depressed.integer00 to 127SFZ v1
MIDI Conditionssw_previousPrevious note value. The region will play if last note-on message was equal to sw_previous value.integerN/A0 to 127SFZ v1
MIDI Conditionssw_velAllows overriding the velocity for the region with the velocity of the previous note.stringcurrentSFZ v1
MIDI ConditionsloprogThe region plays when the MIDI program number is between loprog and hiprog.integer00 to 127SFZ v2
MIDI ConditionshiprogThe region plays when the MIDI program number is between loprog and hiprog.integer1270 to 127SFZ v2
MIDI ConditionslohdccNLike loccN but with floating point MIDI CCsfloat00 to 1ARIA
MIDI ConditionshihdccNLike hiccN but with floating point MIDI CCsfloat10 to 1ARIA
MIDI Conditionssw_defaultDefine keyswitch 'power on default' so that you hear something when a patch loads.integerN/A0 to 127SFZ v2
MIDI Conditionssw_labelLabel for activated keyswitch on GUI.stringN/AARIA
MIDI Conditionssw_lolastLike sw_last, but allowing a region to be triggered across a range of keyswitches.integerN/A0 to 127ARIA
MIDI Conditionssw_hilastLike sw_last, but allowing a region to be triggered across a range of keyswitches.integerN/A0 to 127ARIA
MIDI ConditionsvarNN_modSpecifies the method used to calculate variable number NN from MIDI CCs.stringN/AARIA
MIDI ConditionsvarNN_onccXSpecifies the method used to calculate variable number NN from MIDI CCs.floatN/A0 to 1
MIDI ConditionsvarNN_curveccXSpecifies the ‹curve› number which MIDI CC X uses to modulate varNN.integer00 to 255
MIDI ConditionsvarNN_Specifies the target for variable NN to modulate.N/AN/AARIA
Internal ConditionslobpmHost tempo value.float00 to 500SFZ v1
Internal ConditionshibpmHost tempo value.float5000 to 500SFZ v1
Internal ConditionslochanaftDefines the range of last Channel Aftertouch message required for the region to play.integer00 to 127SFZ v1
Internal ConditionshichanaftDefines the range of last Channel Aftertouch message required for the region to play.integer1270 to 127SFZ v1
Internal ConditionslopolyaftDefines the range of last Polyphonic Aftertouch message required for the region to play.integer00 to 127SFZ v1
Internal ConditionshipolyaftDefines the range of last Polyphonic Aftertouch message required for the region to play.integer1270 to 127SFZ v1
Internal ConditionslorandThe region will play if the random number is equal to or higher than lorand, and lower than hirand.float00 to 1SFZ v1
Internal ConditionshirandThe region will play if the random number is equal to or higher than lorand, and lower than hirand.float10 to 1SFZ v1
Internal Conditionsseq_lengthSequence length, used together with seq_position to use samples as round robins.integer11 to 100SFZ v1
Internal Conditionsseq_positionSequence position. The region will play if the internal sequence counter is equal to seq_position.integer11 to 100SFZ v1
Internal ConditionslotimerRegion plays if the time passed since the last sample in the same group played is between lotimer and hitimer.floatN/ASFZ v2
Internal ConditionshitimerRegion plays if timer is between lotimer and hitimer.floatN/ASFZ v2
TriggerstriggerSets the trigger which will be used for the sample to play.stringattackSFZ v1
Triggerson_loccNIf a MIDI control message with a value between on_loccN and on_hiccN is received, the region will play. Default value is -1, it means unassigned.integer-10 to 127SFZ v1
Triggersstart_loccNon_loccN alias.N/AN/ASFZ v2
Triggerson_hiccNIf a MIDI control message with a value between on_loccN and on_hiccN is received, the region will play. Default value is -1, it means unassigned.integer-10 to 127SFZ v1
Triggersstart_hiccNon_hiccN alias.N/AN/ASFZ v2
Triggerson_lohdccNLike on_loccN but with floating point MIDI CCs.float-10 to 1ARIA
Triggersstart_lohdccNon_lohdccN alias.N/AN/A
Triggerson_hihdccNLike on_hiccN but with floating point MIDI CCs.float-10 to 1ARIA
Triggersstart_hihdccNon_hihdccN alias.N/AN/A
Triggersstop_loccNIf a MIDI control message with a value between stop_loccN and stop_hiccN is received, the region will stop playing. Default value is -1, it means unassigned.integer-10 to 127SFZ v2
Triggersstop_hiccNIf a MIDI control message with a value between stop_loccN and stop_hiccN is received, the region will stop playing. Default value is -1, it means unassigned.integer-10 to 127SFZ v2
Triggersstop_lohdccNLike stop_loccN but with floating point MIDI CCs.float-10 to 1ARIA
Triggersstop_hihdccNLike stop_hiccN but with floating point MIDI CCs.float-10 to 1ARIA
AmplifierpanThe panoramic position for the region.float0-100 to 100SFZ v1
Amplifierpan_onccNN/AN/ASFZ v2
Amplifierpan_ccNpan_onccN alias.N/AN/AARIA
Amplifierpan_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate pan.integer00 to 255SFZ v2
Amplifierpan_smoothccNN/AN/ASFZ v2
Amplifierpan_stepccNN/AN/ASFZ v2
Amplifierpan_randomRandom panoramic position for the region.float0-100 to 100ARIA
AmplifierpositionOnly operational for stereo samples, position defines the position in the stereo field of a stereo signal, after channel mixing as defined in the width opcode.float0-100 to 100SFZ v1
Amplifierposition_onccNN/AN/AARIA
Amplifierposition_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate position.integer00 to 255ARIA
Amplifierposition_smoothccNN/AN/AARIA
Amplifierposition_stepccNN/AN/AARIA
Amplifierposition_randomfloat0-100 to 100ARIA
Amplifierposition_keycenterN/AN/AARIA
Amplifierposition_keytrackN/AN/AARIA
Amplifierposition_veltrackinteger0-200 to 200ARIA
AmplifiervolumeThe volume for the region, in decibels.float0-144 to 6SFZ v1
Amplifiergain_ccNGain applied on MIDI control N, in decibels.float0-144 to 48
Amplifiergain_onccNgain_ccN alias.N/AN/ASFZ v2
Amplifiervolume_onccNgain_ccN alias.N/AN/ASFZ v2
Amplifiervolume_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate volume.integer00 to 255SFZ v2
Amplifiervolume_smoothccNN/AN/ASFZ v2
Amplifiervolume_stepccNN/AN/ASFZ v2
AmplifierwidthOnly operational for stereo samples, width defines the amount of channel mixing applied to play the sample.float100-100 to 100SFZ v1
Amplifierwidth_onccNN/AN/ASFZ v2
Amplifierwidth_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate width.integer00 to 255SFZ v2
Amplifierwidth_smoothccNN/AN/ASFZ v2
Amplifierwidth_stepccNN/AN/ASFZ v2
Amplifieramp_keycenterCenter key for amplifier keyboard tracking. In this key, the amplifier keyboard tracking will have no effect.integer600 to 127SFZ v1
Amplifieramp_keytrackAmplifier keyboard tracking (change in amplitude per key) in decibels.float0-96 to 12SFZ v1
Amplifieramp_veltrackAmplifier velocity tracking, represents how much the amplitude changes with incoming note velocity.float100-100 to 100SFZ v1
Amplifieramp_veltrack_onccNN/AN/AARIA
Amplifieramp_veltrack_ccNamp_veltrack_onccN alias.N/AN/A
Amplifieramp_veltrack_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate amp_veltrack.integer00 to 255ARIA
Amplifieramp_veltrack_randomN/AN/AARIA
Amplifieramp_velcurve_NUser-defined amplifier velocity curve.floatStandard curve (see amp_veltrack)0 to 1SFZ v1
Amplifieramp_randomRandom volume for the region, in decibels.float00 to 24SFZ v1
Amplifiergain_randomamp_random alias.N/AN/ASFZ v2
Amplifierrt_decayApplies only to regions that triggered through trigger=release. The volume decrease (in decibels) per seconds after the corresponding attack region was triggered.float00 to 200SFZ v1
Amplifierrt_decayNApplies only to regions that triggered through trigger=release. The volume decrease (in decibels) per seconds after the corresponding attack region was triggered, for decrease curve segment number N.float00 to 200ARIA
Amplifierrt_decayN_timeThe duration of release sample volue decrease curve segment number N.floatN/AARIA
Amplifierxf_cccurveMIDI controllers crossfade curve for the region.stringpowerSFZ v1
Amplifierxf_keycurveKeyboard crossfade curve for the region.stringpowerSFZ v1
Amplifierxf_velcurveVelocity crossfade curve for the region.stringpowerSFZ v1
Amplifierxfin_loccNFade in control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfin_hiccNFade in control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfout_loccNFade out control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfout_hiccNFade out control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfin_lokeyFade in control based on MIDI note (keyboard position).integer00 to 127SFZ v1
Amplifierxfin_hikeyFade in control based on MIDI note (keyboard position).integer00 to 127SFZ v1
Amplifierxfout_lokeyFade out control based on MIDI note number (keyboard position).integer1270 to 127SFZ v1
Amplifierxfout_hikeyFade out control based on MIDI note number (keyboard position).integer1270 to 127SFZ v1
Amplifierxfin_lovelFade in control based on velocity.integer00 to 127SFZ v1
Amplifierxfin_hivelFade in control based on velocity.integer00 to 127SFZ v1
Amplifierxfout_lovelFade out control, based on velocity.integer1270 to 127SFZ v1
Amplifierxfout_hivelFade out control, based on velocity.integer1270 to 127SFZ v1
AmplifierphaseIf invert is set, the region is played with inverted phase.stringnormalSFZ v2
AmplifieramplitudeAmplitude for the specified region in percentage of full amplitude.float1000 to 100ARIA
Amplifieramplitude_onccNfloatN/A-100 to 100
Amplifieramplitude_ccNamplitude_onccN alias.N/AN/A
Amplifieramplitude_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate amplitude.integer00 to 255
Amplifieramplitude_smoothccNN/AN/A
Amplifierglobal_amplitudeARIA extension, like amplitude, but affecting everything when set under the ‹global› header.float1000 to 100ARIA
Amplifiermaster_amplitudeARIA extension, like amplitude, but affecting everything when set under the ‹master› header.float1000 to 100ARIA
Amplifiergroup_amplitudeARIA extension, like amplitude, but affecting everything when set under the ‹group› header.float1000 to 100ARIA
Amplifierpan_lawSets the pan law to be used.stringN/AARIA
Amplifierpan_keycenterCenter key for pan keyboard tracking.integer600 to 127SFZ v2
Amplifierpan_keytrackThe amount by which the panning of a note is shifted with each key.float0-100 to 100SFZ v2
Amplifierpan_veltrackThe effect of note velocity on panning.float0-100 to 100SFZ v2
Amplifierglobal_volumeARIA extension, like volume, but affecting everything when set under the ‹global› header.float0-144 to 6ARIA
Amplifiermaster_volumeARIA extension, like volume, but affecting everything when set under the ‹master› header.float0-144 to 6ARIA
Amplifiergroup_volumeARIA extension, like volume, but affecting everything when set under the ‹group› header.float0-144 to 6ARIA
EQeqN_bwBandwidth of the equalizer band, in octaves.float10.001 to 4SFZ v1
EQeqN_bwccXfloat0-4 to 4
EQeqN_bw_onccXeqN_bwccX alias.N/AN/ASFZ v2
EQeqN_freqFrequency of the equalizer band, in Hertz.floateq1_freq=50
eq2_freq=500
eq3_freq=5000
0 to 30000SFZ v1
EQeqN_freqccXfloat0-30000 to 30000
EQeqN_freq_onccXeqN_freqccX alias.N/AN/ASFZ v2
EQeqN_vel2freqFrequency change of the equalizer band with MIDI velocity, in Hertz.float0-30000 to 30000
EQeqN_gainGain of the equalizer band, in decibels.float0-96 to 24SFZ v1
EQeqN_gainccXfloat0-96 to 24
EQeqN_gain_onccXeqN_gainccX alias.N/AN/ASFZ v2
EQeqN_vel2gainGain change of the equalizer band with MIDI velocity, in decibels.float0-96 to 24
EQeqN_dynamicSpecifies when EQ is recalculated.integer00 to 1ARIA
EQeqN_typeSets the type of EQ filter.stringpeakSFZ v2
FiltercutoffSets the cutoff frequency (Hz) of the filters.floatfilter disabled0 to SampleRate / 2SFZ v1
Filtercutoff2cutoff alias.N/AN/ASFZ v2
Filtercutoff2_ccNN/AN/A
Filtercutoff2_onccNN/AN/A
Filtercutoff2_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate cutoff2.integer00 to 255
Filtercutoff2_smoothccNN/AN/A
Filtercutoff2_stepccNN/AN/A
Filtercutoff2_chanaftN/AN/A
Filtercutoff2_polyaftN/AN/A
Filtercutoff_ccNThe variation in the cutoff frequency when MIDI continuous controller N is received.integer0-9600 to 9600
Filtercutoff_onccNcutoff_ccN alias.N/AN/ASFZ v2
Filtercutoff_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate cutoff.integer00 to 255SFZ v2
Filtercutoff_smoothccNfloat00 to ?SFZ v2
Filtercutoff_stepccNinteger00 to ?SFZ v2
Filtercutoff_chanaftThe variation in the cutoff frequency when MIDI channel aftertouch messages are received, in cents.integer0-9600 to 9600
Filtercutoff_polyaftThe variation in the cutoff frequency when MIDI polyphonic aftertouch messages are received, in cents.integer0-9600 to 9600
Filterfil_gainGain for lsh, hsh and peq filter types.float0ARIA
Filterfil2_gainfil_gain alias.N/AN/A
Filterfil2_gain_onccNN/AN/A
Filterfil_gain_onccNN/AN/A
Filterfil_keycenterCenter key for filter keyboard tracking.integer600 to 127SFZ v1
Filterfil2_keycenterfil_keycenter alias.N/AN/ASFZ v2
Filterfil_keytrackFilter keyboard tracking (change on cutoff for each key) in cents.integer00 to 1200SFZ v1
Filterfil2_keytrackfil_keytrack alias.N/AN/ASFZ v2
Filterfil_randomRandom value added to the filter cutoff for the region, in cents.integer00 to 9600SFZ v1
Filtercutoff_randomfil_random alias.N/AN/ASFZ v2
Filtercutoff2_randomfil_random alias.N/AN/AARIA
Filterfil_typeFilter type.stringlpf_2pSFZ v1
Filterfiltypefil_type alias.N/AN/A
Filterfil2_typefil_type alias.N/AN/ASFZ v2
Filterfil_veltrackFilter velocity tracking, the amount by which the cutoff changes with incoming note velocity, in cents.integer0-9600 to 9600SFZ v1
Filterfil2_veltrackfil_veltrack alias.N/AN/ASFZ v2
FilterresonanceThe filter cutoff resonance value, in decibels.float00 to 40SFZ v1
Filterresonance2resonance alias.N/AN/ASFZ v2
Filterresonance2_onccNfloat0-40 to 40
Filterresonance2_ccNresonance2_onccN alias.N/AN/ASFZ v2
Filterresonance2_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate resonance2.integer00 to 255
Filterresonance2_smoothccNfloat00 to ?
Filterresonance2_stepccNinteger00 to ?
Filterresonance_onccNfloat0-40 to 40SFZ v2
Filterresonance_ccNresonance_onccN alias.N/AN/A
Filterresonance_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate resonance.integer00 to 255SFZ v2
Filterresonance_smoothccNfloat00 to ?SFZ v2
Filterresonance_stepccNinteger00 to ?SFZ v2
Filterresonance_randomFilter cutoff resonance random value, in decibels.float00 to 40ARIA
Filterresonance2_randomFilter#2 cutoff resonance random value, in decibels.float00 to 40ARIA
Filternoise_filterstringN/ASFZ v2
Filternoise_stereostringN/ASFZ v2
Filternoise_levelfloatN/A-96 to 24SFZ v2
Filternoise_level_onccNfloatN/A-96 to 24
Filternoise_level_smoothccNfloat00 to ?
Filternoise_stepintegerN/A0 to 100SFZ v2
Filternoise_step_onccNintegerN/A0 to 100
Filternoise_toneintegerN/A0 to 100SFZ v2
Filternoise_tone_onccNintegerN/A0 to 100
Pitchbend_upPitch bend range when Bend Wheel or Joystick is moved up, in cents.integer200-9600 to 9600SFZ v1
Pitchbendupbend_up alias.N/AN/A
Pitchbend_downPitch bend range when Bend Wheel or Joystick is moved down, in cents.integer-200-9600 to 9600SFZ v1
Pitchbenddownbend_down alias.N/AN/A
Pitchbend_smoothPitch bend smoothness. Adds “inertia” to pitch bends, so fast movements of the pitch bend wheel will have a delayed effect on the pitch change.float00 to ?SFZ v2
Pitchbend_stepPitch bend step, in cents.integer11 to 1200SFZ v1
Pitchbendstepbend_step alias.N/AN/A
PitchtuneThe fine tuning for the sample, in cents.integer0-100 to 100SFZ v1
Pitchpitchtune alias.N/AN/AARIA
Pitchpitch_onccNN/AN/A-9600 to 9600SFZ v2
Pitchtune_ccNpitch_onccN alias.N/AN/AARIA
Pitchtune_onccNpitch_onccN alias.N/AN/AARIA
Pitchpitch_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate pitch.integer00 to 255SFZ v2
Pitchtune_curveccNpitch_curveccN alias.N/AN/AARIA
Pitchpitch_smoothccNfloat00 to ?SFZ v2
Pitchtune_smoothccNpitch_smoothccN alias.N/AN/AARIA
Pitchpitch_stepccNN/A00 to ?SFZ v2
Pitchtune_stepccNpitch_stepccN alias.N/AN/AARIA
Pitchgroup_tuneARIA extension, like tune, but affecting everything when set under the ‹group› header.integer0-9600 to 9600ARIA
Pitchmaster_tuneARIA extension, like tune, but affecting everything when set under the ‹master› header.integer0-9600 to 9600ARIA
Pitchglobal_tuneARIA extension, like tune, but affecting everything when set under the ‹global› header.integer0-9600 to 9600ARIA
Pitchpitch_keycenterRoot key for the sample.integer600 to 127SFZ v1
Pitchpitch_keytrackWithin the region, this value defines how much the pitch changes with every note.integer100-1200 to 1200SFZ v1
Pitchtune_keytrackpitch_keytrack alias.N/AN/AARIA
Pitchpitch_randomRandom tuning for the region, in cents.integer00 to 9600SFZ v1
Pitchtune_randompitch_random alias.N/AN/AARIA
Pitchpitch_veltrackPitch velocity tracking, represents how much the pitch changes with incoming note velocity, in cents.integer0-9600 to 9600SFZ v1
Pitchtune_veltrackpitch_veltrack alias.N/AN/AARIA
PitchtransposeThe transposition value for this region which will be applied to the sample.integer0-127 to 127SFZ v1
Pitchbend_stepupPitch bend step, in cents, applied to upwards bends only.integer11 to 1200SFZ v2
Pitchbend_stepdownPitch bend step, in cents, for downward pitch bends.integer11 to 1200SFZ v2
Envelope Generatorsampeg_attackEG attack time.float00 to 100SFZ v1
Envelope Generatorsamp_attackampeg_attack alias.N/AN/ASFZ v2
Envelope Generatorsampeg_attackccNfloat0-100 to 100
Envelope Generatorsampeg_attack_onccNampeg_attackccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_attack_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_vel2attackVelocity effect on EG attack time.float0-100 to 100
Envelope Generatorsamp_vel2attackampeg_vel2attack alias.N/AN/ASFZ v2
Envelope Generatorsampeg_decayEG decay time.float00 to 100SFZ v1
Envelope Generatorsamp_decayampeg_decay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_decayccNfloat0-100 to 100
Envelope Generatorsampeg_decay_onccNampeg_decayccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_decay_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate ampeg_decay.integer00 to 255ARIA
Envelope Generatorsampeg_vel2decayVelocity effect on EG decay time.float0-100 to 100
Envelope Generatorsamp_vel2decayampeg_vel2decay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_delayEG delay time.float00 to 100SFZ v1
Envelope Generatorsamp_delayampeg_delay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_delayccNfloat0-100 to 100
Envelope Generatorsampeg_delay_onccNampeg_delayccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_delay_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_vel2delayVelocity effect on EG delay time.float0-100 to 100
Envelope Generatorsamp_vel2delayampeg_vel2delay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_holdEG hold time.float00 to 100SFZ v1
Envelope Generatorsamp_holdampeg_hold alias.N/AN/ASFZ v2
Envelope Generatorsampeg_holdccNfloat0-100 to 100
Envelope Generatorsampeg_hold_onccNampeg_holdccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_hold_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate ampeg_hold.integer00 to 255ARIA
Envelope Generatorsampeg_vel2holdVelocity effect on EG hold time.float0-100 to 100
Envelope Generatorsamp_vel2holdampeg_vel2hold alias.N/AN/ASFZ v2
Envelope Generatorsampeg_releaseEG release time (after note release).float0.0010 to 100SFZ v1
Envelope Generatorsamp_releaseampeg_release alias.N/AN/ASFZ v2
Envelope Generatorsampeg_releaseccNfloat0-100 to 100
Envelope Generatorsampeg_release_onccNampeg_releaseccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_release_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_vel2releaseVelocity effect on EG release time.float0-100 to 100
Envelope Generatorsamp_vel2releaseampeg_vel2release alias.N/AN/ASFZ v2
Envelope Generatorsampeg_sustainEG sustain level, in percentage.float1000 to 100SFZ v1
Envelope Generatorsamp_sustainampeg_sustain alias.N/AN/ASFZ v2
Envelope Generatorsampeg_sustainccNfloat0-100 to 100
Envelope Generatorsampeg_sustain_onccNampeg_sustainccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_sustain_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate ampeg_sustain.integer00 to 255ARIA
Envelope Generatorsampeg_vel2sustainVelocity effect on EG sustain level, in percentage.float0-100 to 100
Envelope Generatorsamp_vel2sustainampeg_vel2sustain alias.N/AN/ASFZ v2
Envelope Generatorsampeg_startEnvelope start level, in percentage.float00 to 100SFZ v1
Envelope Generatorsampeg_startccNfloat0-100 to 100
Envelope Generatorsampeg_start_onccNampeg_startccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_start_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_attack_shapeSpecifies the curvature of attack stage of the envelope.float0ARIA
Envelope Generatorsampeg_decay_shapeSpecifies the curvature of decay stage of the envelope.float-10.3616ARIA
Envelope Generatorsampeg_decay_zeroSpecifies how decay time is calculated.integer10 to 1ARIA
Envelope Generatorsampeg_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope Generatorsampeg_release_shapeSpecifies the curvature of release stage of the envelope.float-10.3616ARIA
Envelope Generatorsampeg_release_zeroSpecifies how release time is calculated.integer00 to 1ARIA
Envelope Generatorsfileg_attack_shapeSpecifies the curvature of attack stage of the envelope.float0ARIA
Envelope Generatorsfileg_decay_shapeSpecifies the curvature of decay stage of the envelope.float0ARIA
Envelope Generatorsfileg_decay_zeroSpecifies how decay time is calculated.integer10 to 1ARIA
Envelope Generatorsfileg_release_shapeSpecifies the curvature of release stage of the envelope.float0ARIA
Envelope Generatorsfileg_release_zeroSpecifies how release time is calculated.integer00 to 1ARIA
Envelope Generatorsfileg_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope Generatorspitcheg_attack_shapeSpecifies the curvature of attack stage of the envelope.float0ARIA
Envelope Generatorspitcheg_decay_shapeSpecifies the curvature of decay stage of the envelope.float0ARIA
Envelope Generatorspitcheg_decay_zeroSpecifies how decay time is calculated.integer10 to 1ARIA
Envelope Generatorspitcheg_release_shapeSpecifies the curvature of release stage of the envelope.float0ARIA
Envelope Generatorspitcheg_release_zeroSpecifies how release time is calculated.integer00 to 1ARIA
Envelope Generatorspitcheg_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope Generatorsfileg_attackEG attack time.float00 to 100SFZ v1
Envelope Generatorsfil_attackfileg_attack alias.N/AN/ASFZ v2
Envelope Generatorsfileg_attack_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_attackccNfileg_attack_onccN alias.N/AN/A
Envelope Generatorsfileg_attack_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2attackVelocity effect on EG attack time.float0-100 to 100
Envelope Generatorsfil_vel2attackfileg_vel2attack alias.N/AN/ASFZ v2
Envelope Generatorsfileg_decayEG decay time.float00 to 100SFZ v1
Envelope Generatorsfil_decayfileg_decay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_decay_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_decayccNfileg_decay_onccN alias.N/AN/A
Envelope Generatorsfileg_decay_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2decayVelocity effect on filter EG decay time.float0-100 to 100
Envelope Generatorsfil_vel2decayfileg_vel2decay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_delayEG delay time.float00 to 100SFZ v1
Envelope Generatorsfil_delayfileg_delay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_delay_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_delayccNfileg_delay_onccN alias.N/AN/A
Envelope Generatorsfileg_delay_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2delayVelocity effect on filter EG delay time.float0-100 to 100
Envelope Generatorsfil_vel2delayfileg_vel2delay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_depthEnvelope depth.integer0-12000 to 12000SFZ v1
Envelope Generatorsfil_depthfileg_depth alias.N/AN/ASFZ v2
Envelope Generatorsfileg_depth_onccNinteger0-12000 to 12000ARIA
Envelope Generatorsfileg_depthccNfileg_depth_onccN alias.N/AN/A
Envelope Generatorsfileg_depth_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2depthVelocity effect on EG depth, in cents for pitch or filter cutoff.integer0-12000 to 12000
Envelope Generatorsfil_vel2depthfileg_vel2depth alias.N/AN/ASFZ v2
Envelope Generatorsfileg_holdEG hold time.float00 to 100SFZ v1
Envelope Generatorsfil_holdfileg_hold alias.N/AN/ASFZ v2
Envelope Generatorsfileg_hold_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_holdccNfileg_hold_onccN alias.N/AN/A
Envelope Generatorsfileg_hold_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2holdVelocity effect on EG hold time.float0-100 to 100
Envelope Generatorsfil_vel2holdfileg_vel2hold alias.N/AN/ASFZ v2
Envelope Generatorsfileg_releaseEG release time (after note release).float00 to 100SFZ v1
Envelope Generatorsfil_releasefileg_release alias.N/AN/ASFZ v2
Envelope Generatorsfileg_release_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_releaseccNfileg_release_onccN alias.N/AN/A
Envelope Generatorsfileg_release_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2releaseVelocity effect on EG release time.float0-100 to 100
Envelope Generatorsfil_vel2releasefileg_vel2release alias.N/AN/ASFZ v2
Envelope Generatorsfileg_startEnvelope start level, in percentage.float00 to 100SFZ v1
Envelope Generatorsfileg_start_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_startccNfileg_start_onccN alias.N/AN/A
Envelope Generatorsfileg_start_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_sustainEG sustain level, in percentage.float00 to 100SFZ v1
Envelope Generatorsfil_sustainfileg_sustain alias.N/AN/ASFZ v2
Envelope Generatorsfileg_sustain_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_sustainccNfileg_sustain_onccN alias.N/AN/A
Envelope Generatorsfileg_sustain_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2sustainVelocity effect on EG sustain level, in percentage.float0-100 to 100
Envelope Generatorsfil_vel2sustainfileg_vel2sustain alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_attackEG attack time.float00 to 100SFZ v1
Envelope Generatorspitch_attackpitcheg_attack alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_attack_onccNN/AN/AARIA
Envelope Generatorspitcheg_attack_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2attackVelocity effect on EG attack time.float0-100 to 100
Envelope Generatorspitch_vel2attackpitcheg_vel2attack alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_decayEG decay time.float00 to 100SFZ v1
Envelope Generatorspitch_decaypitcheg_decay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_decay_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_decay_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2decayVelocity effect on EG decay time.float0-100 to 100
Envelope Generatorspitch_vel2decaypitcheg_vel2decay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_delayEG delay time.float00 to 100SFZ v1
Envelope Generatorspitch_delaypitcheg_delay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_delay_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_delay_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2delayVelocity effect on EG delay time.float0-100 to 100
Envelope Generatorspitch_vel2delaypitcheg_vel2delay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_depthEnvelope depth.integer0-12000 to 12000SFZ v1
Envelope Generatorspitch_depthpitcheg_depth alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_depth_onccNinteger0-12000 to 12000ARIA
Envelope Generatorspitcheg_depthccNpitcheg_depth_onccN alias.N/AN/A
Envelope Generatorspitcheg_depth_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2depthVelocity effect on EG depth, in cents for pitch or filter cutoff.integer0-12000 to 12000
Envelope Generatorspitch_vel2depthpitcheg_vel2depth alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_holdEG hold time.float00 to 100SFZ v1
Envelope Generatorspitch_holdpitcheg_hold alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_hold_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_hold_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2holdVelocity effect on EG hold time.float0-100 to 100
Envelope Generatorspitch_vel2holdpitcheg_vel2hold alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_releaseEG release time (after note release).float00 to 100SFZ v1
Envelope Generatorspitch_releasepitcheg_release alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_release_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_release_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2releaseVelocity effect on EG release time.float0-100 to 100
Envelope Generatorspitch_vel2releasepitcheg_vel2release alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_startEnvelope start level, in percentage.float00 to 100SFZ v1
Envelope Generatorspitcheg_start_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_start_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_sustainEG sustain level, in percentage.float00 to 100SFZ v1
Envelope Generatorspitch_sustainpitcheg_sustain alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_sustain_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_sustain_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2sustainVelocity effect on EG sustain level, in percentage.float0-100 to 100
Envelope Generatorspitch_vel2sustainpitcheg_vel2sustain alias.N/AN/ASFZ v2
Envelope GeneratorsegN_pointsN/AN/ASFZ v2
Envelope GeneratorsegN_timeXfloatN/ASFZ v2
Envelope GeneratorsegN_timeX_onccYfloatN/A
Envelope GeneratorsegN_levelXSets the envelope level at a specific point in envelope number N.float0-1 to 1SFZ v2
Envelope GeneratorsegN_levelX_onccYfloat0-1 to 1
Envelope GeneratorsegN_ampegN/AN/AARIA
Envelope GeneratorsegN_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope GeneratorsegN_shapeXfloat0SFZ v2
Envelope GeneratorsegN_curveXInstructs the player to use a curve shape defined under a curve header for the specified envelope segment.N/AN/ASFZ v2
Envelope GeneratorsegN_sustainN/AN/ASFZ v2
Envelope GeneratorsegN_loopN/AN/ASFZ v2
Envelope GeneratorsegN_loop_countN/AN/ASFZ v2
Envelope GeneratorsegN_volumeN/AN/ASFZ v2
Envelope GeneratorsegN_volume_onccXN/AN/A
Envelope GeneratorsegN_amplitudeN/AN/ASFZ v2
Envelope GeneratorsegN_amplitude_onccXN/AN/A
Envelope GeneratorsegN_panN/AN/ASFZ v2
Envelope GeneratorsegN_pan_onccXN/AN/A
Envelope GeneratorsegN_widthN/AN/ASFZ v2
Envelope GeneratorsegN_width_onccXN/AN/A
Envelope GeneratorsegN_pan_curveN/AN/ASFZ v2
Envelope GeneratorsegN_pan_curveccXSpecifies the ‹curve› number which MIDI CC X uses to modulate egN_pan.integer00 to 255
Envelope GeneratorsegN_freq_lfoXAllows egN to shape a change to lfoX's frequencyfloat0SFZ v2
Envelope GeneratorsegN_depth_lfoXAllows egN to scale lfoX's effect on its targetsfloat100SFZ v2
Envelope GeneratorsegN_depthadd_lfoXN/AN/ASFZ v2
Envelope GeneratorsegN_pitchN/AN/ASFZ v2
Envelope GeneratorsegN_pitch_onccXN/AN/A
Envelope GeneratorsegN_cutoffN/AN/ASFZ v2
Envelope GeneratorsegN_cutoff_onccXN/AN/A
Envelope GeneratorsegN_cutoff2N/AN/ASFZ v2
Envelope GeneratorsegN_cutoff2_onccXN/AN/A
Envelope GeneratorsegN_resonanceN/AN/ASFZ v2
Envelope GeneratorsegN_resonance_onccXN/AN/A
Envelope GeneratorsegN_resonance2N/AN/ASFZ v2
Envelope GeneratorsegN_resonance2_onccXN/AN/A
Envelope GeneratorsegN_eqXfreqN/AN/ASFZ v2
Envelope GeneratorsegN_eqXfreq_onccYN/AN/A
Envelope GeneratorsegN_eqXbwN/AN/ASFZ v2
Envelope GeneratorsegN_eqXbw_onccYN/AN/A
Envelope GeneratorsegN_eqXgainN/AN/ASFZ v2
Envelope GeneratorsegN_eqXgain_onccYN/AN/A
Envelope GeneratorsegN_decimN/AN/ASFZ v2
Envelope GeneratorsegN_decim_onccXN/AN/A
Envelope GeneratorsegN_bitredN/AN/ASFZ v2
Envelope GeneratorsegN_bitred_onccXN/AN/A
Envelope GeneratorsegN_rectifyN/AN/ASFZ v2
Envelope GeneratorsegN_rectify_onccXN/AN/A
Envelope GeneratorsegN_ringmodN/AN/ASFZ v2
Envelope GeneratorsegN_ringmod_onccXN/AN/A
Envelope GeneratorsegN_noiselevelN/AN/ASFZ v2
Envelope GeneratorsegN_noiselevel_onccXN/AN/A
Envelope GeneratorsegN_noisestepN/AN/ASFZ v2
Envelope GeneratorsegN_noisestep_onccXN/AN/A
Envelope GeneratorsegN_noisetoneN/AN/ASFZ v2
Envelope GeneratorsegN_noisetone_onccXN/AN/A
Envelope GeneratorsegN_driveshapeN/AN/ASFZ v2
Envelope GeneratorsegN_driveshape_onccXN/AN/A
LFOamplfo_delayThe time before the LFO starts oscillating.float00 to 100SFZ v1
LFOamplfo_depthLFO depth.float0-10 to 10SFZ v1
LFOamplfo_depthccNfloat0-10 to 10
LFOamplfo_depth_onccNamplfo_depthccN alias.N/AN/ASFZ v2
LFOamplfo_depthchanaftLFO depth when channel aftertouch MIDI messages are received.float0-10 to 10
LFOamplfo_depthpolyaftLFO depth when polyphonic aftertouch MIDI messages are received.float0-10 to 10
LFOamplfo_fadeLFO fade-in effect time.float00 to 100SFZ v1
LFOamplfo_freqLFO frequency, in hertz.float00 to 20SFZ v1
LFOamplfo_freqccNfloat0-200 to 200
LFOamplfo_freqchanaftLFO frequency change when channel aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOamplfo_freqpolyaftLFO frequency change when polyphonic aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOfillfo_delayThe time before the LFO starts oscillating.float00 to 100SFZ v1
LFOfillfo_depthLFO depth.float0-1200 to 1200SFZ v1
LFOfillfo_depthccNfloat0-1200 to 1200
LFOfillfo_depth_onccNfillfo_depthccN alias.N/AN/ASFZ v2
LFOfillfo_depthchanaftLFO depth when channel aftertouch MIDI messages are received.float0-1200 to 1200
LFOfillfo_depthpolyaftLFO depth when polyphonic aftertouch MIDI messages are received.float0-1200 to 1200
LFOfillfo_fadeLFO fade-in effect time.float00 to 100SFZ v1
LFOfillfo_freqLFO frequency, in hertz.float00 to 20SFZ v1
LFOfillfo_freqccNfloat0-200 to 200
LFOfillfo_freqchanaftLFO frequency change when channel aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOfillfo_freqpolyaftLFO frequency change when polyphonic aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOpitchlfo_delayThe time before the LFO starts oscillating.float00 to 100SFZ v1
LFOpitchlfo_depthLFO depth.float0-1200 to 1200SFZ v1
LFOpitchlfo_depthccNfloat0-1200 to 1200
LFOpitchlfo_depth_onccNpitchlfo_depthccN alias.N/AN/ASFZ v2
LFOpitchlfo_depthchanaftLFO depth when channel aftertouch MIDI messages are received.float0-1200 to 1200
LFOpitchlfo_depthpolyaftLFO depth when polyphonic aftertouch MIDI messages are received.float0-1200 to 1200
LFOpitchlfo_fadeLFO fade-in effect time.float00 to 100SFZ v1
LFOpitchlfo_freqLFO frequency, in hertz.float00 to 20SFZ v1
LFOpitchlfo_freqccNfloat0-200 to 200
LFOpitchlfo_freqchanaftLFO frequency change when channel aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOpitchlfo_freqpolyaftLFO frequency change when polyphonic aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOlfoN_freqThe base frequency of LFO number N, in Hertz.floatN/ASFZ v2
LFOlfoN_freq_onccXN/AN/A
LFOlfoN_freq_smoothccXN/AN/A
LFOlfoN_freq_stepccXN/AN/A
LFOlfoN_delayOnset delay for LFO number N.float0SFZ v2
LFOlfoN_delay_onccXN/AN/A
LFOlfoN_fadeFade-in time for LFO number N.floatN/ASFZ v2
LFOlfoN_fade_onccXfloatN/A
LFOlfoN_phaseInitial phase shift for LFO number N.float00 to 1SFZ v2
LFOlfoN_phase_onccXN/AN/A
LFOlfoN_countNumber of LFO repetitions for LFO N before the LFO stops.integerN/ASFZ v2
LFOlfoN_waveLFO waveform selection.integer1SFZ v2
LFOlfoN_waveXlfoN_wave alias.N/AN/AARIA
LFOlfoN_wave_onccXN/AN/AARIA
LFOlfoN_stepsNumber of steps in LFO step sequencer.integerN/ASFZ v2
LFOlfoN_stepXLevel of the step number X in LFO step sequencer.floatN/A-100 to 100SFZ v2
LFOlfoN_stepX_onccYN/AN/A
LFOlfoN_smoothN/AN/ASFZ v2
LFOlfoN_smooth_onccXN/AN/A
LFOlfoN_volumeN/AN/ASFZ v2
LFOlfoN_volume_onccXN/AN/A
LFOlfoN_volume_smoothccXN/AN/A
LFOlfoN_volume_stepccXN/AN/A
LFOlfoN_amplitudeN/AN/ASFZ v2
LFOlfoN_amplitude_onccXN/AN/A
LFOlfoN_amplitude_smoothccXN/AN/A
LFOlfoN_amplitude_stepccXN/AN/A
LFOlfoN_panN/AN/ASFZ v2
LFOlfoN_pan_onccXN/AN/A
LFOlfoN_pan_smoothccXN/AN/A
LFOlfoN_pan_stepccXN/AN/A
LFOlfoN_widthN/AN/ASFZ v2
LFOlfoN_width_onccXN/AN/A
LFOlfoN_width_smoothccXN/AN/A
LFOlfoN_width_stepccXN/AN/A
LFOlfoN_freq_lfoXN/AN/ASFZ v2
LFOlfoN_freq_lfoX_onccYN/AN/AARIA
LFOlfoN_depth_lfoXN/AN/ASFZ v2
LFOlfoN_depthadd_lfoXN/AN/ASFZ v2
LFOlfoN_pitchN/AN/ASFZ v2
LFOlfoN_pitch_curveccXSpecifies the ‹curve› number which MIDI CC X uses to modulate lfoN_pitch.integer00 to 255
LFOlfoN_pitch_onccXN/AN/A
LFOlfoN_pitch_smoothccXN/AN/A
LFOlfoN_pitch_stepccXN/AN/A
LFOlfoN_cutoffN/AN/ASFZ v2
LFOlfoN_cutoff2lfoN_cutoff alias.N/AN/ASFZ v2
LFOlfoN_cutoff2_onccXN/AN/A
LFOlfoN_cutoff2_smoothccXN/AN/A
LFOlfoN_cutoff2_stepccXN/AN/A
LFOlfoN_cutoff_onccXN/AN/A
LFOlfoN_cutoff_smoothccXN/AN/A
LFOlfoN_cutoff_stepccXN/AN/A
LFOlfoN_resonanceN/AN/ASFZ v2
LFOlfoN_resonance2lfoN_resonance alias.N/AN/ASFZ v2
LFOlfoN_resonance2_onccXN/AN/A
LFOlfoN_resonance2_smoothccXN/AN/A
LFOlfoN_resonance2_stepccXN/AN/A
LFOlfoN_resonance_onccXN/AN/A
LFOlfoN_resonance_smoothccXN/AN/A
LFOlfoN_resonance_stepccXN/AN/A
LFOlfoN_eqXfreqN/AN/ASFZ v2
LFOlfoN_eqXfreq_onccYN/AN/A
LFOlfoN_eqXfreq_smoothccYN/AN/A
LFOlfoN_eqXfreq_stepccYN/AN/A
LFOlfoN_eqXbwN/AN/ASFZ v2
LFOlfoN_eqXbw_onccYN/AN/A
LFOlfoN_eqXbw_smoothccYN/AN/A
LFOlfoN_eqXbw_stepccYN/AN/A
LFOlfoN_eqXgainN/AN/ASFZ v2
LFOlfoN_eqXgain_onccYN/AN/A
LFOlfoN_eqXgain_smoothccYN/AN/A
LFOlfoN_eqXgain_stepccYN/AN/A
LFOlfoN_decimN/AN/ASFZ v2
LFOlfoN_decim_onccXN/AN/A
LFOlfoN_decim_smoothccXN/AN/A
LFOlfoN_decim_stepccXN/AN/A
LFOlfoN_bitredN/AN/ASFZ v2
LFOlfoN_bitred_onccXN/AN/A
LFOlfoN_bitred_smoothccXN/AN/A
LFOlfoN_bitred_stepccXN/AN/A
LFOlfoN_noiselevelN/AN/ASFZ v2
LFOlfoN_noiselevel_onccXN/AN/A
LFOlfoN_noiselevel_smoothccXN/AN/A
LFOlfoN_noiselevel_stepccXN/AN/A
LFOlfoN_noisestepN/AN/ASFZ v2
LFOlfoN_noisestep_onccXN/AN/A
LFOlfoN_noisestep_smoothccXN/AN/A
LFOlfoN_noisestep_stepccXN/AN/A
LFOlfoN_noisetoneN/AN/ASFZ v2
LFOlfoN_noisetone_onccXN/AN/A
LFOlfoN_noisetone_smoothccXN/AN/A
LFOlfoN_noisetone_stepccXN/AN/A
LFOlfoN_driveN/AN/ASFZ v2
LFOlfoN_drive_onccXN/AN/A
LFOlfoN_drive_smoothccXN/AN/A
LFOlfoN_drive_stepccXN/AN/A
LFOlfoN_offsetDC offset - Add to LFO output; not affected by scale.floatN/AARIA
LFOlfoN_offsetXlfoN_offset alias.N/AN/A
LFOlfoN_ratioSets the ratio between the specified sub waveform and the main waveform.floatN/AARIA
LFOlfoN_ratioXlfoN_ratio alias.N/AN/A
LFOlfoN_scaleSets the scaling between the specified sub waveform and the main waveform.floatN/AARIA
LFOlfoN_scaleXlfoN_scale alias.N/AN/A
LFOlfoN_sample_dyn_paramXN/AN/AARIA
LFOlfoN_sample_dyn_paramX_onccYN/AN/A
Curvescurve_indexCurve definition ID.integerN/A0 to 255ARIA
CurvesvNNNDefines a point in a custom curve definition.floatN/A-1 to 1SFZ v2
Effectsapan_depthN/A0 to 100SFZ v2
Effectsapan_depth_onccNN/AN/A
Effectsapan_dryN/A0 to 100SFZ v2
Effectsapan_dry_onccNN/AN/A
Effectsapan_freqfloatN/ASFZ v2
Effectsapan_freq_onccNN/AN/A
Effectsapan_phasefloatN/A0 to 180SFZ v2
Effectsapan_phase_onccNN/AN/A
Effectsapan_waveformLFO wave number.N/AN/ASFZ v2
Effectsapan_wetN/A0 to 100SFZ v2
Effectsapan_wet_onccNN/AN/A
EffectsbitredBit reduction.N/A0 to 100SFZ v2
Effectsbitred_onccNN/AN/A
Effectsbitred_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate bitred.integer00 to 255
Effectsbitred_smoothccNN/AN/A
Effectsbitred_stepccNN/AN/A
EffectsbusThe target bus for the effect.stringmainSFZ v2
Effectsbypass_onccNSets up a bypass controller for the effect.floatN/ASFZ v2
Effectscomp_attackfloatN/ASFZ v2
Effectscomp_gainN/AN/ASFZ v2
Effectscomp_ratioN/A0 to 100SFZ v2
Effectscomp_releasefloatN/ASFZ v2
Effectscomp_stlinkstringN/ASFZ v2
Effectscomp_thresholdfloatN/ASFZ v2
EffectsdecimDecimator.N/A0 to 100SFZ v2
Effectsdecim_onccNN/AN/A
Effectsdecim_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate decim.integer00 to 255
Effectsdecim_smoothccNN/AN/A
Effectsdecim_stepccNN/AN/A
Effectsdelay_cutofffloatN/ASFZ v2
Effectsdelay_cutoff_onccNN/AN/A
Effectsdelay_damphiN/A0 to 100SFZ v2
Effectsdelay_damphi_onccNN/AN/A
Effectsdelay_damploN/A0 to 100SFZ v2
Effectsdelay_damplo_onccNN/AN/A
Effectsdelay_dryN/A0 to 100SFZ v2
Effectsdelay_dry_onccNN/AN/A
Effectsdelay_feedbackN/A0 to 100SFZ v2
Effectsdelay_feedback_onccNN/AN/A
Effectsdelay_filterName of filter type.stringN/ASFZ v2
Effectsdelay_inputN/A0 to 100SFZ v2
Effectsdelay_input_onccNN/AN/A
Effectsdelay_levelcN/A0 to 100SFZ v2
Effectsdelay_levellN/A0 to 100SFZ v2
Effectsdelay_levelrN/A0 to 100SFZ v2
Effectsdelay_lfofreqfloatN/ASFZ v2
Effectsdelay_lfofreq_onccNN/AN/A
Effectsdelay_moddepthN/A0 to 100SFZ v2
Effectsdelay_moddepth_onccNN/AN/A
Effectsdelay_modestringN/ASFZ v2
Effectsdelay_pancN/A0 to 100SFZ v2
Effectsdelay_panc_onccNN/AN/A
Effectsdelay_panlN/A0 to 100SFZ v2
Effectsdelay_panl_onccNN/AN/A
Effectsdelay_panrN/A0 to 100SFZ v2
Effectsdelay_panr_onccNN/AN/A
Effectsdelay_resonanceN/AN/ASFZ v2
Effectsdelay_resonance_onccNN/AN/A
Effectsdelay_spreadN/A0 to 100SFZ v2
Effectsdelay_spread_onccNN/AN/A
Effectsdelay_syncc_onccNN/AN/ASFZ v2
Effectsdelay_syncl_onccNN/AN/ASFZ v2
Effectsdelay_syncr_onccNN/AN/ASFZ v2
Effectsdelay_time_tapN/AN/ASFZ v2
Effectsdelay_timecN/AN/ASFZ v2
Effectsdelay_timec_onccNN/AN/A
Effectsdelay_timelN/AN/ASFZ v2
Effectsdelay_timel_onccNN/AN/A
Effectsdelay_timerN/AN/ASFZ v2
Effectsdelay_timer_onccNN/AN/A
Effectsdelay_wetN/A0 to 100SFZ v2
Effectsdelay_wet_onccNN/AN/A
EffectsdirecttomainGain of the main bus into the output.float1000 to 100SFZ v2
Effectsdisto_depthN/A0 to 100SFZ v2
Effectsdisto_depth_onccNN/AN/A
Effectsdisto_dryN/A0 to 100SFZ v2
Effectsdisto_dry_onccNN/AN/A
Effectsdisto_stagesN/AN/ASFZ v2
Effectsdisto_toneN/A0 to 100SFZ v2
Effectsdisto_tone_onccNN/AN/A
Effectsdisto_wetN/A0 to 100SFZ v2
Effectsdisto_wet_onccNN/AN/A
Effectsdsp_orderSignal flow type in Rapture's DSP block.integerN/A0 to 14SFZ v2
Effectseffect1Level of effect1 send, in percentage (reverb in Cakewalk sfz).float00 to 100SFZ v1
Effectseffect2Level of effect2 send, in percentage (chorus in Cakewalk sfz).float00 to 100SFZ v1
Effectseffect3Gain of the region's send into the 3rd effect bus.float00 to 100SFZ v2
Effectseffect4Gain of the region's send into the 4th effect bus.float00 to 100SFZ v2
Effectseq_bwN/AN/ASFZ v2
Effectseq_bw_onccNN/AN/A
Effectseq_freqN/AN/ASFZ v2
Effectseq_freq_onccNN/AN/A
Effectseq_gainN/AN/ASFZ v2
Effectseq_gain_onccNN/AN/A
Effectseq_typeN/AN/ASFZ v2
Effectsfilter_cutoffN/AN/ASFZ v2
Effectsfilter_cutoff_onccNN/AN/A
Effectsfilter_resonanceN/AN/ASFZ v2
Effectsfilter_resonance_onccNN/AN/A
Effectsfilter_typeName of filter type.stringN/ASFZ v2
EffectsfxNtomainGain of the Nth effect bus into the output.float00 to 100SFZ v2
EffectsfxNtomixGain of the Nth effect bus into the Mix node.float00 to 100SFZ v2
Effectsgate_onccNGate manual control.N/AN/ASFZ v2
Effectsgate_attackN/AN/ASFZ v2
Effectsgate_releaseN/AN/ASFZ v2
Effectsgate_stlinkstringN/ASFZ v2
Effectsgate_thresholdN/AN/ASFZ v2
EffectsinternalCakewalk internal features switch.stringoffSFZ v2
Effectsparam_offsetAdds a number to the parameter numbers of built-in or vendor-specific effects.integerN/AARIA
Effectsphaser_depthN/A0 to 100SFZ v2
Effectsphaser_depth_onccNN/AN/A
Effectsphaser_feedbackN/A0 to 100SFZ v2
Effectsphaser_feedback_onccNN/AN/A
Effectsphaser_freqfloatN/ASFZ v2
Effectsphaser_freq_onccNN/AN/A
Effectsphaser_phase_onccNN/A0 to 100SFZ v2
Effectsphaser_stagesN/AN/ASFZ v2
Effectsphaser_waveformLFO wave number.N/AN/ASFZ v2
Effectsphaser_wetN/A0 to 100SFZ v2
Effectsphaser_wet_onccNN/AN/A
Effectsreverb_dampN/A0 to 100SFZ v2
Effectsreverb_damp_onccNN/AN/A
Effectsreverb_dryN/A0 to 100SFZ v2
Effectsreverb_dry_onccNN/AN/A
Effectsreverb_inputN/A0 to 100SFZ v2
Effectsreverb_input_onccNN/AN/A
Effectsreverb_predelayfloatN/ASFZ v2
Effectsreverb_predelay_onccNN/AN/A
Effectsreverb_sizeN/A0 to 100SFZ v2
Effectsreverb_size_onccNN/AN/A
Effectsreverb_toneN/A0 to 100SFZ v2
Effectsreverb_tone_onccNN/AN/A
Effectsreverb_typestringN/ASFZ v2
Effectsreverb_wetN/A0 to 100SFZ v2
Effectsreverb_wet_onccNN/AN/A
Effectsstatic_cyclic_levelN/A0 to 100SFZ v2
Effectsstatic_cyclic_timefloatN/ASFZ v2
Effectsstatic_filterName of filter type.stringN/ASFZ v2
Effectsstatic_levelN/A0 to 100SFZ v2
Effectsstatic_level_onccNN/AN/A
Effectsstatic_random_levelN/A0 to 100SFZ v2
Effectsstatic_random_maxtimefloatN/ASFZ v2
Effectsstatic_random_mintimefloatN/ASFZ v2
Effectsstatic_stereoN/AN/ASFZ v2
Effectsstatic_toneN/A0 to 100SFZ v2
Effectsstrings_numberNumber of synthesized resonant strings.N/AN/ASFZ v2
Effectsstrings_wet_onccNN/A0 to 100SFZ v2
Effectstdfir_dryN/A0 to 100SFZ v2
Effectstdfir_dry_onccNN/AN/A
Effectstdfir_gainN/A0 to 100SFZ v2
Effectstdfir_impulseN/AN/ASFZ v2
Effectstdfir_wetN/A0 to 100SFZ v2
Effectstdfir_wet_onccNN/AN/A
EffectstypeEffect type or vendor-specific effect name. Varies across SFZ players.stringN/ASFZ v2
Effectsvendor_specificDefines vendor-specific effects, for example Garritan-specific stage depth effect in ARIA.stringN/AARIA
Loadingload_modeintegerN/A0 to 1SFZ v2
Loadingload_startintegerN/ASFZ v2
Loadingload_endintegerN/ASFZ v2
Loadingsample_qualitySample playback quality settings.integerN/A1 to 10SFZ v2
LoadingimageSets the background image of the instrument.stringN/ASFZ v2
Wavetable OscillatoroscillatorstringN/ASFZ v2
Wavetable Oscillatoroscillator_detuneN/AN/ASFZ v2
Wavetable Oscillatoroscillator_detune_onccNN/AN/A
Wavetable Oscillatoroscillator_modeThe modulation type.integer00 to 2SFZ v2
Wavetable Oscillatoroscillator_mod_depthN/AN/ASFZ v2
Wavetable Oscillatoroscillator_mod_depth_onccNN/AN/A
Wavetable Oscillatoroscillator_mod_smoothccNN/AN/A
Wavetable Oscillatoroscillator_multiConfigure a region to use more than one oscillator.integer11 to 9SFZ v2
Wavetable Oscillatoroscillator_phaseOscillator phase. Negative values for random phase.floatN/A-1 to 360SFZ v2
Wavetable Oscillatoroscillator_qualityintegerN/A0 to 3SFZ v2
Wavetable Oscillatoroscillator_table_sizeN/AN/ASFZ v2
+
+
+
+ +
+

+ +
+ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/misc/amp_velcurve_N_gen/index.html b/misc/amp_velcurve_N_gen/index.html new file mode 100644 index 000000000..a40267e1e --- /dev/null +++ b/misc/amp_velcurve_N_gen/index.html @@ -0,0 +1,751 @@ + + + + + + + + + Curve Generator - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Curve Generator

+
+ + + Hint: exact 0 holds a surprise
+ + + + Usually 1.0
+ + + + 1.x = Concave | 0.x = Convex +

+ + + +

+ + + + + + + + + + + + + +
+
+


+

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/misc/aria/index.html b/misc/aria/index.html new file mode 100644 index 000000000..d11ec88d7 --- /dev/null +++ b/misc/aria/index.html @@ -0,0 +1,8432 @@ + + + + + + + + + Opcodes - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Opcodes

All opcode versions, including extensions, starting in alphabetical order. +Note that modulations such as (on)ccN and vel2* are included in the pages +describing the parameters they modulate.

+

Opcode links in red color +represent obsolete opcodes which should not be used in new instruments.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OpcodeDescriptionTypeDefaultRangeVersion
Real-Time Instrument ScriptscriptAllows to load real-time instrument scripts for SFZ instruments.stringN/ALinuxSampler
Sample PlaybackcountThe number of times the sample will be played.integer00 to 4294967296SFZ v1
Sample PlaybackdelayRegion delay time.float00 to 100SFZ v1
Sample Playbackdelay_ccNRegion delay time after MIDI continuous controller N messages are received. If the region receives a note-off message before delay time, the region won't play.float0-100 to 100
Sample Playbackdelay_onccNdelay_ccN alias.N/AN/ASFZ v2
Sample Playbackdelay_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate delay.integer00 to 255ARIA
Sample Playbackdelay_randomRegion random delay time.float00 to 100SFZ v1
Sample Playbackdelay_samplesAllows the region playback to be postponed for the specified time, measured in samples (and therefore dependent on current sample rate).integerN/ASFZ v2
Sample Playbackdelay_samples_onccNintegerN/A
Sample PlaybackendThe endpoint of the sample. If unspecified, the entire sample will play.integerunspecified0 to 4294967296SFZ v1
Sample Playbackloop_countThe number of times a loop will repeat.integerN/ASFZ v2
Sample Playbackloopcountloop_count alias.N/AN/AARIA
Sample Playbackloop_crossfadeLoop cross fade.floatN/ASFZ v2
Sample Playbackloop_endThe loop end point, in samples.integer00 to 4294967296SFZ v1
Sample Playbackloopendloop_end alias.N/AN/A
Sample Playbackloop_lengthccNChange of loop end point.N/AN/ASFZ v2
Sample Playbackloop_length_onccNloop_lengthccN alias.N/AN/A
Sample Playbackloop_modeAllows playing samples with loops defined in the unlooped mode.stringno_loop for samples without a loop defined,
loop_continuous for samples with defined loop(s).
SFZ v1
Sample Playbackloopmodeloop_mode alias.N/AN/A
Sample Playbackloop_startThe loop start point, in samples.integer00 to 4294967296SFZ v1
Sample Playbackloopstartloop_start alias.N/AN/A
Sample Playbackloop_startccNChange of loop start point.N/AN/ASFZ v2
Sample Playbackloop_start_onccNloop_startccN alias.N/AN/A
Sample Playbackloop_tuneTuning for only the loop segment.float0SFZ v2
Sample Playbacklooptuneloop_tune alias.N/AN/AARIA
Sample Playbackloop_typeDefines the looping mode.stringforwardSFZ v2
Sample Playbacklooptypeloop_type alias.N/AN/AARIA
Sample PlaybackoffsetThe offset used to play the sample.integer00 to 4294967296SFZ v1
Sample Playbackoffset_ccNThe offset used to play the sample according to last position of MIDI continuous controller N.integer00 to 4294967296
Sample Playbackoffset_onccNoffset_ccN alias.N/AN/ASFZ v2
Sample Playbackoffset_randomRandom offset added to the region offset.integer00 to 4294967296SFZ v1
Sample Playbackoffset_modeDefines whether offset is measured in samples or percentage of sample length.stringsamplesARIA
Sample PlaybacksampleDefines which sample file the region will play.stringN/ASFZ v1
Sample Playbacksample_fadeoutNumber of seconds before the end of sample playback that the player should begin a realtime fadeout.floatN/ASFZ v2
Sample Playbacksample_dyn_paramNfloatN/AARIA
Sample Playbacksample_dyn_paramN_onccXfloatN/A
Sample Playbacksync_beatsRegion playing synchronization to host position.float00 to 32SFZ v1
Sample Playbacksync_offsetRegion playing synchronization to host position offset.float00 to 32SFZ v1
Sample Playbackdelay_beatsDelays the start of the region until a certain amount of musical beats are passed.floatN/ASFZ v2
Sample Playbackdelay_beats_onccNN/AN/AARIA
Sample Playbackdelay_beats_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate delay_beats.integer00 to 255ARIA
Sample Playbackdelay_beats_randomDelays the start of the region after a random amount of musical beats.floatN/AARIA
Sample Playbackstop_beatsStops a region after a certain amount of beats have played.floatN/ASFZ v2
Sample PlaybackdirectionThe direction in which the sample is to be played.stringforwardSFZ v2
Sample Playbackmd5Calculates the MD5 digital fingerprint hash of a sample file, represented as a sequence of 32 hexadecimal digits.stringnullSFZ v2
Sample Playbackreverse_loccNIf MIDI CC N is between reverse_loccN and reverse_hiccN, the region plays reversed.integerN/A0 to 127SFZ v2
Sample Playbackreverse_hiccNIf MIDI CC N is between reverse_loccN and reverse_hiccN, the region plays reversed.integerN/A0 to 127SFZ v2
Sample PlaybackwaveguideEnables waveguide synthesis for the region.stringN/ASFZ v2
Instrument SettingsdefineCreates a variable and gives it a value.stringN/ASFZ v2
Instrument Settingsdefault_pathDefault file path.stringN/ASFZ v2
Instrument Settingsnote_offsetMIDI note transpose; tells the SFZ player to offset all incoming MIDI notes by the specified number of semitones.integer0-127 to 127SFZ v2
Instrument Settingsoctave_offsetMIDI octave transpose; tells the SFZ player to offset all incoming MIDI notes by the specified number of octaves.integer0-10 to 10SFZ v2
Instrument Settingslabel_ccNCreates a label for the MIDI CC.stringN/AARIA
Instrument Settingslabel_keyNCreates a label for a key.stringN/Asfizz
Instrument Settingslabel_outputNCreates a label for the output N.stringN/ACalfbox
Instrument Settingsset_ccNSets a default initial value for MIDI CC number N, when the instrument is initially loaded.integerN/A0 to 127SFZ v2
Instrument SettingsincludeA special directive, which allows using SFZ files as building blocks for creating larger, more complex SFZ files.stringN/AARIA
Instrument Settingshint_Its a 'hint' to the ARIA engine, others implementations don't have to follow.N/AN/AARIA
Instrument Settings_modDetermines whether a parameter is modulated by addition or multiplication.stringN/AARIA
Instrument Settingsset_hdccNLike set_ccN but with floating point MIDI CCs.floatN/A0 to 1ARIA
Instrument Settingsset_realccNset_hdccN alias.N/AN/A
Instrument Settingssw_note_offsetFollows the same logic as SFZ 2.0’s note_offset but for key switches.integerN/AARIA
Instrument Settingssw_octave_offsetFollows the same logic as SFZ 2.0’s octave_offset but for key switches.integerN/AARIA
Instrument Settingsglobal_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Instrument Settingsmaster_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Instrument Settingsgroup_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Instrument Settingsregion_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Voice LifecyclegroupExclusive group number for this region.integer0-2147483648 to 2147483647SFZ v1
Voice Lifecyclepolyphony_groupgroup alias.N/AN/AARIA
Voice Lifecycleoff_byRegion off group.integer0-2147483648 to 2147483647SFZ v1
Voice Lifecycleoffbyoff_by alias.N/AN/A
Voice Lifecycleoff_modeRegion off mode.stringfastSFZ v1
Voice LifecycleoutputThe stereo output number for this region.integer00 to 1024SFZ v1
Voice LifecyclepolyphonyPolyphony voice limit.integerN/ASFZ v2
Voice Lifecyclenote_polyphonyPolyphony limit for playing the same note repeatedly.integerN/ASFZ v2
Voice Lifecyclepolyphony_stealingintegerN/AARIA
Voice Lifecyclenote_selfmaskControls note-stealing behavior for a single pitch, when using note_polyphony.stringonSFZ v2
Voice Lifecyclert_deadControls whether a release sample should play if its sustain sample has ended, or not.stringoffSFZ v2
Voice Lifecycleoff_curveWhen off_mode is set to time, this specifies the math to be used to fade out the regions being muted by voice-stealing.integer10-2 to 10ARIA
Voice Lifecycleoff_shapeThe coefficient used by off_curve.float-10.3616ARIA
Voice Lifecycleoff_timeWhen off_mode is set to time, this specifies the fadeout time for regions being muted by voice-stealing.float0.006ARIA
Key MappingkeyEquivalent to using lokey, hikey and pitch_keycenter and setting them all to the same note value.integerN/A0 to 127SFZ v1
Key MappinglokeyDetermine the low boundary of a certain region.integer00 to 127SFZ v1
Key MappinghikeyDetermine the high boundary of a certain region.integer1270 to 127SFZ v1
Key MappinglovelIf a note with velocity value equal to or higher than lovel AND equal to or lower than hivel is played, the region will play.integer11 to 127SFZ v1
Key MappinghivelIf a note with velocity value equal to or higher than lovel AND equal to or lower than hivel is played, the region will play.integer1271 to 127SFZ v1
MIDI ConditionslochanIf incoming notes have a MIDI channel between lochan and hichan, the region will play.integer11 to 16SFZ v1
MIDI ConditionshichanIf incoming notes have a MIDI channel between lochan and hichan, the region will play.integer161 to 16SFZ v1
MIDI ConditionsloccNDefines the range of the last MIDI controller N required for the region to play.integer00 to 127SFZ v1
MIDI ConditionshiccNDefines the range of the last MIDI controller N required for the region to play.integer1270 to 127SFZ v1
MIDI ConditionslobendDefines the range of the last Pitch Bend message required for the region to play.integer-8192-8192 to 8192SFZ v1
MIDI ConditionshibendDefines the range of the last Pitch Bend message required for the region to play.integer8192-8192 to 8192SFZ v1
MIDI Conditionssostenuto_ccReassigns the sostenuto pedal CC to a non-standard value.integer660 to 127ARIA
MIDI Conditionssostenuto_loSets the minimum point at which the sostenuto pedal (MIDI CC 66) is considered 'down'.float0.50 to 127ARIA
MIDI Conditionssostenuto_swTurns the sostenuto switch on or off.stringN/ASFZ v2
MIDI Conditionssustain_ccReassigns the sustain pedal CC to a non-standard value.integer640 to 127ARIA
MIDI Conditionssustain_loSets the minimum point at which the sustain pedal (MIDI CC 64) is considered 'down'.float0.50 to 127ARIA
MIDI Conditionssustain_swTurns the sustain switch on or off.stringN/ASFZ v2
MIDI Conditionssw_lokeyDefines the range of the keyboard to be used as trigger selectors for the sw_last opcode.integer00 to 127SFZ v1
MIDI Conditionssw_hikeyDefines the range of the keyboard to be used as trigger selectors for the sw_last opcode.integer1270 to 127SFZ v1
MIDI Conditionssw_lastEnables 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.integer00 to 127SFZ v1
MIDI Conditionssw_downEnables 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.integer00 to 127SFZ v1
MIDI Conditionssw_upEnables the region to play if the key equal to sw_up value is not depressed.integer00 to 127SFZ v1
MIDI Conditionssw_previousPrevious note value. The region will play if last note-on message was equal to sw_previous value.integerN/A0 to 127SFZ v1
MIDI Conditionssw_velAllows overriding the velocity for the region with the velocity of the previous note.stringcurrentSFZ v1
MIDI ConditionsloprogThe region plays when the MIDI program number is between loprog and hiprog.integer00 to 127SFZ v2
MIDI ConditionshiprogThe region plays when the MIDI program number is between loprog and hiprog.integer1270 to 127SFZ v2
MIDI ConditionslohdccNLike loccN but with floating point MIDI CCsfloat00 to 1ARIA
MIDI ConditionshihdccNLike hiccN but with floating point MIDI CCsfloat10 to 1ARIA
MIDI Conditionssw_defaultDefine keyswitch 'power on default' so that you hear something when a patch loads.integerN/A0 to 127SFZ v2
MIDI Conditionssw_labelLabel for activated keyswitch on GUI.stringN/AARIA
MIDI Conditionssw_lolastLike sw_last, but allowing a region to be triggered across a range of keyswitches.integerN/A0 to 127ARIA
MIDI Conditionssw_hilastLike sw_last, but allowing a region to be triggered across a range of keyswitches.integerN/A0 to 127ARIA
MIDI ConditionsvarNN_modSpecifies the method used to calculate variable number NN from MIDI CCs.stringN/AARIA
MIDI ConditionsvarNN_onccXSpecifies the method used to calculate variable number NN from MIDI CCs.floatN/A0 to 1
MIDI ConditionsvarNN_curveccXSpecifies the ‹curve› number which MIDI CC X uses to modulate varNN.integer00 to 255
MIDI ConditionsvarNN_Specifies the target for variable NN to modulate.N/AN/AARIA
Internal ConditionslobpmHost tempo value.float00 to 500SFZ v1
Internal ConditionshibpmHost tempo value.float5000 to 500SFZ v1
Internal ConditionslochanaftDefines the range of last Channel Aftertouch message required for the region to play.integer00 to 127SFZ v1
Internal ConditionshichanaftDefines the range of last Channel Aftertouch message required for the region to play.integer1270 to 127SFZ v1
Internal ConditionslopolyaftDefines the range of last Polyphonic Aftertouch message required for the region to play.integer00 to 127SFZ v1
Internal ConditionshipolyaftDefines the range of last Polyphonic Aftertouch message required for the region to play.integer1270 to 127SFZ v1
Internal ConditionslorandThe region will play if the random number is equal to or higher than lorand, and lower than hirand.float00 to 1SFZ v1
Internal ConditionshirandThe region will play if the random number is equal to or higher than lorand, and lower than hirand.float10 to 1SFZ v1
Internal Conditionsseq_lengthSequence length, used together with seq_position to use samples as round robins.integer11 to 100SFZ v1
Internal Conditionsseq_positionSequence position. The region will play if the internal sequence counter is equal to seq_position.integer11 to 100SFZ v1
Internal ConditionslotimerRegion plays if the time passed since the last sample in the same group played is between lotimer and hitimer.floatN/ASFZ v2
Internal ConditionshitimerRegion plays if timer is between lotimer and hitimer.floatN/ASFZ v2
TriggerstriggerSets the trigger which will be used for the sample to play.stringattackSFZ v1
Triggerson_loccNIf a MIDI control message with a value between on_loccN and on_hiccN is received, the region will play. Default value is -1, it means unassigned.integer-10 to 127SFZ v1
Triggersstart_loccNon_loccN alias.N/AN/ASFZ v2
Triggerson_hiccNIf a MIDI control message with a value between on_loccN and on_hiccN is received, the region will play. Default value is -1, it means unassigned.integer-10 to 127SFZ v1
Triggersstart_hiccNon_hiccN alias.N/AN/ASFZ v2
Triggerson_lohdccNLike on_loccN but with floating point MIDI CCs.float-10 to 1ARIA
Triggersstart_lohdccNon_lohdccN alias.N/AN/A
Triggerson_hihdccNLike on_hiccN but with floating point MIDI CCs.float-10 to 1ARIA
Triggersstart_hihdccNon_hihdccN alias.N/AN/A
Triggersstop_loccNIf a MIDI control message with a value between stop_loccN and stop_hiccN is received, the region will stop playing. Default value is -1, it means unassigned.integer-10 to 127SFZ v2
Triggersstop_hiccNIf a MIDI control message with a value between stop_loccN and stop_hiccN is received, the region will stop playing. Default value is -1, it means unassigned.integer-10 to 127SFZ v2
Triggersstop_lohdccNLike stop_loccN but with floating point MIDI CCs.float-10 to 1ARIA
Triggersstop_hihdccNLike stop_hiccN but with floating point MIDI CCs.float-10 to 1ARIA
AmplifierpanThe panoramic position for the region.float0-100 to 100SFZ v1
Amplifierpan_onccNN/AN/ASFZ v2
Amplifierpan_ccNpan_onccN alias.N/AN/AARIA
Amplifierpan_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate pan.integer00 to 255SFZ v2
Amplifierpan_smoothccNN/AN/ASFZ v2
Amplifierpan_stepccNN/AN/ASFZ v2
Amplifierpan_randomRandom panoramic position for the region.float0-100 to 100ARIA
AmplifierpositionOnly operational for stereo samples, position defines the position in the stereo field of a stereo signal, after channel mixing as defined in the width opcode.float0-100 to 100SFZ v1
Amplifierposition_onccNN/AN/AARIA
Amplifierposition_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate position.integer00 to 255ARIA
Amplifierposition_smoothccNN/AN/AARIA
Amplifierposition_stepccNN/AN/AARIA
Amplifierposition_randomfloat0-100 to 100ARIA
Amplifierposition_keycenterN/AN/AARIA
Amplifierposition_keytrackN/AN/AARIA
Amplifierposition_veltrackinteger0-200 to 200ARIA
AmplifiervolumeThe volume for the region, in decibels.float0-144 to 6SFZ v1
Amplifiergain_ccNGain applied on MIDI control N, in decibels.float0-144 to 48
Amplifiergain_onccNgain_ccN alias.N/AN/ASFZ v2
Amplifiervolume_onccNgain_ccN alias.N/AN/ASFZ v2
Amplifiervolume_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate volume.integer00 to 255SFZ v2
Amplifiervolume_smoothccNN/AN/ASFZ v2
Amplifiervolume_stepccNN/AN/ASFZ v2
AmplifierwidthOnly operational for stereo samples, width defines the amount of channel mixing applied to play the sample.float100-100 to 100SFZ v1
Amplifierwidth_onccNN/AN/ASFZ v2
Amplifierwidth_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate width.integer00 to 255SFZ v2
Amplifierwidth_smoothccNN/AN/ASFZ v2
Amplifierwidth_stepccNN/AN/ASFZ v2
Amplifieramp_keycenterCenter key for amplifier keyboard tracking. In this key, the amplifier keyboard tracking will have no effect.integer600 to 127SFZ v1
Amplifieramp_keytrackAmplifier keyboard tracking (change in amplitude per key) in decibels.float0-96 to 12SFZ v1
Amplifieramp_veltrackAmplifier velocity tracking, represents how much the amplitude changes with incoming note velocity.float100-100 to 100SFZ v1
Amplifieramp_veltrack_onccNN/AN/AARIA
Amplifieramp_veltrack_ccNamp_veltrack_onccN alias.N/AN/A
Amplifieramp_veltrack_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate amp_veltrack.integer00 to 255ARIA
Amplifieramp_veltrack_randomN/AN/AARIA
Amplifieramp_velcurve_NUser-defined amplifier velocity curve.floatStandard curve (see amp_veltrack)0 to 1SFZ v1
Amplifieramp_randomRandom volume for the region, in decibels.float00 to 24SFZ v1
Amplifiergain_randomamp_random alias.N/AN/ASFZ v2
Amplifierrt_decayApplies only to regions that triggered through trigger=release. The volume decrease (in decibels) per seconds after the corresponding attack region was triggered.float00 to 200SFZ v1
Amplifierrt_decayNApplies only to regions that triggered through trigger=release. The volume decrease (in decibels) per seconds after the corresponding attack region was triggered, for decrease curve segment number N.float00 to 200ARIA
Amplifierrt_decayN_timeThe duration of release sample volue decrease curve segment number N.floatN/AARIA
Amplifierxf_cccurveMIDI controllers crossfade curve for the region.stringpowerSFZ v1
Amplifierxf_keycurveKeyboard crossfade curve for the region.stringpowerSFZ v1
Amplifierxf_velcurveVelocity crossfade curve for the region.stringpowerSFZ v1
Amplifierxfin_loccNFade in control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfin_hiccNFade in control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfout_loccNFade out control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfout_hiccNFade out control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfin_lokeyFade in control based on MIDI note (keyboard position).integer00 to 127SFZ v1
Amplifierxfin_hikeyFade in control based on MIDI note (keyboard position).integer00 to 127SFZ v1
Amplifierxfout_lokeyFade out control based on MIDI note number (keyboard position).integer1270 to 127SFZ v1
Amplifierxfout_hikeyFade out control based on MIDI note number (keyboard position).integer1270 to 127SFZ v1
Amplifierxfin_lovelFade in control based on velocity.integer00 to 127SFZ v1
Amplifierxfin_hivelFade in control based on velocity.integer00 to 127SFZ v1
Amplifierxfout_lovelFade out control, based on velocity.integer1270 to 127SFZ v1
Amplifierxfout_hivelFade out control, based on velocity.integer1270 to 127SFZ v1
AmplifierphaseIf invert is set, the region is played with inverted phase.stringnormalSFZ v2
AmplifieramplitudeAmplitude for the specified region in percentage of full amplitude.float1000 to 100ARIA
Amplifieramplitude_onccNfloatN/A-100 to 100
Amplifieramplitude_ccNamplitude_onccN alias.N/AN/A
Amplifieramplitude_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate amplitude.integer00 to 255
Amplifieramplitude_smoothccNN/AN/A
Amplifierglobal_amplitudeARIA extension, like amplitude, but affecting everything when set under the ‹global› header.float1000 to 100ARIA
Amplifiermaster_amplitudeARIA extension, like amplitude, but affecting everything when set under the ‹master› header.float1000 to 100ARIA
Amplifiergroup_amplitudeARIA extension, like amplitude, but affecting everything when set under the ‹group› header.float1000 to 100ARIA
Amplifierpan_lawSets the pan law to be used.stringN/AARIA
Amplifierpan_keycenterCenter key for pan keyboard tracking.integer600 to 127SFZ v2
Amplifierpan_keytrackThe amount by which the panning of a note is shifted with each key.float0-100 to 100SFZ v2
Amplifierpan_veltrackThe effect of note velocity on panning.float0-100 to 100SFZ v2
Amplifierglobal_volumeARIA extension, like volume, but affecting everything when set under the ‹global› header.float0-144 to 6ARIA
Amplifiermaster_volumeARIA extension, like volume, but affecting everything when set under the ‹master› header.float0-144 to 6ARIA
Amplifiergroup_volumeARIA extension, like volume, but affecting everything when set under the ‹group› header.float0-144 to 6ARIA
EQeqN_bwBandwidth of the equalizer band, in octaves.float10.001 to 4SFZ v1
EQeqN_bwccXfloat0-4 to 4
EQeqN_bw_onccXeqN_bwccX alias.N/AN/ASFZ v2
EQeqN_freqFrequency of the equalizer band, in Hertz.floateq1_freq=50
eq2_freq=500
eq3_freq=5000
0 to 30000SFZ v1
EQeqN_freqccXfloat0-30000 to 30000
EQeqN_freq_onccXeqN_freqccX alias.N/AN/ASFZ v2
EQeqN_vel2freqFrequency change of the equalizer band with MIDI velocity, in Hertz.float0-30000 to 30000
EQeqN_gainGain of the equalizer band, in decibels.float0-96 to 24SFZ v1
EQeqN_gainccXfloat0-96 to 24
EQeqN_gain_onccXeqN_gainccX alias.N/AN/ASFZ v2
EQeqN_vel2gainGain change of the equalizer band with MIDI velocity, in decibels.float0-96 to 24
EQeqN_dynamicSpecifies when EQ is recalculated.integer00 to 1ARIA
EQeqN_typeSets the type of EQ filter.stringpeakSFZ v2
FiltercutoffSets the cutoff frequency (Hz) of the filters.floatfilter disabled0 to SampleRate / 2SFZ v1
Filtercutoff2cutoff alias.N/AN/ASFZ v2
Filtercutoff2_ccNN/AN/A
Filtercutoff2_onccNN/AN/A
Filtercutoff2_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate cutoff2.integer00 to 255
Filtercutoff2_smoothccNN/AN/A
Filtercutoff2_stepccNN/AN/A
Filtercutoff2_chanaftN/AN/A
Filtercutoff2_polyaftN/AN/A
Filtercutoff_ccNThe variation in the cutoff frequency when MIDI continuous controller N is received.integer0-9600 to 9600
Filtercutoff_onccNcutoff_ccN alias.N/AN/ASFZ v2
Filtercutoff_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate cutoff.integer00 to 255SFZ v2
Filtercutoff_smoothccNfloat00 to ?SFZ v2
Filtercutoff_stepccNinteger00 to ?SFZ v2
Filtercutoff_chanaftThe variation in the cutoff frequency when MIDI channel aftertouch messages are received, in cents.integer0-9600 to 9600
Filtercutoff_polyaftThe variation in the cutoff frequency when MIDI polyphonic aftertouch messages are received, in cents.integer0-9600 to 9600
Filterfil_gainGain for lsh, hsh and peq filter types.float0ARIA
Filterfil2_gainfil_gain alias.N/AN/A
Filterfil2_gain_onccNN/AN/A
Filterfil_gain_onccNN/AN/A
Filterfil_keycenterCenter key for filter keyboard tracking.integer600 to 127SFZ v1
Filterfil2_keycenterfil_keycenter alias.N/AN/ASFZ v2
Filterfil_keytrackFilter keyboard tracking (change on cutoff for each key) in cents.integer00 to 1200SFZ v1
Filterfil2_keytrackfil_keytrack alias.N/AN/ASFZ v2
Filterfil_randomRandom value added to the filter cutoff for the region, in cents.integer00 to 9600SFZ v1
Filtercutoff_randomfil_random alias.N/AN/ASFZ v2
Filtercutoff2_randomfil_random alias.N/AN/AARIA
Filterfil_typeFilter type.stringlpf_2pSFZ v1
Filterfiltypefil_type alias.N/AN/A
Filterfil2_typefil_type alias.N/AN/ASFZ v2
Filterfil_veltrackFilter velocity tracking, the amount by which the cutoff changes with incoming note velocity, in cents.integer0-9600 to 9600SFZ v1
Filterfil2_veltrackfil_veltrack alias.N/AN/ASFZ v2
FilterresonanceThe filter cutoff resonance value, in decibels.float00 to 40SFZ v1
Filterresonance2resonance alias.N/AN/ASFZ v2
Filterresonance2_onccNfloat0-40 to 40
Filterresonance2_ccNresonance2_onccN alias.N/AN/ASFZ v2
Filterresonance2_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate resonance2.integer00 to 255
Filterresonance2_smoothccNfloat00 to ?
Filterresonance2_stepccNinteger00 to ?
Filterresonance_onccNfloat0-40 to 40SFZ v2
Filterresonance_ccNresonance_onccN alias.N/AN/A
Filterresonance_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate resonance.integer00 to 255SFZ v2
Filterresonance_smoothccNfloat00 to ?SFZ v2
Filterresonance_stepccNinteger00 to ?SFZ v2
Filterresonance_randomFilter cutoff resonance random value, in decibels.float00 to 40ARIA
Filterresonance2_randomFilter#2 cutoff resonance random value, in decibels.float00 to 40ARIA
Filternoise_filterstringN/ASFZ v2
Filternoise_stereostringN/ASFZ v2
Filternoise_levelfloatN/A-96 to 24SFZ v2
Filternoise_level_onccNfloatN/A-96 to 24
Filternoise_level_smoothccNfloat00 to ?
Filternoise_stepintegerN/A0 to 100SFZ v2
Filternoise_step_onccNintegerN/A0 to 100
Filternoise_toneintegerN/A0 to 100SFZ v2
Filternoise_tone_onccNintegerN/A0 to 100
Pitchbend_upPitch bend range when Bend Wheel or Joystick is moved up, in cents.integer200-9600 to 9600SFZ v1
Pitchbendupbend_up alias.N/AN/A
Pitchbend_downPitch bend range when Bend Wheel or Joystick is moved down, in cents.integer-200-9600 to 9600SFZ v1
Pitchbenddownbend_down alias.N/AN/A
Pitchbend_smoothPitch bend smoothness. Adds “inertia” to pitch bends, so fast movements of the pitch bend wheel will have a delayed effect on the pitch change.float00 to ?SFZ v2
Pitchbend_stepPitch bend step, in cents.integer11 to 1200SFZ v1
Pitchbendstepbend_step alias.N/AN/A
PitchtuneThe fine tuning for the sample, in cents.integer0-100 to 100SFZ v1
Pitchpitchtune alias.N/AN/AARIA
Pitchpitch_onccNN/AN/A-9600 to 9600SFZ v2
Pitchtune_ccNpitch_onccN alias.N/AN/AARIA
Pitchtune_onccNpitch_onccN alias.N/AN/AARIA
Pitchpitch_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate pitch.integer00 to 255SFZ v2
Pitchtune_curveccNpitch_curveccN alias.N/AN/AARIA
Pitchpitch_smoothccNfloat00 to ?SFZ v2
Pitchtune_smoothccNpitch_smoothccN alias.N/AN/AARIA
Pitchpitch_stepccNN/A00 to ?SFZ v2
Pitchtune_stepccNpitch_stepccN alias.N/AN/AARIA
Pitchgroup_tuneARIA extension, like tune, but affecting everything when set under the ‹group› header.integer0-9600 to 9600ARIA
Pitchmaster_tuneARIA extension, like tune, but affecting everything when set under the ‹master› header.integer0-9600 to 9600ARIA
Pitchglobal_tuneARIA extension, like tune, but affecting everything when set under the ‹global› header.integer0-9600 to 9600ARIA
Pitchpitch_keycenterRoot key for the sample.integer600 to 127SFZ v1
Pitchpitch_keytrackWithin the region, this value defines how much the pitch changes with every note.integer100-1200 to 1200SFZ v1
Pitchtune_keytrackpitch_keytrack alias.N/AN/AARIA
Pitchpitch_randomRandom tuning for the region, in cents.integer00 to 9600SFZ v1
Pitchtune_randompitch_random alias.N/AN/AARIA
Pitchpitch_veltrackPitch velocity tracking, represents how much the pitch changes with incoming note velocity, in cents.integer0-9600 to 9600SFZ v1
Pitchtune_veltrackpitch_veltrack alias.N/AN/AARIA
PitchtransposeThe transposition value for this region which will be applied to the sample.integer0-127 to 127SFZ v1
Pitchbend_stepupPitch bend step, in cents, applied to upwards bends only.integer11 to 1200SFZ v2
Pitchbend_stepdownPitch bend step, in cents, for downward pitch bends.integer11 to 1200SFZ v2
Envelope Generatorsampeg_attackEG attack time.float00 to 100SFZ v1
Envelope Generatorsamp_attackampeg_attack alias.N/AN/ASFZ v2
Envelope Generatorsampeg_attackccNfloat0-100 to 100
Envelope Generatorsampeg_attack_onccNampeg_attackccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_attack_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_vel2attackVelocity effect on EG attack time.float0-100 to 100
Envelope Generatorsamp_vel2attackampeg_vel2attack alias.N/AN/ASFZ v2
Envelope Generatorsampeg_decayEG decay time.float00 to 100SFZ v1
Envelope Generatorsamp_decayampeg_decay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_decayccNfloat0-100 to 100
Envelope Generatorsampeg_decay_onccNampeg_decayccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_decay_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate ampeg_decay.integer00 to 255ARIA
Envelope Generatorsampeg_vel2decayVelocity effect on EG decay time.float0-100 to 100
Envelope Generatorsamp_vel2decayampeg_vel2decay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_delayEG delay time.float00 to 100SFZ v1
Envelope Generatorsamp_delayampeg_delay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_delayccNfloat0-100 to 100
Envelope Generatorsampeg_delay_onccNampeg_delayccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_delay_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_vel2delayVelocity effect on EG delay time.float0-100 to 100
Envelope Generatorsamp_vel2delayampeg_vel2delay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_holdEG hold time.float00 to 100SFZ v1
Envelope Generatorsamp_holdampeg_hold alias.N/AN/ASFZ v2
Envelope Generatorsampeg_holdccNfloat0-100 to 100
Envelope Generatorsampeg_hold_onccNampeg_holdccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_hold_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate ampeg_hold.integer00 to 255ARIA
Envelope Generatorsampeg_vel2holdVelocity effect on EG hold time.float0-100 to 100
Envelope Generatorsamp_vel2holdampeg_vel2hold alias.N/AN/ASFZ v2
Envelope Generatorsampeg_releaseEG release time (after note release).float0.0010 to 100SFZ v1
Envelope Generatorsamp_releaseampeg_release alias.N/AN/ASFZ v2
Envelope Generatorsampeg_releaseccNfloat0-100 to 100
Envelope Generatorsampeg_release_onccNampeg_releaseccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_release_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_vel2releaseVelocity effect on EG release time.float0-100 to 100
Envelope Generatorsamp_vel2releaseampeg_vel2release alias.N/AN/ASFZ v2
Envelope Generatorsampeg_sustainEG sustain level, in percentage.float1000 to 100SFZ v1
Envelope Generatorsamp_sustainampeg_sustain alias.N/AN/ASFZ v2
Envelope Generatorsampeg_sustainccNfloat0-100 to 100
Envelope Generatorsampeg_sustain_onccNampeg_sustainccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_sustain_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate ampeg_sustain.integer00 to 255ARIA
Envelope Generatorsampeg_vel2sustainVelocity effect on EG sustain level, in percentage.float0-100 to 100
Envelope Generatorsamp_vel2sustainampeg_vel2sustain alias.N/AN/ASFZ v2
Envelope Generatorsampeg_startEnvelope start level, in percentage.float00 to 100SFZ v1
Envelope Generatorsampeg_startccNfloat0-100 to 100
Envelope Generatorsampeg_start_onccNampeg_startccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_start_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_attack_shapeSpecifies the curvature of attack stage of the envelope.float0ARIA
Envelope Generatorsampeg_decay_shapeSpecifies the curvature of decay stage of the envelope.float-10.3616ARIA
Envelope Generatorsampeg_decay_zeroSpecifies how decay time is calculated.integer10 to 1ARIA
Envelope Generatorsampeg_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope Generatorsampeg_release_shapeSpecifies the curvature of release stage of the envelope.float-10.3616ARIA
Envelope Generatorsampeg_release_zeroSpecifies how release time is calculated.integer00 to 1ARIA
Envelope Generatorsfileg_attack_shapeSpecifies the curvature of attack stage of the envelope.float0ARIA
Envelope Generatorsfileg_decay_shapeSpecifies the curvature of decay stage of the envelope.float0ARIA
Envelope Generatorsfileg_decay_zeroSpecifies how decay time is calculated.integer10 to 1ARIA
Envelope Generatorsfileg_release_shapeSpecifies the curvature of release stage of the envelope.float0ARIA
Envelope Generatorsfileg_release_zeroSpecifies how release time is calculated.integer00 to 1ARIA
Envelope Generatorsfileg_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope Generatorspitcheg_attack_shapeSpecifies the curvature of attack stage of the envelope.float0ARIA
Envelope Generatorspitcheg_decay_shapeSpecifies the curvature of decay stage of the envelope.float0ARIA
Envelope Generatorspitcheg_decay_zeroSpecifies how decay time is calculated.integer10 to 1ARIA
Envelope Generatorspitcheg_release_shapeSpecifies the curvature of release stage of the envelope.float0ARIA
Envelope Generatorspitcheg_release_zeroSpecifies how release time is calculated.integer00 to 1ARIA
Envelope Generatorspitcheg_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope Generatorsfileg_attackEG attack time.float00 to 100SFZ v1
Envelope Generatorsfil_attackfileg_attack alias.N/AN/ASFZ v2
Envelope Generatorsfileg_attack_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_attackccNfileg_attack_onccN alias.N/AN/A
Envelope Generatorsfileg_attack_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2attackVelocity effect on EG attack time.float0-100 to 100
Envelope Generatorsfil_vel2attackfileg_vel2attack alias.N/AN/ASFZ v2
Envelope Generatorsfileg_decayEG decay time.float00 to 100SFZ v1
Envelope Generatorsfil_decayfileg_decay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_decay_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_decayccNfileg_decay_onccN alias.N/AN/A
Envelope Generatorsfileg_decay_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2decayVelocity effect on filter EG decay time.float0-100 to 100
Envelope Generatorsfil_vel2decayfileg_vel2decay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_delayEG delay time.float00 to 100SFZ v1
Envelope Generatorsfil_delayfileg_delay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_delay_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_delayccNfileg_delay_onccN alias.N/AN/A
Envelope Generatorsfileg_delay_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2delayVelocity effect on filter EG delay time.float0-100 to 100
Envelope Generatorsfil_vel2delayfileg_vel2delay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_depthEnvelope depth.integer0-12000 to 12000SFZ v1
Envelope Generatorsfil_depthfileg_depth alias.N/AN/ASFZ v2
Envelope Generatorsfileg_depth_onccNinteger0-12000 to 12000ARIA
Envelope Generatorsfileg_depthccNfileg_depth_onccN alias.N/AN/A
Envelope Generatorsfileg_depth_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2depthVelocity effect on EG depth, in cents for pitch or filter cutoff.integer0-12000 to 12000
Envelope Generatorsfil_vel2depthfileg_vel2depth alias.N/AN/ASFZ v2
Envelope Generatorsfileg_holdEG hold time.float00 to 100SFZ v1
Envelope Generatorsfil_holdfileg_hold alias.N/AN/ASFZ v2
Envelope Generatorsfileg_hold_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_holdccNfileg_hold_onccN alias.N/AN/A
Envelope Generatorsfileg_hold_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2holdVelocity effect on EG hold time.float0-100 to 100
Envelope Generatorsfil_vel2holdfileg_vel2hold alias.N/AN/ASFZ v2
Envelope Generatorsfileg_releaseEG release time (after note release).float00 to 100SFZ v1
Envelope Generatorsfil_releasefileg_release alias.N/AN/ASFZ v2
Envelope Generatorsfileg_release_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_releaseccNfileg_release_onccN alias.N/AN/A
Envelope Generatorsfileg_release_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2releaseVelocity effect on EG release time.float0-100 to 100
Envelope Generatorsfil_vel2releasefileg_vel2release alias.N/AN/ASFZ v2
Envelope Generatorsfileg_startEnvelope start level, in percentage.float00 to 100SFZ v1
Envelope Generatorsfileg_start_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_startccNfileg_start_onccN alias.N/AN/A
Envelope Generatorsfileg_start_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_sustainEG sustain level, in percentage.float00 to 100SFZ v1
Envelope Generatorsfil_sustainfileg_sustain alias.N/AN/ASFZ v2
Envelope Generatorsfileg_sustain_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_sustainccNfileg_sustain_onccN alias.N/AN/A
Envelope Generatorsfileg_sustain_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2sustainVelocity effect on EG sustain level, in percentage.float0-100 to 100
Envelope Generatorsfil_vel2sustainfileg_vel2sustain alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_attackEG attack time.float00 to 100SFZ v1
Envelope Generatorspitch_attackpitcheg_attack alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_attack_onccNN/AN/AARIA
Envelope Generatorspitcheg_attack_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2attackVelocity effect on EG attack time.float0-100 to 100
Envelope Generatorspitch_vel2attackpitcheg_vel2attack alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_decayEG decay time.float00 to 100SFZ v1
Envelope Generatorspitch_decaypitcheg_decay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_decay_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_decay_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2decayVelocity effect on EG decay time.float0-100 to 100
Envelope Generatorspitch_vel2decaypitcheg_vel2decay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_delayEG delay time.float00 to 100SFZ v1
Envelope Generatorspitch_delaypitcheg_delay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_delay_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_delay_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2delayVelocity effect on EG delay time.float0-100 to 100
Envelope Generatorspitch_vel2delaypitcheg_vel2delay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_depthEnvelope depth.integer0-12000 to 12000SFZ v1
Envelope Generatorspitch_depthpitcheg_depth alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_depth_onccNinteger0-12000 to 12000ARIA
Envelope Generatorspitcheg_depthccNpitcheg_depth_onccN alias.N/AN/A
Envelope Generatorspitcheg_depth_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2depthVelocity effect on EG depth, in cents for pitch or filter cutoff.integer0-12000 to 12000
Envelope Generatorspitch_vel2depthpitcheg_vel2depth alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_holdEG hold time.float00 to 100SFZ v1
Envelope Generatorspitch_holdpitcheg_hold alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_hold_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_hold_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2holdVelocity effect on EG hold time.float0-100 to 100
Envelope Generatorspitch_vel2holdpitcheg_vel2hold alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_releaseEG release time (after note release).float00 to 100SFZ v1
Envelope Generatorspitch_releasepitcheg_release alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_release_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_release_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2releaseVelocity effect on EG release time.float0-100 to 100
Envelope Generatorspitch_vel2releasepitcheg_vel2release alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_startEnvelope start level, in percentage.float00 to 100SFZ v1
Envelope Generatorspitcheg_start_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_start_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_sustainEG sustain level, in percentage.float00 to 100SFZ v1
Envelope Generatorspitch_sustainpitcheg_sustain alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_sustain_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_sustain_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2sustainVelocity effect on EG sustain level, in percentage.float0-100 to 100
Envelope Generatorspitch_vel2sustainpitcheg_vel2sustain alias.N/AN/ASFZ v2
Envelope GeneratorsegN_pointsN/AN/ASFZ v2
Envelope GeneratorsegN_timeXfloatN/ASFZ v2
Envelope GeneratorsegN_timeX_onccYfloatN/A
Envelope GeneratorsegN_levelXSets the envelope level at a specific point in envelope number N.float0-1 to 1SFZ v2
Envelope GeneratorsegN_levelX_onccYfloat0-1 to 1
Envelope GeneratorsegN_ampegN/AN/AARIA
Envelope GeneratorsegN_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope GeneratorsegN_shapeXfloat0SFZ v2
Envelope GeneratorsegN_curveXInstructs the player to use a curve shape defined under a curve header for the specified envelope segment.N/AN/ASFZ v2
Envelope GeneratorsegN_sustainN/AN/ASFZ v2
Envelope GeneratorsegN_loopN/AN/ASFZ v2
Envelope GeneratorsegN_loop_countN/AN/ASFZ v2
Envelope GeneratorsegN_volumeN/AN/ASFZ v2
Envelope GeneratorsegN_volume_onccXN/AN/A
Envelope GeneratorsegN_amplitudeN/AN/ASFZ v2
Envelope GeneratorsegN_amplitude_onccXN/AN/A
Envelope GeneratorsegN_panN/AN/ASFZ v2
Envelope GeneratorsegN_pan_onccXN/AN/A
Envelope GeneratorsegN_widthN/AN/ASFZ v2
Envelope GeneratorsegN_width_onccXN/AN/A
Envelope GeneratorsegN_pan_curveN/AN/ASFZ v2
Envelope GeneratorsegN_pan_curveccXSpecifies the ‹curve› number which MIDI CC X uses to modulate egN_pan.integer00 to 255
Envelope GeneratorsegN_freq_lfoXAllows egN to shape a change to lfoX's frequencyfloat0SFZ v2
Envelope GeneratorsegN_depth_lfoXAllows egN to scale lfoX's effect on its targetsfloat100SFZ v2
Envelope GeneratorsegN_depthadd_lfoXN/AN/ASFZ v2
Envelope GeneratorsegN_pitchN/AN/ASFZ v2
Envelope GeneratorsegN_pitch_onccXN/AN/A
Envelope GeneratorsegN_cutoffN/AN/ASFZ v2
Envelope GeneratorsegN_cutoff_onccXN/AN/A
Envelope GeneratorsegN_cutoff2N/AN/ASFZ v2
Envelope GeneratorsegN_cutoff2_onccXN/AN/A
Envelope GeneratorsegN_resonanceN/AN/ASFZ v2
Envelope GeneratorsegN_resonance_onccXN/AN/A
Envelope GeneratorsegN_resonance2N/AN/ASFZ v2
Envelope GeneratorsegN_resonance2_onccXN/AN/A
Envelope GeneratorsegN_eqXfreqN/AN/ASFZ v2
Envelope GeneratorsegN_eqXfreq_onccYN/AN/A
Envelope GeneratorsegN_eqXbwN/AN/ASFZ v2
Envelope GeneratorsegN_eqXbw_onccYN/AN/A
Envelope GeneratorsegN_eqXgainN/AN/ASFZ v2
Envelope GeneratorsegN_eqXgain_onccYN/AN/A
Envelope GeneratorsegN_decimN/AN/ASFZ v2
Envelope GeneratorsegN_decim_onccXN/AN/A
Envelope GeneratorsegN_bitredN/AN/ASFZ v2
Envelope GeneratorsegN_bitred_onccXN/AN/A
Envelope GeneratorsegN_rectifyN/AN/ASFZ v2
Envelope GeneratorsegN_rectify_onccXN/AN/A
Envelope GeneratorsegN_ringmodN/AN/ASFZ v2
Envelope GeneratorsegN_ringmod_onccXN/AN/A
Envelope GeneratorsegN_noiselevelN/AN/ASFZ v2
Envelope GeneratorsegN_noiselevel_onccXN/AN/A
Envelope GeneratorsegN_noisestepN/AN/ASFZ v2
Envelope GeneratorsegN_noisestep_onccXN/AN/A
Envelope GeneratorsegN_noisetoneN/AN/ASFZ v2
Envelope GeneratorsegN_noisetone_onccXN/AN/A
Envelope GeneratorsegN_driveshapeN/AN/ASFZ v2
Envelope GeneratorsegN_driveshape_onccXN/AN/A
LFOamplfo_delayThe time before the LFO starts oscillating.float00 to 100SFZ v1
LFOamplfo_depthLFO depth.float0-10 to 10SFZ v1
LFOamplfo_depthccNfloat0-10 to 10
LFOamplfo_depth_onccNamplfo_depthccN alias.N/AN/ASFZ v2
LFOamplfo_depthchanaftLFO depth when channel aftertouch MIDI messages are received.float0-10 to 10
LFOamplfo_depthpolyaftLFO depth when polyphonic aftertouch MIDI messages are received.float0-10 to 10
LFOamplfo_fadeLFO fade-in effect time.float00 to 100SFZ v1
LFOamplfo_freqLFO frequency, in hertz.float00 to 20SFZ v1
LFOamplfo_freqccNfloat0-200 to 200
LFOamplfo_freqchanaftLFO frequency change when channel aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOamplfo_freqpolyaftLFO frequency change when polyphonic aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOfillfo_delayThe time before the LFO starts oscillating.float00 to 100SFZ v1
LFOfillfo_depthLFO depth.float0-1200 to 1200SFZ v1
LFOfillfo_depthccNfloat0-1200 to 1200
LFOfillfo_depth_onccNfillfo_depthccN alias.N/AN/ASFZ v2
LFOfillfo_depthchanaftLFO depth when channel aftertouch MIDI messages are received.float0-1200 to 1200
LFOfillfo_depthpolyaftLFO depth when polyphonic aftertouch MIDI messages are received.float0-1200 to 1200
LFOfillfo_fadeLFO fade-in effect time.float00 to 100SFZ v1
LFOfillfo_freqLFO frequency, in hertz.float00 to 20SFZ v1
LFOfillfo_freqccNfloat0-200 to 200
LFOfillfo_freqchanaftLFO frequency change when channel aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOfillfo_freqpolyaftLFO frequency change when polyphonic aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOpitchlfo_delayThe time before the LFO starts oscillating.float00 to 100SFZ v1
LFOpitchlfo_depthLFO depth.float0-1200 to 1200SFZ v1
LFOpitchlfo_depthccNfloat0-1200 to 1200
LFOpitchlfo_depth_onccNpitchlfo_depthccN alias.N/AN/ASFZ v2
LFOpitchlfo_depthchanaftLFO depth when channel aftertouch MIDI messages are received.float0-1200 to 1200
LFOpitchlfo_depthpolyaftLFO depth when polyphonic aftertouch MIDI messages are received.float0-1200 to 1200
LFOpitchlfo_fadeLFO fade-in effect time.float00 to 100SFZ v1
LFOpitchlfo_freqLFO frequency, in hertz.float00 to 20SFZ v1
LFOpitchlfo_freqccNfloat0-200 to 200
LFOpitchlfo_freqchanaftLFO frequency change when channel aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOpitchlfo_freqpolyaftLFO frequency change when polyphonic aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOlfoN_freqThe base frequency of LFO number N, in Hertz.floatN/ASFZ v2
LFOlfoN_freq_onccXN/AN/A
LFOlfoN_freq_smoothccXN/AN/A
LFOlfoN_freq_stepccXN/AN/A
LFOlfoN_delayOnset delay for LFO number N.float0SFZ v2
LFOlfoN_delay_onccXN/AN/A
LFOlfoN_fadeFade-in time for LFO number N.floatN/ASFZ v2
LFOlfoN_fade_onccXfloatN/A
LFOlfoN_phaseInitial phase shift for LFO number N.float00 to 1SFZ v2
LFOlfoN_phase_onccXN/AN/A
LFOlfoN_countNumber of LFO repetitions for LFO N before the LFO stops.integerN/ASFZ v2
LFOlfoN_waveLFO waveform selection.integer1SFZ v2
LFOlfoN_waveXlfoN_wave alias.N/AN/AARIA
LFOlfoN_wave_onccXN/AN/AARIA
LFOlfoN_stepsNumber of steps in LFO step sequencer.integerN/ASFZ v2
LFOlfoN_stepXLevel of the step number X in LFO step sequencer.floatN/A-100 to 100SFZ v2
LFOlfoN_stepX_onccYN/AN/A
LFOlfoN_smoothN/AN/ASFZ v2
LFOlfoN_smooth_onccXN/AN/A
LFOlfoN_volumeN/AN/ASFZ v2
LFOlfoN_volume_onccXN/AN/A
LFOlfoN_volume_smoothccXN/AN/A
LFOlfoN_volume_stepccXN/AN/A
LFOlfoN_amplitudeN/AN/ASFZ v2
LFOlfoN_amplitude_onccXN/AN/A
LFOlfoN_amplitude_smoothccXN/AN/A
LFOlfoN_amplitude_stepccXN/AN/A
LFOlfoN_panN/AN/ASFZ v2
LFOlfoN_pan_onccXN/AN/A
LFOlfoN_pan_smoothccXN/AN/A
LFOlfoN_pan_stepccXN/AN/A
LFOlfoN_widthN/AN/ASFZ v2
LFOlfoN_width_onccXN/AN/A
LFOlfoN_width_smoothccXN/AN/A
LFOlfoN_width_stepccXN/AN/A
LFOlfoN_freq_lfoXN/AN/ASFZ v2
LFOlfoN_freq_lfoX_onccYN/AN/AARIA
LFOlfoN_depth_lfoXN/AN/ASFZ v2
LFOlfoN_depthadd_lfoXN/AN/ASFZ v2
LFOlfoN_pitchN/AN/ASFZ v2
LFOlfoN_pitch_curveccXSpecifies the ‹curve› number which MIDI CC X uses to modulate lfoN_pitch.integer00 to 255
LFOlfoN_pitch_onccXN/AN/A
LFOlfoN_pitch_smoothccXN/AN/A
LFOlfoN_pitch_stepccXN/AN/A
LFOlfoN_cutoffN/AN/ASFZ v2
LFOlfoN_cutoff2lfoN_cutoff alias.N/AN/ASFZ v2
LFOlfoN_cutoff2_onccXN/AN/A
LFOlfoN_cutoff2_smoothccXN/AN/A
LFOlfoN_cutoff2_stepccXN/AN/A
LFOlfoN_cutoff_onccXN/AN/A
LFOlfoN_cutoff_smoothccXN/AN/A
LFOlfoN_cutoff_stepccXN/AN/A
LFOlfoN_resonanceN/AN/ASFZ v2
LFOlfoN_resonance2lfoN_resonance alias.N/AN/ASFZ v2
LFOlfoN_resonance2_onccXN/AN/A
LFOlfoN_resonance2_smoothccXN/AN/A
LFOlfoN_resonance2_stepccXN/AN/A
LFOlfoN_resonance_onccXN/AN/A
LFOlfoN_resonance_smoothccXN/AN/A
LFOlfoN_resonance_stepccXN/AN/A
LFOlfoN_eqXfreqN/AN/ASFZ v2
LFOlfoN_eqXfreq_onccYN/AN/A
LFOlfoN_eqXfreq_smoothccYN/AN/A
LFOlfoN_eqXfreq_stepccYN/AN/A
LFOlfoN_eqXbwN/AN/ASFZ v2
LFOlfoN_eqXbw_onccYN/AN/A
LFOlfoN_eqXbw_smoothccYN/AN/A
LFOlfoN_eqXbw_stepccYN/AN/A
LFOlfoN_eqXgainN/AN/ASFZ v2
LFOlfoN_eqXgain_onccYN/AN/A
LFOlfoN_eqXgain_smoothccYN/AN/A
LFOlfoN_eqXgain_stepccYN/AN/A
LFOlfoN_decimN/AN/ASFZ v2
LFOlfoN_decim_onccXN/AN/A
LFOlfoN_decim_smoothccXN/AN/A
LFOlfoN_decim_stepccXN/AN/A
LFOlfoN_bitredN/AN/ASFZ v2
LFOlfoN_bitred_onccXN/AN/A
LFOlfoN_bitred_smoothccXN/AN/A
LFOlfoN_bitred_stepccXN/AN/A
LFOlfoN_noiselevelN/AN/ASFZ v2
LFOlfoN_noiselevel_onccXN/AN/A
LFOlfoN_noiselevel_smoothccXN/AN/A
LFOlfoN_noiselevel_stepccXN/AN/A
LFOlfoN_noisestepN/AN/ASFZ v2
LFOlfoN_noisestep_onccXN/AN/A
LFOlfoN_noisestep_smoothccXN/AN/A
LFOlfoN_noisestep_stepccXN/AN/A
LFOlfoN_noisetoneN/AN/ASFZ v2
LFOlfoN_noisetone_onccXN/AN/A
LFOlfoN_noisetone_smoothccXN/AN/A
LFOlfoN_noisetone_stepccXN/AN/A
LFOlfoN_driveN/AN/ASFZ v2
LFOlfoN_drive_onccXN/AN/A
LFOlfoN_drive_smoothccXN/AN/A
LFOlfoN_drive_stepccXN/AN/A
LFOlfoN_offsetDC offset - Add to LFO output; not affected by scale.floatN/AARIA
LFOlfoN_offsetXlfoN_offset alias.N/AN/A
LFOlfoN_ratioSets the ratio between the specified sub waveform and the main waveform.floatN/AARIA
LFOlfoN_ratioXlfoN_ratio alias.N/AN/A
LFOlfoN_scaleSets the scaling between the specified sub waveform and the main waveform.floatN/AARIA
LFOlfoN_scaleXlfoN_scale alias.N/AN/A
LFOlfoN_sample_dyn_paramXN/AN/AARIA
LFOlfoN_sample_dyn_paramX_onccYN/AN/A
Curvescurve_indexCurve definition ID.integerN/A0 to 255ARIA
CurvesvNNNDefines a point in a custom curve definition.floatN/A-1 to 1SFZ v2
Effectsapan_depthN/A0 to 100SFZ v2
Effectsapan_depth_onccNN/AN/A
Effectsapan_dryN/A0 to 100SFZ v2
Effectsapan_dry_onccNN/AN/A
Effectsapan_freqfloatN/ASFZ v2
Effectsapan_freq_onccNN/AN/A
Effectsapan_phasefloatN/A0 to 180SFZ v2
Effectsapan_phase_onccNN/AN/A
Effectsapan_waveformLFO wave number.N/AN/ASFZ v2
Effectsapan_wetN/A0 to 100SFZ v2
Effectsapan_wet_onccNN/AN/A
EffectsbitredBit reduction.N/A0 to 100SFZ v2
Effectsbitred_onccNN/AN/A
Effectsbitred_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate bitred.integer00 to 255
Effectsbitred_smoothccNN/AN/A
Effectsbitred_stepccNN/AN/A
EffectsbusThe target bus for the effect.stringmainSFZ v2
Effectsbypass_onccNSets up a bypass controller for the effect.floatN/ASFZ v2
Effectscomp_attackfloatN/ASFZ v2
Effectscomp_gainN/AN/ASFZ v2
Effectscomp_ratioN/A0 to 100SFZ v2
Effectscomp_releasefloatN/ASFZ v2
Effectscomp_stlinkstringN/ASFZ v2
Effectscomp_thresholdfloatN/ASFZ v2
EffectsdecimDecimator.N/A0 to 100SFZ v2
Effectsdecim_onccNN/AN/A
Effectsdecim_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate decim.integer00 to 255
Effectsdecim_smoothccNN/AN/A
Effectsdecim_stepccNN/AN/A
Effectsdelay_cutofffloatN/ASFZ v2
Effectsdelay_cutoff_onccNN/AN/A
Effectsdelay_damphiN/A0 to 100SFZ v2
Effectsdelay_damphi_onccNN/AN/A
Effectsdelay_damploN/A0 to 100SFZ v2
Effectsdelay_damplo_onccNN/AN/A
Effectsdelay_dryN/A0 to 100SFZ v2
Effectsdelay_dry_onccNN/AN/A
Effectsdelay_feedbackN/A0 to 100SFZ v2
Effectsdelay_feedback_onccNN/AN/A
Effectsdelay_filterName of filter type.stringN/ASFZ v2
Effectsdelay_inputN/A0 to 100SFZ v2
Effectsdelay_input_onccNN/AN/A
Effectsdelay_levelcN/A0 to 100SFZ v2
Effectsdelay_levellN/A0 to 100SFZ v2
Effectsdelay_levelrN/A0 to 100SFZ v2
Effectsdelay_lfofreqfloatN/ASFZ v2
Effectsdelay_lfofreq_onccNN/AN/A
Effectsdelay_moddepthN/A0 to 100SFZ v2
Effectsdelay_moddepth_onccNN/AN/A
Effectsdelay_modestringN/ASFZ v2
Effectsdelay_pancN/A0 to 100SFZ v2
Effectsdelay_panc_onccNN/AN/A
Effectsdelay_panlN/A0 to 100SFZ v2
Effectsdelay_panl_onccNN/AN/A
Effectsdelay_panrN/A0 to 100SFZ v2
Effectsdelay_panr_onccNN/AN/A
Effectsdelay_resonanceN/AN/ASFZ v2
Effectsdelay_resonance_onccNN/AN/A
Effectsdelay_spreadN/A0 to 100SFZ v2
Effectsdelay_spread_onccNN/AN/A
Effectsdelay_syncc_onccNN/AN/ASFZ v2
Effectsdelay_syncl_onccNN/AN/ASFZ v2
Effectsdelay_syncr_onccNN/AN/ASFZ v2
Effectsdelay_time_tapN/AN/ASFZ v2
Effectsdelay_timecN/AN/ASFZ v2
Effectsdelay_timec_onccNN/AN/A
Effectsdelay_timelN/AN/ASFZ v2
Effectsdelay_timel_onccNN/AN/A
Effectsdelay_timerN/AN/ASFZ v2
Effectsdelay_timer_onccNN/AN/A
Effectsdelay_wetN/A0 to 100SFZ v2
Effectsdelay_wet_onccNN/AN/A
EffectsdirecttomainGain of the main bus into the output.float1000 to 100SFZ v2
Effectsdisto_depthN/A0 to 100SFZ v2
Effectsdisto_depth_onccNN/AN/A
Effectsdisto_dryN/A0 to 100SFZ v2
Effectsdisto_dry_onccNN/AN/A
Effectsdisto_stagesN/AN/ASFZ v2
Effectsdisto_toneN/A0 to 100SFZ v2
Effectsdisto_tone_onccNN/AN/A
Effectsdisto_wetN/A0 to 100SFZ v2
Effectsdisto_wet_onccNN/AN/A
Effectsdsp_orderSignal flow type in Rapture's DSP block.integerN/A0 to 14SFZ v2
Effectseffect1Level of effect1 send, in percentage (reverb in Cakewalk sfz).float00 to 100SFZ v1
Effectseffect2Level of effect2 send, in percentage (chorus in Cakewalk sfz).float00 to 100SFZ v1
Effectseffect3Gain of the region's send into the 3rd effect bus.float00 to 100SFZ v2
Effectseffect4Gain of the region's send into the 4th effect bus.float00 to 100SFZ v2
Effectseq_bwN/AN/ASFZ v2
Effectseq_bw_onccNN/AN/A
Effectseq_freqN/AN/ASFZ v2
Effectseq_freq_onccNN/AN/A
Effectseq_gainN/AN/ASFZ v2
Effectseq_gain_onccNN/AN/A
Effectseq_typeN/AN/ASFZ v2
Effectsfilter_cutoffN/AN/ASFZ v2
Effectsfilter_cutoff_onccNN/AN/A
Effectsfilter_resonanceN/AN/ASFZ v2
Effectsfilter_resonance_onccNN/AN/A
Effectsfilter_typeName of filter type.stringN/ASFZ v2
EffectsfxNtomainGain of the Nth effect bus into the output.float00 to 100SFZ v2
EffectsfxNtomixGain of the Nth effect bus into the Mix node.float00 to 100SFZ v2
Effectsgate_onccNGate manual control.N/AN/ASFZ v2
Effectsgate_attackN/AN/ASFZ v2
Effectsgate_releaseN/AN/ASFZ v2
Effectsgate_stlinkstringN/ASFZ v2
Effectsgate_thresholdN/AN/ASFZ v2
EffectsinternalCakewalk internal features switch.stringoffSFZ v2
Effectsparam_offsetAdds a number to the parameter numbers of built-in or vendor-specific effects.integerN/AARIA
Effectsphaser_depthN/A0 to 100SFZ v2
Effectsphaser_depth_onccNN/AN/A
Effectsphaser_feedbackN/A0 to 100SFZ v2
Effectsphaser_feedback_onccNN/AN/A
Effectsphaser_freqfloatN/ASFZ v2
Effectsphaser_freq_onccNN/AN/A
Effectsphaser_phase_onccNN/A0 to 100SFZ v2
Effectsphaser_stagesN/AN/ASFZ v2
Effectsphaser_waveformLFO wave number.N/AN/ASFZ v2
Effectsphaser_wetN/A0 to 100SFZ v2
Effectsphaser_wet_onccNN/AN/A
Effectsreverb_dampN/A0 to 100SFZ v2
Effectsreverb_damp_onccNN/AN/A
Effectsreverb_dryN/A0 to 100SFZ v2
Effectsreverb_dry_onccNN/AN/A
Effectsreverb_inputN/A0 to 100SFZ v2
Effectsreverb_input_onccNN/AN/A
Effectsreverb_predelayfloatN/ASFZ v2
Effectsreverb_predelay_onccNN/AN/A
Effectsreverb_sizeN/A0 to 100SFZ v2
Effectsreverb_size_onccNN/AN/A
Effectsreverb_toneN/A0 to 100SFZ v2
Effectsreverb_tone_onccNN/AN/A
Effectsreverb_typestringN/ASFZ v2
Effectsreverb_wetN/A0 to 100SFZ v2
Effectsreverb_wet_onccNN/AN/A
Effectsstatic_cyclic_levelN/A0 to 100SFZ v2
Effectsstatic_cyclic_timefloatN/ASFZ v2
Effectsstatic_filterName of filter type.stringN/ASFZ v2
Effectsstatic_levelN/A0 to 100SFZ v2
Effectsstatic_level_onccNN/AN/A
Effectsstatic_random_levelN/A0 to 100SFZ v2
Effectsstatic_random_maxtimefloatN/ASFZ v2
Effectsstatic_random_mintimefloatN/ASFZ v2
Effectsstatic_stereoN/AN/ASFZ v2
Effectsstatic_toneN/A0 to 100SFZ v2
Effectsstrings_numberNumber of synthesized resonant strings.N/AN/ASFZ v2
Effectsstrings_wet_onccNN/A0 to 100SFZ v2
Effectstdfir_dryN/A0 to 100SFZ v2
Effectstdfir_dry_onccNN/AN/A
Effectstdfir_gainN/A0 to 100SFZ v2
Effectstdfir_impulseN/AN/ASFZ v2
Effectstdfir_wetN/A0 to 100SFZ v2
Effectstdfir_wet_onccNN/AN/A
EffectstypeEffect type or vendor-specific effect name. Varies across SFZ players.stringN/ASFZ v2
Effectsvendor_specificDefines vendor-specific effects, for example Garritan-specific stage depth effect in ARIA.stringN/AARIA
Loadingload_modeintegerN/A0 to 1SFZ v2
Loadingload_startintegerN/ASFZ v2
Loadingload_endintegerN/ASFZ v2
Loadingsample_qualitySample playback quality settings.integerN/A1 to 10SFZ v2
LoadingimageSets the background image of the instrument.stringN/ASFZ v2
Wavetable OscillatoroscillatorstringN/ASFZ v2
Wavetable Oscillatoroscillator_detuneN/AN/ASFZ v2
Wavetable Oscillatoroscillator_detune_onccNN/AN/A
Wavetable Oscillatoroscillator_modeThe modulation type.integer00 to 2SFZ v2
Wavetable Oscillatoroscillator_mod_depthN/AN/ASFZ v2
Wavetable Oscillatoroscillator_mod_depth_onccNN/AN/A
Wavetable Oscillatoroscillator_mod_smoothccNN/AN/A
Wavetable Oscillatoroscillator_multiConfigure a region to use more than one oscillator.integer11 to 9SFZ v2
Wavetable Oscillatoroscillator_phaseOscillator phase. Negative values for random phase.floatN/A-1 to 360SFZ v2
Wavetable Oscillatoroscillator_qualityintegerN/A0 to 3SFZ v2
Wavetable Oscillatoroscillator_table_sizeN/AN/ASFZ v2
+
+
+
+ +
+

+ +
+ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/misc/categories/index.html b/misc/categories/index.html new file mode 100644 index 000000000..488a164fa --- /dev/null +++ b/misc/categories/index.html @@ -0,0 +1,727 @@ + + + + + + + + + Categories - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Categories

Instruments Settings

+

Instruments Settings are opcodes used under the ‹control› header.

+

Other Instruments settings opcodes are of the Voice Lifecycle type.

+

Modulation

+

Modulation opcodes comprise of all the LFO and EG controls

+ +

Performance Parameters

+

Performance Parameters are all sound modifiers including:

+
    +
  • Pitch: influence the pitch of the region played
  • +
  • Amplifier: influence the amplitude (volume), pan (width, position) + and crossfades.
  • +
  • Filter: influence the timbre of the layer played. + Two filters can be used at the same time. + Further frequency shaping can be added via EQ opcodes.
  • +
  • EQ: simple frequency sound shaping tools independent from the filters. + As many as three EQs can be set for each SFZ file. + Each names eq1, eq2 and eq3.
  • +
+

Most Performance parameters are targets for the Modulation opcodes.

+

Region Logic

+

Region Logic opcodes define the conditions under which a voice plays or stops:

+
    +
  • Key Mapping
  • +
  • MIDI Conditions
  • +
  • Internal Conditions
  • +
  • Triggers
  • +
+

Sound Source

+

Sound Source defines the nature of the voice generated. +It could be samples or oscillators:

+
    +
  • Sample Playback: defines the parameters of the sound generation.
  • +
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/misc/sfz1/index.html b/misc/sfz1/index.html new file mode 100644 index 000000000..4f87d3434 --- /dev/null +++ b/misc/sfz1/index.html @@ -0,0 +1,8432 @@ + + + + + + + + + Opcodes - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Opcodes

All opcode versions, including extensions, starting in alphabetical order. +Note that modulations such as (on)ccN and vel2* are included in the pages +describing the parameters they modulate.

+

Opcode links in red color +represent obsolete opcodes which should not be used in new instruments.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OpcodeDescriptionTypeDefaultRangeVersion
Real-Time Instrument ScriptscriptAllows to load real-time instrument scripts for SFZ instruments.stringN/ALinuxSampler
Sample PlaybackcountThe number of times the sample will be played.integer00 to 4294967296SFZ v1
Sample PlaybackdelayRegion delay time.float00 to 100SFZ v1
Sample Playbackdelay_ccNRegion delay time after MIDI continuous controller N messages are received. If the region receives a note-off message before delay time, the region won't play.float0-100 to 100
Sample Playbackdelay_onccNdelay_ccN alias.N/AN/ASFZ v2
Sample Playbackdelay_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate delay.integer00 to 255ARIA
Sample Playbackdelay_randomRegion random delay time.float00 to 100SFZ v1
Sample Playbackdelay_samplesAllows the region playback to be postponed for the specified time, measured in samples (and therefore dependent on current sample rate).integerN/ASFZ v2
Sample Playbackdelay_samples_onccNintegerN/A
Sample PlaybackendThe endpoint of the sample. If unspecified, the entire sample will play.integerunspecified0 to 4294967296SFZ v1
Sample Playbackloop_countThe number of times a loop will repeat.integerN/ASFZ v2
Sample Playbackloopcountloop_count alias.N/AN/AARIA
Sample Playbackloop_crossfadeLoop cross fade.floatN/ASFZ v2
Sample Playbackloop_endThe loop end point, in samples.integer00 to 4294967296SFZ v1
Sample Playbackloopendloop_end alias.N/AN/A
Sample Playbackloop_lengthccNChange of loop end point.N/AN/ASFZ v2
Sample Playbackloop_length_onccNloop_lengthccN alias.N/AN/A
Sample Playbackloop_modeAllows playing samples with loops defined in the unlooped mode.stringno_loop for samples without a loop defined,
loop_continuous for samples with defined loop(s).
SFZ v1
Sample Playbackloopmodeloop_mode alias.N/AN/A
Sample Playbackloop_startThe loop start point, in samples.integer00 to 4294967296SFZ v1
Sample Playbackloopstartloop_start alias.N/AN/A
Sample Playbackloop_startccNChange of loop start point.N/AN/ASFZ v2
Sample Playbackloop_start_onccNloop_startccN alias.N/AN/A
Sample Playbackloop_tuneTuning for only the loop segment.float0SFZ v2
Sample Playbacklooptuneloop_tune alias.N/AN/AARIA
Sample Playbackloop_typeDefines the looping mode.stringforwardSFZ v2
Sample Playbacklooptypeloop_type alias.N/AN/AARIA
Sample PlaybackoffsetThe offset used to play the sample.integer00 to 4294967296SFZ v1
Sample Playbackoffset_ccNThe offset used to play the sample according to last position of MIDI continuous controller N.integer00 to 4294967296
Sample Playbackoffset_onccNoffset_ccN alias.N/AN/ASFZ v2
Sample Playbackoffset_randomRandom offset added to the region offset.integer00 to 4294967296SFZ v1
Sample Playbackoffset_modeDefines whether offset is measured in samples or percentage of sample length.stringsamplesARIA
Sample PlaybacksampleDefines which sample file the region will play.stringN/ASFZ v1
Sample Playbacksample_fadeoutNumber of seconds before the end of sample playback that the player should begin a realtime fadeout.floatN/ASFZ v2
Sample Playbacksample_dyn_paramNfloatN/AARIA
Sample Playbacksample_dyn_paramN_onccXfloatN/A
Sample Playbacksync_beatsRegion playing synchronization to host position.float00 to 32SFZ v1
Sample Playbacksync_offsetRegion playing synchronization to host position offset.float00 to 32SFZ v1
Sample Playbackdelay_beatsDelays the start of the region until a certain amount of musical beats are passed.floatN/ASFZ v2
Sample Playbackdelay_beats_onccNN/AN/AARIA
Sample Playbackdelay_beats_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate delay_beats.integer00 to 255ARIA
Sample Playbackdelay_beats_randomDelays the start of the region after a random amount of musical beats.floatN/AARIA
Sample Playbackstop_beatsStops a region after a certain amount of beats have played.floatN/ASFZ v2
Sample PlaybackdirectionThe direction in which the sample is to be played.stringforwardSFZ v2
Sample Playbackmd5Calculates the MD5 digital fingerprint hash of a sample file, represented as a sequence of 32 hexadecimal digits.stringnullSFZ v2
Sample Playbackreverse_loccNIf MIDI CC N is between reverse_loccN and reverse_hiccN, the region plays reversed.integerN/A0 to 127SFZ v2
Sample Playbackreverse_hiccNIf MIDI CC N is between reverse_loccN and reverse_hiccN, the region plays reversed.integerN/A0 to 127SFZ v2
Sample PlaybackwaveguideEnables waveguide synthesis for the region.stringN/ASFZ v2
Instrument SettingsdefineCreates a variable and gives it a value.stringN/ASFZ v2
Instrument Settingsdefault_pathDefault file path.stringN/ASFZ v2
Instrument Settingsnote_offsetMIDI note transpose; tells the SFZ player to offset all incoming MIDI notes by the specified number of semitones.integer0-127 to 127SFZ v2
Instrument Settingsoctave_offsetMIDI octave transpose; tells the SFZ player to offset all incoming MIDI notes by the specified number of octaves.integer0-10 to 10SFZ v2
Instrument Settingslabel_ccNCreates a label for the MIDI CC.stringN/AARIA
Instrument Settingslabel_keyNCreates a label for a key.stringN/Asfizz
Instrument Settingslabel_outputNCreates a label for the output N.stringN/ACalfbox
Instrument Settingsset_ccNSets a default initial value for MIDI CC number N, when the instrument is initially loaded.integerN/A0 to 127SFZ v2
Instrument SettingsincludeA special directive, which allows using SFZ files as building blocks for creating larger, more complex SFZ files.stringN/AARIA
Instrument Settingshint_Its a 'hint' to the ARIA engine, others implementations don't have to follow.N/AN/AARIA
Instrument Settings_modDetermines whether a parameter is modulated by addition or multiplication.stringN/AARIA
Instrument Settingsset_hdccNLike set_ccN but with floating point MIDI CCs.floatN/A0 to 1ARIA
Instrument Settingsset_realccNset_hdccN alias.N/AN/A
Instrument Settingssw_note_offsetFollows the same logic as SFZ 2.0’s note_offset but for key switches.integerN/AARIA
Instrument Settingssw_octave_offsetFollows the same logic as SFZ 2.0’s octave_offset but for key switches.integerN/AARIA
Instrument Settingsglobal_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Instrument Settingsmaster_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Instrument Settingsgroup_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Instrument Settingsregion_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Voice LifecyclegroupExclusive group number for this region.integer0-2147483648 to 2147483647SFZ v1
Voice Lifecyclepolyphony_groupgroup alias.N/AN/AARIA
Voice Lifecycleoff_byRegion off group.integer0-2147483648 to 2147483647SFZ v1
Voice Lifecycleoffbyoff_by alias.N/AN/A
Voice Lifecycleoff_modeRegion off mode.stringfastSFZ v1
Voice LifecycleoutputThe stereo output number for this region.integer00 to 1024SFZ v1
Voice LifecyclepolyphonyPolyphony voice limit.integerN/ASFZ v2
Voice Lifecyclenote_polyphonyPolyphony limit for playing the same note repeatedly.integerN/ASFZ v2
Voice Lifecyclepolyphony_stealingintegerN/AARIA
Voice Lifecyclenote_selfmaskControls note-stealing behavior for a single pitch, when using note_polyphony.stringonSFZ v2
Voice Lifecyclert_deadControls whether a release sample should play if its sustain sample has ended, or not.stringoffSFZ v2
Voice Lifecycleoff_curveWhen off_mode is set to time, this specifies the math to be used to fade out the regions being muted by voice-stealing.integer10-2 to 10ARIA
Voice Lifecycleoff_shapeThe coefficient used by off_curve.float-10.3616ARIA
Voice Lifecycleoff_timeWhen off_mode is set to time, this specifies the fadeout time for regions being muted by voice-stealing.float0.006ARIA
Key MappingkeyEquivalent to using lokey, hikey and pitch_keycenter and setting them all to the same note value.integerN/A0 to 127SFZ v1
Key MappinglokeyDetermine the low boundary of a certain region.integer00 to 127SFZ v1
Key MappinghikeyDetermine the high boundary of a certain region.integer1270 to 127SFZ v1
Key MappinglovelIf a note with velocity value equal to or higher than lovel AND equal to or lower than hivel is played, the region will play.integer11 to 127SFZ v1
Key MappinghivelIf a note with velocity value equal to or higher than lovel AND equal to or lower than hivel is played, the region will play.integer1271 to 127SFZ v1
MIDI ConditionslochanIf incoming notes have a MIDI channel between lochan and hichan, the region will play.integer11 to 16SFZ v1
MIDI ConditionshichanIf incoming notes have a MIDI channel between lochan and hichan, the region will play.integer161 to 16SFZ v1
MIDI ConditionsloccNDefines the range of the last MIDI controller N required for the region to play.integer00 to 127SFZ v1
MIDI ConditionshiccNDefines the range of the last MIDI controller N required for the region to play.integer1270 to 127SFZ v1
MIDI ConditionslobendDefines the range of the last Pitch Bend message required for the region to play.integer-8192-8192 to 8192SFZ v1
MIDI ConditionshibendDefines the range of the last Pitch Bend message required for the region to play.integer8192-8192 to 8192SFZ v1
MIDI Conditionssostenuto_ccReassigns the sostenuto pedal CC to a non-standard value.integer660 to 127ARIA
MIDI Conditionssostenuto_loSets the minimum point at which the sostenuto pedal (MIDI CC 66) is considered 'down'.float0.50 to 127ARIA
MIDI Conditionssostenuto_swTurns the sostenuto switch on or off.stringN/ASFZ v2
MIDI Conditionssustain_ccReassigns the sustain pedal CC to a non-standard value.integer640 to 127ARIA
MIDI Conditionssustain_loSets the minimum point at which the sustain pedal (MIDI CC 64) is considered 'down'.float0.50 to 127ARIA
MIDI Conditionssustain_swTurns the sustain switch on or off.stringN/ASFZ v2
MIDI Conditionssw_lokeyDefines the range of the keyboard to be used as trigger selectors for the sw_last opcode.integer00 to 127SFZ v1
MIDI Conditionssw_hikeyDefines the range of the keyboard to be used as trigger selectors for the sw_last opcode.integer1270 to 127SFZ v1
MIDI Conditionssw_lastEnables 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.integer00 to 127SFZ v1
MIDI Conditionssw_downEnables 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.integer00 to 127SFZ v1
MIDI Conditionssw_upEnables the region to play if the key equal to sw_up value is not depressed.integer00 to 127SFZ v1
MIDI Conditionssw_previousPrevious note value. The region will play if last note-on message was equal to sw_previous value.integerN/A0 to 127SFZ v1
MIDI Conditionssw_velAllows overriding the velocity for the region with the velocity of the previous note.stringcurrentSFZ v1
MIDI ConditionsloprogThe region plays when the MIDI program number is between loprog and hiprog.integer00 to 127SFZ v2
MIDI ConditionshiprogThe region plays when the MIDI program number is between loprog and hiprog.integer1270 to 127SFZ v2
MIDI ConditionslohdccNLike loccN but with floating point MIDI CCsfloat00 to 1ARIA
MIDI ConditionshihdccNLike hiccN but with floating point MIDI CCsfloat10 to 1ARIA
MIDI Conditionssw_defaultDefine keyswitch 'power on default' so that you hear something when a patch loads.integerN/A0 to 127SFZ v2
MIDI Conditionssw_labelLabel for activated keyswitch on GUI.stringN/AARIA
MIDI Conditionssw_lolastLike sw_last, but allowing a region to be triggered across a range of keyswitches.integerN/A0 to 127ARIA
MIDI Conditionssw_hilastLike sw_last, but allowing a region to be triggered across a range of keyswitches.integerN/A0 to 127ARIA
MIDI ConditionsvarNN_modSpecifies the method used to calculate variable number NN from MIDI CCs.stringN/AARIA
MIDI ConditionsvarNN_onccXSpecifies the method used to calculate variable number NN from MIDI CCs.floatN/A0 to 1
MIDI ConditionsvarNN_curveccXSpecifies the ‹curve› number which MIDI CC X uses to modulate varNN.integer00 to 255
MIDI ConditionsvarNN_Specifies the target for variable NN to modulate.N/AN/AARIA
Internal ConditionslobpmHost tempo value.float00 to 500SFZ v1
Internal ConditionshibpmHost tempo value.float5000 to 500SFZ v1
Internal ConditionslochanaftDefines the range of last Channel Aftertouch message required for the region to play.integer00 to 127SFZ v1
Internal ConditionshichanaftDefines the range of last Channel Aftertouch message required for the region to play.integer1270 to 127SFZ v1
Internal ConditionslopolyaftDefines the range of last Polyphonic Aftertouch message required for the region to play.integer00 to 127SFZ v1
Internal ConditionshipolyaftDefines the range of last Polyphonic Aftertouch message required for the region to play.integer1270 to 127SFZ v1
Internal ConditionslorandThe region will play if the random number is equal to or higher than lorand, and lower than hirand.float00 to 1SFZ v1
Internal ConditionshirandThe region will play if the random number is equal to or higher than lorand, and lower than hirand.float10 to 1SFZ v1
Internal Conditionsseq_lengthSequence length, used together with seq_position to use samples as round robins.integer11 to 100SFZ v1
Internal Conditionsseq_positionSequence position. The region will play if the internal sequence counter is equal to seq_position.integer11 to 100SFZ v1
Internal ConditionslotimerRegion plays if the time passed since the last sample in the same group played is between lotimer and hitimer.floatN/ASFZ v2
Internal ConditionshitimerRegion plays if timer is between lotimer and hitimer.floatN/ASFZ v2
TriggerstriggerSets the trigger which will be used for the sample to play.stringattackSFZ v1
Triggerson_loccNIf a MIDI control message with a value between on_loccN and on_hiccN is received, the region will play. Default value is -1, it means unassigned.integer-10 to 127SFZ v1
Triggersstart_loccNon_loccN alias.N/AN/ASFZ v2
Triggerson_hiccNIf a MIDI control message with a value between on_loccN and on_hiccN is received, the region will play. Default value is -1, it means unassigned.integer-10 to 127SFZ v1
Triggersstart_hiccNon_hiccN alias.N/AN/ASFZ v2
Triggerson_lohdccNLike on_loccN but with floating point MIDI CCs.float-10 to 1ARIA
Triggersstart_lohdccNon_lohdccN alias.N/AN/A
Triggerson_hihdccNLike on_hiccN but with floating point MIDI CCs.float-10 to 1ARIA
Triggersstart_hihdccNon_hihdccN alias.N/AN/A
Triggersstop_loccNIf a MIDI control message with a value between stop_loccN and stop_hiccN is received, the region will stop playing. Default value is -1, it means unassigned.integer-10 to 127SFZ v2
Triggersstop_hiccNIf a MIDI control message with a value between stop_loccN and stop_hiccN is received, the region will stop playing. Default value is -1, it means unassigned.integer-10 to 127SFZ v2
Triggersstop_lohdccNLike stop_loccN but with floating point MIDI CCs.float-10 to 1ARIA
Triggersstop_hihdccNLike stop_hiccN but with floating point MIDI CCs.float-10 to 1ARIA
AmplifierpanThe panoramic position for the region.float0-100 to 100SFZ v1
Amplifierpan_onccNN/AN/ASFZ v2
Amplifierpan_ccNpan_onccN alias.N/AN/AARIA
Amplifierpan_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate pan.integer00 to 255SFZ v2
Amplifierpan_smoothccNN/AN/ASFZ v2
Amplifierpan_stepccNN/AN/ASFZ v2
Amplifierpan_randomRandom panoramic position for the region.float0-100 to 100ARIA
AmplifierpositionOnly operational for stereo samples, position defines the position in the stereo field of a stereo signal, after channel mixing as defined in the width opcode.float0-100 to 100SFZ v1
Amplifierposition_onccNN/AN/AARIA
Amplifierposition_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate position.integer00 to 255ARIA
Amplifierposition_smoothccNN/AN/AARIA
Amplifierposition_stepccNN/AN/AARIA
Amplifierposition_randomfloat0-100 to 100ARIA
Amplifierposition_keycenterN/AN/AARIA
Amplifierposition_keytrackN/AN/AARIA
Amplifierposition_veltrackinteger0-200 to 200ARIA
AmplifiervolumeThe volume for the region, in decibels.float0-144 to 6SFZ v1
Amplifiergain_ccNGain applied on MIDI control N, in decibels.float0-144 to 48
Amplifiergain_onccNgain_ccN alias.N/AN/ASFZ v2
Amplifiervolume_onccNgain_ccN alias.N/AN/ASFZ v2
Amplifiervolume_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate volume.integer00 to 255SFZ v2
Amplifiervolume_smoothccNN/AN/ASFZ v2
Amplifiervolume_stepccNN/AN/ASFZ v2
AmplifierwidthOnly operational for stereo samples, width defines the amount of channel mixing applied to play the sample.float100-100 to 100SFZ v1
Amplifierwidth_onccNN/AN/ASFZ v2
Amplifierwidth_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate width.integer00 to 255SFZ v2
Amplifierwidth_smoothccNN/AN/ASFZ v2
Amplifierwidth_stepccNN/AN/ASFZ v2
Amplifieramp_keycenterCenter key for amplifier keyboard tracking. In this key, the amplifier keyboard tracking will have no effect.integer600 to 127SFZ v1
Amplifieramp_keytrackAmplifier keyboard tracking (change in amplitude per key) in decibels.float0-96 to 12SFZ v1
Amplifieramp_veltrackAmplifier velocity tracking, represents how much the amplitude changes with incoming note velocity.float100-100 to 100SFZ v1
Amplifieramp_veltrack_onccNN/AN/AARIA
Amplifieramp_veltrack_ccNamp_veltrack_onccN alias.N/AN/A
Amplifieramp_veltrack_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate amp_veltrack.integer00 to 255ARIA
Amplifieramp_veltrack_randomN/AN/AARIA
Amplifieramp_velcurve_NUser-defined amplifier velocity curve.floatStandard curve (see amp_veltrack)0 to 1SFZ v1
Amplifieramp_randomRandom volume for the region, in decibels.float00 to 24SFZ v1
Amplifiergain_randomamp_random alias.N/AN/ASFZ v2
Amplifierrt_decayApplies only to regions that triggered through trigger=release. The volume decrease (in decibels) per seconds after the corresponding attack region was triggered.float00 to 200SFZ v1
Amplifierrt_decayNApplies only to regions that triggered through trigger=release. The volume decrease (in decibels) per seconds after the corresponding attack region was triggered, for decrease curve segment number N.float00 to 200ARIA
Amplifierrt_decayN_timeThe duration of release sample volue decrease curve segment number N.floatN/AARIA
Amplifierxf_cccurveMIDI controllers crossfade curve for the region.stringpowerSFZ v1
Amplifierxf_keycurveKeyboard crossfade curve for the region.stringpowerSFZ v1
Amplifierxf_velcurveVelocity crossfade curve for the region.stringpowerSFZ v1
Amplifierxfin_loccNFade in control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfin_hiccNFade in control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfout_loccNFade out control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfout_hiccNFade out control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfin_lokeyFade in control based on MIDI note (keyboard position).integer00 to 127SFZ v1
Amplifierxfin_hikeyFade in control based on MIDI note (keyboard position).integer00 to 127SFZ v1
Amplifierxfout_lokeyFade out control based on MIDI note number (keyboard position).integer1270 to 127SFZ v1
Amplifierxfout_hikeyFade out control based on MIDI note number (keyboard position).integer1270 to 127SFZ v1
Amplifierxfin_lovelFade in control based on velocity.integer00 to 127SFZ v1
Amplifierxfin_hivelFade in control based on velocity.integer00 to 127SFZ v1
Amplifierxfout_lovelFade out control, based on velocity.integer1270 to 127SFZ v1
Amplifierxfout_hivelFade out control, based on velocity.integer1270 to 127SFZ v1
AmplifierphaseIf invert is set, the region is played with inverted phase.stringnormalSFZ v2
AmplifieramplitudeAmplitude for the specified region in percentage of full amplitude.float1000 to 100ARIA
Amplifieramplitude_onccNfloatN/A-100 to 100
Amplifieramplitude_ccNamplitude_onccN alias.N/AN/A
Amplifieramplitude_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate amplitude.integer00 to 255
Amplifieramplitude_smoothccNN/AN/A
Amplifierglobal_amplitudeARIA extension, like amplitude, but affecting everything when set under the ‹global› header.float1000 to 100ARIA
Amplifiermaster_amplitudeARIA extension, like amplitude, but affecting everything when set under the ‹master› header.float1000 to 100ARIA
Amplifiergroup_amplitudeARIA extension, like amplitude, but affecting everything when set under the ‹group› header.float1000 to 100ARIA
Amplifierpan_lawSets the pan law to be used.stringN/AARIA
Amplifierpan_keycenterCenter key for pan keyboard tracking.integer600 to 127SFZ v2
Amplifierpan_keytrackThe amount by which the panning of a note is shifted with each key.float0-100 to 100SFZ v2
Amplifierpan_veltrackThe effect of note velocity on panning.float0-100 to 100SFZ v2
Amplifierglobal_volumeARIA extension, like volume, but affecting everything when set under the ‹global› header.float0-144 to 6ARIA
Amplifiermaster_volumeARIA extension, like volume, but affecting everything when set under the ‹master› header.float0-144 to 6ARIA
Amplifiergroup_volumeARIA extension, like volume, but affecting everything when set under the ‹group› header.float0-144 to 6ARIA
EQeqN_bwBandwidth of the equalizer band, in octaves.float10.001 to 4SFZ v1
EQeqN_bwccXfloat0-4 to 4
EQeqN_bw_onccXeqN_bwccX alias.N/AN/ASFZ v2
EQeqN_freqFrequency of the equalizer band, in Hertz.floateq1_freq=50
eq2_freq=500
eq3_freq=5000
0 to 30000SFZ v1
EQeqN_freqccXfloat0-30000 to 30000
EQeqN_freq_onccXeqN_freqccX alias.N/AN/ASFZ v2
EQeqN_vel2freqFrequency change of the equalizer band with MIDI velocity, in Hertz.float0-30000 to 30000
EQeqN_gainGain of the equalizer band, in decibels.float0-96 to 24SFZ v1
EQeqN_gainccXfloat0-96 to 24
EQeqN_gain_onccXeqN_gainccX alias.N/AN/ASFZ v2
EQeqN_vel2gainGain change of the equalizer band with MIDI velocity, in decibels.float0-96 to 24
EQeqN_dynamicSpecifies when EQ is recalculated.integer00 to 1ARIA
EQeqN_typeSets the type of EQ filter.stringpeakSFZ v2
FiltercutoffSets the cutoff frequency (Hz) of the filters.floatfilter disabled0 to SampleRate / 2SFZ v1
Filtercutoff2cutoff alias.N/AN/ASFZ v2
Filtercutoff2_ccNN/AN/A
Filtercutoff2_onccNN/AN/A
Filtercutoff2_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate cutoff2.integer00 to 255
Filtercutoff2_smoothccNN/AN/A
Filtercutoff2_stepccNN/AN/A
Filtercutoff2_chanaftN/AN/A
Filtercutoff2_polyaftN/AN/A
Filtercutoff_ccNThe variation in the cutoff frequency when MIDI continuous controller N is received.integer0-9600 to 9600
Filtercutoff_onccNcutoff_ccN alias.N/AN/ASFZ v2
Filtercutoff_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate cutoff.integer00 to 255SFZ v2
Filtercutoff_smoothccNfloat00 to ?SFZ v2
Filtercutoff_stepccNinteger00 to ?SFZ v2
Filtercutoff_chanaftThe variation in the cutoff frequency when MIDI channel aftertouch messages are received, in cents.integer0-9600 to 9600
Filtercutoff_polyaftThe variation in the cutoff frequency when MIDI polyphonic aftertouch messages are received, in cents.integer0-9600 to 9600
Filterfil_gainGain for lsh, hsh and peq filter types.float0ARIA
Filterfil2_gainfil_gain alias.N/AN/A
Filterfil2_gain_onccNN/AN/A
Filterfil_gain_onccNN/AN/A
Filterfil_keycenterCenter key for filter keyboard tracking.integer600 to 127SFZ v1
Filterfil2_keycenterfil_keycenter alias.N/AN/ASFZ v2
Filterfil_keytrackFilter keyboard tracking (change on cutoff for each key) in cents.integer00 to 1200SFZ v1
Filterfil2_keytrackfil_keytrack alias.N/AN/ASFZ v2
Filterfil_randomRandom value added to the filter cutoff for the region, in cents.integer00 to 9600SFZ v1
Filtercutoff_randomfil_random alias.N/AN/ASFZ v2
Filtercutoff2_randomfil_random alias.N/AN/AARIA
Filterfil_typeFilter type.stringlpf_2pSFZ v1
Filterfiltypefil_type alias.N/AN/A
Filterfil2_typefil_type alias.N/AN/ASFZ v2
Filterfil_veltrackFilter velocity tracking, the amount by which the cutoff changes with incoming note velocity, in cents.integer0-9600 to 9600SFZ v1
Filterfil2_veltrackfil_veltrack alias.N/AN/ASFZ v2
FilterresonanceThe filter cutoff resonance value, in decibels.float00 to 40SFZ v1
Filterresonance2resonance alias.N/AN/ASFZ v2
Filterresonance2_onccNfloat0-40 to 40
Filterresonance2_ccNresonance2_onccN alias.N/AN/ASFZ v2
Filterresonance2_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate resonance2.integer00 to 255
Filterresonance2_smoothccNfloat00 to ?
Filterresonance2_stepccNinteger00 to ?
Filterresonance_onccNfloat0-40 to 40SFZ v2
Filterresonance_ccNresonance_onccN alias.N/AN/A
Filterresonance_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate resonance.integer00 to 255SFZ v2
Filterresonance_smoothccNfloat00 to ?SFZ v2
Filterresonance_stepccNinteger00 to ?SFZ v2
Filterresonance_randomFilter cutoff resonance random value, in decibels.float00 to 40ARIA
Filterresonance2_randomFilter#2 cutoff resonance random value, in decibels.float00 to 40ARIA
Filternoise_filterstringN/ASFZ v2
Filternoise_stereostringN/ASFZ v2
Filternoise_levelfloatN/A-96 to 24SFZ v2
Filternoise_level_onccNfloatN/A-96 to 24
Filternoise_level_smoothccNfloat00 to ?
Filternoise_stepintegerN/A0 to 100SFZ v2
Filternoise_step_onccNintegerN/A0 to 100
Filternoise_toneintegerN/A0 to 100SFZ v2
Filternoise_tone_onccNintegerN/A0 to 100
Pitchbend_upPitch bend range when Bend Wheel or Joystick is moved up, in cents.integer200-9600 to 9600SFZ v1
Pitchbendupbend_up alias.N/AN/A
Pitchbend_downPitch bend range when Bend Wheel or Joystick is moved down, in cents.integer-200-9600 to 9600SFZ v1
Pitchbenddownbend_down alias.N/AN/A
Pitchbend_smoothPitch bend smoothness. Adds “inertia” to pitch bends, so fast movements of the pitch bend wheel will have a delayed effect on the pitch change.float00 to ?SFZ v2
Pitchbend_stepPitch bend step, in cents.integer11 to 1200SFZ v1
Pitchbendstepbend_step alias.N/AN/A
PitchtuneThe fine tuning for the sample, in cents.integer0-100 to 100SFZ v1
Pitchpitchtune alias.N/AN/AARIA
Pitchpitch_onccNN/AN/A-9600 to 9600SFZ v2
Pitchtune_ccNpitch_onccN alias.N/AN/AARIA
Pitchtune_onccNpitch_onccN alias.N/AN/AARIA
Pitchpitch_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate pitch.integer00 to 255SFZ v2
Pitchtune_curveccNpitch_curveccN alias.N/AN/AARIA
Pitchpitch_smoothccNfloat00 to ?SFZ v2
Pitchtune_smoothccNpitch_smoothccN alias.N/AN/AARIA
Pitchpitch_stepccNN/A00 to ?SFZ v2
Pitchtune_stepccNpitch_stepccN alias.N/AN/AARIA
Pitchgroup_tuneARIA extension, like tune, but affecting everything when set under the ‹group› header.integer0-9600 to 9600ARIA
Pitchmaster_tuneARIA extension, like tune, but affecting everything when set under the ‹master› header.integer0-9600 to 9600ARIA
Pitchglobal_tuneARIA extension, like tune, but affecting everything when set under the ‹global› header.integer0-9600 to 9600ARIA
Pitchpitch_keycenterRoot key for the sample.integer600 to 127SFZ v1
Pitchpitch_keytrackWithin the region, this value defines how much the pitch changes with every note.integer100-1200 to 1200SFZ v1
Pitchtune_keytrackpitch_keytrack alias.N/AN/AARIA
Pitchpitch_randomRandom tuning for the region, in cents.integer00 to 9600SFZ v1
Pitchtune_randompitch_random alias.N/AN/AARIA
Pitchpitch_veltrackPitch velocity tracking, represents how much the pitch changes with incoming note velocity, in cents.integer0-9600 to 9600SFZ v1
Pitchtune_veltrackpitch_veltrack alias.N/AN/AARIA
PitchtransposeThe transposition value for this region which will be applied to the sample.integer0-127 to 127SFZ v1
Pitchbend_stepupPitch bend step, in cents, applied to upwards bends only.integer11 to 1200SFZ v2
Pitchbend_stepdownPitch bend step, in cents, for downward pitch bends.integer11 to 1200SFZ v2
Envelope Generatorsampeg_attackEG attack time.float00 to 100SFZ v1
Envelope Generatorsamp_attackampeg_attack alias.N/AN/ASFZ v2
Envelope Generatorsampeg_attackccNfloat0-100 to 100
Envelope Generatorsampeg_attack_onccNampeg_attackccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_attack_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_vel2attackVelocity effect on EG attack time.float0-100 to 100
Envelope Generatorsamp_vel2attackampeg_vel2attack alias.N/AN/ASFZ v2
Envelope Generatorsampeg_decayEG decay time.float00 to 100SFZ v1
Envelope Generatorsamp_decayampeg_decay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_decayccNfloat0-100 to 100
Envelope Generatorsampeg_decay_onccNampeg_decayccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_decay_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate ampeg_decay.integer00 to 255ARIA
Envelope Generatorsampeg_vel2decayVelocity effect on EG decay time.float0-100 to 100
Envelope Generatorsamp_vel2decayampeg_vel2decay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_delayEG delay time.float00 to 100SFZ v1
Envelope Generatorsamp_delayampeg_delay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_delayccNfloat0-100 to 100
Envelope Generatorsampeg_delay_onccNampeg_delayccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_delay_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_vel2delayVelocity effect on EG delay time.float0-100 to 100
Envelope Generatorsamp_vel2delayampeg_vel2delay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_holdEG hold time.float00 to 100SFZ v1
Envelope Generatorsamp_holdampeg_hold alias.N/AN/ASFZ v2
Envelope Generatorsampeg_holdccNfloat0-100 to 100
Envelope Generatorsampeg_hold_onccNampeg_holdccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_hold_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate ampeg_hold.integer00 to 255ARIA
Envelope Generatorsampeg_vel2holdVelocity effect on EG hold time.float0-100 to 100
Envelope Generatorsamp_vel2holdampeg_vel2hold alias.N/AN/ASFZ v2
Envelope Generatorsampeg_releaseEG release time (after note release).float0.0010 to 100SFZ v1
Envelope Generatorsamp_releaseampeg_release alias.N/AN/ASFZ v2
Envelope Generatorsampeg_releaseccNfloat0-100 to 100
Envelope Generatorsampeg_release_onccNampeg_releaseccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_release_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_vel2releaseVelocity effect on EG release time.float0-100 to 100
Envelope Generatorsamp_vel2releaseampeg_vel2release alias.N/AN/ASFZ v2
Envelope Generatorsampeg_sustainEG sustain level, in percentage.float1000 to 100SFZ v1
Envelope Generatorsamp_sustainampeg_sustain alias.N/AN/ASFZ v2
Envelope Generatorsampeg_sustainccNfloat0-100 to 100
Envelope Generatorsampeg_sustain_onccNampeg_sustainccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_sustain_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate ampeg_sustain.integer00 to 255ARIA
Envelope Generatorsampeg_vel2sustainVelocity effect on EG sustain level, in percentage.float0-100 to 100
Envelope Generatorsamp_vel2sustainampeg_vel2sustain alias.N/AN/ASFZ v2
Envelope Generatorsampeg_startEnvelope start level, in percentage.float00 to 100SFZ v1
Envelope Generatorsampeg_startccNfloat0-100 to 100
Envelope Generatorsampeg_start_onccNampeg_startccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_start_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_attack_shapeSpecifies the curvature of attack stage of the envelope.float0ARIA
Envelope Generatorsampeg_decay_shapeSpecifies the curvature of decay stage of the envelope.float-10.3616ARIA
Envelope Generatorsampeg_decay_zeroSpecifies how decay time is calculated.integer10 to 1ARIA
Envelope Generatorsampeg_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope Generatorsampeg_release_shapeSpecifies the curvature of release stage of the envelope.float-10.3616ARIA
Envelope Generatorsampeg_release_zeroSpecifies how release time is calculated.integer00 to 1ARIA
Envelope Generatorsfileg_attack_shapeSpecifies the curvature of attack stage of the envelope.float0ARIA
Envelope Generatorsfileg_decay_shapeSpecifies the curvature of decay stage of the envelope.float0ARIA
Envelope Generatorsfileg_decay_zeroSpecifies how decay time is calculated.integer10 to 1ARIA
Envelope Generatorsfileg_release_shapeSpecifies the curvature of release stage of the envelope.float0ARIA
Envelope Generatorsfileg_release_zeroSpecifies how release time is calculated.integer00 to 1ARIA
Envelope Generatorsfileg_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope Generatorspitcheg_attack_shapeSpecifies the curvature of attack stage of the envelope.float0ARIA
Envelope Generatorspitcheg_decay_shapeSpecifies the curvature of decay stage of the envelope.float0ARIA
Envelope Generatorspitcheg_decay_zeroSpecifies how decay time is calculated.integer10 to 1ARIA
Envelope Generatorspitcheg_release_shapeSpecifies the curvature of release stage of the envelope.float0ARIA
Envelope Generatorspitcheg_release_zeroSpecifies how release time is calculated.integer00 to 1ARIA
Envelope Generatorspitcheg_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope Generatorsfileg_attackEG attack time.float00 to 100SFZ v1
Envelope Generatorsfil_attackfileg_attack alias.N/AN/ASFZ v2
Envelope Generatorsfileg_attack_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_attackccNfileg_attack_onccN alias.N/AN/A
Envelope Generatorsfileg_attack_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2attackVelocity effect on EG attack time.float0-100 to 100
Envelope Generatorsfil_vel2attackfileg_vel2attack alias.N/AN/ASFZ v2
Envelope Generatorsfileg_decayEG decay time.float00 to 100SFZ v1
Envelope Generatorsfil_decayfileg_decay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_decay_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_decayccNfileg_decay_onccN alias.N/AN/A
Envelope Generatorsfileg_decay_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2decayVelocity effect on filter EG decay time.float0-100 to 100
Envelope Generatorsfil_vel2decayfileg_vel2decay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_delayEG delay time.float00 to 100SFZ v1
Envelope Generatorsfil_delayfileg_delay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_delay_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_delayccNfileg_delay_onccN alias.N/AN/A
Envelope Generatorsfileg_delay_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2delayVelocity effect on filter EG delay time.float0-100 to 100
Envelope Generatorsfil_vel2delayfileg_vel2delay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_depthEnvelope depth.integer0-12000 to 12000SFZ v1
Envelope Generatorsfil_depthfileg_depth alias.N/AN/ASFZ v2
Envelope Generatorsfileg_depth_onccNinteger0-12000 to 12000ARIA
Envelope Generatorsfileg_depthccNfileg_depth_onccN alias.N/AN/A
Envelope Generatorsfileg_depth_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2depthVelocity effect on EG depth, in cents for pitch or filter cutoff.integer0-12000 to 12000
Envelope Generatorsfil_vel2depthfileg_vel2depth alias.N/AN/ASFZ v2
Envelope Generatorsfileg_holdEG hold time.float00 to 100SFZ v1
Envelope Generatorsfil_holdfileg_hold alias.N/AN/ASFZ v2
Envelope Generatorsfileg_hold_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_holdccNfileg_hold_onccN alias.N/AN/A
Envelope Generatorsfileg_hold_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2holdVelocity effect on EG hold time.float0-100 to 100
Envelope Generatorsfil_vel2holdfileg_vel2hold alias.N/AN/ASFZ v2
Envelope Generatorsfileg_releaseEG release time (after note release).float00 to 100SFZ v1
Envelope Generatorsfil_releasefileg_release alias.N/AN/ASFZ v2
Envelope Generatorsfileg_release_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_releaseccNfileg_release_onccN alias.N/AN/A
Envelope Generatorsfileg_release_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2releaseVelocity effect on EG release time.float0-100 to 100
Envelope Generatorsfil_vel2releasefileg_vel2release alias.N/AN/ASFZ v2
Envelope Generatorsfileg_startEnvelope start level, in percentage.float00 to 100SFZ v1
Envelope Generatorsfileg_start_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_startccNfileg_start_onccN alias.N/AN/A
Envelope Generatorsfileg_start_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_sustainEG sustain level, in percentage.float00 to 100SFZ v1
Envelope Generatorsfil_sustainfileg_sustain alias.N/AN/ASFZ v2
Envelope Generatorsfileg_sustain_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_sustainccNfileg_sustain_onccN alias.N/AN/A
Envelope Generatorsfileg_sustain_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2sustainVelocity effect on EG sustain level, in percentage.float0-100 to 100
Envelope Generatorsfil_vel2sustainfileg_vel2sustain alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_attackEG attack time.float00 to 100SFZ v1
Envelope Generatorspitch_attackpitcheg_attack alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_attack_onccNN/AN/AARIA
Envelope Generatorspitcheg_attack_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2attackVelocity effect on EG attack time.float0-100 to 100
Envelope Generatorspitch_vel2attackpitcheg_vel2attack alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_decayEG decay time.float00 to 100SFZ v1
Envelope Generatorspitch_decaypitcheg_decay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_decay_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_decay_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2decayVelocity effect on EG decay time.float0-100 to 100
Envelope Generatorspitch_vel2decaypitcheg_vel2decay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_delayEG delay time.float00 to 100SFZ v1
Envelope Generatorspitch_delaypitcheg_delay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_delay_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_delay_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2delayVelocity effect on EG delay time.float0-100 to 100
Envelope Generatorspitch_vel2delaypitcheg_vel2delay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_depthEnvelope depth.integer0-12000 to 12000SFZ v1
Envelope Generatorspitch_depthpitcheg_depth alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_depth_onccNinteger0-12000 to 12000ARIA
Envelope Generatorspitcheg_depthccNpitcheg_depth_onccN alias.N/AN/A
Envelope Generatorspitcheg_depth_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2depthVelocity effect on EG depth, in cents for pitch or filter cutoff.integer0-12000 to 12000
Envelope Generatorspitch_vel2depthpitcheg_vel2depth alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_holdEG hold time.float00 to 100SFZ v1
Envelope Generatorspitch_holdpitcheg_hold alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_hold_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_hold_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2holdVelocity effect on EG hold time.float0-100 to 100
Envelope Generatorspitch_vel2holdpitcheg_vel2hold alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_releaseEG release time (after note release).float00 to 100SFZ v1
Envelope Generatorspitch_releasepitcheg_release alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_release_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_release_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2releaseVelocity effect on EG release time.float0-100 to 100
Envelope Generatorspitch_vel2releasepitcheg_vel2release alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_startEnvelope start level, in percentage.float00 to 100SFZ v1
Envelope Generatorspitcheg_start_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_start_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_sustainEG sustain level, in percentage.float00 to 100SFZ v1
Envelope Generatorspitch_sustainpitcheg_sustain alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_sustain_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_sustain_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2sustainVelocity effect on EG sustain level, in percentage.float0-100 to 100
Envelope Generatorspitch_vel2sustainpitcheg_vel2sustain alias.N/AN/ASFZ v2
Envelope GeneratorsegN_pointsN/AN/ASFZ v2
Envelope GeneratorsegN_timeXfloatN/ASFZ v2
Envelope GeneratorsegN_timeX_onccYfloatN/A
Envelope GeneratorsegN_levelXSets the envelope level at a specific point in envelope number N.float0-1 to 1SFZ v2
Envelope GeneratorsegN_levelX_onccYfloat0-1 to 1
Envelope GeneratorsegN_ampegN/AN/AARIA
Envelope GeneratorsegN_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope GeneratorsegN_shapeXfloat0SFZ v2
Envelope GeneratorsegN_curveXInstructs the player to use a curve shape defined under a curve header for the specified envelope segment.N/AN/ASFZ v2
Envelope GeneratorsegN_sustainN/AN/ASFZ v2
Envelope GeneratorsegN_loopN/AN/ASFZ v2
Envelope GeneratorsegN_loop_countN/AN/ASFZ v2
Envelope GeneratorsegN_volumeN/AN/ASFZ v2
Envelope GeneratorsegN_volume_onccXN/AN/A
Envelope GeneratorsegN_amplitudeN/AN/ASFZ v2
Envelope GeneratorsegN_amplitude_onccXN/AN/A
Envelope GeneratorsegN_panN/AN/ASFZ v2
Envelope GeneratorsegN_pan_onccXN/AN/A
Envelope GeneratorsegN_widthN/AN/ASFZ v2
Envelope GeneratorsegN_width_onccXN/AN/A
Envelope GeneratorsegN_pan_curveN/AN/ASFZ v2
Envelope GeneratorsegN_pan_curveccXSpecifies the ‹curve› number which MIDI CC X uses to modulate egN_pan.integer00 to 255
Envelope GeneratorsegN_freq_lfoXAllows egN to shape a change to lfoX's frequencyfloat0SFZ v2
Envelope GeneratorsegN_depth_lfoXAllows egN to scale lfoX's effect on its targetsfloat100SFZ v2
Envelope GeneratorsegN_depthadd_lfoXN/AN/ASFZ v2
Envelope GeneratorsegN_pitchN/AN/ASFZ v2
Envelope GeneratorsegN_pitch_onccXN/AN/A
Envelope GeneratorsegN_cutoffN/AN/ASFZ v2
Envelope GeneratorsegN_cutoff_onccXN/AN/A
Envelope GeneratorsegN_cutoff2N/AN/ASFZ v2
Envelope GeneratorsegN_cutoff2_onccXN/AN/A
Envelope GeneratorsegN_resonanceN/AN/ASFZ v2
Envelope GeneratorsegN_resonance_onccXN/AN/A
Envelope GeneratorsegN_resonance2N/AN/ASFZ v2
Envelope GeneratorsegN_resonance2_onccXN/AN/A
Envelope GeneratorsegN_eqXfreqN/AN/ASFZ v2
Envelope GeneratorsegN_eqXfreq_onccYN/AN/A
Envelope GeneratorsegN_eqXbwN/AN/ASFZ v2
Envelope GeneratorsegN_eqXbw_onccYN/AN/A
Envelope GeneratorsegN_eqXgainN/AN/ASFZ v2
Envelope GeneratorsegN_eqXgain_onccYN/AN/A
Envelope GeneratorsegN_decimN/AN/ASFZ v2
Envelope GeneratorsegN_decim_onccXN/AN/A
Envelope GeneratorsegN_bitredN/AN/ASFZ v2
Envelope GeneratorsegN_bitred_onccXN/AN/A
Envelope GeneratorsegN_rectifyN/AN/ASFZ v2
Envelope GeneratorsegN_rectify_onccXN/AN/A
Envelope GeneratorsegN_ringmodN/AN/ASFZ v2
Envelope GeneratorsegN_ringmod_onccXN/AN/A
Envelope GeneratorsegN_noiselevelN/AN/ASFZ v2
Envelope GeneratorsegN_noiselevel_onccXN/AN/A
Envelope GeneratorsegN_noisestepN/AN/ASFZ v2
Envelope GeneratorsegN_noisestep_onccXN/AN/A
Envelope GeneratorsegN_noisetoneN/AN/ASFZ v2
Envelope GeneratorsegN_noisetone_onccXN/AN/A
Envelope GeneratorsegN_driveshapeN/AN/ASFZ v2
Envelope GeneratorsegN_driveshape_onccXN/AN/A
LFOamplfo_delayThe time before the LFO starts oscillating.float00 to 100SFZ v1
LFOamplfo_depthLFO depth.float0-10 to 10SFZ v1
LFOamplfo_depthccNfloat0-10 to 10
LFOamplfo_depth_onccNamplfo_depthccN alias.N/AN/ASFZ v2
LFOamplfo_depthchanaftLFO depth when channel aftertouch MIDI messages are received.float0-10 to 10
LFOamplfo_depthpolyaftLFO depth when polyphonic aftertouch MIDI messages are received.float0-10 to 10
LFOamplfo_fadeLFO fade-in effect time.float00 to 100SFZ v1
LFOamplfo_freqLFO frequency, in hertz.float00 to 20SFZ v1
LFOamplfo_freqccNfloat0-200 to 200
LFOamplfo_freqchanaftLFO frequency change when channel aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOamplfo_freqpolyaftLFO frequency change when polyphonic aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOfillfo_delayThe time before the LFO starts oscillating.float00 to 100SFZ v1
LFOfillfo_depthLFO depth.float0-1200 to 1200SFZ v1
LFOfillfo_depthccNfloat0-1200 to 1200
LFOfillfo_depth_onccNfillfo_depthccN alias.N/AN/ASFZ v2
LFOfillfo_depthchanaftLFO depth when channel aftertouch MIDI messages are received.float0-1200 to 1200
LFOfillfo_depthpolyaftLFO depth when polyphonic aftertouch MIDI messages are received.float0-1200 to 1200
LFOfillfo_fadeLFO fade-in effect time.float00 to 100SFZ v1
LFOfillfo_freqLFO frequency, in hertz.float00 to 20SFZ v1
LFOfillfo_freqccNfloat0-200 to 200
LFOfillfo_freqchanaftLFO frequency change when channel aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOfillfo_freqpolyaftLFO frequency change when polyphonic aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOpitchlfo_delayThe time before the LFO starts oscillating.float00 to 100SFZ v1
LFOpitchlfo_depthLFO depth.float0-1200 to 1200SFZ v1
LFOpitchlfo_depthccNfloat0-1200 to 1200
LFOpitchlfo_depth_onccNpitchlfo_depthccN alias.N/AN/ASFZ v2
LFOpitchlfo_depthchanaftLFO depth when channel aftertouch MIDI messages are received.float0-1200 to 1200
LFOpitchlfo_depthpolyaftLFO depth when polyphonic aftertouch MIDI messages are received.float0-1200 to 1200
LFOpitchlfo_fadeLFO fade-in effect time.float00 to 100SFZ v1
LFOpitchlfo_freqLFO frequency, in hertz.float00 to 20SFZ v1
LFOpitchlfo_freqccNfloat0-200 to 200
LFOpitchlfo_freqchanaftLFO frequency change when channel aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOpitchlfo_freqpolyaftLFO frequency change when polyphonic aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOlfoN_freqThe base frequency of LFO number N, in Hertz.floatN/ASFZ v2
LFOlfoN_freq_onccXN/AN/A
LFOlfoN_freq_smoothccXN/AN/A
LFOlfoN_freq_stepccXN/AN/A
LFOlfoN_delayOnset delay for LFO number N.float0SFZ v2
LFOlfoN_delay_onccXN/AN/A
LFOlfoN_fadeFade-in time for LFO number N.floatN/ASFZ v2
LFOlfoN_fade_onccXfloatN/A
LFOlfoN_phaseInitial phase shift for LFO number N.float00 to 1SFZ v2
LFOlfoN_phase_onccXN/AN/A
LFOlfoN_countNumber of LFO repetitions for LFO N before the LFO stops.integerN/ASFZ v2
LFOlfoN_waveLFO waveform selection.integer1SFZ v2
LFOlfoN_waveXlfoN_wave alias.N/AN/AARIA
LFOlfoN_wave_onccXN/AN/AARIA
LFOlfoN_stepsNumber of steps in LFO step sequencer.integerN/ASFZ v2
LFOlfoN_stepXLevel of the step number X in LFO step sequencer.floatN/A-100 to 100SFZ v2
LFOlfoN_stepX_onccYN/AN/A
LFOlfoN_smoothN/AN/ASFZ v2
LFOlfoN_smooth_onccXN/AN/A
LFOlfoN_volumeN/AN/ASFZ v2
LFOlfoN_volume_onccXN/AN/A
LFOlfoN_volume_smoothccXN/AN/A
LFOlfoN_volume_stepccXN/AN/A
LFOlfoN_amplitudeN/AN/ASFZ v2
LFOlfoN_amplitude_onccXN/AN/A
LFOlfoN_amplitude_smoothccXN/AN/A
LFOlfoN_amplitude_stepccXN/AN/A
LFOlfoN_panN/AN/ASFZ v2
LFOlfoN_pan_onccXN/AN/A
LFOlfoN_pan_smoothccXN/AN/A
LFOlfoN_pan_stepccXN/AN/A
LFOlfoN_widthN/AN/ASFZ v2
LFOlfoN_width_onccXN/AN/A
LFOlfoN_width_smoothccXN/AN/A
LFOlfoN_width_stepccXN/AN/A
LFOlfoN_freq_lfoXN/AN/ASFZ v2
LFOlfoN_freq_lfoX_onccYN/AN/AARIA
LFOlfoN_depth_lfoXN/AN/ASFZ v2
LFOlfoN_depthadd_lfoXN/AN/ASFZ v2
LFOlfoN_pitchN/AN/ASFZ v2
LFOlfoN_pitch_curveccXSpecifies the ‹curve› number which MIDI CC X uses to modulate lfoN_pitch.integer00 to 255
LFOlfoN_pitch_onccXN/AN/A
LFOlfoN_pitch_smoothccXN/AN/A
LFOlfoN_pitch_stepccXN/AN/A
LFOlfoN_cutoffN/AN/ASFZ v2
LFOlfoN_cutoff2lfoN_cutoff alias.N/AN/ASFZ v2
LFOlfoN_cutoff2_onccXN/AN/A
LFOlfoN_cutoff2_smoothccXN/AN/A
LFOlfoN_cutoff2_stepccXN/AN/A
LFOlfoN_cutoff_onccXN/AN/A
LFOlfoN_cutoff_smoothccXN/AN/A
LFOlfoN_cutoff_stepccXN/AN/A
LFOlfoN_resonanceN/AN/ASFZ v2
LFOlfoN_resonance2lfoN_resonance alias.N/AN/ASFZ v2
LFOlfoN_resonance2_onccXN/AN/A
LFOlfoN_resonance2_smoothccXN/AN/A
LFOlfoN_resonance2_stepccXN/AN/A
LFOlfoN_resonance_onccXN/AN/A
LFOlfoN_resonance_smoothccXN/AN/A
LFOlfoN_resonance_stepccXN/AN/A
LFOlfoN_eqXfreqN/AN/ASFZ v2
LFOlfoN_eqXfreq_onccYN/AN/A
LFOlfoN_eqXfreq_smoothccYN/AN/A
LFOlfoN_eqXfreq_stepccYN/AN/A
LFOlfoN_eqXbwN/AN/ASFZ v2
LFOlfoN_eqXbw_onccYN/AN/A
LFOlfoN_eqXbw_smoothccYN/AN/A
LFOlfoN_eqXbw_stepccYN/AN/A
LFOlfoN_eqXgainN/AN/ASFZ v2
LFOlfoN_eqXgain_onccYN/AN/A
LFOlfoN_eqXgain_smoothccYN/AN/A
LFOlfoN_eqXgain_stepccYN/AN/A
LFOlfoN_decimN/AN/ASFZ v2
LFOlfoN_decim_onccXN/AN/A
LFOlfoN_decim_smoothccXN/AN/A
LFOlfoN_decim_stepccXN/AN/A
LFOlfoN_bitredN/AN/ASFZ v2
LFOlfoN_bitred_onccXN/AN/A
LFOlfoN_bitred_smoothccXN/AN/A
LFOlfoN_bitred_stepccXN/AN/A
LFOlfoN_noiselevelN/AN/ASFZ v2
LFOlfoN_noiselevel_onccXN/AN/A
LFOlfoN_noiselevel_smoothccXN/AN/A
LFOlfoN_noiselevel_stepccXN/AN/A
LFOlfoN_noisestepN/AN/ASFZ v2
LFOlfoN_noisestep_onccXN/AN/A
LFOlfoN_noisestep_smoothccXN/AN/A
LFOlfoN_noisestep_stepccXN/AN/A
LFOlfoN_noisetoneN/AN/ASFZ v2
LFOlfoN_noisetone_onccXN/AN/A
LFOlfoN_noisetone_smoothccXN/AN/A
LFOlfoN_noisetone_stepccXN/AN/A
LFOlfoN_driveN/AN/ASFZ v2
LFOlfoN_drive_onccXN/AN/A
LFOlfoN_drive_smoothccXN/AN/A
LFOlfoN_drive_stepccXN/AN/A
LFOlfoN_offsetDC offset - Add to LFO output; not affected by scale.floatN/AARIA
LFOlfoN_offsetXlfoN_offset alias.N/AN/A
LFOlfoN_ratioSets the ratio between the specified sub waveform and the main waveform.floatN/AARIA
LFOlfoN_ratioXlfoN_ratio alias.N/AN/A
LFOlfoN_scaleSets the scaling between the specified sub waveform and the main waveform.floatN/AARIA
LFOlfoN_scaleXlfoN_scale alias.N/AN/A
LFOlfoN_sample_dyn_paramXN/AN/AARIA
LFOlfoN_sample_dyn_paramX_onccYN/AN/A
Curvescurve_indexCurve definition ID.integerN/A0 to 255ARIA
CurvesvNNNDefines a point in a custom curve definition.floatN/A-1 to 1SFZ v2
Effectsapan_depthN/A0 to 100SFZ v2
Effectsapan_depth_onccNN/AN/A
Effectsapan_dryN/A0 to 100SFZ v2
Effectsapan_dry_onccNN/AN/A
Effectsapan_freqfloatN/ASFZ v2
Effectsapan_freq_onccNN/AN/A
Effectsapan_phasefloatN/A0 to 180SFZ v2
Effectsapan_phase_onccNN/AN/A
Effectsapan_waveformLFO wave number.N/AN/ASFZ v2
Effectsapan_wetN/A0 to 100SFZ v2
Effectsapan_wet_onccNN/AN/A
EffectsbitredBit reduction.N/A0 to 100SFZ v2
Effectsbitred_onccNN/AN/A
Effectsbitred_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate bitred.integer00 to 255
Effectsbitred_smoothccNN/AN/A
Effectsbitred_stepccNN/AN/A
EffectsbusThe target bus for the effect.stringmainSFZ v2
Effectsbypass_onccNSets up a bypass controller for the effect.floatN/ASFZ v2
Effectscomp_attackfloatN/ASFZ v2
Effectscomp_gainN/AN/ASFZ v2
Effectscomp_ratioN/A0 to 100SFZ v2
Effectscomp_releasefloatN/ASFZ v2
Effectscomp_stlinkstringN/ASFZ v2
Effectscomp_thresholdfloatN/ASFZ v2
EffectsdecimDecimator.N/A0 to 100SFZ v2
Effectsdecim_onccNN/AN/A
Effectsdecim_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate decim.integer00 to 255
Effectsdecim_smoothccNN/AN/A
Effectsdecim_stepccNN/AN/A
Effectsdelay_cutofffloatN/ASFZ v2
Effectsdelay_cutoff_onccNN/AN/A
Effectsdelay_damphiN/A0 to 100SFZ v2
Effectsdelay_damphi_onccNN/AN/A
Effectsdelay_damploN/A0 to 100SFZ v2
Effectsdelay_damplo_onccNN/AN/A
Effectsdelay_dryN/A0 to 100SFZ v2
Effectsdelay_dry_onccNN/AN/A
Effectsdelay_feedbackN/A0 to 100SFZ v2
Effectsdelay_feedback_onccNN/AN/A
Effectsdelay_filterName of filter type.stringN/ASFZ v2
Effectsdelay_inputN/A0 to 100SFZ v2
Effectsdelay_input_onccNN/AN/A
Effectsdelay_levelcN/A0 to 100SFZ v2
Effectsdelay_levellN/A0 to 100SFZ v2
Effectsdelay_levelrN/A0 to 100SFZ v2
Effectsdelay_lfofreqfloatN/ASFZ v2
Effectsdelay_lfofreq_onccNN/AN/A
Effectsdelay_moddepthN/A0 to 100SFZ v2
Effectsdelay_moddepth_onccNN/AN/A
Effectsdelay_modestringN/ASFZ v2
Effectsdelay_pancN/A0 to 100SFZ v2
Effectsdelay_panc_onccNN/AN/A
Effectsdelay_panlN/A0 to 100SFZ v2
Effectsdelay_panl_onccNN/AN/A
Effectsdelay_panrN/A0 to 100SFZ v2
Effectsdelay_panr_onccNN/AN/A
Effectsdelay_resonanceN/AN/ASFZ v2
Effectsdelay_resonance_onccNN/AN/A
Effectsdelay_spreadN/A0 to 100SFZ v2
Effectsdelay_spread_onccNN/AN/A
Effectsdelay_syncc_onccNN/AN/ASFZ v2
Effectsdelay_syncl_onccNN/AN/ASFZ v2
Effectsdelay_syncr_onccNN/AN/ASFZ v2
Effectsdelay_time_tapN/AN/ASFZ v2
Effectsdelay_timecN/AN/ASFZ v2
Effectsdelay_timec_onccNN/AN/A
Effectsdelay_timelN/AN/ASFZ v2
Effectsdelay_timel_onccNN/AN/A
Effectsdelay_timerN/AN/ASFZ v2
Effectsdelay_timer_onccNN/AN/A
Effectsdelay_wetN/A0 to 100SFZ v2
Effectsdelay_wet_onccNN/AN/A
EffectsdirecttomainGain of the main bus into the output.float1000 to 100SFZ v2
Effectsdisto_depthN/A0 to 100SFZ v2
Effectsdisto_depth_onccNN/AN/A
Effectsdisto_dryN/A0 to 100SFZ v2
Effectsdisto_dry_onccNN/AN/A
Effectsdisto_stagesN/AN/ASFZ v2
Effectsdisto_toneN/A0 to 100SFZ v2
Effectsdisto_tone_onccNN/AN/A
Effectsdisto_wetN/A0 to 100SFZ v2
Effectsdisto_wet_onccNN/AN/A
Effectsdsp_orderSignal flow type in Rapture's DSP block.integerN/A0 to 14SFZ v2
Effectseffect1Level of effect1 send, in percentage (reverb in Cakewalk sfz).float00 to 100SFZ v1
Effectseffect2Level of effect2 send, in percentage (chorus in Cakewalk sfz).float00 to 100SFZ v1
Effectseffect3Gain of the region's send into the 3rd effect bus.float00 to 100SFZ v2
Effectseffect4Gain of the region's send into the 4th effect bus.float00 to 100SFZ v2
Effectseq_bwN/AN/ASFZ v2
Effectseq_bw_onccNN/AN/A
Effectseq_freqN/AN/ASFZ v2
Effectseq_freq_onccNN/AN/A
Effectseq_gainN/AN/ASFZ v2
Effectseq_gain_onccNN/AN/A
Effectseq_typeN/AN/ASFZ v2
Effectsfilter_cutoffN/AN/ASFZ v2
Effectsfilter_cutoff_onccNN/AN/A
Effectsfilter_resonanceN/AN/ASFZ v2
Effectsfilter_resonance_onccNN/AN/A
Effectsfilter_typeName of filter type.stringN/ASFZ v2
EffectsfxNtomainGain of the Nth effect bus into the output.float00 to 100SFZ v2
EffectsfxNtomixGain of the Nth effect bus into the Mix node.float00 to 100SFZ v2
Effectsgate_onccNGate manual control.N/AN/ASFZ v2
Effectsgate_attackN/AN/ASFZ v2
Effectsgate_releaseN/AN/ASFZ v2
Effectsgate_stlinkstringN/ASFZ v2
Effectsgate_thresholdN/AN/ASFZ v2
EffectsinternalCakewalk internal features switch.stringoffSFZ v2
Effectsparam_offsetAdds a number to the parameter numbers of built-in or vendor-specific effects.integerN/AARIA
Effectsphaser_depthN/A0 to 100SFZ v2
Effectsphaser_depth_onccNN/AN/A
Effectsphaser_feedbackN/A0 to 100SFZ v2
Effectsphaser_feedback_onccNN/AN/A
Effectsphaser_freqfloatN/ASFZ v2
Effectsphaser_freq_onccNN/AN/A
Effectsphaser_phase_onccNN/A0 to 100SFZ v2
Effectsphaser_stagesN/AN/ASFZ v2
Effectsphaser_waveformLFO wave number.N/AN/ASFZ v2
Effectsphaser_wetN/A0 to 100SFZ v2
Effectsphaser_wet_onccNN/AN/A
Effectsreverb_dampN/A0 to 100SFZ v2
Effectsreverb_damp_onccNN/AN/A
Effectsreverb_dryN/A0 to 100SFZ v2
Effectsreverb_dry_onccNN/AN/A
Effectsreverb_inputN/A0 to 100SFZ v2
Effectsreverb_input_onccNN/AN/A
Effectsreverb_predelayfloatN/ASFZ v2
Effectsreverb_predelay_onccNN/AN/A
Effectsreverb_sizeN/A0 to 100SFZ v2
Effectsreverb_size_onccNN/AN/A
Effectsreverb_toneN/A0 to 100SFZ v2
Effectsreverb_tone_onccNN/AN/A
Effectsreverb_typestringN/ASFZ v2
Effectsreverb_wetN/A0 to 100SFZ v2
Effectsreverb_wet_onccNN/AN/A
Effectsstatic_cyclic_levelN/A0 to 100SFZ v2
Effectsstatic_cyclic_timefloatN/ASFZ v2
Effectsstatic_filterName of filter type.stringN/ASFZ v2
Effectsstatic_levelN/A0 to 100SFZ v2
Effectsstatic_level_onccNN/AN/A
Effectsstatic_random_levelN/A0 to 100SFZ v2
Effectsstatic_random_maxtimefloatN/ASFZ v2
Effectsstatic_random_mintimefloatN/ASFZ v2
Effectsstatic_stereoN/AN/ASFZ v2
Effectsstatic_toneN/A0 to 100SFZ v2
Effectsstrings_numberNumber of synthesized resonant strings.N/AN/ASFZ v2
Effectsstrings_wet_onccNN/A0 to 100SFZ v2
Effectstdfir_dryN/A0 to 100SFZ v2
Effectstdfir_dry_onccNN/AN/A
Effectstdfir_gainN/A0 to 100SFZ v2
Effectstdfir_impulseN/AN/ASFZ v2
Effectstdfir_wetN/A0 to 100SFZ v2
Effectstdfir_wet_onccNN/AN/A
EffectstypeEffect type or vendor-specific effect name. Varies across SFZ players.stringN/ASFZ v2
Effectsvendor_specificDefines vendor-specific effects, for example Garritan-specific stage depth effect in ARIA.stringN/AARIA
Loadingload_modeintegerN/A0 to 1SFZ v2
Loadingload_startintegerN/ASFZ v2
Loadingload_endintegerN/ASFZ v2
Loadingsample_qualitySample playback quality settings.integerN/A1 to 10SFZ v2
LoadingimageSets the background image of the instrument.stringN/ASFZ v2
Wavetable OscillatoroscillatorstringN/ASFZ v2
Wavetable Oscillatoroscillator_detuneN/AN/ASFZ v2
Wavetable Oscillatoroscillator_detune_onccNN/AN/A
Wavetable Oscillatoroscillator_modeThe modulation type.integer00 to 2SFZ v2
Wavetable Oscillatoroscillator_mod_depthN/AN/ASFZ v2
Wavetable Oscillatoroscillator_mod_depth_onccNN/AN/A
Wavetable Oscillatoroscillator_mod_smoothccNN/AN/A
Wavetable Oscillatoroscillator_multiConfigure a region to use more than one oscillator.integer11 to 9SFZ v2
Wavetable Oscillatoroscillator_phaseOscillator phase. Negative values for random phase.floatN/A-1 to 360SFZ v2
Wavetable Oscillatoroscillator_qualityintegerN/A0 to 3SFZ v2
Wavetable Oscillatoroscillator_table_sizeN/AN/ASFZ v2
+
+
+
+ +
+

+ +
+ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/misc/sfz2/index.html b/misc/sfz2/index.html new file mode 100644 index 000000000..0adb6ca68 --- /dev/null +++ b/misc/sfz2/index.html @@ -0,0 +1,8432 @@ + + + + + + + + + Opcodes - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Opcodes

All opcode versions, including extensions, starting in alphabetical order. +Note that modulations such as (on)ccN and vel2* are included in the pages +describing the parameters they modulate.

+

Opcode links in red color +represent obsolete opcodes which should not be used in new instruments.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OpcodeDescriptionTypeDefaultRangeVersion
Real-Time Instrument ScriptscriptAllows to load real-time instrument scripts for SFZ instruments.stringN/ALinuxSampler
Sample PlaybackcountThe number of times the sample will be played.integer00 to 4294967296SFZ v1
Sample PlaybackdelayRegion delay time.float00 to 100SFZ v1
Sample Playbackdelay_ccNRegion delay time after MIDI continuous controller N messages are received. If the region receives a note-off message before delay time, the region won't play.float0-100 to 100
Sample Playbackdelay_onccNdelay_ccN alias.N/AN/ASFZ v2
Sample Playbackdelay_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate delay.integer00 to 255ARIA
Sample Playbackdelay_randomRegion random delay time.float00 to 100SFZ v1
Sample Playbackdelay_samplesAllows the region playback to be postponed for the specified time, measured in samples (and therefore dependent on current sample rate).integerN/ASFZ v2
Sample Playbackdelay_samples_onccNintegerN/A
Sample PlaybackendThe endpoint of the sample. If unspecified, the entire sample will play.integerunspecified0 to 4294967296SFZ v1
Sample Playbackloop_countThe number of times a loop will repeat.integerN/ASFZ v2
Sample Playbackloopcountloop_count alias.N/AN/AARIA
Sample Playbackloop_crossfadeLoop cross fade.floatN/ASFZ v2
Sample Playbackloop_endThe loop end point, in samples.integer00 to 4294967296SFZ v1
Sample Playbackloopendloop_end alias.N/AN/A
Sample Playbackloop_lengthccNChange of loop end point.N/AN/ASFZ v2
Sample Playbackloop_length_onccNloop_lengthccN alias.N/AN/A
Sample Playbackloop_modeAllows playing samples with loops defined in the unlooped mode.stringno_loop for samples without a loop defined,
loop_continuous for samples with defined loop(s).
SFZ v1
Sample Playbackloopmodeloop_mode alias.N/AN/A
Sample Playbackloop_startThe loop start point, in samples.integer00 to 4294967296SFZ v1
Sample Playbackloopstartloop_start alias.N/AN/A
Sample Playbackloop_startccNChange of loop start point.N/AN/ASFZ v2
Sample Playbackloop_start_onccNloop_startccN alias.N/AN/A
Sample Playbackloop_tuneTuning for only the loop segment.float0SFZ v2
Sample Playbacklooptuneloop_tune alias.N/AN/AARIA
Sample Playbackloop_typeDefines the looping mode.stringforwardSFZ v2
Sample Playbacklooptypeloop_type alias.N/AN/AARIA
Sample PlaybackoffsetThe offset used to play the sample.integer00 to 4294967296SFZ v1
Sample Playbackoffset_ccNThe offset used to play the sample according to last position of MIDI continuous controller N.integer00 to 4294967296
Sample Playbackoffset_onccNoffset_ccN alias.N/AN/ASFZ v2
Sample Playbackoffset_randomRandom offset added to the region offset.integer00 to 4294967296SFZ v1
Sample Playbackoffset_modeDefines whether offset is measured in samples or percentage of sample length.stringsamplesARIA
Sample PlaybacksampleDefines which sample file the region will play.stringN/ASFZ v1
Sample Playbacksample_fadeoutNumber of seconds before the end of sample playback that the player should begin a realtime fadeout.floatN/ASFZ v2
Sample Playbacksample_dyn_paramNfloatN/AARIA
Sample Playbacksample_dyn_paramN_onccXfloatN/A
Sample Playbacksync_beatsRegion playing synchronization to host position.float00 to 32SFZ v1
Sample Playbacksync_offsetRegion playing synchronization to host position offset.float00 to 32SFZ v1
Sample Playbackdelay_beatsDelays the start of the region until a certain amount of musical beats are passed.floatN/ASFZ v2
Sample Playbackdelay_beats_onccNN/AN/AARIA
Sample Playbackdelay_beats_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate delay_beats.integer00 to 255ARIA
Sample Playbackdelay_beats_randomDelays the start of the region after a random amount of musical beats.floatN/AARIA
Sample Playbackstop_beatsStops a region after a certain amount of beats have played.floatN/ASFZ v2
Sample PlaybackdirectionThe direction in which the sample is to be played.stringforwardSFZ v2
Sample Playbackmd5Calculates the MD5 digital fingerprint hash of a sample file, represented as a sequence of 32 hexadecimal digits.stringnullSFZ v2
Sample Playbackreverse_loccNIf MIDI CC N is between reverse_loccN and reverse_hiccN, the region plays reversed.integerN/A0 to 127SFZ v2
Sample Playbackreverse_hiccNIf MIDI CC N is between reverse_loccN and reverse_hiccN, the region plays reversed.integerN/A0 to 127SFZ v2
Sample PlaybackwaveguideEnables waveguide synthesis for the region.stringN/ASFZ v2
Instrument SettingsdefineCreates a variable and gives it a value.stringN/ASFZ v2
Instrument Settingsdefault_pathDefault file path.stringN/ASFZ v2
Instrument Settingsnote_offsetMIDI note transpose; tells the SFZ player to offset all incoming MIDI notes by the specified number of semitones.integer0-127 to 127SFZ v2
Instrument Settingsoctave_offsetMIDI octave transpose; tells the SFZ player to offset all incoming MIDI notes by the specified number of octaves.integer0-10 to 10SFZ v2
Instrument Settingslabel_ccNCreates a label for the MIDI CC.stringN/AARIA
Instrument Settingslabel_keyNCreates a label for a key.stringN/Asfizz
Instrument Settingslabel_outputNCreates a label for the output N.stringN/ACalfbox
Instrument Settingsset_ccNSets a default initial value for MIDI CC number N, when the instrument is initially loaded.integerN/A0 to 127SFZ v2
Instrument SettingsincludeA special directive, which allows using SFZ files as building blocks for creating larger, more complex SFZ files.stringN/AARIA
Instrument Settingshint_Its a 'hint' to the ARIA engine, others implementations don't have to follow.N/AN/AARIA
Instrument Settings_modDetermines whether a parameter is modulated by addition or multiplication.stringN/AARIA
Instrument Settingsset_hdccNLike set_ccN but with floating point MIDI CCs.floatN/A0 to 1ARIA
Instrument Settingsset_realccNset_hdccN alias.N/AN/A
Instrument Settingssw_note_offsetFollows the same logic as SFZ 2.0’s note_offset but for key switches.integerN/AARIA
Instrument Settingssw_octave_offsetFollows the same logic as SFZ 2.0’s octave_offset but for key switches.integerN/AARIA
Instrument Settingsglobal_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Instrument Settingsmaster_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Instrument Settingsgroup_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Instrument Settingsregion_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Voice LifecyclegroupExclusive group number for this region.integer0-2147483648 to 2147483647SFZ v1
Voice Lifecyclepolyphony_groupgroup alias.N/AN/AARIA
Voice Lifecycleoff_byRegion off group.integer0-2147483648 to 2147483647SFZ v1
Voice Lifecycleoffbyoff_by alias.N/AN/A
Voice Lifecycleoff_modeRegion off mode.stringfastSFZ v1
Voice LifecycleoutputThe stereo output number for this region.integer00 to 1024SFZ v1
Voice LifecyclepolyphonyPolyphony voice limit.integerN/ASFZ v2
Voice Lifecyclenote_polyphonyPolyphony limit for playing the same note repeatedly.integerN/ASFZ v2
Voice Lifecyclepolyphony_stealingintegerN/AARIA
Voice Lifecyclenote_selfmaskControls note-stealing behavior for a single pitch, when using note_polyphony.stringonSFZ v2
Voice Lifecyclert_deadControls whether a release sample should play if its sustain sample has ended, or not.stringoffSFZ v2
Voice Lifecycleoff_curveWhen off_mode is set to time, this specifies the math to be used to fade out the regions being muted by voice-stealing.integer10-2 to 10ARIA
Voice Lifecycleoff_shapeThe coefficient used by off_curve.float-10.3616ARIA
Voice Lifecycleoff_timeWhen off_mode is set to time, this specifies the fadeout time for regions being muted by voice-stealing.float0.006ARIA
Key MappingkeyEquivalent to using lokey, hikey and pitch_keycenter and setting them all to the same note value.integerN/A0 to 127SFZ v1
Key MappinglokeyDetermine the low boundary of a certain region.integer00 to 127SFZ v1
Key MappinghikeyDetermine the high boundary of a certain region.integer1270 to 127SFZ v1
Key MappinglovelIf a note with velocity value equal to or higher than lovel AND equal to or lower than hivel is played, the region will play.integer11 to 127SFZ v1
Key MappinghivelIf a note with velocity value equal to or higher than lovel AND equal to or lower than hivel is played, the region will play.integer1271 to 127SFZ v1
MIDI ConditionslochanIf incoming notes have a MIDI channel between lochan and hichan, the region will play.integer11 to 16SFZ v1
MIDI ConditionshichanIf incoming notes have a MIDI channel between lochan and hichan, the region will play.integer161 to 16SFZ v1
MIDI ConditionsloccNDefines the range of the last MIDI controller N required for the region to play.integer00 to 127SFZ v1
MIDI ConditionshiccNDefines the range of the last MIDI controller N required for the region to play.integer1270 to 127SFZ v1
MIDI ConditionslobendDefines the range of the last Pitch Bend message required for the region to play.integer-8192-8192 to 8192SFZ v1
MIDI ConditionshibendDefines the range of the last Pitch Bend message required for the region to play.integer8192-8192 to 8192SFZ v1
MIDI Conditionssostenuto_ccReassigns the sostenuto pedal CC to a non-standard value.integer660 to 127ARIA
MIDI Conditionssostenuto_loSets the minimum point at which the sostenuto pedal (MIDI CC 66) is considered 'down'.float0.50 to 127ARIA
MIDI Conditionssostenuto_swTurns the sostenuto switch on or off.stringN/ASFZ v2
MIDI Conditionssustain_ccReassigns the sustain pedal CC to a non-standard value.integer640 to 127ARIA
MIDI Conditionssustain_loSets the minimum point at which the sustain pedal (MIDI CC 64) is considered 'down'.float0.50 to 127ARIA
MIDI Conditionssustain_swTurns the sustain switch on or off.stringN/ASFZ v2
MIDI Conditionssw_lokeyDefines the range of the keyboard to be used as trigger selectors for the sw_last opcode.integer00 to 127SFZ v1
MIDI Conditionssw_hikeyDefines the range of the keyboard to be used as trigger selectors for the sw_last opcode.integer1270 to 127SFZ v1
MIDI Conditionssw_lastEnables 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.integer00 to 127SFZ v1
MIDI Conditionssw_downEnables 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.integer00 to 127SFZ v1
MIDI Conditionssw_upEnables the region to play if the key equal to sw_up value is not depressed.integer00 to 127SFZ v1
MIDI Conditionssw_previousPrevious note value. The region will play if last note-on message was equal to sw_previous value.integerN/A0 to 127SFZ v1
MIDI Conditionssw_velAllows overriding the velocity for the region with the velocity of the previous note.stringcurrentSFZ v1
MIDI ConditionsloprogThe region plays when the MIDI program number is between loprog and hiprog.integer00 to 127SFZ v2
MIDI ConditionshiprogThe region plays when the MIDI program number is between loprog and hiprog.integer1270 to 127SFZ v2
MIDI ConditionslohdccNLike loccN but with floating point MIDI CCsfloat00 to 1ARIA
MIDI ConditionshihdccNLike hiccN but with floating point MIDI CCsfloat10 to 1ARIA
MIDI Conditionssw_defaultDefine keyswitch 'power on default' so that you hear something when a patch loads.integerN/A0 to 127SFZ v2
MIDI Conditionssw_labelLabel for activated keyswitch on GUI.stringN/AARIA
MIDI Conditionssw_lolastLike sw_last, but allowing a region to be triggered across a range of keyswitches.integerN/A0 to 127ARIA
MIDI Conditionssw_hilastLike sw_last, but allowing a region to be triggered across a range of keyswitches.integerN/A0 to 127ARIA
MIDI ConditionsvarNN_modSpecifies the method used to calculate variable number NN from MIDI CCs.stringN/AARIA
MIDI ConditionsvarNN_onccXSpecifies the method used to calculate variable number NN from MIDI CCs.floatN/A0 to 1
MIDI ConditionsvarNN_curveccXSpecifies the ‹curve› number which MIDI CC X uses to modulate varNN.integer00 to 255
MIDI ConditionsvarNN_Specifies the target for variable NN to modulate.N/AN/AARIA
Internal ConditionslobpmHost tempo value.float00 to 500SFZ v1
Internal ConditionshibpmHost tempo value.float5000 to 500SFZ v1
Internal ConditionslochanaftDefines the range of last Channel Aftertouch message required for the region to play.integer00 to 127SFZ v1
Internal ConditionshichanaftDefines the range of last Channel Aftertouch message required for the region to play.integer1270 to 127SFZ v1
Internal ConditionslopolyaftDefines the range of last Polyphonic Aftertouch message required for the region to play.integer00 to 127SFZ v1
Internal ConditionshipolyaftDefines the range of last Polyphonic Aftertouch message required for the region to play.integer1270 to 127SFZ v1
Internal ConditionslorandThe region will play if the random number is equal to or higher than lorand, and lower than hirand.float00 to 1SFZ v1
Internal ConditionshirandThe region will play if the random number is equal to or higher than lorand, and lower than hirand.float10 to 1SFZ v1
Internal Conditionsseq_lengthSequence length, used together with seq_position to use samples as round robins.integer11 to 100SFZ v1
Internal Conditionsseq_positionSequence position. The region will play if the internal sequence counter is equal to seq_position.integer11 to 100SFZ v1
Internal ConditionslotimerRegion plays if the time passed since the last sample in the same group played is between lotimer and hitimer.floatN/ASFZ v2
Internal ConditionshitimerRegion plays if timer is between lotimer and hitimer.floatN/ASFZ v2
TriggerstriggerSets the trigger which will be used for the sample to play.stringattackSFZ v1
Triggerson_loccNIf a MIDI control message with a value between on_loccN and on_hiccN is received, the region will play. Default value is -1, it means unassigned.integer-10 to 127SFZ v1
Triggersstart_loccNon_loccN alias.N/AN/ASFZ v2
Triggerson_hiccNIf a MIDI control message with a value between on_loccN and on_hiccN is received, the region will play. Default value is -1, it means unassigned.integer-10 to 127SFZ v1
Triggersstart_hiccNon_hiccN alias.N/AN/ASFZ v2
Triggerson_lohdccNLike on_loccN but with floating point MIDI CCs.float-10 to 1ARIA
Triggersstart_lohdccNon_lohdccN alias.N/AN/A
Triggerson_hihdccNLike on_hiccN but with floating point MIDI CCs.float-10 to 1ARIA
Triggersstart_hihdccNon_hihdccN alias.N/AN/A
Triggersstop_loccNIf a MIDI control message with a value between stop_loccN and stop_hiccN is received, the region will stop playing. Default value is -1, it means unassigned.integer-10 to 127SFZ v2
Triggersstop_hiccNIf a MIDI control message with a value between stop_loccN and stop_hiccN is received, the region will stop playing. Default value is -1, it means unassigned.integer-10 to 127SFZ v2
Triggersstop_lohdccNLike stop_loccN but with floating point MIDI CCs.float-10 to 1ARIA
Triggersstop_hihdccNLike stop_hiccN but with floating point MIDI CCs.float-10 to 1ARIA
AmplifierpanThe panoramic position for the region.float0-100 to 100SFZ v1
Amplifierpan_onccNN/AN/ASFZ v2
Amplifierpan_ccNpan_onccN alias.N/AN/AARIA
Amplifierpan_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate pan.integer00 to 255SFZ v2
Amplifierpan_smoothccNN/AN/ASFZ v2
Amplifierpan_stepccNN/AN/ASFZ v2
Amplifierpan_randomRandom panoramic position for the region.float0-100 to 100ARIA
AmplifierpositionOnly operational for stereo samples, position defines the position in the stereo field of a stereo signal, after channel mixing as defined in the width opcode.float0-100 to 100SFZ v1
Amplifierposition_onccNN/AN/AARIA
Amplifierposition_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate position.integer00 to 255ARIA
Amplifierposition_smoothccNN/AN/AARIA
Amplifierposition_stepccNN/AN/AARIA
Amplifierposition_randomfloat0-100 to 100ARIA
Amplifierposition_keycenterN/AN/AARIA
Amplifierposition_keytrackN/AN/AARIA
Amplifierposition_veltrackinteger0-200 to 200ARIA
AmplifiervolumeThe volume for the region, in decibels.float0-144 to 6SFZ v1
Amplifiergain_ccNGain applied on MIDI control N, in decibels.float0-144 to 48
Amplifiergain_onccNgain_ccN alias.N/AN/ASFZ v2
Amplifiervolume_onccNgain_ccN alias.N/AN/ASFZ v2
Amplifiervolume_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate volume.integer00 to 255SFZ v2
Amplifiervolume_smoothccNN/AN/ASFZ v2
Amplifiervolume_stepccNN/AN/ASFZ v2
AmplifierwidthOnly operational for stereo samples, width defines the amount of channel mixing applied to play the sample.float100-100 to 100SFZ v1
Amplifierwidth_onccNN/AN/ASFZ v2
Amplifierwidth_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate width.integer00 to 255SFZ v2
Amplifierwidth_smoothccNN/AN/ASFZ v2
Amplifierwidth_stepccNN/AN/ASFZ v2
Amplifieramp_keycenterCenter key for amplifier keyboard tracking. In this key, the amplifier keyboard tracking will have no effect.integer600 to 127SFZ v1
Amplifieramp_keytrackAmplifier keyboard tracking (change in amplitude per key) in decibels.float0-96 to 12SFZ v1
Amplifieramp_veltrackAmplifier velocity tracking, represents how much the amplitude changes with incoming note velocity.float100-100 to 100SFZ v1
Amplifieramp_veltrack_onccNN/AN/AARIA
Amplifieramp_veltrack_ccNamp_veltrack_onccN alias.N/AN/A
Amplifieramp_veltrack_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate amp_veltrack.integer00 to 255ARIA
Amplifieramp_veltrack_randomN/AN/AARIA
Amplifieramp_velcurve_NUser-defined amplifier velocity curve.floatStandard curve (see amp_veltrack)0 to 1SFZ v1
Amplifieramp_randomRandom volume for the region, in decibels.float00 to 24SFZ v1
Amplifiergain_randomamp_random alias.N/AN/ASFZ v2
Amplifierrt_decayApplies only to regions that triggered through trigger=release. The volume decrease (in decibels) per seconds after the corresponding attack region was triggered.float00 to 200SFZ v1
Amplifierrt_decayNApplies only to regions that triggered through trigger=release. The volume decrease (in decibels) per seconds after the corresponding attack region was triggered, for decrease curve segment number N.float00 to 200ARIA
Amplifierrt_decayN_timeThe duration of release sample volue decrease curve segment number N.floatN/AARIA
Amplifierxf_cccurveMIDI controllers crossfade curve for the region.stringpowerSFZ v1
Amplifierxf_keycurveKeyboard crossfade curve for the region.stringpowerSFZ v1
Amplifierxf_velcurveVelocity crossfade curve for the region.stringpowerSFZ v1
Amplifierxfin_loccNFade in control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfin_hiccNFade in control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfout_loccNFade out control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfout_hiccNFade out control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfin_lokeyFade in control based on MIDI note (keyboard position).integer00 to 127SFZ v1
Amplifierxfin_hikeyFade in control based on MIDI note (keyboard position).integer00 to 127SFZ v1
Amplifierxfout_lokeyFade out control based on MIDI note number (keyboard position).integer1270 to 127SFZ v1
Amplifierxfout_hikeyFade out control based on MIDI note number (keyboard position).integer1270 to 127SFZ v1
Amplifierxfin_lovelFade in control based on velocity.integer00 to 127SFZ v1
Amplifierxfin_hivelFade in control based on velocity.integer00 to 127SFZ v1
Amplifierxfout_lovelFade out control, based on velocity.integer1270 to 127SFZ v1
Amplifierxfout_hivelFade out control, based on velocity.integer1270 to 127SFZ v1
AmplifierphaseIf invert is set, the region is played with inverted phase.stringnormalSFZ v2
AmplifieramplitudeAmplitude for the specified region in percentage of full amplitude.float1000 to 100ARIA
Amplifieramplitude_onccNfloatN/A-100 to 100
Amplifieramplitude_ccNamplitude_onccN alias.N/AN/A
Amplifieramplitude_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate amplitude.integer00 to 255
Amplifieramplitude_smoothccNN/AN/A
Amplifierglobal_amplitudeARIA extension, like amplitude, but affecting everything when set under the ‹global› header.float1000 to 100ARIA
Amplifiermaster_amplitudeARIA extension, like amplitude, but affecting everything when set under the ‹master› header.float1000 to 100ARIA
Amplifiergroup_amplitudeARIA extension, like amplitude, but affecting everything when set under the ‹group› header.float1000 to 100ARIA
Amplifierpan_lawSets the pan law to be used.stringN/AARIA
Amplifierpan_keycenterCenter key for pan keyboard tracking.integer600 to 127SFZ v2
Amplifierpan_keytrackThe amount by which the panning of a note is shifted with each key.float0-100 to 100SFZ v2
Amplifierpan_veltrackThe effect of note velocity on panning.float0-100 to 100SFZ v2
Amplifierglobal_volumeARIA extension, like volume, but affecting everything when set under the ‹global› header.float0-144 to 6ARIA
Amplifiermaster_volumeARIA extension, like volume, but affecting everything when set under the ‹master› header.float0-144 to 6ARIA
Amplifiergroup_volumeARIA extension, like volume, but affecting everything when set under the ‹group› header.float0-144 to 6ARIA
EQeqN_bwBandwidth of the equalizer band, in octaves.float10.001 to 4SFZ v1
EQeqN_bwccXfloat0-4 to 4
EQeqN_bw_onccXeqN_bwccX alias.N/AN/ASFZ v2
EQeqN_freqFrequency of the equalizer band, in Hertz.floateq1_freq=50
eq2_freq=500
eq3_freq=5000
0 to 30000SFZ v1
EQeqN_freqccXfloat0-30000 to 30000
EQeqN_freq_onccXeqN_freqccX alias.N/AN/ASFZ v2
EQeqN_vel2freqFrequency change of the equalizer band with MIDI velocity, in Hertz.float0-30000 to 30000
EQeqN_gainGain of the equalizer band, in decibels.float0-96 to 24SFZ v1
EQeqN_gainccXfloat0-96 to 24
EQeqN_gain_onccXeqN_gainccX alias.N/AN/ASFZ v2
EQeqN_vel2gainGain change of the equalizer band with MIDI velocity, in decibels.float0-96 to 24
EQeqN_dynamicSpecifies when EQ is recalculated.integer00 to 1ARIA
EQeqN_typeSets the type of EQ filter.stringpeakSFZ v2
FiltercutoffSets the cutoff frequency (Hz) of the filters.floatfilter disabled0 to SampleRate / 2SFZ v1
Filtercutoff2cutoff alias.N/AN/ASFZ v2
Filtercutoff2_ccNN/AN/A
Filtercutoff2_onccNN/AN/A
Filtercutoff2_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate cutoff2.integer00 to 255
Filtercutoff2_smoothccNN/AN/A
Filtercutoff2_stepccNN/AN/A
Filtercutoff2_chanaftN/AN/A
Filtercutoff2_polyaftN/AN/A
Filtercutoff_ccNThe variation in the cutoff frequency when MIDI continuous controller N is received.integer0-9600 to 9600
Filtercutoff_onccNcutoff_ccN alias.N/AN/ASFZ v2
Filtercutoff_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate cutoff.integer00 to 255SFZ v2
Filtercutoff_smoothccNfloat00 to ?SFZ v2
Filtercutoff_stepccNinteger00 to ?SFZ v2
Filtercutoff_chanaftThe variation in the cutoff frequency when MIDI channel aftertouch messages are received, in cents.integer0-9600 to 9600
Filtercutoff_polyaftThe variation in the cutoff frequency when MIDI polyphonic aftertouch messages are received, in cents.integer0-9600 to 9600
Filterfil_gainGain for lsh, hsh and peq filter types.float0ARIA
Filterfil2_gainfil_gain alias.N/AN/A
Filterfil2_gain_onccNN/AN/A
Filterfil_gain_onccNN/AN/A
Filterfil_keycenterCenter key for filter keyboard tracking.integer600 to 127SFZ v1
Filterfil2_keycenterfil_keycenter alias.N/AN/ASFZ v2
Filterfil_keytrackFilter keyboard tracking (change on cutoff for each key) in cents.integer00 to 1200SFZ v1
Filterfil2_keytrackfil_keytrack alias.N/AN/ASFZ v2
Filterfil_randomRandom value added to the filter cutoff for the region, in cents.integer00 to 9600SFZ v1
Filtercutoff_randomfil_random alias.N/AN/ASFZ v2
Filtercutoff2_randomfil_random alias.N/AN/AARIA
Filterfil_typeFilter type.stringlpf_2pSFZ v1
Filterfiltypefil_type alias.N/AN/A
Filterfil2_typefil_type alias.N/AN/ASFZ v2
Filterfil_veltrackFilter velocity tracking, the amount by which the cutoff changes with incoming note velocity, in cents.integer0-9600 to 9600SFZ v1
Filterfil2_veltrackfil_veltrack alias.N/AN/ASFZ v2
FilterresonanceThe filter cutoff resonance value, in decibels.float00 to 40SFZ v1
Filterresonance2resonance alias.N/AN/ASFZ v2
Filterresonance2_onccNfloat0-40 to 40
Filterresonance2_ccNresonance2_onccN alias.N/AN/ASFZ v2
Filterresonance2_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate resonance2.integer00 to 255
Filterresonance2_smoothccNfloat00 to ?
Filterresonance2_stepccNinteger00 to ?
Filterresonance_onccNfloat0-40 to 40SFZ v2
Filterresonance_ccNresonance_onccN alias.N/AN/A
Filterresonance_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate resonance.integer00 to 255SFZ v2
Filterresonance_smoothccNfloat00 to ?SFZ v2
Filterresonance_stepccNinteger00 to ?SFZ v2
Filterresonance_randomFilter cutoff resonance random value, in decibels.float00 to 40ARIA
Filterresonance2_randomFilter#2 cutoff resonance random value, in decibels.float00 to 40ARIA
Filternoise_filterstringN/ASFZ v2
Filternoise_stereostringN/ASFZ v2
Filternoise_levelfloatN/A-96 to 24SFZ v2
Filternoise_level_onccNfloatN/A-96 to 24
Filternoise_level_smoothccNfloat00 to ?
Filternoise_stepintegerN/A0 to 100SFZ v2
Filternoise_step_onccNintegerN/A0 to 100
Filternoise_toneintegerN/A0 to 100SFZ v2
Filternoise_tone_onccNintegerN/A0 to 100
Pitchbend_upPitch bend range when Bend Wheel or Joystick is moved up, in cents.integer200-9600 to 9600SFZ v1
Pitchbendupbend_up alias.N/AN/A
Pitchbend_downPitch bend range when Bend Wheel or Joystick is moved down, in cents.integer-200-9600 to 9600SFZ v1
Pitchbenddownbend_down alias.N/AN/A
Pitchbend_smoothPitch bend smoothness. Adds “inertia” to pitch bends, so fast movements of the pitch bend wheel will have a delayed effect on the pitch change.float00 to ?SFZ v2
Pitchbend_stepPitch bend step, in cents.integer11 to 1200SFZ v1
Pitchbendstepbend_step alias.N/AN/A
PitchtuneThe fine tuning for the sample, in cents.integer0-100 to 100SFZ v1
Pitchpitchtune alias.N/AN/AARIA
Pitchpitch_onccNN/AN/A-9600 to 9600SFZ v2
Pitchtune_ccNpitch_onccN alias.N/AN/AARIA
Pitchtune_onccNpitch_onccN alias.N/AN/AARIA
Pitchpitch_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate pitch.integer00 to 255SFZ v2
Pitchtune_curveccNpitch_curveccN alias.N/AN/AARIA
Pitchpitch_smoothccNfloat00 to ?SFZ v2
Pitchtune_smoothccNpitch_smoothccN alias.N/AN/AARIA
Pitchpitch_stepccNN/A00 to ?SFZ v2
Pitchtune_stepccNpitch_stepccN alias.N/AN/AARIA
Pitchgroup_tuneARIA extension, like tune, but affecting everything when set under the ‹group› header.integer0-9600 to 9600ARIA
Pitchmaster_tuneARIA extension, like tune, but affecting everything when set under the ‹master› header.integer0-9600 to 9600ARIA
Pitchglobal_tuneARIA extension, like tune, but affecting everything when set under the ‹global› header.integer0-9600 to 9600ARIA
Pitchpitch_keycenterRoot key for the sample.integer600 to 127SFZ v1
Pitchpitch_keytrackWithin the region, this value defines how much the pitch changes with every note.integer100-1200 to 1200SFZ v1
Pitchtune_keytrackpitch_keytrack alias.N/AN/AARIA
Pitchpitch_randomRandom tuning for the region, in cents.integer00 to 9600SFZ v1
Pitchtune_randompitch_random alias.N/AN/AARIA
Pitchpitch_veltrackPitch velocity tracking, represents how much the pitch changes with incoming note velocity, in cents.integer0-9600 to 9600SFZ v1
Pitchtune_veltrackpitch_veltrack alias.N/AN/AARIA
PitchtransposeThe transposition value for this region which will be applied to the sample.integer0-127 to 127SFZ v1
Pitchbend_stepupPitch bend step, in cents, applied to upwards bends only.integer11 to 1200SFZ v2
Pitchbend_stepdownPitch bend step, in cents, for downward pitch bends.integer11 to 1200SFZ v2
Envelope Generatorsampeg_attackEG attack time.float00 to 100SFZ v1
Envelope Generatorsamp_attackampeg_attack alias.N/AN/ASFZ v2
Envelope Generatorsampeg_attackccNfloat0-100 to 100
Envelope Generatorsampeg_attack_onccNampeg_attackccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_attack_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_vel2attackVelocity effect on EG attack time.float0-100 to 100
Envelope Generatorsamp_vel2attackampeg_vel2attack alias.N/AN/ASFZ v2
Envelope Generatorsampeg_decayEG decay time.float00 to 100SFZ v1
Envelope Generatorsamp_decayampeg_decay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_decayccNfloat0-100 to 100
Envelope Generatorsampeg_decay_onccNampeg_decayccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_decay_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate ampeg_decay.integer00 to 255ARIA
Envelope Generatorsampeg_vel2decayVelocity effect on EG decay time.float0-100 to 100
Envelope Generatorsamp_vel2decayampeg_vel2decay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_delayEG delay time.float00 to 100SFZ v1
Envelope Generatorsamp_delayampeg_delay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_delayccNfloat0-100 to 100
Envelope Generatorsampeg_delay_onccNampeg_delayccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_delay_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_vel2delayVelocity effect on EG delay time.float0-100 to 100
Envelope Generatorsamp_vel2delayampeg_vel2delay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_holdEG hold time.float00 to 100SFZ v1
Envelope Generatorsamp_holdampeg_hold alias.N/AN/ASFZ v2
Envelope Generatorsampeg_holdccNfloat0-100 to 100
Envelope Generatorsampeg_hold_onccNampeg_holdccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_hold_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate ampeg_hold.integer00 to 255ARIA
Envelope Generatorsampeg_vel2holdVelocity effect on EG hold time.float0-100 to 100
Envelope Generatorsamp_vel2holdampeg_vel2hold alias.N/AN/ASFZ v2
Envelope Generatorsampeg_releaseEG release time (after note release).float0.0010 to 100SFZ v1
Envelope Generatorsamp_releaseampeg_release alias.N/AN/ASFZ v2
Envelope Generatorsampeg_releaseccNfloat0-100 to 100
Envelope Generatorsampeg_release_onccNampeg_releaseccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_release_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_vel2releaseVelocity effect on EG release time.float0-100 to 100
Envelope Generatorsamp_vel2releaseampeg_vel2release alias.N/AN/ASFZ v2
Envelope Generatorsampeg_sustainEG sustain level, in percentage.float1000 to 100SFZ v1
Envelope Generatorsamp_sustainampeg_sustain alias.N/AN/ASFZ v2
Envelope Generatorsampeg_sustainccNfloat0-100 to 100
Envelope Generatorsampeg_sustain_onccNampeg_sustainccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_sustain_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate ampeg_sustain.integer00 to 255ARIA
Envelope Generatorsampeg_vel2sustainVelocity effect on EG sustain level, in percentage.float0-100 to 100
Envelope Generatorsamp_vel2sustainampeg_vel2sustain alias.N/AN/ASFZ v2
Envelope Generatorsampeg_startEnvelope start level, in percentage.float00 to 100SFZ v1
Envelope Generatorsampeg_startccNfloat0-100 to 100
Envelope Generatorsampeg_start_onccNampeg_startccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_start_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_attack_shapeSpecifies the curvature of attack stage of the envelope.float0ARIA
Envelope Generatorsampeg_decay_shapeSpecifies the curvature of decay stage of the envelope.float-10.3616ARIA
Envelope Generatorsampeg_decay_zeroSpecifies how decay time is calculated.integer10 to 1ARIA
Envelope Generatorsampeg_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope Generatorsampeg_release_shapeSpecifies the curvature of release stage of the envelope.float-10.3616ARIA
Envelope Generatorsampeg_release_zeroSpecifies how release time is calculated.integer00 to 1ARIA
Envelope Generatorsfileg_attack_shapeSpecifies the curvature of attack stage of the envelope.float0ARIA
Envelope Generatorsfileg_decay_shapeSpecifies the curvature of decay stage of the envelope.float0ARIA
Envelope Generatorsfileg_decay_zeroSpecifies how decay time is calculated.integer10 to 1ARIA
Envelope Generatorsfileg_release_shapeSpecifies the curvature of release stage of the envelope.float0ARIA
Envelope Generatorsfileg_release_zeroSpecifies how release time is calculated.integer00 to 1ARIA
Envelope Generatorsfileg_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope Generatorspitcheg_attack_shapeSpecifies the curvature of attack stage of the envelope.float0ARIA
Envelope Generatorspitcheg_decay_shapeSpecifies the curvature of decay stage of the envelope.float0ARIA
Envelope Generatorspitcheg_decay_zeroSpecifies how decay time is calculated.integer10 to 1ARIA
Envelope Generatorspitcheg_release_shapeSpecifies the curvature of release stage of the envelope.float0ARIA
Envelope Generatorspitcheg_release_zeroSpecifies how release time is calculated.integer00 to 1ARIA
Envelope Generatorspitcheg_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope Generatorsfileg_attackEG attack time.float00 to 100SFZ v1
Envelope Generatorsfil_attackfileg_attack alias.N/AN/ASFZ v2
Envelope Generatorsfileg_attack_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_attackccNfileg_attack_onccN alias.N/AN/A
Envelope Generatorsfileg_attack_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2attackVelocity effect on EG attack time.float0-100 to 100
Envelope Generatorsfil_vel2attackfileg_vel2attack alias.N/AN/ASFZ v2
Envelope Generatorsfileg_decayEG decay time.float00 to 100SFZ v1
Envelope Generatorsfil_decayfileg_decay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_decay_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_decayccNfileg_decay_onccN alias.N/AN/A
Envelope Generatorsfileg_decay_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2decayVelocity effect on filter EG decay time.float0-100 to 100
Envelope Generatorsfil_vel2decayfileg_vel2decay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_delayEG delay time.float00 to 100SFZ v1
Envelope Generatorsfil_delayfileg_delay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_delay_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_delayccNfileg_delay_onccN alias.N/AN/A
Envelope Generatorsfileg_delay_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2delayVelocity effect on filter EG delay time.float0-100 to 100
Envelope Generatorsfil_vel2delayfileg_vel2delay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_depthEnvelope depth.integer0-12000 to 12000SFZ v1
Envelope Generatorsfil_depthfileg_depth alias.N/AN/ASFZ v2
Envelope Generatorsfileg_depth_onccNinteger0-12000 to 12000ARIA
Envelope Generatorsfileg_depthccNfileg_depth_onccN alias.N/AN/A
Envelope Generatorsfileg_depth_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2depthVelocity effect on EG depth, in cents for pitch or filter cutoff.integer0-12000 to 12000
Envelope Generatorsfil_vel2depthfileg_vel2depth alias.N/AN/ASFZ v2
Envelope Generatorsfileg_holdEG hold time.float00 to 100SFZ v1
Envelope Generatorsfil_holdfileg_hold alias.N/AN/ASFZ v2
Envelope Generatorsfileg_hold_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_holdccNfileg_hold_onccN alias.N/AN/A
Envelope Generatorsfileg_hold_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2holdVelocity effect on EG hold time.float0-100 to 100
Envelope Generatorsfil_vel2holdfileg_vel2hold alias.N/AN/ASFZ v2
Envelope Generatorsfileg_releaseEG release time (after note release).float00 to 100SFZ v1
Envelope Generatorsfil_releasefileg_release alias.N/AN/ASFZ v2
Envelope Generatorsfileg_release_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_releaseccNfileg_release_onccN alias.N/AN/A
Envelope Generatorsfileg_release_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2releaseVelocity effect on EG release time.float0-100 to 100
Envelope Generatorsfil_vel2releasefileg_vel2release alias.N/AN/ASFZ v2
Envelope Generatorsfileg_startEnvelope start level, in percentage.float00 to 100SFZ v1
Envelope Generatorsfileg_start_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_startccNfileg_start_onccN alias.N/AN/A
Envelope Generatorsfileg_start_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_sustainEG sustain level, in percentage.float00 to 100SFZ v1
Envelope Generatorsfil_sustainfileg_sustain alias.N/AN/ASFZ v2
Envelope Generatorsfileg_sustain_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_sustainccNfileg_sustain_onccN alias.N/AN/A
Envelope Generatorsfileg_sustain_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2sustainVelocity effect on EG sustain level, in percentage.float0-100 to 100
Envelope Generatorsfil_vel2sustainfileg_vel2sustain alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_attackEG attack time.float00 to 100SFZ v1
Envelope Generatorspitch_attackpitcheg_attack alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_attack_onccNN/AN/AARIA
Envelope Generatorspitcheg_attack_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2attackVelocity effect on EG attack time.float0-100 to 100
Envelope Generatorspitch_vel2attackpitcheg_vel2attack alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_decayEG decay time.float00 to 100SFZ v1
Envelope Generatorspitch_decaypitcheg_decay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_decay_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_decay_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2decayVelocity effect on EG decay time.float0-100 to 100
Envelope Generatorspitch_vel2decaypitcheg_vel2decay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_delayEG delay time.float00 to 100SFZ v1
Envelope Generatorspitch_delaypitcheg_delay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_delay_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_delay_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2delayVelocity effect on EG delay time.float0-100 to 100
Envelope Generatorspitch_vel2delaypitcheg_vel2delay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_depthEnvelope depth.integer0-12000 to 12000SFZ v1
Envelope Generatorspitch_depthpitcheg_depth alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_depth_onccNinteger0-12000 to 12000ARIA
Envelope Generatorspitcheg_depthccNpitcheg_depth_onccN alias.N/AN/A
Envelope Generatorspitcheg_depth_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2depthVelocity effect on EG depth, in cents for pitch or filter cutoff.integer0-12000 to 12000
Envelope Generatorspitch_vel2depthpitcheg_vel2depth alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_holdEG hold time.float00 to 100SFZ v1
Envelope Generatorspitch_holdpitcheg_hold alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_hold_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_hold_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2holdVelocity effect on EG hold time.float0-100 to 100
Envelope Generatorspitch_vel2holdpitcheg_vel2hold alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_releaseEG release time (after note release).float00 to 100SFZ v1
Envelope Generatorspitch_releasepitcheg_release alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_release_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_release_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2releaseVelocity effect on EG release time.float0-100 to 100
Envelope Generatorspitch_vel2releasepitcheg_vel2release alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_startEnvelope start level, in percentage.float00 to 100SFZ v1
Envelope Generatorspitcheg_start_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_start_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_sustainEG sustain level, in percentage.float00 to 100SFZ v1
Envelope Generatorspitch_sustainpitcheg_sustain alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_sustain_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_sustain_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2sustainVelocity effect on EG sustain level, in percentage.float0-100 to 100
Envelope Generatorspitch_vel2sustainpitcheg_vel2sustain alias.N/AN/ASFZ v2
Envelope GeneratorsegN_pointsN/AN/ASFZ v2
Envelope GeneratorsegN_timeXfloatN/ASFZ v2
Envelope GeneratorsegN_timeX_onccYfloatN/A
Envelope GeneratorsegN_levelXSets the envelope level at a specific point in envelope number N.float0-1 to 1SFZ v2
Envelope GeneratorsegN_levelX_onccYfloat0-1 to 1
Envelope GeneratorsegN_ampegN/AN/AARIA
Envelope GeneratorsegN_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope GeneratorsegN_shapeXfloat0SFZ v2
Envelope GeneratorsegN_curveXInstructs the player to use a curve shape defined under a curve header for the specified envelope segment.N/AN/ASFZ v2
Envelope GeneratorsegN_sustainN/AN/ASFZ v2
Envelope GeneratorsegN_loopN/AN/ASFZ v2
Envelope GeneratorsegN_loop_countN/AN/ASFZ v2
Envelope GeneratorsegN_volumeN/AN/ASFZ v2
Envelope GeneratorsegN_volume_onccXN/AN/A
Envelope GeneratorsegN_amplitudeN/AN/ASFZ v2
Envelope GeneratorsegN_amplitude_onccXN/AN/A
Envelope GeneratorsegN_panN/AN/ASFZ v2
Envelope GeneratorsegN_pan_onccXN/AN/A
Envelope GeneratorsegN_widthN/AN/ASFZ v2
Envelope GeneratorsegN_width_onccXN/AN/A
Envelope GeneratorsegN_pan_curveN/AN/ASFZ v2
Envelope GeneratorsegN_pan_curveccXSpecifies the ‹curve› number which MIDI CC X uses to modulate egN_pan.integer00 to 255
Envelope GeneratorsegN_freq_lfoXAllows egN to shape a change to lfoX's frequencyfloat0SFZ v2
Envelope GeneratorsegN_depth_lfoXAllows egN to scale lfoX's effect on its targetsfloat100SFZ v2
Envelope GeneratorsegN_depthadd_lfoXN/AN/ASFZ v2
Envelope GeneratorsegN_pitchN/AN/ASFZ v2
Envelope GeneratorsegN_pitch_onccXN/AN/A
Envelope GeneratorsegN_cutoffN/AN/ASFZ v2
Envelope GeneratorsegN_cutoff_onccXN/AN/A
Envelope GeneratorsegN_cutoff2N/AN/ASFZ v2
Envelope GeneratorsegN_cutoff2_onccXN/AN/A
Envelope GeneratorsegN_resonanceN/AN/ASFZ v2
Envelope GeneratorsegN_resonance_onccXN/AN/A
Envelope GeneratorsegN_resonance2N/AN/ASFZ v2
Envelope GeneratorsegN_resonance2_onccXN/AN/A
Envelope GeneratorsegN_eqXfreqN/AN/ASFZ v2
Envelope GeneratorsegN_eqXfreq_onccYN/AN/A
Envelope GeneratorsegN_eqXbwN/AN/ASFZ v2
Envelope GeneratorsegN_eqXbw_onccYN/AN/A
Envelope GeneratorsegN_eqXgainN/AN/ASFZ v2
Envelope GeneratorsegN_eqXgain_onccYN/AN/A
Envelope GeneratorsegN_decimN/AN/ASFZ v2
Envelope GeneratorsegN_decim_onccXN/AN/A
Envelope GeneratorsegN_bitredN/AN/ASFZ v2
Envelope GeneratorsegN_bitred_onccXN/AN/A
Envelope GeneratorsegN_rectifyN/AN/ASFZ v2
Envelope GeneratorsegN_rectify_onccXN/AN/A
Envelope GeneratorsegN_ringmodN/AN/ASFZ v2
Envelope GeneratorsegN_ringmod_onccXN/AN/A
Envelope GeneratorsegN_noiselevelN/AN/ASFZ v2
Envelope GeneratorsegN_noiselevel_onccXN/AN/A
Envelope GeneratorsegN_noisestepN/AN/ASFZ v2
Envelope GeneratorsegN_noisestep_onccXN/AN/A
Envelope GeneratorsegN_noisetoneN/AN/ASFZ v2
Envelope GeneratorsegN_noisetone_onccXN/AN/A
Envelope GeneratorsegN_driveshapeN/AN/ASFZ v2
Envelope GeneratorsegN_driveshape_onccXN/AN/A
LFOamplfo_delayThe time before the LFO starts oscillating.float00 to 100SFZ v1
LFOamplfo_depthLFO depth.float0-10 to 10SFZ v1
LFOamplfo_depthccNfloat0-10 to 10
LFOamplfo_depth_onccNamplfo_depthccN alias.N/AN/ASFZ v2
LFOamplfo_depthchanaftLFO depth when channel aftertouch MIDI messages are received.float0-10 to 10
LFOamplfo_depthpolyaftLFO depth when polyphonic aftertouch MIDI messages are received.float0-10 to 10
LFOamplfo_fadeLFO fade-in effect time.float00 to 100SFZ v1
LFOamplfo_freqLFO frequency, in hertz.float00 to 20SFZ v1
LFOamplfo_freqccNfloat0-200 to 200
LFOamplfo_freqchanaftLFO frequency change when channel aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOamplfo_freqpolyaftLFO frequency change when polyphonic aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOfillfo_delayThe time before the LFO starts oscillating.float00 to 100SFZ v1
LFOfillfo_depthLFO depth.float0-1200 to 1200SFZ v1
LFOfillfo_depthccNfloat0-1200 to 1200
LFOfillfo_depth_onccNfillfo_depthccN alias.N/AN/ASFZ v2
LFOfillfo_depthchanaftLFO depth when channel aftertouch MIDI messages are received.float0-1200 to 1200
LFOfillfo_depthpolyaftLFO depth when polyphonic aftertouch MIDI messages are received.float0-1200 to 1200
LFOfillfo_fadeLFO fade-in effect time.float00 to 100SFZ v1
LFOfillfo_freqLFO frequency, in hertz.float00 to 20SFZ v1
LFOfillfo_freqccNfloat0-200 to 200
LFOfillfo_freqchanaftLFO frequency change when channel aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOfillfo_freqpolyaftLFO frequency change when polyphonic aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOpitchlfo_delayThe time before the LFO starts oscillating.float00 to 100SFZ v1
LFOpitchlfo_depthLFO depth.float0-1200 to 1200SFZ v1
LFOpitchlfo_depthccNfloat0-1200 to 1200
LFOpitchlfo_depth_onccNpitchlfo_depthccN alias.N/AN/ASFZ v2
LFOpitchlfo_depthchanaftLFO depth when channel aftertouch MIDI messages are received.float0-1200 to 1200
LFOpitchlfo_depthpolyaftLFO depth when polyphonic aftertouch MIDI messages are received.float0-1200 to 1200
LFOpitchlfo_fadeLFO fade-in effect time.float00 to 100SFZ v1
LFOpitchlfo_freqLFO frequency, in hertz.float00 to 20SFZ v1
LFOpitchlfo_freqccNfloat0-200 to 200
LFOpitchlfo_freqchanaftLFO frequency change when channel aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOpitchlfo_freqpolyaftLFO frequency change when polyphonic aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOlfoN_freqThe base frequency of LFO number N, in Hertz.floatN/ASFZ v2
LFOlfoN_freq_onccXN/AN/A
LFOlfoN_freq_smoothccXN/AN/A
LFOlfoN_freq_stepccXN/AN/A
LFOlfoN_delayOnset delay for LFO number N.float0SFZ v2
LFOlfoN_delay_onccXN/AN/A
LFOlfoN_fadeFade-in time for LFO number N.floatN/ASFZ v2
LFOlfoN_fade_onccXfloatN/A
LFOlfoN_phaseInitial phase shift for LFO number N.float00 to 1SFZ v2
LFOlfoN_phase_onccXN/AN/A
LFOlfoN_countNumber of LFO repetitions for LFO N before the LFO stops.integerN/ASFZ v2
LFOlfoN_waveLFO waveform selection.integer1SFZ v2
LFOlfoN_waveXlfoN_wave alias.N/AN/AARIA
LFOlfoN_wave_onccXN/AN/AARIA
LFOlfoN_stepsNumber of steps in LFO step sequencer.integerN/ASFZ v2
LFOlfoN_stepXLevel of the step number X in LFO step sequencer.floatN/A-100 to 100SFZ v2
LFOlfoN_stepX_onccYN/AN/A
LFOlfoN_smoothN/AN/ASFZ v2
LFOlfoN_smooth_onccXN/AN/A
LFOlfoN_volumeN/AN/ASFZ v2
LFOlfoN_volume_onccXN/AN/A
LFOlfoN_volume_smoothccXN/AN/A
LFOlfoN_volume_stepccXN/AN/A
LFOlfoN_amplitudeN/AN/ASFZ v2
LFOlfoN_amplitude_onccXN/AN/A
LFOlfoN_amplitude_smoothccXN/AN/A
LFOlfoN_amplitude_stepccXN/AN/A
LFOlfoN_panN/AN/ASFZ v2
LFOlfoN_pan_onccXN/AN/A
LFOlfoN_pan_smoothccXN/AN/A
LFOlfoN_pan_stepccXN/AN/A
LFOlfoN_widthN/AN/ASFZ v2
LFOlfoN_width_onccXN/AN/A
LFOlfoN_width_smoothccXN/AN/A
LFOlfoN_width_stepccXN/AN/A
LFOlfoN_freq_lfoXN/AN/ASFZ v2
LFOlfoN_freq_lfoX_onccYN/AN/AARIA
LFOlfoN_depth_lfoXN/AN/ASFZ v2
LFOlfoN_depthadd_lfoXN/AN/ASFZ v2
LFOlfoN_pitchN/AN/ASFZ v2
LFOlfoN_pitch_curveccXSpecifies the ‹curve› number which MIDI CC X uses to modulate lfoN_pitch.integer00 to 255
LFOlfoN_pitch_onccXN/AN/A
LFOlfoN_pitch_smoothccXN/AN/A
LFOlfoN_pitch_stepccXN/AN/A
LFOlfoN_cutoffN/AN/ASFZ v2
LFOlfoN_cutoff2lfoN_cutoff alias.N/AN/ASFZ v2
LFOlfoN_cutoff2_onccXN/AN/A
LFOlfoN_cutoff2_smoothccXN/AN/A
LFOlfoN_cutoff2_stepccXN/AN/A
LFOlfoN_cutoff_onccXN/AN/A
LFOlfoN_cutoff_smoothccXN/AN/A
LFOlfoN_cutoff_stepccXN/AN/A
LFOlfoN_resonanceN/AN/ASFZ v2
LFOlfoN_resonance2lfoN_resonance alias.N/AN/ASFZ v2
LFOlfoN_resonance2_onccXN/AN/A
LFOlfoN_resonance2_smoothccXN/AN/A
LFOlfoN_resonance2_stepccXN/AN/A
LFOlfoN_resonance_onccXN/AN/A
LFOlfoN_resonance_smoothccXN/AN/A
LFOlfoN_resonance_stepccXN/AN/A
LFOlfoN_eqXfreqN/AN/ASFZ v2
LFOlfoN_eqXfreq_onccYN/AN/A
LFOlfoN_eqXfreq_smoothccYN/AN/A
LFOlfoN_eqXfreq_stepccYN/AN/A
LFOlfoN_eqXbwN/AN/ASFZ v2
LFOlfoN_eqXbw_onccYN/AN/A
LFOlfoN_eqXbw_smoothccYN/AN/A
LFOlfoN_eqXbw_stepccYN/AN/A
LFOlfoN_eqXgainN/AN/ASFZ v2
LFOlfoN_eqXgain_onccYN/AN/A
LFOlfoN_eqXgain_smoothccYN/AN/A
LFOlfoN_eqXgain_stepccYN/AN/A
LFOlfoN_decimN/AN/ASFZ v2
LFOlfoN_decim_onccXN/AN/A
LFOlfoN_decim_smoothccXN/AN/A
LFOlfoN_decim_stepccXN/AN/A
LFOlfoN_bitredN/AN/ASFZ v2
LFOlfoN_bitred_onccXN/AN/A
LFOlfoN_bitred_smoothccXN/AN/A
LFOlfoN_bitred_stepccXN/AN/A
LFOlfoN_noiselevelN/AN/ASFZ v2
LFOlfoN_noiselevel_onccXN/AN/A
LFOlfoN_noiselevel_smoothccXN/AN/A
LFOlfoN_noiselevel_stepccXN/AN/A
LFOlfoN_noisestepN/AN/ASFZ v2
LFOlfoN_noisestep_onccXN/AN/A
LFOlfoN_noisestep_smoothccXN/AN/A
LFOlfoN_noisestep_stepccXN/AN/A
LFOlfoN_noisetoneN/AN/ASFZ v2
LFOlfoN_noisetone_onccXN/AN/A
LFOlfoN_noisetone_smoothccXN/AN/A
LFOlfoN_noisetone_stepccXN/AN/A
LFOlfoN_driveN/AN/ASFZ v2
LFOlfoN_drive_onccXN/AN/A
LFOlfoN_drive_smoothccXN/AN/A
LFOlfoN_drive_stepccXN/AN/A
LFOlfoN_offsetDC offset - Add to LFO output; not affected by scale.floatN/AARIA
LFOlfoN_offsetXlfoN_offset alias.N/AN/A
LFOlfoN_ratioSets the ratio between the specified sub waveform and the main waveform.floatN/AARIA
LFOlfoN_ratioXlfoN_ratio alias.N/AN/A
LFOlfoN_scaleSets the scaling between the specified sub waveform and the main waveform.floatN/AARIA
LFOlfoN_scaleXlfoN_scale alias.N/AN/A
LFOlfoN_sample_dyn_paramXN/AN/AARIA
LFOlfoN_sample_dyn_paramX_onccYN/AN/A
Curvescurve_indexCurve definition ID.integerN/A0 to 255ARIA
CurvesvNNNDefines a point in a custom curve definition.floatN/A-1 to 1SFZ v2
Effectsapan_depthN/A0 to 100SFZ v2
Effectsapan_depth_onccNN/AN/A
Effectsapan_dryN/A0 to 100SFZ v2
Effectsapan_dry_onccNN/AN/A
Effectsapan_freqfloatN/ASFZ v2
Effectsapan_freq_onccNN/AN/A
Effectsapan_phasefloatN/A0 to 180SFZ v2
Effectsapan_phase_onccNN/AN/A
Effectsapan_waveformLFO wave number.N/AN/ASFZ v2
Effectsapan_wetN/A0 to 100SFZ v2
Effectsapan_wet_onccNN/AN/A
EffectsbitredBit reduction.N/A0 to 100SFZ v2
Effectsbitred_onccNN/AN/A
Effectsbitred_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate bitred.integer00 to 255
Effectsbitred_smoothccNN/AN/A
Effectsbitred_stepccNN/AN/A
EffectsbusThe target bus for the effect.stringmainSFZ v2
Effectsbypass_onccNSets up a bypass controller for the effect.floatN/ASFZ v2
Effectscomp_attackfloatN/ASFZ v2
Effectscomp_gainN/AN/ASFZ v2
Effectscomp_ratioN/A0 to 100SFZ v2
Effectscomp_releasefloatN/ASFZ v2
Effectscomp_stlinkstringN/ASFZ v2
Effectscomp_thresholdfloatN/ASFZ v2
EffectsdecimDecimator.N/A0 to 100SFZ v2
Effectsdecim_onccNN/AN/A
Effectsdecim_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate decim.integer00 to 255
Effectsdecim_smoothccNN/AN/A
Effectsdecim_stepccNN/AN/A
Effectsdelay_cutofffloatN/ASFZ v2
Effectsdelay_cutoff_onccNN/AN/A
Effectsdelay_damphiN/A0 to 100SFZ v2
Effectsdelay_damphi_onccNN/AN/A
Effectsdelay_damploN/A0 to 100SFZ v2
Effectsdelay_damplo_onccNN/AN/A
Effectsdelay_dryN/A0 to 100SFZ v2
Effectsdelay_dry_onccNN/AN/A
Effectsdelay_feedbackN/A0 to 100SFZ v2
Effectsdelay_feedback_onccNN/AN/A
Effectsdelay_filterName of filter type.stringN/ASFZ v2
Effectsdelay_inputN/A0 to 100SFZ v2
Effectsdelay_input_onccNN/AN/A
Effectsdelay_levelcN/A0 to 100SFZ v2
Effectsdelay_levellN/A0 to 100SFZ v2
Effectsdelay_levelrN/A0 to 100SFZ v2
Effectsdelay_lfofreqfloatN/ASFZ v2
Effectsdelay_lfofreq_onccNN/AN/A
Effectsdelay_moddepthN/A0 to 100SFZ v2
Effectsdelay_moddepth_onccNN/AN/A
Effectsdelay_modestringN/ASFZ v2
Effectsdelay_pancN/A0 to 100SFZ v2
Effectsdelay_panc_onccNN/AN/A
Effectsdelay_panlN/A0 to 100SFZ v2
Effectsdelay_panl_onccNN/AN/A
Effectsdelay_panrN/A0 to 100SFZ v2
Effectsdelay_panr_onccNN/AN/A
Effectsdelay_resonanceN/AN/ASFZ v2
Effectsdelay_resonance_onccNN/AN/A
Effectsdelay_spreadN/A0 to 100SFZ v2
Effectsdelay_spread_onccNN/AN/A
Effectsdelay_syncc_onccNN/AN/ASFZ v2
Effectsdelay_syncl_onccNN/AN/ASFZ v2
Effectsdelay_syncr_onccNN/AN/ASFZ v2
Effectsdelay_time_tapN/AN/ASFZ v2
Effectsdelay_timecN/AN/ASFZ v2
Effectsdelay_timec_onccNN/AN/A
Effectsdelay_timelN/AN/ASFZ v2
Effectsdelay_timel_onccNN/AN/A
Effectsdelay_timerN/AN/ASFZ v2
Effectsdelay_timer_onccNN/AN/A
Effectsdelay_wetN/A0 to 100SFZ v2
Effectsdelay_wet_onccNN/AN/A
EffectsdirecttomainGain of the main bus into the output.float1000 to 100SFZ v2
Effectsdisto_depthN/A0 to 100SFZ v2
Effectsdisto_depth_onccNN/AN/A
Effectsdisto_dryN/A0 to 100SFZ v2
Effectsdisto_dry_onccNN/AN/A
Effectsdisto_stagesN/AN/ASFZ v2
Effectsdisto_toneN/A0 to 100SFZ v2
Effectsdisto_tone_onccNN/AN/A
Effectsdisto_wetN/A0 to 100SFZ v2
Effectsdisto_wet_onccNN/AN/A
Effectsdsp_orderSignal flow type in Rapture's DSP block.integerN/A0 to 14SFZ v2
Effectseffect1Level of effect1 send, in percentage (reverb in Cakewalk sfz).float00 to 100SFZ v1
Effectseffect2Level of effect2 send, in percentage (chorus in Cakewalk sfz).float00 to 100SFZ v1
Effectseffect3Gain of the region's send into the 3rd effect bus.float00 to 100SFZ v2
Effectseffect4Gain of the region's send into the 4th effect bus.float00 to 100SFZ v2
Effectseq_bwN/AN/ASFZ v2
Effectseq_bw_onccNN/AN/A
Effectseq_freqN/AN/ASFZ v2
Effectseq_freq_onccNN/AN/A
Effectseq_gainN/AN/ASFZ v2
Effectseq_gain_onccNN/AN/A
Effectseq_typeN/AN/ASFZ v2
Effectsfilter_cutoffN/AN/ASFZ v2
Effectsfilter_cutoff_onccNN/AN/A
Effectsfilter_resonanceN/AN/ASFZ v2
Effectsfilter_resonance_onccNN/AN/A
Effectsfilter_typeName of filter type.stringN/ASFZ v2
EffectsfxNtomainGain of the Nth effect bus into the output.float00 to 100SFZ v2
EffectsfxNtomixGain of the Nth effect bus into the Mix node.float00 to 100SFZ v2
Effectsgate_onccNGate manual control.N/AN/ASFZ v2
Effectsgate_attackN/AN/ASFZ v2
Effectsgate_releaseN/AN/ASFZ v2
Effectsgate_stlinkstringN/ASFZ v2
Effectsgate_thresholdN/AN/ASFZ v2
EffectsinternalCakewalk internal features switch.stringoffSFZ v2
Effectsparam_offsetAdds a number to the parameter numbers of built-in or vendor-specific effects.integerN/AARIA
Effectsphaser_depthN/A0 to 100SFZ v2
Effectsphaser_depth_onccNN/AN/A
Effectsphaser_feedbackN/A0 to 100SFZ v2
Effectsphaser_feedback_onccNN/AN/A
Effectsphaser_freqfloatN/ASFZ v2
Effectsphaser_freq_onccNN/AN/A
Effectsphaser_phase_onccNN/A0 to 100SFZ v2
Effectsphaser_stagesN/AN/ASFZ v2
Effectsphaser_waveformLFO wave number.N/AN/ASFZ v2
Effectsphaser_wetN/A0 to 100SFZ v2
Effectsphaser_wet_onccNN/AN/A
Effectsreverb_dampN/A0 to 100SFZ v2
Effectsreverb_damp_onccNN/AN/A
Effectsreverb_dryN/A0 to 100SFZ v2
Effectsreverb_dry_onccNN/AN/A
Effectsreverb_inputN/A0 to 100SFZ v2
Effectsreverb_input_onccNN/AN/A
Effectsreverb_predelayfloatN/ASFZ v2
Effectsreverb_predelay_onccNN/AN/A
Effectsreverb_sizeN/A0 to 100SFZ v2
Effectsreverb_size_onccNN/AN/A
Effectsreverb_toneN/A0 to 100SFZ v2
Effectsreverb_tone_onccNN/AN/A
Effectsreverb_typestringN/ASFZ v2
Effectsreverb_wetN/A0 to 100SFZ v2
Effectsreverb_wet_onccNN/AN/A
Effectsstatic_cyclic_levelN/A0 to 100SFZ v2
Effectsstatic_cyclic_timefloatN/ASFZ v2
Effectsstatic_filterName of filter type.stringN/ASFZ v2
Effectsstatic_levelN/A0 to 100SFZ v2
Effectsstatic_level_onccNN/AN/A
Effectsstatic_random_levelN/A0 to 100SFZ v2
Effectsstatic_random_maxtimefloatN/ASFZ v2
Effectsstatic_random_mintimefloatN/ASFZ v2
Effectsstatic_stereoN/AN/ASFZ v2
Effectsstatic_toneN/A0 to 100SFZ v2
Effectsstrings_numberNumber of synthesized resonant strings.N/AN/ASFZ v2
Effectsstrings_wet_onccNN/A0 to 100SFZ v2
Effectstdfir_dryN/A0 to 100SFZ v2
Effectstdfir_dry_onccNN/AN/A
Effectstdfir_gainN/A0 to 100SFZ v2
Effectstdfir_impulseN/AN/ASFZ v2
Effectstdfir_wetN/A0 to 100SFZ v2
Effectstdfir_wet_onccNN/AN/A
EffectstypeEffect type or vendor-specific effect name. Varies across SFZ players.stringN/ASFZ v2
Effectsvendor_specificDefines vendor-specific effects, for example Garritan-specific stage depth effect in ARIA.stringN/AARIA
Loadingload_modeintegerN/A0 to 1SFZ v2
Loadingload_startintegerN/ASFZ v2
Loadingload_endintegerN/ASFZ v2
Loadingsample_qualitySample playback quality settings.integerN/A1 to 10SFZ v2
LoadingimageSets the background image of the instrument.stringN/ASFZ v2
Wavetable OscillatoroscillatorstringN/ASFZ v2
Wavetable Oscillatoroscillator_detuneN/AN/ASFZ v2
Wavetable Oscillatoroscillator_detune_onccNN/AN/A
Wavetable Oscillatoroscillator_modeThe modulation type.integer00 to 2SFZ v2
Wavetable Oscillatoroscillator_mod_depthN/AN/ASFZ v2
Wavetable Oscillatoroscillator_mod_depth_onccNN/AN/A
Wavetable Oscillatoroscillator_mod_smoothccNN/AN/A
Wavetable Oscillatoroscillator_multiConfigure a region to use more than one oscillator.integer11 to 9SFZ v2
Wavetable Oscillatoroscillator_phaseOscillator phase. Negative values for random phase.floatN/A-1 to 360SFZ v2
Wavetable Oscillatoroscillator_qualityintegerN/A0 to 3SFZ v2
Wavetable Oscillatoroscillator_table_sizeN/AN/ASFZ v2
+
+
+
+ +
+

+ +
+ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/curveccN/index.html b/modulations/curveccN/index.html new file mode 100644 index 000000000..9d4d21841 --- /dev/null +++ b/modulations/curveccN/index.html @@ -0,0 +1,696 @@ + + + + + + + + + curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

curveccN

The curvecc modifier, when it's present, designates a ‹curve› which shapes +the controller input. If absent, the default curve is used, a straight line +which runs from 0 to 1.

+

The value of curvecc is a positive integer. It is the index of a curve, +either built in or user-defined, which corresponds to the ‹curve› opcode +curve_index.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/envelope_generators/index.html b/modulations/envelope_generators/index.html new file mode 100644 index 000000000..59e6a0e64 --- /dev/null +++ b/modulations/envelope_generators/index.html @@ -0,0 +1,852 @@ + + + + + + + + + Envelope Generators - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Envelope Generators

Envelope Generator opcodes are part of the Modulation category of opcodes:

+

Traditional (SFZ 1.0)

+

Traditional envelope generators using ADSR phases can be set using the SFZ 1.0 +ampeg (amplitude), pitcheg (pitch) and fileg (filter) opcodes. +These opcodes also support additional delay and hold phases. +The phases in order are: Delay-Attack-Hold-Decay-Sustain-Release. See below +for the full list of relevant opcodes.

+

Flex (SFZ 2.0)

+

With SFZ 2.0, you can create one or more "flex" envelope generators. +Each flex EG is mapped to a destination (amplitude, pitch, etc.) +and contains two or more points with a duration and level determined at each point. +The duration indicates the amount of time it takes from the previous envelope point to the current. +In this way, you can use flex EGs to essentially draw any envelope shape you desire.

+

Here is an example flex EG:

+
eg01_pitch=1200
+eg01_time1=0 eg01_level1=0
+eg01_time2=1 eg01_level2=1
+eg01_time3=2 eg01_level3=0.5 eg01_sustain=3
+eg01_time4=1 eg01_level4=0
+
+

How to interpret the opcodes in the example above:

+
    +
  • All of these opcodes begin with "eg01_", indicating the first flex EG + for the current region. A second flex EG would begin with "eg02_", and so on.
  • +
  • The first opcode determines that the envelope will affect note pitch + to a maximum of 1200 cents (one octave).
  • +
  • Each envelope point is numbered, and these numbers appear at the end + of the opcode name (this opcode has four envelope points). There should be + both a "time" and and a "level" opcode specified for each envelope point.
  • +
  • The "time" opcodes indicate time duration in seconds from the previous envelope point.
  • +
  • The "level" opcodes indicate the level percentage at each envelope point + (0-1, with "1" meaning "100%").
  • +
  • The optional "sustain" opcode determines which envelope point will function + as "sustain" in the traditional ADSR model.
  • +
+

So here is what happens in the four envelope points in the example:

+
    +
  1. Note starts at original pitch.
  2. +
  3. Pitch takes one second to rise 1200 cents (one octave).
  4. +
  5. Pitch takes two seconds to lower to 50% of 1200 cents. + The pitch will remain at this level as long as the note is held.
  6. +
  7. After releasing the note, the note will take one second to lower to the original pitch.
  8. +
+

Envelope Curves

+

SFZ—at least the ARIA Engine and sfizz implementations—uses the following curves for SFZ 1.0 envelopes +(ampeg, pitcheg, fileg, probably others but not tested):

+
    +
  • Attack: linear (convex in dB)
  • +
  • Decay: convex (linear in dB)
  • +
  • Release: convex (linear in dB)
  • +
+

ARIA supports changing the shape of each phase curve via opcodes +such as ampeg_attack_shape, fileg_decay_shape, etc. +Setting the value for any of these to 0 will result in a linear curve shape, +with positive and negative values resulting in concave and convex curves, respectively.

+

Flex EGs (SFZ 2.0) phases all use a linear curve shape by default, +but this can be bent into a logarithmic curve using positive/negative values +as described in the above paragraph. For example, the following opcode +will set the shape of the first eg01 phase to match the convex curve +used in the SFZ 1.0 ampeg decay/release: eg01_shape2=-10.36

+

Note that the shape opcode should be placed on the second point affected by the curve. +In other words, eg01_shape2=-10.36 will affect the curve between envelope points 1 and 2.

+

It is also important to know that ampeg/pitcheg/fileg decay (both SFZ & SF2) +behaves differently than flex EG in relation to the sustain level:

+
    +
  • ampeg decay: The level in the decay phase descends at the rate + determined by ampeg_decay but stops once it hits the sustain level. + If your decay phase length is 1 second and sustain is 50%, + the sustain level is reached after only half a second in the decay phase + (assuming linear phase curve).
  • +
  • flex EG phase: The level always scales from starting to ending value + over the full duration of the phase. When emulating an ADSR envelope + using a flex EG, if your decay phase length is 1 second and sustain is 50%, + the volume level won't reach 50% until the end of that one second.
  • +
+

If trying to match a SoundFont instrument's logarithmic curves, +set the phase's shape to 6 (concave) or -6 (convex). +This is only an approximation, as the curve is not identical.

+

If you wish to use a flex EG to replace the SFZ 1.0 ampeg, +set the destination as eg01_ampeg=100 rather than eg01_amplitude=100. +This will disable the SFZ 1.0 ampeg and allow the flex EG to provide a release phase.

+

SFZ 1 EG Opcodes

+

The 3 EG destinations in the SFZ 1 standard are: ampeg (amplitude), +fileg (filter) and pitcheg (pitch).

+

The EG destinations are represented by (eg type) in the below list - so +ampeg_attack would be the amplitude envelope attack, pitcheg_sustain would be +the pitch envelope sustain level etc.

+

These are 6-points Delay-Attack-Hold-Decay-Sustain-Release.

+ +

Flex EGs (SFZ 2) Opcodes

+

Flexible EG can have as many points as needed. level and time for each point is +set accordingly.

+ +

Flex EGs Destinations

+

These destinations are added as a suffix to 'egN_' - for example, +eg01_pitch=2400 would have envelope 01 modulate pitch, +with an envelope depth of 2400 cents.

+
    +
  • amplitude
  • +
  • amplitude_oncc
  • +
  • depth
  • +
  • depth_lfoX
  • +
  • depth_oncc
  • +
  • depthadd_lfoX
  • +
  • freq_lfoX
  • +
  • pitch
  • +
  • pitch_oncc
  • +
  • cutoff
  • +
  • cutoff_oncc
  • +
  • cutoff2
  • +
  • cutoff2_oncc
  • +
  • eqNbw
  • +
  • eqNbw_oncc
  • +
  • eqNfreq
  • +
  • eqNfreq_oncc
  • +
  • eqNgain
  • +
  • eqNgain_oncc
  • +
  • pan
  • +
  • pan_oncc
  • +
  • resonance
  • +
  • resonance_oncc
  • +
  • resonance2
  • +
  • resonance2_oncc
  • +
  • volume
  • +
  • volume_oncc
  • +
  • width
  • +
  • width_oncc
  • +
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/icurveccN/index.html b/modulations/icurveccN/index.html new file mode 100644 index 000000000..301fbcdd7 --- /dev/null +++ b/modulations/icurveccN/index.html @@ -0,0 +1,697 @@ + + + + + + + + + icurveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

icurveccN

(target)_icurvecc is a deprecated ARIA extension. It acted as a companion to +(target)_curvecc and determined whether the curve for the specified +target and CC should be calculated allowing fractional values, +or whether the calculations should be rounded off to allow whole numbers only. +With interpolation, it would be possible, for example, for CC2 to be effectively +equal to 63.5, but with interpolation off it would jump from 63 directly to 64. +In later versions of ARIA, fractional values are always used.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/index.html b/modulations/index.html new file mode 100644 index 000000000..81b8f97a9 --- /dev/null +++ b/modulations/index.html @@ -0,0 +1,707 @@ + + + + + + + + + Modulations - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Modulations

Modulations which are part of the SFZ1 specification generally uses both the +_ccN and ccN suffixes, for example cutoff_ccN or ampeg_releaseccN. +Modulations added in the SFZ2 specification generally use _onccN instead, +for example delay_samples_onccN. This is a source of possible confusion. +As a solution, ARIA and possibly other SFZ2 players allow either _ccN, _onccN +or ccN (with no underscore) to be used for many modulations, +and interpret all of those the same. However, these aliases are not part of +either the SFZ1 and SFZ2 standard, and for maximum compatibility, +it is best to use the standard syntax.

+

In this section they will be described in a generic way, +to be applied to the various opcode targets.

+

See also the related tutorials for SFZ1 and SFZ2.

+ +
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/lfo/index.html b/modulations/lfo/index.html new file mode 100644 index 000000000..5068908ff --- /dev/null +++ b/modulations/lfo/index.html @@ -0,0 +1,822 @@ + + + + + + + + + LFO - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

LFO

LFO (Low Frequency Oscillator) opcodes are part of the Modulation +category of opcodes. They are used to create effects such as pitch vibrato +(when modulating pitch), tremolo (when modulating volume) and filter wobble +(when modulating filter cutoff)

+

LFOs are triggered by note-on events for the specified region, which means there +are no free-running LFOs in the SFZ spec. If a free-running LFO is needed, for +example to apply one slow pitch vibrato wave to a series of rapidly plucked oud +notes, that will need to use an external modulation source outside the +SFZ player - in other words, perhaps in a DAW that the SFZ player is being used +in as a plugin.

+

SFZ 1 LFOs

+

3 LFO destinations in SFZ 1 standard:

+
    +
  • amplfo (amplitude)
  • +
  • fillfo (filter)
  • +
  • pitchlfo (pitch)
  • +
+

Here's a very simple example of a pitch LFO integration

+ +

Assignable LFOs (SFZ 2)

+

Much like the Flex EG, these newer LFO can target almost any tone-defining parameter:

+

Here's a very simple example of an sfz 2 lfo integration, targeted to pitch

+ +

Assignable LFO Destinations

+

These destinations are added as a suffix to 'lfoN_'. For example, +lfo01_pitch=100 makes LFO 01 affect pitch with a max depth of 100 cents, and +lfo03_freq_lfo01=1.3 would make LFO 03 add up to 1.3 Hertz to the +frequency of LFO 01. Note that it's possible to create modulation feedback +loops this way, for example LFO 01 modulating LFO 02 while LFO 02 modulates +LFO 01.

+

In addition to the below, in ARIA it's possible to control the amount +of freq_lfo with MIDI CC, so lfo03_freq_lfo01_oncc117=1.3 would make LFO 03 add +up to 1.3 Hertz to the frequency of LFO 01, with the amount modulated by MIDI +CC 117. So, freq_lfo_oncc would be added to the below list for ARIA, though +depth_lfo_oncc and depthadd_lfo_oncc do not appear to be available.

+
    +
  • freq_lfoX
  • +
  • depth_lfoX
  • +
  • depthadd_lfoX
  • +
  • pitch
  • +
  • pitch_oncc
  • +
  • pitch_smoothcc
  • +
  • pitch_stepcc
  • +
  • decim
  • +
  • decim_oncc
  • +
  • decim_smoothcc
  • +
  • decim_stepcc
  • +
  • bitred
  • +
  • bitred_oncc
  • +
  • bitred_smoothcc
  • +
  • bitred_stepcc
  • +
  • cutoff
  • +
  • cutoff_oncc
  • +
  • cutoff_smoothcc
  • +
  • cutoff_stepcc
  • +
  • resonance
  • +
  • resonance_oncc
  • +
  • resonance_smoothcc
  • +
  • resonance_stepcc
  • +
  • cutoff2
  • +
  • cutoff2_oncc
  • +
  • cutoff2_smoothcc
  • +
  • cutoff2_stepcc
  • +
  • resonance2
  • +
  • resonance2_oncc
  • +
  • resonance2_smoothcc
  • +
  • resonance2_stepcc
  • +
  • eqNfreq
  • +
  • eqNfreq_oncc
  • +
  • eqNfreq_smoothcc
  • +
  • eqNfreq_stepcc
  • +
  • eqNbw
  • +
  • eqNbw_oncc
  • +
  • eqNbw_smoothcc
  • +
  • eqNbw_stepcc
  • +
  • eqNgain
  • +
  • eqNgain_oncc
  • +
  • eqNgain_smoothcc
  • +
  • eqNgain_stepcc
  • +
  • volume
  • +
  • volume_oncc
  • +
  • volume_smoothcc
  • +
  • volume_stepcc
  • +
  • amplitude
  • +
  • amplitude_oncc
  • +
  • amplitude_smoothcc
  • +
  • amplitude_stepcc
  • +
  • pan
  • +
  • pan_oncc
  • +
  • pan_smoothcc
  • +
  • pan_stepcc
  • +
  • width
  • +
  • width_oncc
  • +
  • width_smoothcc
  • +
  • width_stepcc
  • +
+

Practical Considerations

+

SFZ allows LFOs to modulate the frequency of other LFOs, including feedback +(LFO number M modulating LFO number N, and vice versa). Mathematically, this +can cause very chaotic results. However, in the Cakewalk products (and possibly +also in ARIA, though this is not checked) this is simplified. If the number of the +modulating LFO is lower than the LFO being modulated (for example, LFO1 modulates +LFO2), the modulation is applied when it is calculated. However, if the number +of the modulating LFO is higher than the LFO being modulated (for example, LFO4 +modulating LFO2), the modulation is not applied until the next LFO frequency +update cycle.

+

This both keeps LFO feedback controlled, and reduces the CPU needed to calculate +LFO modulations.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/moved/ampeg_vel2attack/index.html b/modulations/moved/ampeg_vel2attack/index.html new file mode 100644 index 000000000..11c973454 --- /dev/null +++ b/modulations/moved/ampeg_vel2attack/index.html @@ -0,0 +1,708 @@ + + + + + + + + + Ampeg vel2attack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+

---

+

Examples

+
pitcheg_vel2delay=-1.2
+ampeg_vel2delay=0.1
+
+

Attack time will be calculated as

+

attack time = (eg type)_delay + (eg type)_vel2delay * velocity / 127

+

Range is -100 seconds to 100 seconds, but in most typical cases, the effect of +velocity on envelope delay and attack times will be negative, and the effect +of velocity on other envelope parameters positive. This would make a sound have +a faster attack and a slower decay when a note has higher velocity, with attack +of 0.5 seconds at 0 velocity and 0.1 seconds at 127 velocity:

+
ampeg_attack=0.5
+ampeg_vel2attack=-0.4
+ampeg_decay=0.5
+ampeg_vel2decay=1
+ampeg_sustain=50
+ampeg_release=0.25
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/moved/ampeg_vel2decay/index.html b/modulations/moved/ampeg_vel2decay/index.html new file mode 100644 index 000000000..7631f6543 --- /dev/null +++ b/modulations/moved/ampeg_vel2decay/index.html @@ -0,0 +1,696 @@ + + + + + + + + + Ampeg vel2decay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+

---

+

Examples

+
fileg_vel2decay=1.2
+ampeg_vel2decay=0.1
+
+

Decay time will be calculated as

+

decay time = (eg type)_decay + (eg type)_vel2decay * velocity / 127

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/moved/ampeg_vel2delay/index.html b/modulations/moved/ampeg_vel2delay/index.html new file mode 100644 index 000000000..afd191203 --- /dev/null +++ b/modulations/moved/ampeg_vel2delay/index.html @@ -0,0 +1,699 @@ + + + + + + + + + Ampeg vel2delay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+

---

+

Examples

+
pitcheg_vel2delay=-0.2
+ampeg_vel2delay=0.1
+
+

Delay time will be calculated as

+

delay time = (eg type)_delay + (eg type)_vel2delay * velocity / 127

+

Range is -100 seconds to 100 seconds, but in most typical cases, the effect of +velocity on envelope delay and attack times will be negative, and the effect of +velocity on other envelope parameters positive.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/moved/ampeg_vel2hold/index.html b/modulations/moved/ampeg_vel2hold/index.html new file mode 100644 index 000000000..2b911addb --- /dev/null +++ b/modulations/moved/ampeg_vel2hold/index.html @@ -0,0 +1,696 @@ + + + + + + + + + Ampeg vel2hold - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+

---

+

Examples

+
pitcheg_vel2hold=1.2
+pitcheg_vel2hold=0.1
+
+

Hold time will be calculated as

+

hold time = (eg type)_hold + (eg type)_vel2hold * velocity / 127

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/moved/ampeg_vel2release/index.html b/modulations/moved/ampeg_vel2release/index.html new file mode 100644 index 000000000..422fb3b7c --- /dev/null +++ b/modulations/moved/ampeg_vel2release/index.html @@ -0,0 +1,696 @@ + + + + + + + + + Ampeg vel2release - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+

---

+

Examples

+
ampeg_vel2release=1.2
+fileg_vel2release=0.1
+
+

Release time will be calculated as

+

release time = (eg type)_release + (eg type)_vel2release * velocity / 127

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/moved/ampeg_vel2sustain/index.html b/modulations/moved/ampeg_vel2sustain/index.html new file mode 100644 index 000000000..b06024b31 --- /dev/null +++ b/modulations/moved/ampeg_vel2sustain/index.html @@ -0,0 +1,696 @@ + + + + + + + + + Ampeg vel2sustain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+

---

+

Examples

+
ampeg_vel2sustain=30
+pitcheg_vel2sustain=10
+
+

Sustain level will be calculated as

+

sustain level = (eg type)_sustain + (eg type)_vel2sustain

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/moved/amplfo_depthchanaft/index.html b/modulations/moved/amplfo_depthchanaft/index.html new file mode 100644 index 000000000..2a83d3ddf --- /dev/null +++ b/modulations/moved/amplfo_depthchanaft/index.html @@ -0,0 +1,695 @@ + + + + + + + + + Amplfo depthchanaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+

---

+

In decibels for amplitude, in cents for pitch and filter cutoff.

+

Examples

+
amplfo_depthchanaft=1
+fillfo_depthchanaft=400
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/moved/amplfo_depthpolyaft/index.html b/modulations/moved/amplfo_depthpolyaft/index.html new file mode 100644 index 000000000..78fca5065 --- /dev/null +++ b/modulations/moved/amplfo_depthpolyaft/index.html @@ -0,0 +1,695 @@ + + + + + + + + + Amplfo depthpolyaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+

---

+

In decibels for amplitude, in cents for pitch and filter cutoff.

+

Examples

+
amplfo_depthpolyaft=1
+fillfo_depthpolyaft=400
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/moved/amplfo_freqchanaft/index.html b/modulations/moved/amplfo_freqchanaft/index.html new file mode 100644 index 000000000..2d10f0fb8 --- /dev/null +++ b/modulations/moved/amplfo_freqchanaft/index.html @@ -0,0 +1,698 @@ + + + + + + + + + Amplfo freqchanaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+

---

+

Can be negative, and according to the SFZ spec the allowed range is -200 to 200, +which could be used to push LFO frequencies into audio frequency range, +allowing AM, FM and filter growl. Perhaps that was a typo and it should be +-20 to 20, as 20 Hz is the maximum LFO frequency in the SFZ 1 spec.

+

Examples

+
fillfo_freqchanaft=10
+fillfo_freqchanaft=-20
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/moved/amplfo_freqpolyaft/index.html b/modulations/moved/amplfo_freqpolyaft/index.html new file mode 100644 index 000000000..9532cd3ca --- /dev/null +++ b/modulations/moved/amplfo_freqpolyaft/index.html @@ -0,0 +1,698 @@ + + + + + + + + + Amplfo freqpolyaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+

---

+

Can be negative, and according to the SFZ spec the allowed range is -200 to 200, +which could be used to push LFO frequencies into audio frequency range, +allowing AM, FM and filter growl. Perhaps that was a typo and it should be +-20 to 20, as 20 Hz is the maximum LFO frequency in the SFZ 1 spec.

+

Examples

+
fillfo_freqpolyaft=10
+fillfo_freqpolyaft=-20
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/moved/eqN_vel2freq/index.html b/modulations/moved/eqN_vel2freq/index.html new file mode 100644 index 000000000..fadb70488 --- /dev/null +++ b/modulations/moved/eqN_vel2freq/index.html @@ -0,0 +1,700 @@ + + + + + + + + + eqN vel2freq - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+

---

+

Examples

+
eq1_vel2freq=1000
+
+eq1_vel2gain=-6
+eq2_vel2gain=9
+
+
Notes
+

When emulating timbral changes when there are not enough dynamic levels sampled, +this will often be a negative value for the lowest band, and a positive value +for the two higher bands.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/smoothccN/index.html b/modulations/smoothccN/index.html new file mode 100644 index 000000000..68319a6b2 --- /dev/null +++ b/modulations/smoothccN/index.html @@ -0,0 +1,705 @@ + + + + + + + + + smoothccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

smoothccN

Sets the smoothness for the target modulation in milliseconds. +Adds inertia to the modulation, so fast movements of the controller will have +a delayed, smoothed effect, similar to bend_smooth.

+

While SFZv2 does not limit the targets for smoothing in the spec, currently ARIA only implements smoothing for pitch-related and volume-related (including amplitude, pan and position) modulation targets.

+

Examples

+
<region>
+sample=*sine
+pitch_oncc27=1200
+pitch_smoothcc27=100
+
+

Notes

+

Increasing the smoothing past 100 ms allows the SFZ instrument creator to create a noticeable lag in the control response, which is useful when modeling guitar feedback, for example.

+

Default value is 0ms (no smoothing). However be aware some DAWs smooth the drawn CC automation before it reaches the SFZ player, which means some smoothing will occur regardless of what smoothcc is set to, and any smoothcc smoothing will be applied to those already smoothed control values.

+

For a detailed overview of how DAWs handle instananeous jumps in automation, see +https://www.admiralbumblebee.com/music/2019/06/22/Daw-V-Daw-Automation-Part-4.html.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/stepccN/index.html b/modulations/stepccN/index.html new file mode 100644 index 000000000..f9a9814ad --- /dev/null +++ b/modulations/stepccN/index.html @@ -0,0 +1,700 @@ + + + + + + + + + stepccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

stepccN

Sets the interval between consecutive steps. +If this is not used, there are 127 modulation steps.

+

Example

+

This describes a pitch controller which has 5 positions: +0, 300, 600, 900, 1200 cents.

+
<region>
+sample=*sine
+pitch_oncc16=1200
+pitch_stepcc16=300
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulations/vel2/index.html b/modulations/vel2/index.html new file mode 100644 index 000000000..5e57804ca --- /dev/null +++ b/modulations/vel2/index.html @@ -0,0 +1,710 @@ + + + + + + + + + (eg type)_vel2(target) - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

(eg type)_vel2(target)

The velocity_to modulations time, in seconds, can be calculated as:

+
(target) time = (eg type)_(target) + (eg type)_vel2(target) * velocity / 127
+
+

and the sustain level, in percentage, as:

+
sustain level = (eg type)_sustain + (eg type)_vel2sustain
+
+

Range is -100 seconds to 100 seconds, but in most typical cases, the effect of +velocity on envelope delay and attack times will be negative, and the effect +of velocity on other envelope parameters positive. This would make a sound have +a faster attack and a slower decay when a note has higher velocity, with attack +of 0.5 seconds at 0 velocity and 0.1 seconds at 127 velocity:

+
ampeg_attack=0.5
+ampeg_vel2attack=-0.4
+ampeg_decay=0.5
+ampeg_vel2decay=1
+ampeg_sustain=50
+ampeg_release=0.25
+
+

EQ

+

TODO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/news/index.html b/news/index.html new file mode 100644 index 000000000..e16216557 --- /dev/null +++ b/news/index.html @@ -0,0 +1,1169 @@ + + + + + + + + + Latest News - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Latest News

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+ + +
+ + + + + + + + + + + + + + + + + +

Bootstrap 5.3.0 with color modes

Published by redtide on 2023-06-03 11:43:28 + +

Bootstrap updated to v5.3.0 which supports color modes, which means that +if your system uses a dark color theme, it will adapt to your visual preferences +on browsers that supports it. +Highlight.js will adapt to the chosen theme, so the sfz examples will be shown with it.

+ + + + + + + + + + + + + + + + + +

Opcodes page update

Published by redtide on 2020-10-16 19:59:58 + +

For those who missed it we have some updates on the website, mainly regarding +the opcodes page. Recently I've added a javascript library that permits tables +column sorting, and now with an awesome contribution from @jpcima also a script +to filter opcode names, versions and categories. Hope you'll find them handy!

+ + + + + + + + + + + + + + + + + +

New tutorial and opcode additions

Published by redtide on 2020-03-17 00:00:00 + +

A new tutorial about subtractive synthesizers was shared by DSmolken's +sample instruments experience applied in the Caveman Cosmonaut sample library.
+Some fixes and additions were made in our opcode database and in software as well, +like the Windows OpenMPT music tracker by sagamusix.
+New contributions was provided by other users like jisaacstone, +and a big contribution from jpcima for the effects section.
+Now we have also a new page for convenience +that lists all opcodes present in our database.

+ + + + + + + + + + + + + + + + + +

New year, new work in progress

Published by redtide on 2020-01-31 00:00:00 + +

The most relevant additions on the website for this month were Instruments +and Modulations sections, adding slowly one by one some sample instruments +libraries created and freely distribuited over the net, and documenting in a +generic way the various modulations used in SFZ. +Some new opcodes were also added in our database, starting from some modulation +aliases like amplitude_ccN, pan_ccN and tune_ccN to the recent fil_gain. +I would like to thank some people who contributed to the site, like falkTX +for adding our news feed on Linuxaudio Planet, jpcima, MatFluor, PaulFd and sfw. +This website is an opensource non profit project, I hope to see more people +involved in the future to help make it grow.

+ + + + + + + + + + + + + + + + + +

Happy new year!

Published by RedTide on 2019-12-29 00:00:00 + +

Here we are with the latest relevant updates, the last ones for this year:

+
    +
  • Added *_mod and *_dynamic opcodes
  • +
  • Added Cakewalk SFZv2 opcodes (work in progress) page
  • +
  • Added the SFZ test suite for sample instruments developers in homepage
  • +
  • Improved SFZ syntax highlighting in Google Prettify for all pages
  • +
  • Search now works correctly, though it is slow and needs some more improvements
  • +
+

Happy new year!

+ + +
+ + +
+ + + + + + + + + + + + + + + + + +

Legato tutorial

Published by DSmolken on 2019-11-21 00:00:00 + +

The legato tutorial has been expanded from one simple example to include +simulated legato, simulated portamento, and true sampled legato.

+ + + + + + + + + + + + + + + + + +

New players and tutorial

Published by RedTide on 2019-11-16 00:00:00 + +

New applications were added to the players list recently: +- HISE +- sfizz +- liquidsfz

+

and a new tutorial from Sonoj 2019 Convention on how to recording samples +using Ardour and LinuxSampler by Christoph Kuhr to our +Video tutorials section.

+

Thanks to Stefan Westerfeld for our first GitHub pull request! And to +Sonoj organization for the video tutorial contribuition.

+

Last but not least, for those like me who prefer IRC we have now also an +IRC channel on freenode server.

+

/join us!

+ + + + + + + + + + + + + + + + + +

SFZ page on Italian Wikipedia

Published by RedTide on 2019-09-16 00:00:00 + +

A new page about the SFZ format has been added to the Italian Wikipedia. +Let's grow!

+ + + + + + + + + + + + + + + + + +

Modulations Explained

Published by DSmolken on 2019-08-01 00:00:00 + +

We have two new articles explaining the modulations possible in SFZ1 and SFZ2. +Hopefully it will now be much easier to understand what's possible +under each spec level, and just what those complex SFZ2 LFOs and envelopes can +and can't do.

+ + + + + + + + + + + + + + + + + +

New Tutorial

Published by DSmolken on 2019-07-25 00:00:00 + +

We've published a new tutorial explaining how to use samples to +model brushed drum techniques which produce a continuous sound +rather than a discrete hit. Admittedly, this is a rather niche technique not only +in the samples world but also in real-world music, mainly used in +jazz and some indie music. Next we plan to expand the vibrato tutorial, +which is currently only a simple code example.

+

Minor updates: ++ global_label, master_label, group_label and region_label opcodes added. ++ Added Carla and Bliss Sampler to SFZ players, updated TAL Sampler info.

+ + +
+ + +
+ + + + + + + + + + + + + + + + + +

New Website Launched

Published by RedTide on 2019-04-23 00:00:00 + +

We're proud to announce a new website!

+

+ + +
+ +
+ +
+
+ + + + + 1 + + + + + 2 + + + + + 3 + +
+ +
+

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/news/posts/2019-04-23-new-website-launched/index.html b/news/posts/2019-04-23-new-website-launched/index.html new file mode 100644 index 000000000..781c0e7c1 --- /dev/null +++ b/news/posts/2019-04-23-new-website-launched/index.html @@ -0,0 +1,698 @@ + + + + + + + + + New Website Launched - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

New Website Launched

We're proud to announce a new website!

+ +
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/news/posts/2019-07-25-new-tutorial/index.html b/news/posts/2019-07-25-new-tutorial/index.html new file mode 100644 index 000000000..2f2c16e1e --- /dev/null +++ b/news/posts/2019-07-25-new-tutorial/index.html @@ -0,0 +1,699 @@ + + + + + + + + + New Tutorial - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

New Tutorial

We've published a new tutorial explaining how to use samples to +model brushed drum techniques which produce a continuous sound +rather than a discrete hit. Admittedly, this is a rather niche technique not only +in the samples world but also in real-world music, mainly used in +jazz and some indie music. Next we plan to expand the vibrato tutorial, +which is currently only a simple code example.

+

Minor updates: ++ global_label, master_label, group_label and region_label opcodes added. ++ Added Carla and Bliss Sampler to SFZ players, updated TAL Sampler info.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/news/posts/2019-08-01-modulation_explained/index.html b/news/posts/2019-08-01-modulation_explained/index.html new file mode 100644 index 000000000..2797be421 --- /dev/null +++ b/news/posts/2019-08-01-modulation_explained/index.html @@ -0,0 +1,694 @@ + + + + + + + + + Modulations Explained - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Modulations Explained

We have two new articles explaining the modulations possible in SFZ1 and SFZ2. +Hopefully it will now be much easier to understand what's possible +under each spec level, and just what those complex SFZ2 LFOs and envelopes can +and can't do.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/news/posts/2019-09-16-sfz-page-on-italian-wikipedia/index.html b/news/posts/2019-09-16-sfz-page-on-italian-wikipedia/index.html new file mode 100644 index 000000000..c74c7fce4 --- /dev/null +++ b/news/posts/2019-09-16-sfz-page-on-italian-wikipedia/index.html @@ -0,0 +1,692 @@ + + + + + + + + + SFZ page on Italian Wikipedia - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

SFZ page on Italian Wikipedia

A new page about the SFZ format has been added to the Italian Wikipedia. +Let's grow!

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/news/posts/2019-11-16-new-players-and-tutorial/index.html b/news/posts/2019-11-16-new-players-and-tutorial/index.html new file mode 100644 index 000000000..05596c197 --- /dev/null +++ b/news/posts/2019-11-16-new-players-and-tutorial/index.html @@ -0,0 +1,702 @@ + + + + + + + + + New players and tutorial - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

New players and tutorial

New applications were added to the players list recently: +- HISE +- sfizz +- liquidsfz

+

and a new tutorial from Sonoj 2019 Convention on how to recording samples +using Ardour and LinuxSampler by Christoph Kuhr to our +Video tutorials section.

+

Thanks to Stefan Westerfeld for our first GitHub pull request! And to +Sonoj organization for the video tutorial contribuition.

+

Last but not least, for those like me who prefer IRC we have now also an +IRC channel on freenode server.

+

/join us!

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/news/posts/2019-11-21-legato-tutorial/index.html b/news/posts/2019-11-21-legato-tutorial/index.html new file mode 100644 index 000000000..12dbf6236 --- /dev/null +++ b/news/posts/2019-11-21-legato-tutorial/index.html @@ -0,0 +1,692 @@ + + + + + + + + + Legato tutorial - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Legato tutorial

The legato tutorial has been expanded from one simple example to include +simulated legato, simulated portamento, and true sampled legato.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/news/posts/2019-12-29-happy-new-year/index.html b/news/posts/2019-12-29-happy-new-year/index.html new file mode 100644 index 000000000..553bbeac1 --- /dev/null +++ b/news/posts/2019-12-29-happy-new-year/index.html @@ -0,0 +1,699 @@ + + + + + + + + + Happy new year! - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Happy new year!

Here we are with the latest relevant updates, the last ones for this year:

+
    +
  • Added *_mod and *_dynamic opcodes
  • +
  • Added Cakewalk SFZv2 opcodes (work in progress) page
  • +
  • Added the SFZ test suite for sample instruments developers in homepage
  • +
  • Improved SFZ syntax highlighting in Google Prettify for all pages
  • +
  • Search now works correctly, though it is slow and needs some more improvements
  • +
+

Happy new year!

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/news/posts/2020-01-31-new-year-new-work-in-progress/index.html b/news/posts/2020-01-31-new-year-new-work-in-progress/index.html new file mode 100644 index 000000000..c7546ff4c --- /dev/null +++ b/news/posts/2020-01-31-new-year-new-work-in-progress/index.html @@ -0,0 +1,700 @@ + + + + + + + + + New year, new work in progress - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

New year, new work in progress

The most relevant additions on the website for this month were Instruments +and Modulations sections, adding slowly one by one some sample instruments +libraries created and freely distribuited over the net, and documenting in a +generic way the various modulations used in SFZ. +Some new opcodes were also added in our database, starting from some modulation +aliases like amplitude_ccN, pan_ccN and tune_ccN to the recent fil_gain. +I would like to thank some people who contributed to the site, like falkTX +for adding our news feed on Linuxaudio Planet, jpcima, MatFluor, PaulFd and sfw. +This website is an opensource non profit project, I hope to see more people +involved in the future to help make it grow.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/news/posts/2020-03-17-new-tutorial-and-opcode-additions/index.html b/news/posts/2020-03-17-new-tutorial-and-opcode-additions/index.html new file mode 100644 index 000000000..52b1f33e1 --- /dev/null +++ b/news/posts/2020-03-17-new-tutorial-and-opcode-additions/index.html @@ -0,0 +1,698 @@ + + + + + + + + + New tutorial and opcode additions - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

New tutorial and opcode additions

A new tutorial about subtractive synthesizers was shared by DSmolken's +sample instruments experience applied in the Caveman Cosmonaut sample library.
+Some fixes and additions were made in our opcode database and in software as well, +like the Windows OpenMPT music tracker by sagamusix.
+New contributions was provided by other users like jisaacstone, +and a big contribution from jpcima for the effects section.
+Now we have also a new page for convenience +that lists all opcodes present in our database.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/news/posts/2020-10-16-opcodes-page-update/index.html b/news/posts/2020-10-16-opcodes-page-update/index.html new file mode 100644 index 000000000..1163a5a2e --- /dev/null +++ b/news/posts/2020-10-16-opcodes-page-update/index.html @@ -0,0 +1,694 @@ + + + + + + + + + Opcodes page update - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Opcodes page update

For those who missed it we have some updates on the website, mainly regarding +the opcodes page. Recently I've added a javascript library that permits tables +column sorting, and now with an awesome contribution from @jpcima also a script +to filter opcode names, versions and categories. Hope you'll find them handy!

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/news/posts/2023-06-03-bootstrap-530-with-color-modes/index.html b/news/posts/2023-06-03-bootstrap-530-with-color-modes/index.html new file mode 100644 index 000000000..a80aea33f --- /dev/null +++ b/news/posts/2023-06-03-bootstrap-530-with-color-modes/index.html @@ -0,0 +1,694 @@ + + + + + + + + + Bootstrap 5.3.0 with color modes - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Bootstrap 5.3.0 with color modes

Bootstrap updated to v5.3.0 which supports color modes, which means that +if your system uses a dark color theme, it will adapt to your visual preferences +on browsers that supports it. +Highlight.js will adapt to the chosen theme, so the sfz examples will be shown with it.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/_mod/index.html b/opcodes/_mod/index.html new file mode 100644 index 000000000..96d8910a0 --- /dev/null +++ b/opcodes/_mod/index.html @@ -0,0 +1,727 @@ + + + + + + + + + _mod - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

*_mod

+

Determines whether a parameter is modulated by addition or multiplication.

ARIA extension specifying whether modulation of the target parameter +should be additive or multiplicative. The default is add for all +modulation targets except amplitude, which has mult as the default. +Valid targets: delay, delay_beats, stop_beats, offset, pitch, tune, +volume, amplitude, cutoff, resonance, fil_gain, cutoff2, resonance2, +fil2_gain, pan, position, width. In addition, bitred and decim are +also valid targets, though decim and bitred themselves are not +implemented in ARIA.

+

Examples

+
cutoff_mod=mult
+amplitude_mod=add
+pitch_mod=add
+
+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
*_modARIAstringN/Aadd, mult
+

See also: varNN_mod

+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_attack/index.html b/opcodes/amp_attack/index.html new file mode 100644 index 000000000..c1162249b --- /dev/null +++ b/opcodes/amp_attack/index.html @@ -0,0 +1,773 @@ + + + + + + + + + amp_attack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

Practical Considerations

+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+

In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg, +probably linear in cents, which won't translate into linear in Hertz). +Decay and release stages have a curve which is faster than linear, and it +seems to match "well enough" with a multiplicatively decreasing curve. +The step size should be close to +\(\mu = \exp \left( - \frac{8.0}{t \times s} \right)\) +where \(t\) is the decay duration in seconds, and \(s\) is the sample rate in Hertz. +The envelope \(x_{n+1}\) at index \(n+1\) is thus computed as +\(x_{n+1} = \mu \times x_{n}\).

+

Here is a screenshot of a file output using Sforzando, showing the +ampeg_envelope shape and its stages.

+

DAHDSR envelope shape image

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_attackSFZ v1float00 to 100seconds
Modulations
ampeg_attackccNfloat0-100 to 100seconds
ampeg_attack_curveccNARIAinteger00 to 255N/A
ampeg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_decay/index.html b/opcodes/amp_decay/index.html new file mode 100644 index 000000000..3fdf702c9 --- /dev/null +++ b/opcodes/amp_decay/index.html @@ -0,0 +1,750 @@ + + + + + + + + + amp_decay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_decaySFZ v1float00 to 100seconds
Modulations
ampeg_decayccNfloat0-100 to 100N/A
ampeg_decay_curveccNARIAinteger00 to 255N/A
ampeg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_delay/index.html b/opcodes/amp_delay/index.html new file mode 100644 index 000000000..ec8fa591a --- /dev/null +++ b/opcodes/amp_delay/index.html @@ -0,0 +1,759 @@ + + + + + + + + + amp_delay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random are used in +the same region, the envelope delays start after delay and delay_random +have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_delaySFZ v1float00 to 100seconds
Modulations
ampeg_delayccNfloat0-100 to 100N/A
ampeg_delay_curveccNARIAinteger00 to 255N/A
ampeg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_hold/index.html b/opcodes/amp_hold/index.html new file mode 100644 index 000000000..739d7e07a --- /dev/null +++ b/opcodes/amp_hold/index.html @@ -0,0 +1,755 @@ + + + + + + + + + amp_hold - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_holdSFZ v1float00 to 100seconds
Modulations
ampeg_holdccNfloat0-100 to 100N/A
ampeg_hold_curveccNARIAinteger00 to 255N/A
ampeg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_keycenter/index.html b/opcodes/amp_keycenter/index.html new file mode 100644 index 000000000..51094ebf5 --- /dev/null +++ b/opcodes/amp_keycenter/index.html @@ -0,0 +1,719 @@ + + + + + + + + + amp_keycenter - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amp_keycenter

+

Center key for amplifier keyboard tracking. In this key, the amplifier keyboard tracking will have no effect.

Examples

+
amp_keycenter=60
+
+amp_keycenter=48
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amp_keycenterSFZ v1integer600 to 127N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_keytrack/index.html b/opcodes/amp_keytrack/index.html new file mode 100644 index 000000000..4e5a52ee7 --- /dev/null +++ b/opcodes/amp_keytrack/index.html @@ -0,0 +1,719 @@ + + + + + + + + + amp_keytrack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amp_keytrack

+

Amplifier keyboard tracking (change in amplitude per key) in decibels.

Examples

+
amp_keytrack=-1.4
+
+amp_keytrack=3
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amp_keytrackSFZ v1float0-96 to 12dB
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_random/index.html b/opcodes/amp_random/index.html new file mode 100644 index 000000000..b79cbcdf5 --- /dev/null +++ b/opcodes/amp_random/index.html @@ -0,0 +1,728 @@ + + + + + + + + + amp_random - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amp_random

+

Random volume for the region, in decibels.

Computed when the note is triggered, +remains the same for that region for as long as the region plays.

+

Examples

+
amp_random=10
+
+amp_random=3
+
+volume=-3 amp_random=6
+
+

Practical Considerations

+

In ARIA and Cakewalk, amp_random is unipolar. To create variation which can +be either negative or positive, this needs to be combined with a fixed +volume offset for half the negative value that amp_random is set to.

+

In the rgc sfz player, amp_random is bipolar.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amp_randomSFZ v1float00 to 24dB
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_release/index.html b/opcodes/amp_release/index.html new file mode 100644 index 000000000..5d29e2d0a --- /dev/null +++ b/opcodes/amp_release/index.html @@ -0,0 +1,756 @@ + + + + + + + + + amp_release - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, ampeg_release will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will +always play) even if amplifier envelopes are not used otherwise to shape the +sound. Also, ampeg_release is used when off_mode is set to normal.

+

Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother +default cutoffs. Cakewalk products use 0.001.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_releaseSFZ v1float0.0010 to 100seconds
Modulations
ampeg_releaseccNfloat0-100 to 100seconds
ampeg_release_curveccNARIAinteger00 to 255N/A
ampeg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_sustain/index.html b/opcodes/amp_sustain/index.html new file mode 100644 index 000000000..bdbfa192b --- /dev/null +++ b/opcodes/amp_sustain/index.html @@ -0,0 +1,749 @@ + + + + + + + + + amp_sustain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10(eg type)_sustain
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_sustainSFZ v1float1000 to 100%
Modulations
ampeg_sustainccNfloat0-100 to 100%
ampeg_sustain_curveccNARIAinteger00 to 255N/A
ampeg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_vel2attack/index.html b/opcodes/amp_vel2attack/index.html new file mode 100644 index 000000000..d96c283ce --- /dev/null +++ b/opcodes/amp_vel2attack/index.html @@ -0,0 +1,773 @@ + + + + + + + + + amp_vel2attack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

Practical Considerations

+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+

In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg, +probably linear in cents, which won't translate into linear in Hertz). +Decay and release stages have a curve which is faster than linear, and it +seems to match "well enough" with a multiplicatively decreasing curve. +The step size should be close to +\(\mu = \exp \left( - \frac{8.0}{t \times s} \right)\) +where \(t\) is the decay duration in seconds, and \(s\) is the sample rate in Hertz. +The envelope \(x_{n+1}\) at index \(n+1\) is thus computed as +\(x_{n+1} = \mu \times x_{n}\).

+

Here is a screenshot of a file output using Sforzando, showing the +ampeg_envelope shape and its stages.

+

DAHDSR envelope shape image

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_attackSFZ v1float00 to 100seconds
Modulations
ampeg_attackccNfloat0-100 to 100seconds
ampeg_attack_curveccNARIAinteger00 to 255N/A
ampeg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_vel2decay/index.html b/opcodes/amp_vel2decay/index.html new file mode 100644 index 000000000..8614f8b2b --- /dev/null +++ b/opcodes/amp_vel2decay/index.html @@ -0,0 +1,750 @@ + + + + + + + + + amp_vel2decay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_decaySFZ v1float00 to 100seconds
Modulations
ampeg_decayccNfloat0-100 to 100N/A
ampeg_decay_curveccNARIAinteger00 to 255N/A
ampeg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_vel2delay/index.html b/opcodes/amp_vel2delay/index.html new file mode 100644 index 000000000..153b99d4a --- /dev/null +++ b/opcodes/amp_vel2delay/index.html @@ -0,0 +1,759 @@ + + + + + + + + + amp_vel2delay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random are used in +the same region, the envelope delays start after delay and delay_random +have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_delaySFZ v1float00 to 100seconds
Modulations
ampeg_delayccNfloat0-100 to 100N/A
ampeg_delay_curveccNARIAinteger00 to 255N/A
ampeg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_vel2hold/index.html b/opcodes/amp_vel2hold/index.html new file mode 100644 index 000000000..ddd1543c0 --- /dev/null +++ b/opcodes/amp_vel2hold/index.html @@ -0,0 +1,755 @@ + + + + + + + + + amp_vel2hold - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_holdSFZ v1float00 to 100seconds
Modulations
ampeg_holdccNfloat0-100 to 100N/A
ampeg_hold_curveccNARIAinteger00 to 255N/A
ampeg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_vel2release/index.html b/opcodes/amp_vel2release/index.html new file mode 100644 index 000000000..66c00f293 --- /dev/null +++ b/opcodes/amp_vel2release/index.html @@ -0,0 +1,756 @@ + + + + + + + + + amp_vel2release - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, ampeg_release will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will +always play) even if amplifier envelopes are not used otherwise to shape the +sound. Also, ampeg_release is used when off_mode is set to normal.

+

Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother +default cutoffs. Cakewalk products use 0.001.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_releaseSFZ v1float0.0010 to 100seconds
Modulations
ampeg_releaseccNfloat0-100 to 100seconds
ampeg_release_curveccNARIAinteger00 to 255N/A
ampeg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_vel2sustain/index.html b/opcodes/amp_vel2sustain/index.html new file mode 100644 index 000000000..6ba13cf29 --- /dev/null +++ b/opcodes/amp_vel2sustain/index.html @@ -0,0 +1,749 @@ + + + + + + + + + amp_vel2sustain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10(eg type)_sustain
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_sustainSFZ v1float1000 to 100%
Modulations
ampeg_sustainccNfloat0-100 to 100%
ampeg_sustain_curveccNARIAinteger00 to 255N/A
ampeg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_velcurve_N/index.html b/opcodes/amp_velcurve_N/index.html new file mode 100644 index 000000000..5fef904ad --- /dev/null +++ b/opcodes/amp_velcurve_N/index.html @@ -0,0 +1,768 @@ + + + + + + + + + amp_velcurve_N - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amp_velcurve_N

+

User-defined amplifier velocity curve.

This opcode range allows defining a specific point along the amplifier velocity curve. +The value of the opcode indicates the normalized amplitude (0 to 1) +for the specified velocity. N can be from 0 to 127.

+

The player will interpolate lineraly between specified opcodes for unspecified ones:

+
amp_velcurve_1=0.2 amp_velcurve_3=0.3
+// amp_velcurve_2 is calculated to 0.25
+
+

If amp_velcurve_127 is not specified, the player will assign it the value of 1.

+

Examples

+

There are several common ways to use this opcode. One is to reduce the dynamic range +so that low-velocity notes will still produce a fairly loud sound. This is similar +(but probably not quite identical mathematically) to setting amp_veltrack to less +than 100.

+
// linear, compressed dynamic range
+// amplitude changes from 0.5 to 1
+amp_velcurve_1=0.5
+
+

It can also be used to set up a specific velocity response.

+
amp_velcurve_1=0.1
+amp_velcurve_63=0.25
+amp_velcurve_95=0.5
+
+

This opcode is also often used with dynamic layers to make each sample play at its full +amplitude at the top of its velocity layer, as shown below for a kick drum with +four dynamic layers. Note that there's no reason to set amp_velcurve_N values for N +below the lovel or above the hivel for a particular region. So, in practice, this often +ends up meaning just setting amp_velcurve_N=1 with N being equal to the hivel value for +each layer.

+
<region>hivel=31 amp_velcurve_31=1 sample=kick_vl1.wav
+<region>lovel=32 hivel=63 amp_velcurve_63=1 sample=kick_vl2.wav
+<region>lovel=64 hivel=95 amp_velcurve_95=1 sample=kick_vl3.wav
+<region>lovel=96 sample=kick_vl4.wav
+
+

This could also be combined with the first example so that velocity 1 hits will still +be reasonably audible.

+
<region>hivel=31 amp_velcurve_1=0.3 amp_velcurve_31=1 sample=kick_vl1.wav
+<region>lovel=32 hivel=63 amp_velcurve_63=1 sample=kick_vl2.wav
+<region>lovel=64 hivel=95 amp_velcurve_95=1 sample=kick_vl3.wav
+<region>lovel=96 sample=kick_vl4.wav
+
+

Practical Considerations

+

As a MIDI velocity 0 note is a note-off message, amp_velcurve_0 never actually needs +to be set. It just creates a slightly different starting point for one side of the +interpolation, compared to setting amp_velcurve_1. By default, amp_velcurve_0 is +effectively 0. If amp_velcurve is not set for any N, then amp_velcurve_0 is 0 and +amp_velcurve_127 is 1, and the volume for notes with velocity is the same as if +amp_velcurve_1=0.007874016.

+

Both amp_velcurve_n and amp_veltrack can be used together, though there's probably +more risk of confusion than benefit to doing this.

+ + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amp_velcurve_NSFZ v1floatStandard curve (see amp_veltrack)0 to 1N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_veltrack/index.html b/opcodes/amp_veltrack/index.html new file mode 100644 index 000000000..de0a1cea2 --- /dev/null +++ b/opcodes/amp_veltrack/index.html @@ -0,0 +1,755 @@ + + + + + + + + + amp_veltrack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amp_veltrack

+

Amplifier velocity tracking, represents how much the amplitude changes with incoming note velocity.

With amp_veltrack at the default value of 100, volume is modified by the amount +calculated by the following expression, based on incoming velocity.

+
\[ Gain(v) = 20 * log_{10}[(\frac{v}{127})^2] dB \]
+

The amp_velcurve_N opcodes allow overriding the default +velocity curve, and are useful for making more complex curves than +amp_veltrack allows.

+

Examples

+
amp_veltrack=0
+
+amp_veltrack=100
+
+

Allowed values are from -100 (which would make velocity 127 notes silent, and +low-velocity notes loud) to 100, but for most practical purposes this paramter +is generally set to either 0 or 100.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amp_veltrackSFZ v1float100-100 to 100%
Modulations
amp_veltrack_onccNARIAN/AN/AN/A
amp_veltrack_curveccNARIAinteger00 to 255N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_veltrack_ccN/index.html b/opcodes/amp_veltrack_ccN/index.html new file mode 100644 index 000000000..4e816a709 --- /dev/null +++ b/opcodes/amp_veltrack_ccN/index.html @@ -0,0 +1,755 @@ + + + + + + + + + amp_veltrack_ccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amp_veltrack

+

Amplifier velocity tracking, represents how much the amplitude changes with incoming note velocity.

With amp_veltrack at the default value of 100, volume is modified by the amount +calculated by the following expression, based on incoming velocity.

+
\[ Gain(v) = 20 * log_{10}[(\frac{v}{127})^2] dB \]
+

The amp_velcurve_N opcodes allow overriding the default +velocity curve, and are useful for making more complex curves than +amp_veltrack allows.

+

Examples

+
amp_veltrack=0
+
+amp_veltrack=100
+
+

Allowed values are from -100 (which would make velocity 127 notes silent, and +low-velocity notes loud) to 100, but for most practical purposes this paramter +is generally set to either 0 or 100.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amp_veltrackSFZ v1float100-100 to 100%
Modulations
amp_veltrack_onccNARIAN/AN/AN/A
amp_veltrack_curveccNARIAinteger00 to 255N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_veltrack_curveccN/index.html b/opcodes/amp_veltrack_curveccN/index.html new file mode 100644 index 000000000..cf1e80843 --- /dev/null +++ b/opcodes/amp_veltrack_curveccN/index.html @@ -0,0 +1,755 @@ + + + + + + + + + amp_veltrack_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amp_veltrack

+

Amplifier velocity tracking, represents how much the amplitude changes with incoming note velocity.

With amp_veltrack at the default value of 100, volume is modified by the amount +calculated by the following expression, based on incoming velocity.

+
\[ Gain(v) = 20 * log_{10}[(\frac{v}{127})^2] dB \]
+

The amp_velcurve_N opcodes allow overriding the default +velocity curve, and are useful for making more complex curves than +amp_veltrack allows.

+

Examples

+
amp_veltrack=0
+
+amp_veltrack=100
+
+

Allowed values are from -100 (which would make velocity 127 notes silent, and +low-velocity notes loud) to 100, but for most practical purposes this paramter +is generally set to either 0 or 100.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amp_veltrackSFZ v1float100-100 to 100%
Modulations
amp_veltrack_onccNARIAN/AN/AN/A
amp_veltrack_curveccNARIAinteger00 to 255N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_veltrack_onccN/index.html b/opcodes/amp_veltrack_onccN/index.html new file mode 100644 index 000000000..b4af218f9 --- /dev/null +++ b/opcodes/amp_veltrack_onccN/index.html @@ -0,0 +1,755 @@ + + + + + + + + + amp_veltrack_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amp_veltrack

+

Amplifier velocity tracking, represents how much the amplitude changes with incoming note velocity.

With amp_veltrack at the default value of 100, volume is modified by the amount +calculated by the following expression, based on incoming velocity.

+
\[ Gain(v) = 20 * log_{10}[(\frac{v}{127})^2] dB \]
+

The amp_velcurve_N opcodes allow overriding the default +velocity curve, and are useful for making more complex curves than +amp_veltrack allows.

+

Examples

+
amp_veltrack=0
+
+amp_veltrack=100
+
+

Allowed values are from -100 (which would make velocity 127 notes silent, and +low-velocity notes loud) to 100, but for most practical purposes this paramter +is generally set to either 0 or 100.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amp_veltrackSFZ v1float100-100 to 100%
Modulations
amp_veltrack_onccNARIAN/AN/AN/A
amp_veltrack_curveccNARIAinteger00 to 255N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amp_veltrack_random/index.html b/opcodes/amp_veltrack_random/index.html new file mode 100644 index 000000000..92734df03 --- /dev/null +++ b/opcodes/amp_veltrack_random/index.html @@ -0,0 +1,715 @@ + + + + + + + + + amp_veltrack_random - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amp_veltrack_random

+

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amp_veltrack_randomARIAN/AN/AN/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_attack/index.html b/opcodes/ampeg_attack/index.html new file mode 100644 index 000000000..1964776f2 --- /dev/null +++ b/opcodes/ampeg_attack/index.html @@ -0,0 +1,773 @@ + + + + + + + + + ampeg_attack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

Practical Considerations

+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+

In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg, +probably linear in cents, which won't translate into linear in Hertz). +Decay and release stages have a curve which is faster than linear, and it +seems to match "well enough" with a multiplicatively decreasing curve. +The step size should be close to +\(\mu = \exp \left( - \frac{8.0}{t \times s} \right)\) +where \(t\) is the decay duration in seconds, and \(s\) is the sample rate in Hertz. +The envelope \(x_{n+1}\) at index \(n+1\) is thus computed as +\(x_{n+1} = \mu \times x_{n}\).

+

Here is a screenshot of a file output using Sforzando, showing the +ampeg_envelope shape and its stages.

+

DAHDSR envelope shape image

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_attackSFZ v1float00 to 100seconds
Modulations
ampeg_attackccNfloat0-100 to 100seconds
ampeg_attack_curveccNARIAinteger00 to 255N/A
ampeg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_attack_curveccN/index.html b/opcodes/ampeg_attack_curveccN/index.html new file mode 100644 index 000000000..987674198 --- /dev/null +++ b/opcodes/ampeg_attack_curveccN/index.html @@ -0,0 +1,773 @@ + + + + + + + + + ampeg_attack_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

Practical Considerations

+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+

In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg, +probably linear in cents, which won't translate into linear in Hertz). +Decay and release stages have a curve which is faster than linear, and it +seems to match "well enough" with a multiplicatively decreasing curve. +The step size should be close to +\(\mu = \exp \left( - \frac{8.0}{t \times s} \right)\) +where \(t\) is the decay duration in seconds, and \(s\) is the sample rate in Hertz. +The envelope \(x_{n+1}\) at index \(n+1\) is thus computed as +\(x_{n+1} = \mu \times x_{n}\).

+

Here is a screenshot of a file output using Sforzando, showing the +ampeg_envelope shape and its stages.

+

DAHDSR envelope shape image

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_attackSFZ v1float00 to 100seconds
Modulations
ampeg_attackccNfloat0-100 to 100seconds
ampeg_attack_curveccNARIAinteger00 to 255N/A
ampeg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_attack_onccN/index.html b/opcodes/ampeg_attack_onccN/index.html new file mode 100644 index 000000000..bfd4c5808 --- /dev/null +++ b/opcodes/ampeg_attack_onccN/index.html @@ -0,0 +1,773 @@ + + + + + + + + + ampeg_attack_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

Practical Considerations

+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+

In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg, +probably linear in cents, which won't translate into linear in Hertz). +Decay and release stages have a curve which is faster than linear, and it +seems to match "well enough" with a multiplicatively decreasing curve. +The step size should be close to +\(\mu = \exp \left( - \frac{8.0}{t \times s} \right)\) +where \(t\) is the decay duration in seconds, and \(s\) is the sample rate in Hertz. +The envelope \(x_{n+1}\) at index \(n+1\) is thus computed as +\(x_{n+1} = \mu \times x_{n}\).

+

Here is a screenshot of a file output using Sforzando, showing the +ampeg_envelope shape and its stages.

+

DAHDSR envelope shape image

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_attackSFZ v1float00 to 100seconds
Modulations
ampeg_attackccNfloat0-100 to 100seconds
ampeg_attack_curveccNARIAinteger00 to 255N/A
ampeg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_attack_shape/index.html b/opcodes/ampeg_attack_shape/index.html new file mode 100644 index 000000000..f5c922309 --- /dev/null +++ b/opcodes/ampeg_attack_shape/index.html @@ -0,0 +1,744 @@ + + + + + + + + + ampeg_attack_shape - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_attack_shape

+

Specifies the curvature of attack stage of the envelope.

0 is linear. Positive values are slower curves (that means the envelope will +initially not fade in much, and most of the fade in will happen towards the end +of the attack period) and negative values faster (quick initial fade in with the +latter part of the attack stage fading in less). Past 10 or -10, there's little +difference - at that point, the envelope is practically a horizontal line and a +vertical line (if positive) or a vertical line followed by a horizontal line +(if negative).

+

Examples

+
ampeg_attack_shape=2.1
+ampeg_attack_shape=-3.8
+
+

Graphical representations

+

As aid to estimate what the values will do, here some examples. +All curves were made at 120bpm with ampeg_attack=1, note held for 2 seconds. +Each vertical line represents 0.5 seconds.

+

+ ampeg_attack_shape=-8 + + + ampeg_attack_shape=-3.8 + + + ampeg_attack_shape=0 + + + ampeg_attack_shape=2.1 + + + ampeg_attack_shape=8 +

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_attack_shapeARIAfloat0N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_attackccN/index.html b/opcodes/ampeg_attackccN/index.html new file mode 100644 index 000000000..db0a7429a --- /dev/null +++ b/opcodes/ampeg_attackccN/index.html @@ -0,0 +1,773 @@ + + + + + + + + + ampeg_attackccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

Practical Considerations

+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+

In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg, +probably linear in cents, which won't translate into linear in Hertz). +Decay and release stages have a curve which is faster than linear, and it +seems to match "well enough" with a multiplicatively decreasing curve. +The step size should be close to +\(\mu = \exp \left( - \frac{8.0}{t \times s} \right)\) +where \(t\) is the decay duration in seconds, and \(s\) is the sample rate in Hertz. +The envelope \(x_{n+1}\) at index \(n+1\) is thus computed as +\(x_{n+1} = \mu \times x_{n}\).

+

Here is a screenshot of a file output using Sforzando, showing the +ampeg_envelope shape and its stages.

+

DAHDSR envelope shape image

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_attackSFZ v1float00 to 100seconds
Modulations
ampeg_attackccNfloat0-100 to 100seconds
ampeg_attack_curveccNARIAinteger00 to 255N/A
ampeg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_decay/index.html b/opcodes/ampeg_decay/index.html new file mode 100644 index 000000000..b888ab06a --- /dev/null +++ b/opcodes/ampeg_decay/index.html @@ -0,0 +1,750 @@ + + + + + + + + + ampeg_decay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_decaySFZ v1float00 to 100seconds
Modulations
ampeg_decayccNfloat0-100 to 100N/A
ampeg_decay_curveccNARIAinteger00 to 255N/A
ampeg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_decay_curveccN/index.html b/opcodes/ampeg_decay_curveccN/index.html new file mode 100644 index 000000000..e1bd72de1 --- /dev/null +++ b/opcodes/ampeg_decay_curveccN/index.html @@ -0,0 +1,750 @@ + + + + + + + + + ampeg_decay_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_decaySFZ v1float00 to 100seconds
Modulations
ampeg_decayccNfloat0-100 to 100N/A
ampeg_decay_curveccNARIAinteger00 to 255N/A
ampeg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_decay_onccN/index.html b/opcodes/ampeg_decay_onccN/index.html new file mode 100644 index 000000000..0d39ae2a6 --- /dev/null +++ b/opcodes/ampeg_decay_onccN/index.html @@ -0,0 +1,750 @@ + + + + + + + + + ampeg_decay_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_decaySFZ v1float00 to 100seconds
Modulations
ampeg_decayccNfloat0-100 to 100N/A
ampeg_decay_curveccNARIAinteger00 to 255N/A
ampeg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_decay_shape/index.html b/opcodes/ampeg_decay_shape/index.html new file mode 100644 index 000000000..3b1ff03d0 --- /dev/null +++ b/opcodes/ampeg_decay_shape/index.html @@ -0,0 +1,741 @@ + + + + + + + + + ampeg_decay_shape - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_decay_shape

+

Specifies the curvature of decay stage of the envelope.

0 is linear, positive values are slower curves (that means the envelope will +initially not decay out much, and most of the decay will happen towards the end +of the decay period) and negative values faster (quick initial decay with quiet +tail decaying more slowly).

+

Examples

+
ampeg_decay_shape=2.1
+ampeg_decay_shape=-3.8
+
+

Graphical representations

+

As aid to estimate what the values will do, here some examples. +All curves were made at 120bpm with ampeg_decay=1 and ampeg_sustain=1, +note held for 2 seconds. Each vertical line represents 0.5 seconds.

+

+ ampeg_decay_shape=-8 + + + ampeg_decay_shape=-3.8 + + + ampeg_decay_shape=0 + + + ampeg_decay_shape=2.1 + + + ampeg_decay_shape=8 +

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_decay_shapeARIAfloat-10.3616N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_decay_zero/index.html b/opcodes/ampeg_decay_zero/index.html new file mode 100644 index 000000000..7739bf9a3 --- /dev/null +++ b/opcodes/ampeg_decay_zero/index.html @@ -0,0 +1,729 @@ + + + + + + + + + ampeg_decay_zero - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_decay_zero

+

Specifies how decay time is calculated.

When 1, indicates decay time is the time it would take to get from 0dBs to -oo, +NOT the time to reach current sustain (as when 0). +1 and 0 must be used, true/false or on/off don't appear to be supported.

+

In other words, under default behavior, the decay slope is fixed, and the higher +the sustain level of the envelope, the less time the decay stage will actually +take. Changing ampeg_sustain will change the actual duration of the decay stage +as well, up to a maximum of the full ampeg_decay value at +ampeg_sustain equal to 0.

+

Setting this to 0 will make the decay always happen during the entire +time period specified by ampeg_decay, regardless of the current +ampeg_sustain level.

+

Examples

+
ampeg_decay_zero=0
+ampeg_decay_zero=1
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_decay_zeroARIAinteger10 to 1N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_decayccN/index.html b/opcodes/ampeg_decayccN/index.html new file mode 100644 index 000000000..e471798c4 --- /dev/null +++ b/opcodes/ampeg_decayccN/index.html @@ -0,0 +1,750 @@ + + + + + + + + + ampeg_decayccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_decaySFZ v1float00 to 100seconds
Modulations
ampeg_decayccNfloat0-100 to 100N/A
ampeg_decay_curveccNARIAinteger00 to 255N/A
ampeg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_delay/index.html b/opcodes/ampeg_delay/index.html new file mode 100644 index 000000000..9c059cc9f --- /dev/null +++ b/opcodes/ampeg_delay/index.html @@ -0,0 +1,759 @@ + + + + + + + + + ampeg_delay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random are used in +the same region, the envelope delays start after delay and delay_random +have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_delaySFZ v1float00 to 100seconds
Modulations
ampeg_delayccNfloat0-100 to 100N/A
ampeg_delay_curveccNARIAinteger00 to 255N/A
ampeg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_delay_curveccN/index.html b/opcodes/ampeg_delay_curveccN/index.html new file mode 100644 index 000000000..a94298af4 --- /dev/null +++ b/opcodes/ampeg_delay_curveccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + ampeg_delay_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random are used in +the same region, the envelope delays start after delay and delay_random +have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_delaySFZ v1float00 to 100seconds
Modulations
ampeg_delayccNfloat0-100 to 100N/A
ampeg_delay_curveccNARIAinteger00 to 255N/A
ampeg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_delay_onccN/index.html b/opcodes/ampeg_delay_onccN/index.html new file mode 100644 index 000000000..d94a1e653 --- /dev/null +++ b/opcodes/ampeg_delay_onccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + ampeg_delay_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random are used in +the same region, the envelope delays start after delay and delay_random +have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_delaySFZ v1float00 to 100seconds
Modulations
ampeg_delayccNfloat0-100 to 100N/A
ampeg_delay_curveccNARIAinteger00 to 255N/A
ampeg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_delayccN/index.html b/opcodes/ampeg_delayccN/index.html new file mode 100644 index 000000000..3d3639d7b --- /dev/null +++ b/opcodes/ampeg_delayccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + ampeg_delayccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random are used in +the same region, the envelope delays start after delay and delay_random +have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_delaySFZ v1float00 to 100seconds
Modulations
ampeg_delayccNfloat0-100 to 100N/A
ampeg_delay_curveccNARIAinteger00 to 255N/A
ampeg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_dynamic/index.html b/opcodes/ampeg_dynamic/index.html new file mode 100644 index 000000000..1d4d08ecc --- /dev/null +++ b/opcodes/ampeg_dynamic/index.html @@ -0,0 +1,719 @@ + + + + + + + + + ampeg_dynamic - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_dynamic

+

Specifies when envelope durations are recalculated.

When 1, causes envelope segment durations and sustain level to be recalculated when a MIDI CC message modulating those envelopes is received. When 0, envelope segment durations and sustain level are calculated only at the start of the particular envelope segment.

+

Examples

+
ampeg_dynamic=1
+ampeg_dynamic=0
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_dynamicARIAinteger00 to 1N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_hold/index.html b/opcodes/ampeg_hold/index.html new file mode 100644 index 000000000..46cb18324 --- /dev/null +++ b/opcodes/ampeg_hold/index.html @@ -0,0 +1,755 @@ + + + + + + + + + ampeg_hold - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_holdSFZ v1float00 to 100seconds
Modulations
ampeg_holdccNfloat0-100 to 100N/A
ampeg_hold_curveccNARIAinteger00 to 255N/A
ampeg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_hold_curveccN/index.html b/opcodes/ampeg_hold_curveccN/index.html new file mode 100644 index 000000000..8a89465dc --- /dev/null +++ b/opcodes/ampeg_hold_curveccN/index.html @@ -0,0 +1,755 @@ + + + + + + + + + ampeg_hold_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_holdSFZ v1float00 to 100seconds
Modulations
ampeg_holdccNfloat0-100 to 100N/A
ampeg_hold_curveccNARIAinteger00 to 255N/A
ampeg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_hold_onccN/index.html b/opcodes/ampeg_hold_onccN/index.html new file mode 100644 index 000000000..9b3d29e4d --- /dev/null +++ b/opcodes/ampeg_hold_onccN/index.html @@ -0,0 +1,755 @@ + + + + + + + + + ampeg_hold_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_holdSFZ v1float00 to 100seconds
Modulations
ampeg_holdccNfloat0-100 to 100N/A
ampeg_hold_curveccNARIAinteger00 to 255N/A
ampeg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_holdccN/index.html b/opcodes/ampeg_holdccN/index.html new file mode 100644 index 000000000..213cb7113 --- /dev/null +++ b/opcodes/ampeg_holdccN/index.html @@ -0,0 +1,755 @@ + + + + + + + + + ampeg_holdccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_holdSFZ v1float00 to 100seconds
Modulations
ampeg_holdccNfloat0-100 to 100N/A
ampeg_hold_curveccNARIAinteger00 to 255N/A
ampeg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_release/index.html b/opcodes/ampeg_release/index.html new file mode 100644 index 000000000..0f87c48a1 --- /dev/null +++ b/opcodes/ampeg_release/index.html @@ -0,0 +1,756 @@ + + + + + + + + + ampeg_release - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, ampeg_release will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will +always play) even if amplifier envelopes are not used otherwise to shape the +sound. Also, ampeg_release is used when off_mode is set to normal.

+

Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother +default cutoffs. Cakewalk products use 0.001.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_releaseSFZ v1float0.0010 to 100seconds
Modulations
ampeg_releaseccNfloat0-100 to 100seconds
ampeg_release_curveccNARIAinteger00 to 255N/A
ampeg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_release_curveccN/index.html b/opcodes/ampeg_release_curveccN/index.html new file mode 100644 index 000000000..0034f4d38 --- /dev/null +++ b/opcodes/ampeg_release_curveccN/index.html @@ -0,0 +1,756 @@ + + + + + + + + + ampeg_release_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, ampeg_release will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will +always play) even if amplifier envelopes are not used otherwise to shape the +sound. Also, ampeg_release is used when off_mode is set to normal.

+

Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother +default cutoffs. Cakewalk products use 0.001.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_releaseSFZ v1float0.0010 to 100seconds
Modulations
ampeg_releaseccNfloat0-100 to 100seconds
ampeg_release_curveccNARIAinteger00 to 255N/A
ampeg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_release_onccN/index.html b/opcodes/ampeg_release_onccN/index.html new file mode 100644 index 000000000..b3cb24f7f --- /dev/null +++ b/opcodes/ampeg_release_onccN/index.html @@ -0,0 +1,756 @@ + + + + + + + + + ampeg_release_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, ampeg_release will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will +always play) even if amplifier envelopes are not used otherwise to shape the +sound. Also, ampeg_release is used when off_mode is set to normal.

+

Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother +default cutoffs. Cakewalk products use 0.001.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_releaseSFZ v1float0.0010 to 100seconds
Modulations
ampeg_releaseccNfloat0-100 to 100seconds
ampeg_release_curveccNARIAinteger00 to 255N/A
ampeg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_release_shape/index.html b/opcodes/ampeg_release_shape/index.html new file mode 100644 index 000000000..24d0675c5 --- /dev/null +++ b/opcodes/ampeg_release_shape/index.html @@ -0,0 +1,737 @@ + + + + + + + + + ampeg_release_shape - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_release_shape

+

Specifies the curvature of release stage of the envelope.

0 is linear, positive values are slower curves (that means the envelope will +initially not fade out much, and most of the fade will happen towards the end of +the release period) and negative values faster (quick initial fadeout with quiet +tail fading out more slowly).

+

Examples

+
ampeg_release_shape=2.1
+ampeg_release_shape=-3.8
+
+

+ ampeg_decay_shape=-8 + + + ampeg_decay_shape=-3.8 + + + ampeg_decay_shape=0 + + + ampeg_decay_shape=2.1 + + + ampeg_decay_shape=8 +

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_release_shapeARIAfloat-10.3616N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_release_zero/index.html b/opcodes/ampeg_release_zero/index.html new file mode 100644 index 000000000..a07f48f6b --- /dev/null +++ b/opcodes/ampeg_release_zero/index.html @@ -0,0 +1,724 @@ + + + + + + + + + ampeg_release_zero - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_release_zero

+

Specifies how release time is calculated.

When 1, indicates release time is the time it would take to get +from 0dBs to -oo (actually -90 dB as implemented in ARIA), NOT the time +to get from the current sustain to zero.

+

In other words, under default behavior, the release time is fixed, while +setting this to 1 makes the release slope fixed but time will be shorter +when sustain level is lower.

+

Examples

+
ampeg_release_zero=1
+ampeg_release_zero=0
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_release_zeroARIAinteger00 to 1N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_releaseccN/index.html b/opcodes/ampeg_releaseccN/index.html new file mode 100644 index 000000000..a66b145eb --- /dev/null +++ b/opcodes/ampeg_releaseccN/index.html @@ -0,0 +1,756 @@ + + + + + + + + + ampeg_releaseccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, ampeg_release will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will +always play) even if amplifier envelopes are not used otherwise to shape the +sound. Also, ampeg_release is used when off_mode is set to normal.

+

Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother +default cutoffs. Cakewalk products use 0.001.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_releaseSFZ v1float0.0010 to 100seconds
Modulations
ampeg_releaseccNfloat0-100 to 100seconds
ampeg_release_curveccNARIAinteger00 to 255N/A
ampeg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_start/index.html b/opcodes/ampeg_start/index.html new file mode 100644 index 000000000..69ba52d6b --- /dev/null +++ b/opcodes/ampeg_start/index.html @@ -0,0 +1,751 @@ + + + + + + + + + ampeg_start - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_start

+

Envelope start level, in percentage.

Examples

+
ampeg_start=20
+fileg_start=100
+
+

Setting this to 100 should have the same effect as setting the attack time to 0, +and adding the attack time to the hold time. +Note that in some cases (when the sample starts playing from a point which is +not near zero), setting this to a non-zero value for ampeg_start may result in +sample playback starting with an audible click.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_startSFZ v1float00 to 100%
Modulations
ampeg_startccNfloat0-100 to 100seconds
ampeg_start_curveccNARIAinteger00 to 255N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_start_curveccN/index.html b/opcodes/ampeg_start_curveccN/index.html new file mode 100644 index 000000000..482a3a779 --- /dev/null +++ b/opcodes/ampeg_start_curveccN/index.html @@ -0,0 +1,751 @@ + + + + + + + + + ampeg_start_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_start

+

Envelope start level, in percentage.

Examples

+
ampeg_start=20
+fileg_start=100
+
+

Setting this to 100 should have the same effect as setting the attack time to 0, +and adding the attack time to the hold time. +Note that in some cases (when the sample starts playing from a point which is +not near zero), setting this to a non-zero value for ampeg_start may result in +sample playback starting with an audible click.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_startSFZ v1float00 to 100%
Modulations
ampeg_startccNfloat0-100 to 100seconds
ampeg_start_curveccNARIAinteger00 to 255N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_start_onccN/index.html b/opcodes/ampeg_start_onccN/index.html new file mode 100644 index 000000000..dc5a811b4 --- /dev/null +++ b/opcodes/ampeg_start_onccN/index.html @@ -0,0 +1,751 @@ + + + + + + + + + ampeg_start_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_start

+

Envelope start level, in percentage.

Examples

+
ampeg_start=20
+fileg_start=100
+
+

Setting this to 100 should have the same effect as setting the attack time to 0, +and adding the attack time to the hold time. +Note that in some cases (when the sample starts playing from a point which is +not near zero), setting this to a non-zero value for ampeg_start may result in +sample playback starting with an audible click.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_startSFZ v1float00 to 100%
Modulations
ampeg_startccNfloat0-100 to 100seconds
ampeg_start_curveccNARIAinteger00 to 255N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_startccN/index.html b/opcodes/ampeg_startccN/index.html new file mode 100644 index 000000000..c46a557ac --- /dev/null +++ b/opcodes/ampeg_startccN/index.html @@ -0,0 +1,751 @@ + + + + + + + + + ampeg_startccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_start

+

Envelope start level, in percentage.

Examples

+
ampeg_start=20
+fileg_start=100
+
+

Setting this to 100 should have the same effect as setting the attack time to 0, +and adding the attack time to the hold time. +Note that in some cases (when the sample starts playing from a point which is +not near zero), setting this to a non-zero value for ampeg_start may result in +sample playback starting with an audible click.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_startSFZ v1float00 to 100%
Modulations
ampeg_startccNfloat0-100 to 100seconds
ampeg_start_curveccNARIAinteger00 to 255N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_sustain/index.html b/opcodes/ampeg_sustain/index.html new file mode 100644 index 000000000..6b801eb00 --- /dev/null +++ b/opcodes/ampeg_sustain/index.html @@ -0,0 +1,749 @@ + + + + + + + + + ampeg_sustain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10(eg type)_sustain
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_sustainSFZ v1float1000 to 100%
Modulations
ampeg_sustainccNfloat0-100 to 100%
ampeg_sustain_curveccNARIAinteger00 to 255N/A
ampeg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_sustain_curveccN/index.html b/opcodes/ampeg_sustain_curveccN/index.html new file mode 100644 index 000000000..63c253ea4 --- /dev/null +++ b/opcodes/ampeg_sustain_curveccN/index.html @@ -0,0 +1,749 @@ + + + + + + + + + ampeg_sustain_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10(eg type)_sustain
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_sustainSFZ v1float1000 to 100%
Modulations
ampeg_sustainccNfloat0-100 to 100%
ampeg_sustain_curveccNARIAinteger00 to 255N/A
ampeg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_sustain_onccN/index.html b/opcodes/ampeg_sustain_onccN/index.html new file mode 100644 index 000000000..960cc9764 --- /dev/null +++ b/opcodes/ampeg_sustain_onccN/index.html @@ -0,0 +1,749 @@ + + + + + + + + + ampeg_sustain_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10(eg type)_sustain
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_sustainSFZ v1float1000 to 100%
Modulations
ampeg_sustainccNfloat0-100 to 100%
ampeg_sustain_curveccNARIAinteger00 to 255N/A
ampeg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_sustainccN/index.html b/opcodes/ampeg_sustainccN/index.html new file mode 100644 index 000000000..45277353e --- /dev/null +++ b/opcodes/ampeg_sustainccN/index.html @@ -0,0 +1,749 @@ + + + + + + + + + ampeg_sustainccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10(eg type)_sustain
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_sustainSFZ v1float1000 to 100%
Modulations
ampeg_sustainccNfloat0-100 to 100%
ampeg_sustain_curveccNARIAinteger00 to 255N/A
ampeg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_vel2attack/index.html b/opcodes/ampeg_vel2attack/index.html new file mode 100644 index 000000000..086a7891c --- /dev/null +++ b/opcodes/ampeg_vel2attack/index.html @@ -0,0 +1,773 @@ + + + + + + + + + ampeg_vel2attack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

Practical Considerations

+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+

In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg, +probably linear in cents, which won't translate into linear in Hertz). +Decay and release stages have a curve which is faster than linear, and it +seems to match "well enough" with a multiplicatively decreasing curve. +The step size should be close to +\(\mu = \exp \left( - \frac{8.0}{t \times s} \right)\) +where \(t\) is the decay duration in seconds, and \(s\) is the sample rate in Hertz. +The envelope \(x_{n+1}\) at index \(n+1\) is thus computed as +\(x_{n+1} = \mu \times x_{n}\).

+

Here is a screenshot of a file output using Sforzando, showing the +ampeg_envelope shape and its stages.

+

DAHDSR envelope shape image

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_attackSFZ v1float00 to 100seconds
Modulations
ampeg_attackccNfloat0-100 to 100seconds
ampeg_attack_curveccNARIAinteger00 to 255N/A
ampeg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_vel2decay/index.html b/opcodes/ampeg_vel2decay/index.html new file mode 100644 index 000000000..06e678f90 --- /dev/null +++ b/opcodes/ampeg_vel2decay/index.html @@ -0,0 +1,750 @@ + + + + + + + + + ampeg_vel2decay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_decaySFZ v1float00 to 100seconds
Modulations
ampeg_decayccNfloat0-100 to 100N/A
ampeg_decay_curveccNARIAinteger00 to 255N/A
ampeg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_vel2delay/index.html b/opcodes/ampeg_vel2delay/index.html new file mode 100644 index 000000000..e4fd8e1b3 --- /dev/null +++ b/opcodes/ampeg_vel2delay/index.html @@ -0,0 +1,759 @@ + + + + + + + + + ampeg_vel2delay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random are used in +the same region, the envelope delays start after delay and delay_random +have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_delaySFZ v1float00 to 100seconds
Modulations
ampeg_delayccNfloat0-100 to 100N/A
ampeg_delay_curveccNARIAinteger00 to 255N/A
ampeg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_vel2hold/index.html b/opcodes/ampeg_vel2hold/index.html new file mode 100644 index 000000000..ddbf9d549 --- /dev/null +++ b/opcodes/ampeg_vel2hold/index.html @@ -0,0 +1,755 @@ + + + + + + + + + ampeg_vel2hold - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_holdSFZ v1float00 to 100seconds
Modulations
ampeg_holdccNfloat0-100 to 100N/A
ampeg_hold_curveccNARIAinteger00 to 255N/A
ampeg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_vel2release/index.html b/opcodes/ampeg_vel2release/index.html new file mode 100644 index 000000000..a86fec5a7 --- /dev/null +++ b/opcodes/ampeg_vel2release/index.html @@ -0,0 +1,756 @@ + + + + + + + + + ampeg_vel2release - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, ampeg_release will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will +always play) even if amplifier envelopes are not used otherwise to shape the +sound. Also, ampeg_release is used when off_mode is set to normal.

+

Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother +default cutoffs. Cakewalk products use 0.001.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_releaseSFZ v1float0.0010 to 100seconds
Modulations
ampeg_releaseccNfloat0-100 to 100seconds
ampeg_release_curveccNARIAinteger00 to 255N/A
ampeg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/ampeg_vel2sustain/index.html b/opcodes/ampeg_vel2sustain/index.html new file mode 100644 index 000000000..9fa3f3a34 --- /dev/null +++ b/opcodes/ampeg_vel2sustain/index.html @@ -0,0 +1,749 @@ + + + + + + + + + ampeg_vel2sustain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

ampeg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10(eg type)_sustain
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
ampeg_sustainSFZ v1float1000 to 100%
Modulations
ampeg_sustainccNfloat0-100 to 100%
ampeg_sustain_curveccNARIAinteger00 to 255N/A
ampeg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amplfo_delay/index.html b/opcodes/amplfo_delay/index.html new file mode 100644 index 000000000..1681c5cbf --- /dev/null +++ b/opcodes/amplfo_delay/index.html @@ -0,0 +1,720 @@ + + + + + + + + + amplfo_delay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amplfo_delay

+

The time before the LFO starts oscillating.

Examples

+
pitchlfo_delay=1
+amplfo_delay=0.4
+
+

This is very useful, as many instruments and vocals don't trigger vibrato +immediately when a note starts, but slightly later.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amplfo_delaySFZ v1float00 to 100seconds
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amplfo_depth/index.html b/opcodes/amplfo_depth/index.html new file mode 100644 index 000000000..9dae9d98a --- /dev/null +++ b/opcodes/amplfo_depth/index.html @@ -0,0 +1,759 @@ + + + + + + + + + amplfo_depth - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amplfo_depth

+

LFO depth.

Examples

+
amplfo_depth=1
+pitchlfo_depth=40
+
+

For amplifier LFO, this is measured in decibels and can range from -10 to 10. +For pitch and filter LFO, this is measured in cents and can +range from -1200 to 1200. Whether these values are negative or positive, the LFO +will oscillate both up and down around the center value of the amplitude, pitch +or filter cutoff - a negative sign for depth only inverts the phase. +For cases where an LFO needs to oscillate only in one direction from the normal +value (for example: typical guitar vibrato which only bends the pitch upwards, +or saxophone vibrato which only bends the pitch down), an offset to the center +pitch value will need to be added using the appropriate opcode such as tune. +In SFZ2 LFOs add the ability to set the starting phase, making this much easier.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amplfo_depthSFZ v1float0-10 to 10dB
Modulations
amplfo_depthccNfloat0-10 to 10dB
amplfo_depthchanaftfloat0-10 to 10dB
amplfo_depthpolyaftfloat0-10 to 10dB
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amplfo_depth_onccN/index.html b/opcodes/amplfo_depth_onccN/index.html new file mode 100644 index 000000000..1179e202c --- /dev/null +++ b/opcodes/amplfo_depth_onccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + amplfo_depth_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amplfo_depth

+

LFO depth.

Examples

+
amplfo_depth=1
+pitchlfo_depth=40
+
+

For amplifier LFO, this is measured in decibels and can range from -10 to 10. +For pitch and filter LFO, this is measured in cents and can +range from -1200 to 1200. Whether these values are negative or positive, the LFO +will oscillate both up and down around the center value of the amplitude, pitch +or filter cutoff - a negative sign for depth only inverts the phase. +For cases where an LFO needs to oscillate only in one direction from the normal +value (for example: typical guitar vibrato which only bends the pitch upwards, +or saxophone vibrato which only bends the pitch down), an offset to the center +pitch value will need to be added using the appropriate opcode such as tune. +In SFZ2 LFOs add the ability to set the starting phase, making this much easier.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amplfo_depthSFZ v1float0-10 to 10dB
Modulations
amplfo_depthccNfloat0-10 to 10dB
amplfo_depthchanaftfloat0-10 to 10dB
amplfo_depthpolyaftfloat0-10 to 10dB
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amplfo_depthccN/index.html b/opcodes/amplfo_depthccN/index.html new file mode 100644 index 000000000..5dd37f116 --- /dev/null +++ b/opcodes/amplfo_depthccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + amplfo_depthccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amplfo_depth

+

LFO depth.

Examples

+
amplfo_depth=1
+pitchlfo_depth=40
+
+

For amplifier LFO, this is measured in decibels and can range from -10 to 10. +For pitch and filter LFO, this is measured in cents and can +range from -1200 to 1200. Whether these values are negative or positive, the LFO +will oscillate both up and down around the center value of the amplitude, pitch +or filter cutoff - a negative sign for depth only inverts the phase. +For cases where an LFO needs to oscillate only in one direction from the normal +value (for example: typical guitar vibrato which only bends the pitch upwards, +or saxophone vibrato which only bends the pitch down), an offset to the center +pitch value will need to be added using the appropriate opcode such as tune. +In SFZ2 LFOs add the ability to set the starting phase, making this much easier.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amplfo_depthSFZ v1float0-10 to 10dB
Modulations
amplfo_depthccNfloat0-10 to 10dB
amplfo_depthchanaftfloat0-10 to 10dB
amplfo_depthpolyaftfloat0-10 to 10dB
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amplfo_depthchanaft/index.html b/opcodes/amplfo_depthchanaft/index.html new file mode 100644 index 000000000..c68775747 --- /dev/null +++ b/opcodes/amplfo_depthchanaft/index.html @@ -0,0 +1,759 @@ + + + + + + + + + amplfo_depthchanaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amplfo_depth

+

LFO depth.

Examples

+
amplfo_depth=1
+pitchlfo_depth=40
+
+

For amplifier LFO, this is measured in decibels and can range from -10 to 10. +For pitch and filter LFO, this is measured in cents and can +range from -1200 to 1200. Whether these values are negative or positive, the LFO +will oscillate both up and down around the center value of the amplitude, pitch +or filter cutoff - a negative sign for depth only inverts the phase. +For cases where an LFO needs to oscillate only in one direction from the normal +value (for example: typical guitar vibrato which only bends the pitch upwards, +or saxophone vibrato which only bends the pitch down), an offset to the center +pitch value will need to be added using the appropriate opcode such as tune. +In SFZ2 LFOs add the ability to set the starting phase, making this much easier.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amplfo_depthSFZ v1float0-10 to 10dB
Modulations
amplfo_depthccNfloat0-10 to 10dB
amplfo_depthchanaftfloat0-10 to 10dB
amplfo_depthpolyaftfloat0-10 to 10dB
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amplfo_depthpolyaft/index.html b/opcodes/amplfo_depthpolyaft/index.html new file mode 100644 index 000000000..c56004569 --- /dev/null +++ b/opcodes/amplfo_depthpolyaft/index.html @@ -0,0 +1,759 @@ + + + + + + + + + amplfo_depthpolyaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amplfo_depth

+

LFO depth.

Examples

+
amplfo_depth=1
+pitchlfo_depth=40
+
+

For amplifier LFO, this is measured in decibels and can range from -10 to 10. +For pitch and filter LFO, this is measured in cents and can +range from -1200 to 1200. Whether these values are negative or positive, the LFO +will oscillate both up and down around the center value of the amplitude, pitch +or filter cutoff - a negative sign for depth only inverts the phase. +For cases where an LFO needs to oscillate only in one direction from the normal +value (for example: typical guitar vibrato which only bends the pitch upwards, +or saxophone vibrato which only bends the pitch down), an offset to the center +pitch value will need to be added using the appropriate opcode such as tune. +In SFZ2 LFOs add the ability to set the starting phase, making this much easier.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amplfo_depthSFZ v1float0-10 to 10dB
Modulations
amplfo_depthccNfloat0-10 to 10dB
amplfo_depthchanaftfloat0-10 to 10dB
amplfo_depthpolyaftfloat0-10 to 10dB
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amplfo_fade/index.html b/opcodes/amplfo_fade/index.html new file mode 100644 index 000000000..d427dd3b1 --- /dev/null +++ b/opcodes/amplfo_fade/index.html @@ -0,0 +1,720 @@ + + + + + + + + + amplfo_fade - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amplfo_fade

+

LFO fade-in effect time.

Examples

+
amplfo_fade=1
+pitchlfo_fade=0.4
+
+

Useful for vibrato which grows in intensity gradually, +as commonly performed by bowed string players.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amplfo_fadeSFZ v1float00 to 100seconds
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amplfo_freq/index.html b/opcodes/amplfo_freq/index.html new file mode 100644 index 000000000..83668115a --- /dev/null +++ b/opcodes/amplfo_freq/index.html @@ -0,0 +1,753 @@ + + + + + + + + + amplfo_freq - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amplfo_freq

+

LFO frequency, in hertz.

Examples

+
amplfo_freq=0.4
+amplfo_freq=10
+
+

Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, +similar to what is found in some classic hardware synthesizers, are not possible. +Some players may in fact be able to utilize higher rates, but 20 Hz is the upper +limit required by the SFZ specification.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amplfo_freqSFZ v1float00 to 20Hz
Modulations
amplfo_freqccNfloat0-200 to 200Hz
amplfo_freqchanaftfloat0-200 to 200Hz
amplfo_freqpolyaftfloat0-200 to 200Hz
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amplfo_freqccN/index.html b/opcodes/amplfo_freqccN/index.html new file mode 100644 index 000000000..9e62d1bb3 --- /dev/null +++ b/opcodes/amplfo_freqccN/index.html @@ -0,0 +1,753 @@ + + + + + + + + + amplfo_freqccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amplfo_freq

+

LFO frequency, in hertz.

Examples

+
amplfo_freq=0.4
+amplfo_freq=10
+
+

Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, +similar to what is found in some classic hardware synthesizers, are not possible. +Some players may in fact be able to utilize higher rates, but 20 Hz is the upper +limit required by the SFZ specification.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amplfo_freqSFZ v1float00 to 20Hz
Modulations
amplfo_freqccNfloat0-200 to 200Hz
amplfo_freqchanaftfloat0-200 to 200Hz
amplfo_freqpolyaftfloat0-200 to 200Hz
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amplfo_freqchanaft/index.html b/opcodes/amplfo_freqchanaft/index.html new file mode 100644 index 000000000..52696ab45 --- /dev/null +++ b/opcodes/amplfo_freqchanaft/index.html @@ -0,0 +1,753 @@ + + + + + + + + + amplfo_freqchanaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amplfo_freq

+

LFO frequency, in hertz.

Examples

+
amplfo_freq=0.4
+amplfo_freq=10
+
+

Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, +similar to what is found in some classic hardware synthesizers, are not possible. +Some players may in fact be able to utilize higher rates, but 20 Hz is the upper +limit required by the SFZ specification.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amplfo_freqSFZ v1float00 to 20Hz
Modulations
amplfo_freqccNfloat0-200 to 200Hz
amplfo_freqchanaftfloat0-200 to 200Hz
amplfo_freqpolyaftfloat0-200 to 200Hz
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amplfo_freqpolyaft/index.html b/opcodes/amplfo_freqpolyaft/index.html new file mode 100644 index 000000000..df1a80492 --- /dev/null +++ b/opcodes/amplfo_freqpolyaft/index.html @@ -0,0 +1,753 @@ + + + + + + + + + amplfo_freqpolyaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amplfo_freq

+

LFO frequency, in hertz.

Examples

+
amplfo_freq=0.4
+amplfo_freq=10
+
+

Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, +similar to what is found in some classic hardware synthesizers, are not possible. +Some players may in fact be able to utilize higher rates, but 20 Hz is the upper +limit required by the SFZ specification.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amplfo_freqSFZ v1float00 to 20Hz
Modulations
amplfo_freqccNfloat0-200 to 200Hz
amplfo_freqchanaftfloat0-200 to 200Hz
amplfo_freqpolyaftfloat0-200 to 200Hz
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amplitude/index.html b/opcodes/amplitude/index.html new file mode 100644 index 000000000..bc3c8d96b --- /dev/null +++ b/opcodes/amplitude/index.html @@ -0,0 +1,763 @@ + + + + + + + + + amplitude - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amplitude

+

Amplitude for the specified region in percentage of full amplitude.

100% amplitude meaning no volume change is applied to the sample when played. +Can be modulated with MIDI CC.

+

Note: Range in the table below is 0 to 100, but some players such as +Aria/Sforazando do not clamp the range. Negative values invert the signal.

+

Examples

+
amplitude=12
+amplitude=40
+amplitude_oncc108=100
+amplitude_oncc50=35
+
+

When modulated by MIDI CC, this is a very convenient way to set up a volume +control which goes from silence to full volume.

+

See also the ‹curve› header example.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amplitudeARIAfloat1000 to 100%
Modulations
amplitude_onccNfloatN/A-100 to 100%
amplitude_curveccNinteger00 to 255N/A
amplitude_smoothccNN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amplitude_ccN/index.html b/opcodes/amplitude_ccN/index.html new file mode 100644 index 000000000..68541ed08 --- /dev/null +++ b/opcodes/amplitude_ccN/index.html @@ -0,0 +1,763 @@ + + + + + + + + + amplitude_ccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amplitude

+

Amplitude for the specified region in percentage of full amplitude.

100% amplitude meaning no volume change is applied to the sample when played. +Can be modulated with MIDI CC.

+

Note: Range in the table below is 0 to 100, but some players such as +Aria/Sforazando do not clamp the range. Negative values invert the signal.

+

Examples

+
amplitude=12
+amplitude=40
+amplitude_oncc108=100
+amplitude_oncc50=35
+
+

When modulated by MIDI CC, this is a very convenient way to set up a volume +control which goes from silence to full volume.

+

See also the ‹curve› header example.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amplitudeARIAfloat1000 to 100%
Modulations
amplitude_onccNfloatN/A-100 to 100%
amplitude_curveccNinteger00 to 255N/A
amplitude_smoothccNN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amplitude_curveccN/index.html b/opcodes/amplitude_curveccN/index.html new file mode 100644 index 000000000..0e7dabd68 --- /dev/null +++ b/opcodes/amplitude_curveccN/index.html @@ -0,0 +1,763 @@ + + + + + + + + + amplitude_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amplitude

+

Amplitude for the specified region in percentage of full amplitude.

100% amplitude meaning no volume change is applied to the sample when played. +Can be modulated with MIDI CC.

+

Note: Range in the table below is 0 to 100, but some players such as +Aria/Sforazando do not clamp the range. Negative values invert the signal.

+

Examples

+
amplitude=12
+amplitude=40
+amplitude_oncc108=100
+amplitude_oncc50=35
+
+

When modulated by MIDI CC, this is a very convenient way to set up a volume +control which goes from silence to full volume.

+

See also the ‹curve› header example.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amplitudeARIAfloat1000 to 100%
Modulations
amplitude_onccNfloatN/A-100 to 100%
amplitude_curveccNinteger00 to 255N/A
amplitude_smoothccNN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amplitude_onccN/index.html b/opcodes/amplitude_onccN/index.html new file mode 100644 index 000000000..3a601e6ff --- /dev/null +++ b/opcodes/amplitude_onccN/index.html @@ -0,0 +1,763 @@ + + + + + + + + + amplitude_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amplitude

+

Amplitude for the specified region in percentage of full amplitude.

100% amplitude meaning no volume change is applied to the sample when played. +Can be modulated with MIDI CC.

+

Note: Range in the table below is 0 to 100, but some players such as +Aria/Sforazando do not clamp the range. Negative values invert the signal.

+

Examples

+
amplitude=12
+amplitude=40
+amplitude_oncc108=100
+amplitude_oncc50=35
+
+

When modulated by MIDI CC, this is a very convenient way to set up a volume +control which goes from silence to full volume.

+

See also the ‹curve› header example.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amplitudeARIAfloat1000 to 100%
Modulations
amplitude_onccNfloatN/A-100 to 100%
amplitude_curveccNinteger00 to 255N/A
amplitude_smoothccNN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/amplitude_smoothccN/index.html b/opcodes/amplitude_smoothccN/index.html new file mode 100644 index 000000000..2b47bcb6f --- /dev/null +++ b/opcodes/amplitude_smoothccN/index.html @@ -0,0 +1,763 @@ + + + + + + + + + amplitude_smoothccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amplitude

+

Amplitude for the specified region in percentage of full amplitude.

100% amplitude meaning no volume change is applied to the sample when played. +Can be modulated with MIDI CC.

+

Note: Range in the table below is 0 to 100, but some players such as +Aria/Sforazando do not clamp the range. Negative values invert the signal.

+

Examples

+
amplitude=12
+amplitude=40
+amplitude_oncc108=100
+amplitude_oncc50=35
+
+

When modulated by MIDI CC, this is a very convenient way to set up a volume +control which goes from silence to full volume.

+

See also the ‹curve› header example.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amplitudeARIAfloat1000 to 100%
Modulations
amplitude_onccNfloatN/A-100 to 100%
amplitude_curveccNinteger00 to 255N/A
amplitude_smoothccNN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/apan_depth/index.html b/opcodes/apan_depth/index.html new file mode 100644 index 000000000..2f0b2fe44 --- /dev/null +++ b/opcodes/apan_depth/index.html @@ -0,0 +1,730 @@ + + + + + + + + + apan_depth - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

apan_depth

+

Used under the ‹effect› header, with type=apan.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
apan_depthSFZ v2N/A0 to 100N/A
Modulations
apan_depth_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/apan_depth_onccN/index.html b/opcodes/apan_depth_onccN/index.html new file mode 100644 index 000000000..8e02fefc9 --- /dev/null +++ b/opcodes/apan_depth_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + apan_depth_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

apan_depth

+

Used under the ‹effect› header, with type=apan.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
apan_depthSFZ v2N/A0 to 100N/A
Modulations
apan_depth_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/apan_dry/index.html b/opcodes/apan_dry/index.html new file mode 100644 index 000000000..bf828b1d9 --- /dev/null +++ b/opcodes/apan_dry/index.html @@ -0,0 +1,730 @@ + + + + + + + + + apan_dry - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

apan_dry

+

Used under the ‹effect› header, with type=apan.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
apan_drySFZ v2N/A0 to 100N/A
Modulations
apan_dry_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/apan_dry_onccN/index.html b/opcodes/apan_dry_onccN/index.html new file mode 100644 index 000000000..a7e7a0ca3 --- /dev/null +++ b/opcodes/apan_dry_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + apan_dry_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

apan_dry

+

Used under the ‹effect› header, with type=apan.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
apan_drySFZ v2N/A0 to 100N/A
Modulations
apan_dry_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/apan_freq/index.html b/opcodes/apan_freq/index.html new file mode 100644 index 000000000..765366c7b --- /dev/null +++ b/opcodes/apan_freq/index.html @@ -0,0 +1,730 @@ + + + + + + + + + apan_freq - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

apan_freq

+

Used under the ‹effect› header, with type=apan.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
apan_freqSFZ v2floatN/AHz
Modulations
apan_freq_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/apan_freq_onccN/index.html b/opcodes/apan_freq_onccN/index.html new file mode 100644 index 000000000..7ad414b1a --- /dev/null +++ b/opcodes/apan_freq_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + apan_freq_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

apan_freq

+

Used under the ‹effect› header, with type=apan.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
apan_freqSFZ v2floatN/AHz
Modulations
apan_freq_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/apan_phase/index.html b/opcodes/apan_phase/index.html new file mode 100644 index 000000000..d7ca842c9 --- /dev/null +++ b/opcodes/apan_phase/index.html @@ -0,0 +1,730 @@ + + + + + + + + + apan_phase - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

apan_phase

+

Used under the ‹effect› header, with type=apan.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
apan_phaseSFZ v2floatN/A0 to 180°
Modulations
apan_phase_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/apan_phase_onccN/index.html b/opcodes/apan_phase_onccN/index.html new file mode 100644 index 000000000..66e46bbcb --- /dev/null +++ b/opcodes/apan_phase_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + apan_phase_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

apan_phase

+

Used under the ‹effect› header, with type=apan.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
apan_phaseSFZ v2floatN/A0 to 180°
Modulations
apan_phase_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/apan_waveform/index.html b/opcodes/apan_waveform/index.html new file mode 100644 index 000000000..6089d106c --- /dev/null +++ b/opcodes/apan_waveform/index.html @@ -0,0 +1,715 @@ + + + + + + + + + apan_waveform - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

apan_waveform

+

LFO wave number.

Used under the ‹effect› header, with type=apan.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
apan_waveformSFZ v2N/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/apan_wet/index.html b/opcodes/apan_wet/index.html new file mode 100644 index 000000000..8c3bce952 --- /dev/null +++ b/opcodes/apan_wet/index.html @@ -0,0 +1,730 @@ + + + + + + + + + apan_wet - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

apan_wet

+

Used under the ‹effect› header, with type=apan.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
apan_wetSFZ v2N/A0 to 100N/A
Modulations
apan_wet_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/apan_wet_onccN/index.html b/opcodes/apan_wet_onccN/index.html new file mode 100644 index 000000000..822f15098 --- /dev/null +++ b/opcodes/apan_wet_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + apan_wet_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

apan_wet

+

Used under the ‹effect› header, with type=apan.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
apan_wetSFZ v2N/A0 to 100N/A
Modulations
apan_wet_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/bend_down/index.html b/opcodes/bend_down/index.html new file mode 100644 index 000000000..326cd300a --- /dev/null +++ b/opcodes/bend_down/index.html @@ -0,0 +1,725 @@ + + + + + + + + + bend_down - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

bend_down

+

Pitch bend range when Bend Wheel or Joystick is moved down, in cents.

If bend_up is set to a positive value, +then moving the pitch wheel down will cause the pitch to move up.

+

Examples

+
bend_down=1200
+
+bend_down=100
+
+

Positive values of bend_down can be useful with instruments such as zithers or +guitars, whose construction makes it practical to bend the pitch of notes up, +but not down - this way, moving the pitch wheel in either direction will result +in a realistic-sounding upwards bend.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
bend_downSFZ v1integer-200-9600 to 9600cents
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/bend_smooth/index.html b/opcodes/bend_smooth/index.html new file mode 100644 index 000000000..c334a9c0e --- /dev/null +++ b/opcodes/bend_smooth/index.html @@ -0,0 +1,719 @@ + + + + + + + + + bend_smooth - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

bend_smooth

+

Pitch bend smoothness. Adds “inertia” to pitch bends, so fast movements of the pitch bend wheel will have a delayed effect on the pitch change.

Sets the smoothness for pitch bend in milliseconds. Adds inertia to the bends, so fast movements of the controller will have a delayed, smoothed effect, similar to smoothccN.

+

Examples

+
bend_smooth=50
+bend_smooth=10
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
bend_smoothSFZ v2float00 to ?ms
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/bend_step/index.html b/opcodes/bend_step/index.html new file mode 100644 index 000000000..f0af49526 --- /dev/null +++ b/opcodes/bend_step/index.html @@ -0,0 +1,721 @@ + + + + + + + + + bend_step - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

bend_step

+

Pitch bend step, in cents.

Examples

+
bend_step=100 // glissando in semitones
+
+bend_step=200 // glissando in whole tones
+
+bend_step=1200 // leap an entire octave at a time
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
bend_stepSFZ v1integer11 to 1200cents
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/bend_stepdown/index.html b/opcodes/bend_stepdown/index.html new file mode 100644 index 000000000..534df9e64 --- /dev/null +++ b/opcodes/bend_stepdown/index.html @@ -0,0 +1,719 @@ + + + + + + + + + bend_stepdown - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

bend_stepdown

+

Pitch bend step, in cents, for downward pitch bends.

Examples

+
bend_stepdown=100 // glissando in semitones
+bend_stepdown=200 // glissando in whole tones
+bend_stepdown=1200 //leap an entire octave at a time
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
bend_stepdownSFZ v2integer11 to 1200cents
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/bend_stepup/index.html b/opcodes/bend_stepup/index.html new file mode 100644 index 000000000..438626690 --- /dev/null +++ b/opcodes/bend_stepup/index.html @@ -0,0 +1,721 @@ + + + + + + + + + bend_stepup - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

bend_stepup

+

Pitch bend step, in cents, applied to upwards bends only.

If this is set to the same value as bend_stepdown, +the result is the same as using bend_step.

+

Examples

+
bend_stepup=100 // glissando in semitones
+bend_stepup=200 // glissando in whole tones
+bend_stepup=1200 //leap an entire octave at a time
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
bend_stepupSFZ v2integer11 to 1200cents
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/bend_up/index.html b/opcodes/bend_up/index.html new file mode 100644 index 000000000..e2fb16556 --- /dev/null +++ b/opcodes/bend_up/index.html @@ -0,0 +1,721 @@ + + + + + + + + + bend_up - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

bend_up

+

Pitch bend range when Bend Wheel or Joystick is moved up, in cents.

If bend_up is negative, +then moving the pitch wheel up will cause the pitch to move down.

+

Examples

+
bend_up=1200
+
+bend_up=100
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
bend_upSFZ v1integer200-9600 to 9600cents
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/benddown/index.html b/opcodes/benddown/index.html new file mode 100644 index 000000000..cb79ab05f --- /dev/null +++ b/opcodes/benddown/index.html @@ -0,0 +1,725 @@ + + + + + + + + + benddown - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

bend_down

+

Pitch bend range when Bend Wheel or Joystick is moved down, in cents.

If bend_up is set to a positive value, +then moving the pitch wheel down will cause the pitch to move up.

+

Examples

+
bend_down=1200
+
+bend_down=100
+
+

Positive values of bend_down can be useful with instruments such as zithers or +guitars, whose construction makes it practical to bend the pitch of notes up, +but not down - this way, moving the pitch wheel in either direction will result +in a realistic-sounding upwards bend.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
bend_downSFZ v1integer-200-9600 to 9600cents
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/bendstep/index.html b/opcodes/bendstep/index.html new file mode 100644 index 000000000..f04e15363 --- /dev/null +++ b/opcodes/bendstep/index.html @@ -0,0 +1,721 @@ + + + + + + + + + bendstep - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

bend_step

+

Pitch bend step, in cents.

Examples

+
bend_step=100 // glissando in semitones
+
+bend_step=200 // glissando in whole tones
+
+bend_step=1200 // leap an entire octave at a time
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
bend_stepSFZ v1integer11 to 1200cents
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/bendup/index.html b/opcodes/bendup/index.html new file mode 100644 index 000000000..f468b294a --- /dev/null +++ b/opcodes/bendup/index.html @@ -0,0 +1,721 @@ + + + + + + + + + bendup - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

bend_up

+

Pitch bend range when Bend Wheel or Joystick is moved up, in cents.

If bend_up is negative, +then moving the pitch wheel up will cause the pitch to move down.

+

Examples

+
bend_up=1200
+
+bend_up=100
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
bend_upSFZ v1integer200-9600 to 9600cents
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/bitred/index.html b/opcodes/bitred/index.html new file mode 100644 index 000000000..d7306a3c8 --- /dev/null +++ b/opcodes/bitred/index.html @@ -0,0 +1,759 @@ + + + + + + + + + bitred - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

bitred

+

Bit reduction.

Used under the ‹effect› header, with type=lofi.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
bitredSFZ v2N/A0 to 100N/A
Modulations
bitred_onccNN/AN/AN/A
bitred_curveccNinteger00 to 255N/A
bitred_smoothccNN/AN/AN/A
bitred_stepccNN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/bitred_curveccN/index.html b/opcodes/bitred_curveccN/index.html new file mode 100644 index 000000000..d5f46ef05 --- /dev/null +++ b/opcodes/bitred_curveccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + bitred_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

bitred

+

Bit reduction.

Used under the ‹effect› header, with type=lofi.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
bitredSFZ v2N/A0 to 100N/A
Modulations
bitred_onccNN/AN/AN/A
bitred_curveccNinteger00 to 255N/A
bitred_smoothccNN/AN/AN/A
bitred_stepccNN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/bitred_onccN/index.html b/opcodes/bitred_onccN/index.html new file mode 100644 index 000000000..de4253be7 --- /dev/null +++ b/opcodes/bitred_onccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + bitred_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

bitred

+

Bit reduction.

Used under the ‹effect› header, with type=lofi.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
bitredSFZ v2N/A0 to 100N/A
Modulations
bitred_onccNN/AN/AN/A
bitred_curveccNinteger00 to 255N/A
bitred_smoothccNN/AN/AN/A
bitred_stepccNN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/bitred_smoothccN/index.html b/opcodes/bitred_smoothccN/index.html new file mode 100644 index 000000000..9d1eadac7 --- /dev/null +++ b/opcodes/bitred_smoothccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + bitred_smoothccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

bitred

+

Bit reduction.

Used under the ‹effect› header, with type=lofi.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
bitredSFZ v2N/A0 to 100N/A
Modulations
bitred_onccNN/AN/AN/A
bitred_curveccNinteger00 to 255N/A
bitred_smoothccNN/AN/AN/A
bitred_stepccNN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/bitred_stepccN/index.html b/opcodes/bitred_stepccN/index.html new file mode 100644 index 000000000..882a1305d --- /dev/null +++ b/opcodes/bitred_stepccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + bitred_stepccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

bitred

+

Bit reduction.

Used under the ‹effect› header, with type=lofi.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
bitredSFZ v2N/A0 to 100N/A
Modulations
bitred_onccNN/AN/AN/A
bitred_curveccNinteger00 to 255N/A
bitred_smoothccNN/AN/AN/A
bitred_stepccNN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/bus/index.html b/opcodes/bus/index.html new file mode 100644 index 000000000..c98688d27 --- /dev/null +++ b/opcodes/bus/index.html @@ -0,0 +1,723 @@ + + + + + + + + + bus - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

bus

+

The target bus for the effect.

If not set, or any other value is set, this goes to the main +output. Possibly main is the default value.

+

See also: midi ARIA extension header

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
busSFZ v2stringmainmain, aux1, aux2, aux3, aux4, aux5, aux6, aux7, aux8, fx1, fx2, fx3, fx4
ARIAmidi
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/bypass_onccN/index.html b/opcodes/bypass_onccN/index.html new file mode 100644 index 000000000..54acfdecb --- /dev/null +++ b/opcodes/bypass_onccN/index.html @@ -0,0 +1,720 @@ + + + + + + + + + bypass_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

bypass_onccN

+

Sets up a bypass controller for the effect.

When the MIDI CC value (0-127) is >= a threshold, the effect plays, +otherwise it's disabled. +The threshold is determined according to this expression: 64.0 / BypassValue +where BypassValue is the opcode's value, strictly positive, interpreted as +real number. At BypassValue=1, without doubt the most useful, the effect is +off at CC<64 and on at CC>=64.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
bypass_onccNSFZ v2floatN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/comp_attack/index.html b/opcodes/comp_attack/index.html new file mode 100644 index 000000000..3bf431907 --- /dev/null +++ b/opcodes/comp_attack/index.html @@ -0,0 +1,715 @@ + + + + + + + + + comp_attack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

comp_attack

+

Used under the ‹effect› header, with type=comp.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
comp_attackSFZ v2floatN/Aseconds
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/comp_gain/index.html b/opcodes/comp_gain/index.html new file mode 100644 index 000000000..d707cf1a1 --- /dev/null +++ b/opcodes/comp_gain/index.html @@ -0,0 +1,715 @@ + + + + + + + + + comp_gain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

comp_gain

+

Used under the ‹effect› header, with type=comp.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
comp_gainSFZ v2N/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/comp_ratio/index.html b/opcodes/comp_ratio/index.html new file mode 100644 index 000000000..2ad9df40c --- /dev/null +++ b/opcodes/comp_ratio/index.html @@ -0,0 +1,715 @@ + + + + + + + + + comp_ratio - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

comp_ratio

+

Used under the ‹effect› header, with type=comp.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
comp_ratioSFZ v2N/A0 to 100N/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/comp_release/index.html b/opcodes/comp_release/index.html new file mode 100644 index 000000000..7a7c3180c --- /dev/null +++ b/opcodes/comp_release/index.html @@ -0,0 +1,715 @@ + + + + + + + + + comp_release - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

comp_release

+

Used under the ‹effect› header, with type=comp.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
comp_releaseSFZ v2floatN/Aseconds
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/comp_stlink/index.html b/opcodes/comp_stlink/index.html new file mode 100644 index 000000000..63c4e7db4 --- /dev/null +++ b/opcodes/comp_stlink/index.html @@ -0,0 +1,714 @@ + + + + + + + + + comp_stlink - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

comp_stlink

+

Used under the ‹effect› header, with type=comp.

+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
comp_stlinkSFZ v2stringN/Aon, off
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/comp_threshold/index.html b/opcodes/comp_threshold/index.html new file mode 100644 index 000000000..484a2780e --- /dev/null +++ b/opcodes/comp_threshold/index.html @@ -0,0 +1,715 @@ + + + + + + + + + comp_threshold - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

comp_threshold

+

Used under the ‹effect› header, with type=comp.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
comp_thresholdSFZ v2floatN/AdB
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/count/index.html b/opcodes/count/index.html new file mode 100644 index 000000000..709f95e3e --- /dev/null +++ b/opcodes/count/index.html @@ -0,0 +1,730 @@ + + + + + + + + + count - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

count

+

The number of times the sample will be played.

If this opcode is specified, the sample will play as many times as defined. +Envelope generators will not be retriggered on sample restart. +When this opcode is defined, loop_mode is automatically set to one_shot.

+

count=1 will play the sample once, so it's effectively the same as setting +loop_mode=one_shot.

+

Examples

+
count=3
+
+count=2
+
+

Practical Considerations

+

count=0 behaves differently in different SFZ players. ARIA and sfz.dll treat +this the same as if count was not set, and respect loop_mode settings. +However, in Rapture and DropZone and possibly other Cakewalk products, +count=0 will have the same effect as count=1 - essentially set loop_mode +to one_shot and cause the sample to be played once.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
countSFZ v1integer00 to 4294967296N/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/curve_index/index.html b/opcodes/curve_index/index.html new file mode 100644 index 000000000..2de9fee69 --- /dev/null +++ b/opcodes/curve_index/index.html @@ -0,0 +1,748 @@ + + + + + + + + + ‹curve› - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

‹curve›

One curve header is used to define each curve. +The values for various points along the curve can then be set, from v000 to v127. +The default is v000=0 and v127=1. Any points along the curve not defined explicitly +will be interpolated linearly between points which are defined.

+

There are default built-in curves in ARIA. If no curve is specified for a +modulation, curve 0 is used. The built-in ARIA curves are:

+

Default curve (number 0). linear, from 0 to 1 +1. bipolar, from -1 to 1 (useful for things such as tuning and panning, + used by CC10 panning by default) +2. linear inverted, from 1 to 0 +3. bipolar inverted, from 1 to -1 +4. concave (used for CC7 volume tracking and amp_veltrack) +5. Xfin power curve +6. Xfout power curve

+

These can be overwritten, but as they are used by the engine for their normal +functions, it's safer to use curve_index numbers of 7 and above for custom curves. +Curve_index in ARIA can be any integer from 0 to 255.

+

Examples

+
<curve>curve_index=17
+v000=0
+v095=1
+v127=1
+
+<curve>curve_index=18
+v000=0
+v095=0.5
+v127=1
+
+

Here's a scenario using one MIDI CC to control the amplitude of two samples +along two different curves.

+
<region>
+amplitude_oncc110=100
+amplitude_curvecc110=9
+sample=bigger.wav
+
+<region>
+amplitude_oncc110=100
+amplitude_curvecc110=10
+sample=smaller.wav
+
+//The curves for the room ambiences - bigger room first
+
+<curve>curve_index=9
+v000=0
+v063=0
+v127=1
+
+<curve>curve_index=10
+v000=0
+v063=1
+v127=0.1
+
+

And how to use the default curve 1 to create a tuning control which +goes down and up, with the pitch unmodulated when the control is in +the middle.

+
pitch_oncc27=100
+pitch_curvecc27=1
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/cutoff/index.html b/opcodes/cutoff/index.html new file mode 100644 index 000000000..644ba23a0 --- /dev/null +++ b/opcodes/cutoff/index.html @@ -0,0 +1,798 @@ + + + + + + + + + cutoff / cutoff2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

cutoff / cutoff2

+

Sets the cutoff frequency (Hz) of the filters.

Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. +There are two filters in series - the cutoff frequency of one is controlled by cutoff, that +of the second by cutoff2.

+

Examples

+
cutoff=343
+cutoff2=1200
+cutoff_cc1=1200
+cutoff2_chanaft=1200
+cutoff2_polyaft=1200
+
+

Both filters can be used be used to have both a high-pass and a low-pass filter, like this:

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

Setting cutoff to 0 behaves differently in diffrent players.

+

ARIA/sforzando : filter disabled, oncc disabled +rgc sfz : filter off, oncc working +Dimension Pro and Rapture : lowest cutoff value, oncc working +sfizz : no sound +BassMidi : filter off, no oncc support yet

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
cutoffSFZ v1floatfilter disabled0 to SampleRate / 2Hz
Modulations
cutoff_ccNinteger0-9600 to 9600cents
cutoff_curveccNSFZ v2integer00 to 255N/A
cutoff_smoothccNSFZ v2float00 to ?ms
cutoff_stepccNSFZ v2integer00 to ?N/A
cutoff_chanaftinteger0-9600 to 9600cents
cutoff_polyaftinteger0-9600 to 9600cents
+

Other modulations

+
    +
  • Envelope: fileg_depth
  • +
  • LFO: fillfo_depth
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/cutoff2/index.html b/opcodes/cutoff2/index.html new file mode 100644 index 000000000..6d1e426ae --- /dev/null +++ b/opcodes/cutoff2/index.html @@ -0,0 +1,798 @@ + + + + + + + + + cutoff / cutoff2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

cutoff / cutoff2

+

Sets the cutoff frequency (Hz) of the filters.

Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. +There are two filters in series - the cutoff frequency of one is controlled by cutoff, that +of the second by cutoff2.

+

Examples

+
cutoff=343
+cutoff2=1200
+cutoff_cc1=1200
+cutoff2_chanaft=1200
+cutoff2_polyaft=1200
+
+

Both filters can be used be used to have both a high-pass and a low-pass filter, like this:

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

Setting cutoff to 0 behaves differently in diffrent players.

+

ARIA/sforzando : filter disabled, oncc disabled +rgc sfz : filter off, oncc working +Dimension Pro and Rapture : lowest cutoff value, oncc working +sfizz : no sound +BassMidi : filter off, no oncc support yet

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
cutoffSFZ v1floatfilter disabled0 to SampleRate / 2Hz
Modulations
cutoff_ccNinteger0-9600 to 9600cents
cutoff_curveccNSFZ v2integer00 to 255N/A
cutoff_smoothccNSFZ v2float00 to ?ms
cutoff_stepccNSFZ v2integer00 to ?N/A
cutoff_chanaftinteger0-9600 to 9600cents
cutoff_polyaftinteger0-9600 to 9600cents
+

Other modulations

+
    +
  • Envelope: fileg_depth
  • +
  • LFO: fillfo_depth
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/cutoff2_ccN/index.html b/opcodes/cutoff2_ccN/index.html new file mode 100644 index 000000000..4a3d248ac --- /dev/null +++ b/opcodes/cutoff2_ccN/index.html @@ -0,0 +1,798 @@ + + + + + + + + + cutoff / cutoff2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

cutoff / cutoff2

+

Sets the cutoff frequency (Hz) of the filters.

Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. +There are two filters in series - the cutoff frequency of one is controlled by cutoff, that +of the second by cutoff2.

+

Examples

+
cutoff=343
+cutoff2=1200
+cutoff_cc1=1200
+cutoff2_chanaft=1200
+cutoff2_polyaft=1200
+
+

Both filters can be used be used to have both a high-pass and a low-pass filter, like this:

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

Setting cutoff to 0 behaves differently in diffrent players.

+

ARIA/sforzando : filter disabled, oncc disabled +rgc sfz : filter off, oncc working +Dimension Pro and Rapture : lowest cutoff value, oncc working +sfizz : no sound +BassMidi : filter off, no oncc support yet

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
cutoffSFZ v1floatfilter disabled0 to SampleRate / 2Hz
Modulations
cutoff_ccNinteger0-9600 to 9600cents
cutoff_curveccNSFZ v2integer00 to 255N/A
cutoff_smoothccNSFZ v2float00 to ?ms
cutoff_stepccNSFZ v2integer00 to ?N/A
cutoff_chanaftinteger0-9600 to 9600cents
cutoff_polyaftinteger0-9600 to 9600cents
+

Other modulations

+
    +
  • Envelope: fileg_depth
  • +
  • LFO: fillfo_depth
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/cutoff2_chanaft/index.html b/opcodes/cutoff2_chanaft/index.html new file mode 100644 index 000000000..ba7221297 --- /dev/null +++ b/opcodes/cutoff2_chanaft/index.html @@ -0,0 +1,798 @@ + + + + + + + + + cutoff / cutoff2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

cutoff / cutoff2

+

Sets the cutoff frequency (Hz) of the filters.

Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. +There are two filters in series - the cutoff frequency of one is controlled by cutoff, that +of the second by cutoff2.

+

Examples

+
cutoff=343
+cutoff2=1200
+cutoff_cc1=1200
+cutoff2_chanaft=1200
+cutoff2_polyaft=1200
+
+

Both filters can be used be used to have both a high-pass and a low-pass filter, like this:

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

Setting cutoff to 0 behaves differently in diffrent players.

+

ARIA/sforzando : filter disabled, oncc disabled +rgc sfz : filter off, oncc working +Dimension Pro and Rapture : lowest cutoff value, oncc working +sfizz : no sound +BassMidi : filter off, no oncc support yet

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
cutoffSFZ v1floatfilter disabled0 to SampleRate / 2Hz
Modulations
cutoff_ccNinteger0-9600 to 9600cents
cutoff_curveccNSFZ v2integer00 to 255N/A
cutoff_smoothccNSFZ v2float00 to ?ms
cutoff_stepccNSFZ v2integer00 to ?N/A
cutoff_chanaftinteger0-9600 to 9600cents
cutoff_polyaftinteger0-9600 to 9600cents
+

Other modulations

+
    +
  • Envelope: fileg_depth
  • +
  • LFO: fillfo_depth
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/cutoff2_curveccN/index.html b/opcodes/cutoff2_curveccN/index.html new file mode 100644 index 000000000..d454fcc4c --- /dev/null +++ b/opcodes/cutoff2_curveccN/index.html @@ -0,0 +1,798 @@ + + + + + + + + + cutoff / cutoff2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

cutoff / cutoff2

+

Sets the cutoff frequency (Hz) of the filters.

Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. +There are two filters in series - the cutoff frequency of one is controlled by cutoff, that +of the second by cutoff2.

+

Examples

+
cutoff=343
+cutoff2=1200
+cutoff_cc1=1200
+cutoff2_chanaft=1200
+cutoff2_polyaft=1200
+
+

Both filters can be used be used to have both a high-pass and a low-pass filter, like this:

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

Setting cutoff to 0 behaves differently in diffrent players.

+

ARIA/sforzando : filter disabled, oncc disabled +rgc sfz : filter off, oncc working +Dimension Pro and Rapture : lowest cutoff value, oncc working +sfizz : no sound +BassMidi : filter off, no oncc support yet

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
cutoffSFZ v1floatfilter disabled0 to SampleRate / 2Hz
Modulations
cutoff_ccNinteger0-9600 to 9600cents
cutoff_curveccNSFZ v2integer00 to 255N/A
cutoff_smoothccNSFZ v2float00 to ?ms
cutoff_stepccNSFZ v2integer00 to ?N/A
cutoff_chanaftinteger0-9600 to 9600cents
cutoff_polyaftinteger0-9600 to 9600cents
+

Other modulations

+
    +
  • Envelope: fileg_depth
  • +
  • LFO: fillfo_depth
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/cutoff2_onccN/index.html b/opcodes/cutoff2_onccN/index.html new file mode 100644 index 000000000..f27531c4c --- /dev/null +++ b/opcodes/cutoff2_onccN/index.html @@ -0,0 +1,798 @@ + + + + + + + + + cutoff / cutoff2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

cutoff / cutoff2

+

Sets the cutoff frequency (Hz) of the filters.

Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. +There are two filters in series - the cutoff frequency of one is controlled by cutoff, that +of the second by cutoff2.

+

Examples

+
cutoff=343
+cutoff2=1200
+cutoff_cc1=1200
+cutoff2_chanaft=1200
+cutoff2_polyaft=1200
+
+

Both filters can be used be used to have both a high-pass and a low-pass filter, like this:

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

Setting cutoff to 0 behaves differently in diffrent players.

+

ARIA/sforzando : filter disabled, oncc disabled +rgc sfz : filter off, oncc working +Dimension Pro and Rapture : lowest cutoff value, oncc working +sfizz : no sound +BassMidi : filter off, no oncc support yet

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
cutoffSFZ v1floatfilter disabled0 to SampleRate / 2Hz
Modulations
cutoff_ccNinteger0-9600 to 9600cents
cutoff_curveccNSFZ v2integer00 to 255N/A
cutoff_smoothccNSFZ v2float00 to ?ms
cutoff_stepccNSFZ v2integer00 to ?N/A
cutoff_chanaftinteger0-9600 to 9600cents
cutoff_polyaftinteger0-9600 to 9600cents
+

Other modulations

+
    +
  • Envelope: fileg_depth
  • +
  • LFO: fillfo_depth
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/cutoff2_polyaft/index.html b/opcodes/cutoff2_polyaft/index.html new file mode 100644 index 000000000..7836698a8 --- /dev/null +++ b/opcodes/cutoff2_polyaft/index.html @@ -0,0 +1,798 @@ + + + + + + + + + cutoff / cutoff2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

cutoff / cutoff2

+

Sets the cutoff frequency (Hz) of the filters.

Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. +There are two filters in series - the cutoff frequency of one is controlled by cutoff, that +of the second by cutoff2.

+

Examples

+
cutoff=343
+cutoff2=1200
+cutoff_cc1=1200
+cutoff2_chanaft=1200
+cutoff2_polyaft=1200
+
+

Both filters can be used be used to have both a high-pass and a low-pass filter, like this:

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

Setting cutoff to 0 behaves differently in diffrent players.

+

ARIA/sforzando : filter disabled, oncc disabled +rgc sfz : filter off, oncc working +Dimension Pro and Rapture : lowest cutoff value, oncc working +sfizz : no sound +BassMidi : filter off, no oncc support yet

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
cutoffSFZ v1floatfilter disabled0 to SampleRate / 2Hz
Modulations
cutoff_ccNinteger0-9600 to 9600cents
cutoff_curveccNSFZ v2integer00 to 255N/A
cutoff_smoothccNSFZ v2float00 to ?ms
cutoff_stepccNSFZ v2integer00 to ?N/A
cutoff_chanaftinteger0-9600 to 9600cents
cutoff_polyaftinteger0-9600 to 9600cents
+

Other modulations

+
    +
  • Envelope: fileg_depth
  • +
  • LFO: fillfo_depth
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/cutoff2_random/index.html b/opcodes/cutoff2_random/index.html new file mode 100644 index 000000000..3a7d82961 --- /dev/null +++ b/opcodes/cutoff2_random/index.html @@ -0,0 +1,723 @@ + + + + + + + + + cutoff2_random - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fil_random

+

Random value added to the filter cutoff for the region, in cents.

Computed when the note is triggered, remains the same for that region +for as long as the region plays.

+

Examples

+
fil_random=100
+
+fil_random=400
+
+

Practical Considerations

+

In ARIA, this is unipolar. In rcg sfz and Cakewalk, this is bipolar.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fil_randomSFZ v1integer00 to 9600cents
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/cutoff2_smoothccN/index.html b/opcodes/cutoff2_smoothccN/index.html new file mode 100644 index 000000000..9fb3fd1dc --- /dev/null +++ b/opcodes/cutoff2_smoothccN/index.html @@ -0,0 +1,798 @@ + + + + + + + + + cutoff / cutoff2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

cutoff / cutoff2

+

Sets the cutoff frequency (Hz) of the filters.

Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. +There are two filters in series - the cutoff frequency of one is controlled by cutoff, that +of the second by cutoff2.

+

Examples

+
cutoff=343
+cutoff2=1200
+cutoff_cc1=1200
+cutoff2_chanaft=1200
+cutoff2_polyaft=1200
+
+

Both filters can be used be used to have both a high-pass and a low-pass filter, like this:

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

Setting cutoff to 0 behaves differently in diffrent players.

+

ARIA/sforzando : filter disabled, oncc disabled +rgc sfz : filter off, oncc working +Dimension Pro and Rapture : lowest cutoff value, oncc working +sfizz : no sound +BassMidi : filter off, no oncc support yet

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
cutoffSFZ v1floatfilter disabled0 to SampleRate / 2Hz
Modulations
cutoff_ccNinteger0-9600 to 9600cents
cutoff_curveccNSFZ v2integer00 to 255N/A
cutoff_smoothccNSFZ v2float00 to ?ms
cutoff_stepccNSFZ v2integer00 to ?N/A
cutoff_chanaftinteger0-9600 to 9600cents
cutoff_polyaftinteger0-9600 to 9600cents
+

Other modulations

+
    +
  • Envelope: fileg_depth
  • +
  • LFO: fillfo_depth
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/cutoff2_stepccN/index.html b/opcodes/cutoff2_stepccN/index.html new file mode 100644 index 000000000..f4dbb47d2 --- /dev/null +++ b/opcodes/cutoff2_stepccN/index.html @@ -0,0 +1,798 @@ + + + + + + + + + cutoff / cutoff2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

cutoff / cutoff2

+

Sets the cutoff frequency (Hz) of the filters.

Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. +There are two filters in series - the cutoff frequency of one is controlled by cutoff, that +of the second by cutoff2.

+

Examples

+
cutoff=343
+cutoff2=1200
+cutoff_cc1=1200
+cutoff2_chanaft=1200
+cutoff2_polyaft=1200
+
+

Both filters can be used be used to have both a high-pass and a low-pass filter, like this:

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

Setting cutoff to 0 behaves differently in diffrent players.

+

ARIA/sforzando : filter disabled, oncc disabled +rgc sfz : filter off, oncc working +Dimension Pro and Rapture : lowest cutoff value, oncc working +sfizz : no sound +BassMidi : filter off, no oncc support yet

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
cutoffSFZ v1floatfilter disabled0 to SampleRate / 2Hz
Modulations
cutoff_ccNinteger0-9600 to 9600cents
cutoff_curveccNSFZ v2integer00 to 255N/A
cutoff_smoothccNSFZ v2float00 to ?ms
cutoff_stepccNSFZ v2integer00 to ?N/A
cutoff_chanaftinteger0-9600 to 9600cents
cutoff_polyaftinteger0-9600 to 9600cents
+

Other modulations

+
    +
  • Envelope: fileg_depth
  • +
  • LFO: fillfo_depth
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/cutoff_ccN/index.html b/opcodes/cutoff_ccN/index.html new file mode 100644 index 000000000..ed2d78070 --- /dev/null +++ b/opcodes/cutoff_ccN/index.html @@ -0,0 +1,798 @@ + + + + + + + + + cutoff / cutoff2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

cutoff / cutoff2

+

Sets the cutoff frequency (Hz) of the filters.

Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. +There are two filters in series - the cutoff frequency of one is controlled by cutoff, that +of the second by cutoff2.

+

Examples

+
cutoff=343
+cutoff2=1200
+cutoff_cc1=1200
+cutoff2_chanaft=1200
+cutoff2_polyaft=1200
+
+

Both filters can be used be used to have both a high-pass and a low-pass filter, like this:

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

Setting cutoff to 0 behaves differently in diffrent players.

+

ARIA/sforzando : filter disabled, oncc disabled +rgc sfz : filter off, oncc working +Dimension Pro and Rapture : lowest cutoff value, oncc working +sfizz : no sound +BassMidi : filter off, no oncc support yet

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
cutoffSFZ v1floatfilter disabled0 to SampleRate / 2Hz
Modulations
cutoff_ccNinteger0-9600 to 9600cents
cutoff_curveccNSFZ v2integer00 to 255N/A
cutoff_smoothccNSFZ v2float00 to ?ms
cutoff_stepccNSFZ v2integer00 to ?N/A
cutoff_chanaftinteger0-9600 to 9600cents
cutoff_polyaftinteger0-9600 to 9600cents
+

Other modulations

+
    +
  • Envelope: fileg_depth
  • +
  • LFO: fillfo_depth
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/cutoff_chanaft/index.html b/opcodes/cutoff_chanaft/index.html new file mode 100644 index 000000000..1aaeb16f3 --- /dev/null +++ b/opcodes/cutoff_chanaft/index.html @@ -0,0 +1,798 @@ + + + + + + + + + cutoff / cutoff2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

cutoff / cutoff2

+

Sets the cutoff frequency (Hz) of the filters.

Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. +There are two filters in series - the cutoff frequency of one is controlled by cutoff, that +of the second by cutoff2.

+

Examples

+
cutoff=343
+cutoff2=1200
+cutoff_cc1=1200
+cutoff2_chanaft=1200
+cutoff2_polyaft=1200
+
+

Both filters can be used be used to have both a high-pass and a low-pass filter, like this:

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

Setting cutoff to 0 behaves differently in diffrent players.

+

ARIA/sforzando : filter disabled, oncc disabled +rgc sfz : filter off, oncc working +Dimension Pro and Rapture : lowest cutoff value, oncc working +sfizz : no sound +BassMidi : filter off, no oncc support yet

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
cutoffSFZ v1floatfilter disabled0 to SampleRate / 2Hz
Modulations
cutoff_ccNinteger0-9600 to 9600cents
cutoff_curveccNSFZ v2integer00 to 255N/A
cutoff_smoothccNSFZ v2float00 to ?ms
cutoff_stepccNSFZ v2integer00 to ?N/A
cutoff_chanaftinteger0-9600 to 9600cents
cutoff_polyaftinteger0-9600 to 9600cents
+

Other modulations

+
    +
  • Envelope: fileg_depth
  • +
  • LFO: fillfo_depth
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/cutoff_curveccN/index.html b/opcodes/cutoff_curveccN/index.html new file mode 100644 index 000000000..1398d5429 --- /dev/null +++ b/opcodes/cutoff_curveccN/index.html @@ -0,0 +1,798 @@ + + + + + + + + + cutoff / cutoff2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

cutoff / cutoff2

+

Sets the cutoff frequency (Hz) of the filters.

Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. +There are two filters in series - the cutoff frequency of one is controlled by cutoff, that +of the second by cutoff2.

+

Examples

+
cutoff=343
+cutoff2=1200
+cutoff_cc1=1200
+cutoff2_chanaft=1200
+cutoff2_polyaft=1200
+
+

Both filters can be used be used to have both a high-pass and a low-pass filter, like this:

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

Setting cutoff to 0 behaves differently in diffrent players.

+

ARIA/sforzando : filter disabled, oncc disabled +rgc sfz : filter off, oncc working +Dimension Pro and Rapture : lowest cutoff value, oncc working +sfizz : no sound +BassMidi : filter off, no oncc support yet

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
cutoffSFZ v1floatfilter disabled0 to SampleRate / 2Hz
Modulations
cutoff_ccNinteger0-9600 to 9600cents
cutoff_curveccNSFZ v2integer00 to 255N/A
cutoff_smoothccNSFZ v2float00 to ?ms
cutoff_stepccNSFZ v2integer00 to ?N/A
cutoff_chanaftinteger0-9600 to 9600cents
cutoff_polyaftinteger0-9600 to 9600cents
+

Other modulations

+
    +
  • Envelope: fileg_depth
  • +
  • LFO: fillfo_depth
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/cutoff_onccN/index.html b/opcodes/cutoff_onccN/index.html new file mode 100644 index 000000000..6c1936473 --- /dev/null +++ b/opcodes/cutoff_onccN/index.html @@ -0,0 +1,798 @@ + + + + + + + + + cutoff / cutoff2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

cutoff / cutoff2

+

Sets the cutoff frequency (Hz) of the filters.

Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. +There are two filters in series - the cutoff frequency of one is controlled by cutoff, that +of the second by cutoff2.

+

Examples

+
cutoff=343
+cutoff2=1200
+cutoff_cc1=1200
+cutoff2_chanaft=1200
+cutoff2_polyaft=1200
+
+

Both filters can be used be used to have both a high-pass and a low-pass filter, like this:

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

Setting cutoff to 0 behaves differently in diffrent players.

+

ARIA/sforzando : filter disabled, oncc disabled +rgc sfz : filter off, oncc working +Dimension Pro and Rapture : lowest cutoff value, oncc working +sfizz : no sound +BassMidi : filter off, no oncc support yet

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
cutoffSFZ v1floatfilter disabled0 to SampleRate / 2Hz
Modulations
cutoff_ccNinteger0-9600 to 9600cents
cutoff_curveccNSFZ v2integer00 to 255N/A
cutoff_smoothccNSFZ v2float00 to ?ms
cutoff_stepccNSFZ v2integer00 to ?N/A
cutoff_chanaftinteger0-9600 to 9600cents
cutoff_polyaftinteger0-9600 to 9600cents
+

Other modulations

+
    +
  • Envelope: fileg_depth
  • +
  • LFO: fillfo_depth
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/cutoff_polyaft/index.html b/opcodes/cutoff_polyaft/index.html new file mode 100644 index 000000000..7d346198b --- /dev/null +++ b/opcodes/cutoff_polyaft/index.html @@ -0,0 +1,798 @@ + + + + + + + + + cutoff / cutoff2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

cutoff / cutoff2

+

Sets the cutoff frequency (Hz) of the filters.

Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. +There are two filters in series - the cutoff frequency of one is controlled by cutoff, that +of the second by cutoff2.

+

Examples

+
cutoff=343
+cutoff2=1200
+cutoff_cc1=1200
+cutoff2_chanaft=1200
+cutoff2_polyaft=1200
+
+

Both filters can be used be used to have both a high-pass and a low-pass filter, like this:

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

Setting cutoff to 0 behaves differently in diffrent players.

+

ARIA/sforzando : filter disabled, oncc disabled +rgc sfz : filter off, oncc working +Dimension Pro and Rapture : lowest cutoff value, oncc working +sfizz : no sound +BassMidi : filter off, no oncc support yet

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
cutoffSFZ v1floatfilter disabled0 to SampleRate / 2Hz
Modulations
cutoff_ccNinteger0-9600 to 9600cents
cutoff_curveccNSFZ v2integer00 to 255N/A
cutoff_smoothccNSFZ v2float00 to ?ms
cutoff_stepccNSFZ v2integer00 to ?N/A
cutoff_chanaftinteger0-9600 to 9600cents
cutoff_polyaftinteger0-9600 to 9600cents
+

Other modulations

+
    +
  • Envelope: fileg_depth
  • +
  • LFO: fillfo_depth
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/cutoff_random/index.html b/opcodes/cutoff_random/index.html new file mode 100644 index 000000000..6d6fe4fe5 --- /dev/null +++ b/opcodes/cutoff_random/index.html @@ -0,0 +1,723 @@ + + + + + + + + + cutoff_random - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fil_random

+

Random value added to the filter cutoff for the region, in cents.

Computed when the note is triggered, remains the same for that region +for as long as the region plays.

+

Examples

+
fil_random=100
+
+fil_random=400
+
+

Practical Considerations

+

In ARIA, this is unipolar. In rcg sfz and Cakewalk, this is bipolar.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fil_randomSFZ v1integer00 to 9600cents
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/cutoff_smoothccN/index.html b/opcodes/cutoff_smoothccN/index.html new file mode 100644 index 000000000..9b8abfaea --- /dev/null +++ b/opcodes/cutoff_smoothccN/index.html @@ -0,0 +1,798 @@ + + + + + + + + + cutoff / cutoff2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

cutoff / cutoff2

+

Sets the cutoff frequency (Hz) of the filters.

Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. +There are two filters in series - the cutoff frequency of one is controlled by cutoff, that +of the second by cutoff2.

+

Examples

+
cutoff=343
+cutoff2=1200
+cutoff_cc1=1200
+cutoff2_chanaft=1200
+cutoff2_polyaft=1200
+
+

Both filters can be used be used to have both a high-pass and a low-pass filter, like this:

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

Setting cutoff to 0 behaves differently in diffrent players.

+

ARIA/sforzando : filter disabled, oncc disabled +rgc sfz : filter off, oncc working +Dimension Pro and Rapture : lowest cutoff value, oncc working +sfizz : no sound +BassMidi : filter off, no oncc support yet

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
cutoffSFZ v1floatfilter disabled0 to SampleRate / 2Hz
Modulations
cutoff_ccNinteger0-9600 to 9600cents
cutoff_curveccNSFZ v2integer00 to 255N/A
cutoff_smoothccNSFZ v2float00 to ?ms
cutoff_stepccNSFZ v2integer00 to ?N/A
cutoff_chanaftinteger0-9600 to 9600cents
cutoff_polyaftinteger0-9600 to 9600cents
+

Other modulations

+
    +
  • Envelope: fileg_depth
  • +
  • LFO: fillfo_depth
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/cutoff_stepccN/index.html b/opcodes/cutoff_stepccN/index.html new file mode 100644 index 000000000..ac1c0cd35 --- /dev/null +++ b/opcodes/cutoff_stepccN/index.html @@ -0,0 +1,798 @@ + + + + + + + + + cutoff / cutoff2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

cutoff / cutoff2

+

Sets the cutoff frequency (Hz) of the filters.

Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. +There are two filters in series - the cutoff frequency of one is controlled by cutoff, that +of the second by cutoff2.

+

Examples

+
cutoff=343
+cutoff2=1200
+cutoff_cc1=1200
+cutoff2_chanaft=1200
+cutoff2_polyaft=1200
+
+

Both filters can be used be used to have both a high-pass and a low-pass filter, like this:

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

Setting cutoff to 0 behaves differently in diffrent players.

+

ARIA/sforzando : filter disabled, oncc disabled +rgc sfz : filter off, oncc working +Dimension Pro and Rapture : lowest cutoff value, oncc working +sfizz : no sound +BassMidi : filter off, no oncc support yet

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
cutoffSFZ v1floatfilter disabled0 to SampleRate / 2Hz
Modulations
cutoff_ccNinteger0-9600 to 9600cents
cutoff_curveccNSFZ v2integer00 to 255N/A
cutoff_smoothccNSFZ v2float00 to ?ms
cutoff_stepccNSFZ v2integer00 to ?N/A
cutoff_chanaftinteger0-9600 to 9600cents
cutoff_polyaftinteger0-9600 to 9600cents
+

Other modulations

+
    +
  • Envelope: fileg_depth
  • +
  • LFO: fillfo_depth
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/decim/index.html b/opcodes/decim/index.html new file mode 100644 index 000000000..fe7d46b6d --- /dev/null +++ b/opcodes/decim/index.html @@ -0,0 +1,759 @@ + + + + + + + + + decim - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

decim

+

Decimator.

Used under the ‹effect› header, with type=lofi.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
decimSFZ v2N/A0 to 100N/A
Modulations
decim_onccNN/AN/AN/A
decim_curveccNinteger00 to 255N/A
decim_smoothccNN/AN/AN/A
decim_stepccNN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/decim_curveccN/index.html b/opcodes/decim_curveccN/index.html new file mode 100644 index 000000000..ffb3fcc8f --- /dev/null +++ b/opcodes/decim_curveccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + decim_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

decim

+

Decimator.

Used under the ‹effect› header, with type=lofi.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
decimSFZ v2N/A0 to 100N/A
Modulations
decim_onccNN/AN/AN/A
decim_curveccNinteger00 to 255N/A
decim_smoothccNN/AN/AN/A
decim_stepccNN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/decim_onccN/index.html b/opcodes/decim_onccN/index.html new file mode 100644 index 000000000..cc2303c4f --- /dev/null +++ b/opcodes/decim_onccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + decim_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

decim

+

Decimator.

Used under the ‹effect› header, with type=lofi.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
decimSFZ v2N/A0 to 100N/A
Modulations
decim_onccNN/AN/AN/A
decim_curveccNinteger00 to 255N/A
decim_smoothccNN/AN/AN/A
decim_stepccNN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/decim_smoothccN/index.html b/opcodes/decim_smoothccN/index.html new file mode 100644 index 000000000..38d6b5aab --- /dev/null +++ b/opcodes/decim_smoothccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + decim_smoothccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

decim

+

Decimator.

Used under the ‹effect› header, with type=lofi.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
decimSFZ v2N/A0 to 100N/A
Modulations
decim_onccNN/AN/AN/A
decim_curveccNinteger00 to 255N/A
decim_smoothccNN/AN/AN/A
decim_stepccNN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/decim_stepccN/index.html b/opcodes/decim_stepccN/index.html new file mode 100644 index 000000000..2623f1494 --- /dev/null +++ b/opcodes/decim_stepccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + decim_stepccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

decim

+

Decimator.

Used under the ‹effect› header, with type=lofi.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
decimSFZ v2N/A0 to 100N/A
Modulations
decim_onccNN/AN/AN/A
decim_curveccNinteger00 to 255N/A
decim_smoothccNN/AN/AN/A
decim_stepccNN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/default_path/index.html b/opcodes/default_path/index.html new file mode 100644 index 000000000..2bc3dff08 --- /dev/null +++ b/opcodes/default_path/index.html @@ -0,0 +1,733 @@ + + + + + + + + + default_path - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

default_path

+

Default file path.

Default path under which the samples should be found. Can also be +used as a general prefix for samples, not just a path prefix. At +least in ARIA this is combined with the path given in the +sample opcode, so either default_path should +have a trailing slash, or sample should have a leading slash so +when concatenated they will become a valid file path.

+

Cakewalk products only allow relative path. ARIA, Bassmidi and sfizz +allow either absolute or relative paths.

+

Used under the ‹control› header. In Cakewalk products, +a new control header does not reset the path. +In ARIA default_path gets reset by a new control header. Whether settings +other than default_path should also be reset by a new control header +is not entirely clear. As implemented in ARIA, a new control header +resets default_path only and not other control settings, and this +does not seem unreasonable.

+

Examples

+
default_path=../Samples/
+default_path=D:/TEST/Count_0_10/
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
default_pathSFZ v2stringN/AN/A
+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/define/index.html b/opcodes/define/index.html new file mode 100644 index 000000000..b9fe5dbfa --- /dev/null +++ b/opcodes/define/index.html @@ -0,0 +1,745 @@ + + + + + + + + + define - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

#define

+

Creates a variable and gives it a value.

Variable names start with the $ character.

+

Example

+
#define $KICKKEY 36
+#define $LOWEBENDT 507
+
+

The defined variables can then be used like this:

+
<control>
+#define $KICKKEY 36
+#define $SNAREKEY 38
+#define $HATKEY 42
+
+<region>key=$KICKKEY sample=kick.wav
+<region>key=$SNAREKEY sample=snare.wav
+<region>key=$HATKEY sample=closedhat.wav
+
+

This can be used to make an instrument easier to configure - for example, to +change key maps, MIDI CC assignments, pitch bend ranges etc. which can then be +used repeatedly in the SFZ file, but can be easily changed just by editing their +#define value in one place.

+

Using #define as a constant with a single value thorughout an instrument works +easily. Defining the same variable to have multiple values at different points +in the same instrument, however, requires care.

+

The following does not work well in ARIA/Sforzando, assuming that B.sfz uses MYVAR:

+
#define $MYVAR cc12
+#include B.sfz
+#define $MYVAR cc13
+#include B.sfz
+
+

However, a workaround there is to use #include to put each set of #define +statement with different values in a separate file. +In simple tests, that has been successful.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
#defineSFZ v2stringN/AN/A
+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay/index.html b/opcodes/delay/index.html new file mode 100644 index 000000000..0111aaf9e --- /dev/null +++ b/opcodes/delay/index.html @@ -0,0 +1,753 @@ + + + + + + + + + delay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay

+

Region delay time.

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.

+

Sample playback and all envelope generators' delay stage will start counting +after region delay time - this is the core difference between this and +ampeg_delay.

+

Examples

+
delay=1
+
+delay=0.2
+
+

Example uses: delaying some regions in a strum or a flam; +delaying regions to emulate more distant microphone positions.

+

Practical Considerations

+

In ARIA, if loop_mode is set to one_shot, the region will play regardless +of whether a note-off message is received or not.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delaySFZ v1float00 to 100seconds
Modulations
delay_ccNfloat0-100 to 100seconds
delay_curveccNARIAinteger00 to 255N/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_beats/index.html b/opcodes/delay_beats/index.html new file mode 100644 index 000000000..8511c92fa --- /dev/null +++ b/opcodes/delay_beats/index.html @@ -0,0 +1,746 @@ + + + + + + + + + delay_beats - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_beats

+

Delays the start of the region until a certain amount of musical beats are passed.

Used in Cakewalk Dimension Pro and DropZone, alongside stop_beats, to play slices of loops at specific points in the bar.

+

Examples

+
delay_beats=1
+delay_beats=2.25 stop_beats=3
+delay_beats=25.9922 stop_beats=26.0964  
+
+

Practical Considerations

+

In ARIA this opcode can be used, but every region uses up a polyphony voice, and therefore raising polyphony to +MAX is recommended for sequences beyond a very short length.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_beatsSFZ v2floatN/Abeats
Modulations
delay_beats_onccNARIAN/AN/AN/A
delay_beats_curveccNARIAinteger00 to 255N/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_beats_curveccN/index.html b/opcodes/delay_beats_curveccN/index.html new file mode 100644 index 000000000..9c49b6d79 --- /dev/null +++ b/opcodes/delay_beats_curveccN/index.html @@ -0,0 +1,746 @@ + + + + + + + + + delay_beats_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_beats

+

Delays the start of the region until a certain amount of musical beats are passed.

Used in Cakewalk Dimension Pro and DropZone, alongside stop_beats, to play slices of loops at specific points in the bar.

+

Examples

+
delay_beats=1
+delay_beats=2.25 stop_beats=3
+delay_beats=25.9922 stop_beats=26.0964  
+
+

Practical Considerations

+

In ARIA this opcode can be used, but every region uses up a polyphony voice, and therefore raising polyphony to +MAX is recommended for sequences beyond a very short length.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_beatsSFZ v2floatN/Abeats
Modulations
delay_beats_onccNARIAN/AN/AN/A
delay_beats_curveccNARIAinteger00 to 255N/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_beats_onccN/index.html b/opcodes/delay_beats_onccN/index.html new file mode 100644 index 000000000..557007ada --- /dev/null +++ b/opcodes/delay_beats_onccN/index.html @@ -0,0 +1,746 @@ + + + + + + + + + delay_beats_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_beats

+

Delays the start of the region until a certain amount of musical beats are passed.

Used in Cakewalk Dimension Pro and DropZone, alongside stop_beats, to play slices of loops at specific points in the bar.

+

Examples

+
delay_beats=1
+delay_beats=2.25 stop_beats=3
+delay_beats=25.9922 stop_beats=26.0964  
+
+

Practical Considerations

+

In ARIA this opcode can be used, but every region uses up a polyphony voice, and therefore raising polyphony to +MAX is recommended for sequences beyond a very short length.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_beatsSFZ v2floatN/Abeats
Modulations
delay_beats_onccNARIAN/AN/AN/A
delay_beats_curveccNARIAinteger00 to 255N/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_beats_random/index.html b/opcodes/delay_beats_random/index.html new file mode 100644 index 000000000..07062e9fb --- /dev/null +++ b/opcodes/delay_beats_random/index.html @@ -0,0 +1,715 @@ + + + + + + + + + delay_beats_random - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_beats_random

+

Delays the start of the region after a random amount of musical beats.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_beats_randomARIAfloatN/Abeats
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_ccN/index.html b/opcodes/delay_ccN/index.html new file mode 100644 index 000000000..1d197fd70 --- /dev/null +++ b/opcodes/delay_ccN/index.html @@ -0,0 +1,753 @@ + + + + + + + + + delay_ccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay

+

Region delay time.

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.

+

Sample playback and all envelope generators' delay stage will start counting +after region delay time - this is the core difference between this and +ampeg_delay.

+

Examples

+
delay=1
+
+delay=0.2
+
+

Example uses: delaying some regions in a strum or a flam; +delaying regions to emulate more distant microphone positions.

+

Practical Considerations

+

In ARIA, if loop_mode is set to one_shot, the region will play regardless +of whether a note-off message is received or not.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delaySFZ v1float00 to 100seconds
Modulations
delay_ccNfloat0-100 to 100seconds
delay_curveccNARIAinteger00 to 255N/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_curveccN/index.html b/opcodes/delay_curveccN/index.html new file mode 100644 index 000000000..c5bd3a439 --- /dev/null +++ b/opcodes/delay_curveccN/index.html @@ -0,0 +1,753 @@ + + + + + + + + + delay_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay

+

Region delay time.

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.

+

Sample playback and all envelope generators' delay stage will start counting +after region delay time - this is the core difference between this and +ampeg_delay.

+

Examples

+
delay=1
+
+delay=0.2
+
+

Example uses: delaying some regions in a strum or a flam; +delaying regions to emulate more distant microphone positions.

+

Practical Considerations

+

In ARIA, if loop_mode is set to one_shot, the region will play regardless +of whether a note-off message is received or not.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delaySFZ v1float00 to 100seconds
Modulations
delay_ccNfloat0-100 to 100seconds
delay_curveccNARIAinteger00 to 255N/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_cutoff/index.html b/opcodes/delay_cutoff/index.html new file mode 100644 index 000000000..47b686c7c --- /dev/null +++ b/opcodes/delay_cutoff/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_cutoff - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_cutoff

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_cutoffSFZ v2floatN/AHz
Modulations
delay_cutoff_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_cutoff_onccN/index.html b/opcodes/delay_cutoff_onccN/index.html new file mode 100644 index 000000000..677787134 --- /dev/null +++ b/opcodes/delay_cutoff_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_cutoff_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_cutoff

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_cutoffSFZ v2floatN/AHz
Modulations
delay_cutoff_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_damphi/index.html b/opcodes/delay_damphi/index.html new file mode 100644 index 000000000..a7f910ed3 --- /dev/null +++ b/opcodes/delay_damphi/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_damplo / delay_damphi - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_damplo / delay_damphi

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_damphiSFZ v2N/A0 to 100N/A
Modulations
delay_damphi_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_damphi_onccN/index.html b/opcodes/delay_damphi_onccN/index.html new file mode 100644 index 000000000..90139a1d0 --- /dev/null +++ b/opcodes/delay_damphi_onccN/index.html @@ -0,0 +1,715 @@ + + + + + + + + + delay_damplo / delay_damphi - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_damplo / delay_damphi

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_damphi_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_damplo/index.html b/opcodes/delay_damplo/index.html new file mode 100644 index 000000000..675f1ab5e --- /dev/null +++ b/opcodes/delay_damplo/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_damplo / delay_damphi - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_damplo / delay_damphi

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_damploSFZ v2N/A0 to 100N/A
Modulations
delay_damplo_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_damplo_onccN/index.html b/opcodes/delay_damplo_onccN/index.html new file mode 100644 index 000000000..b54752a8e --- /dev/null +++ b/opcodes/delay_damplo_onccN/index.html @@ -0,0 +1,715 @@ + + + + + + + + + delay_damplo / delay_damphi - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_damplo / delay_damphi

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_damplo_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_dry/index.html b/opcodes/delay_dry/index.html new file mode 100644 index 000000000..a1a7702d1 --- /dev/null +++ b/opcodes/delay_dry/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_dry - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_dry

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_drySFZ v2N/A0 to 100N/A
Modulations
delay_dry_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_dry_onccN/index.html b/opcodes/delay_dry_onccN/index.html new file mode 100644 index 000000000..30c8dfad9 --- /dev/null +++ b/opcodes/delay_dry_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_dry_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_dry

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_drySFZ v2N/A0 to 100N/A
Modulations
delay_dry_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_feedback/index.html b/opcodes/delay_feedback/index.html new file mode 100644 index 000000000..0d128ecc0 --- /dev/null +++ b/opcodes/delay_feedback/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_feedback - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_feedback

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_feedbackSFZ v2N/A0 to 100N/A
Modulations
delay_feedback_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_feedback_onccN/index.html b/opcodes/delay_feedback_onccN/index.html new file mode 100644 index 000000000..a1bf7426a --- /dev/null +++ b/opcodes/delay_feedback_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_feedback_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_feedback

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_feedbackSFZ v2N/A0 to 100N/A
Modulations
delay_feedback_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_filter/index.html b/opcodes/delay_filter/index.html new file mode 100644 index 000000000..371f66dab --- /dev/null +++ b/opcodes/delay_filter/index.html @@ -0,0 +1,716 @@ + + + + + + + + + delay_filter - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_filter

+

Name of filter type.

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_filterSFZ v2stringN/AN/A
+

See also: fil_type

+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_input/index.html b/opcodes/delay_input/index.html new file mode 100644 index 000000000..327f96d70 --- /dev/null +++ b/opcodes/delay_input/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_input - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_input

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_inputSFZ v2N/A0 to 100N/A
Modulations
delay_input_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_input_onccN/index.html b/opcodes/delay_input_onccN/index.html new file mode 100644 index 000000000..712dfa0a9 --- /dev/null +++ b/opcodes/delay_input_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_input_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_input

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_inputSFZ v2N/A0 to 100N/A
Modulations
delay_input_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_levelc/index.html b/opcodes/delay_levelc/index.html new file mode 100644 index 000000000..ae5f59118 --- /dev/null +++ b/opcodes/delay_levelc/index.html @@ -0,0 +1,715 @@ + + + + + + + + + delay_levelc - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_levelc

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_levelcSFZ v2N/A0 to 100N/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_levell/index.html b/opcodes/delay_levell/index.html new file mode 100644 index 000000000..ab4eb8c05 --- /dev/null +++ b/opcodes/delay_levell/index.html @@ -0,0 +1,715 @@ + + + + + + + + + delay_levell - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_levell

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_levellSFZ v2N/A0 to 100N/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_levelr/index.html b/opcodes/delay_levelr/index.html new file mode 100644 index 000000000..1e2fc73ab --- /dev/null +++ b/opcodes/delay_levelr/index.html @@ -0,0 +1,715 @@ + + + + + + + + + delay_levelr - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_levelr

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_levelrSFZ v2N/A0 to 100N/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_lfofreq/index.html b/opcodes/delay_lfofreq/index.html new file mode 100644 index 000000000..5e9be2b07 --- /dev/null +++ b/opcodes/delay_lfofreq/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_lfofreq - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_lfofreq

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_lfofreqSFZ v2floatN/AHz
Modulations
delay_lfofreq_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_lfofreq_onccN/index.html b/opcodes/delay_lfofreq_onccN/index.html new file mode 100644 index 000000000..7f3202b28 --- /dev/null +++ b/opcodes/delay_lfofreq_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_lfofreq_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_lfofreq

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_lfofreqSFZ v2floatN/AHz
Modulations
delay_lfofreq_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_moddepth/index.html b/opcodes/delay_moddepth/index.html new file mode 100644 index 000000000..20355ae09 --- /dev/null +++ b/opcodes/delay_moddepth/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_moddepth - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_moddepth

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_moddepthSFZ v2N/A0 to 100N/A
Modulations
delay_moddepth_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_moddepth_onccN/index.html b/opcodes/delay_moddepth_onccN/index.html new file mode 100644 index 000000000..3a0303379 --- /dev/null +++ b/opcodes/delay_moddepth_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_moddepth_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_moddepth

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_moddepthSFZ v2N/A0 to 100N/A
Modulations
delay_moddepth_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_mode/index.html b/opcodes/delay_mode/index.html new file mode 100644 index 000000000..6dc3cd2c2 --- /dev/null +++ b/opcodes/delay_mode/index.html @@ -0,0 +1,714 @@ + + + + + + + + + delay_mode - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_mode

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
delay_modeSFZ v2stringN/Adetune, chorus, cross, flanger, lrc, mod, multimod, panning, ping, rlc, stereo, tlcr
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_onccN/index.html b/opcodes/delay_onccN/index.html new file mode 100644 index 000000000..cd40d6850 --- /dev/null +++ b/opcodes/delay_onccN/index.html @@ -0,0 +1,753 @@ + + + + + + + + + delay_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay

+

Region delay time.

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.

+

Sample playback and all envelope generators' delay stage will start counting +after region delay time - this is the core difference between this and +ampeg_delay.

+

Examples

+
delay=1
+
+delay=0.2
+
+

Example uses: delaying some regions in a strum or a flam; +delaying regions to emulate more distant microphone positions.

+

Practical Considerations

+

In ARIA, if loop_mode is set to one_shot, the region will play regardless +of whether a note-off message is received or not.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delaySFZ v1float00 to 100seconds
Modulations
delay_ccNfloat0-100 to 100seconds
delay_curveccNARIAinteger00 to 255N/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_panc/index.html b/opcodes/delay_panc/index.html new file mode 100644 index 000000000..28d0df1e4 --- /dev/null +++ b/opcodes/delay_panc/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_panc - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_panc

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_pancSFZ v2N/A0 to 100N/A
Modulations
delay_panc_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_panc_onccN/index.html b/opcodes/delay_panc_onccN/index.html new file mode 100644 index 000000000..d45c4940d --- /dev/null +++ b/opcodes/delay_panc_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_panc_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_panc

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_pancSFZ v2N/A0 to 100N/A
Modulations
delay_panc_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_panl/index.html b/opcodes/delay_panl/index.html new file mode 100644 index 000000000..9f8b04b2e --- /dev/null +++ b/opcodes/delay_panl/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_panl - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_panl

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_panlSFZ v2N/A0 to 100N/A
Modulations
delay_panl_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_panl_onccN/index.html b/opcodes/delay_panl_onccN/index.html new file mode 100644 index 000000000..576077368 --- /dev/null +++ b/opcodes/delay_panl_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_panl_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_panl

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_panlSFZ v2N/A0 to 100N/A
Modulations
delay_panl_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_panr/index.html b/opcodes/delay_panr/index.html new file mode 100644 index 000000000..1864f2578 --- /dev/null +++ b/opcodes/delay_panr/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_panr - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_panr

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_panrSFZ v2N/A0 to 100N/A
Modulations
delay_panr_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_panr_onccN/index.html b/opcodes/delay_panr_onccN/index.html new file mode 100644 index 000000000..2fa458dfe --- /dev/null +++ b/opcodes/delay_panr_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_panr_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_panr

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_panrSFZ v2N/A0 to 100N/A
Modulations
delay_panr_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_random/index.html b/opcodes/delay_random/index.html new file mode 100644 index 000000000..3fd54c9a7 --- /dev/null +++ b/opcodes/delay_random/index.html @@ -0,0 +1,725 @@ + + + + + + + + + delay_random - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_random

+

Region random delay time.

If the region receives a note-off message before delay time, +the region won't play, unless loop_mode is set to one_shot, +which will play the region in ARIA. +Similar to delay in general. Computed when the note is triggered.

+

Examples

+
delay_random=1
+
+delay_random=0.2
+
+

Practical Considerations

+

In ARIA, Cakewalk and rcg sfz, this is unipolar.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_randomSFZ v1float00 to 100seconds
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_resonance/index.html b/opcodes/delay_resonance/index.html new file mode 100644 index 000000000..33ddbd0ca --- /dev/null +++ b/opcodes/delay_resonance/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_resonance - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_resonance

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_resonanceSFZ v2N/AN/AN/A
Modulations
delay_resonance_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_resonance_onccN/index.html b/opcodes/delay_resonance_onccN/index.html new file mode 100644 index 000000000..c8714f9cb --- /dev/null +++ b/opcodes/delay_resonance_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_resonance_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_resonance

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_resonanceSFZ v2N/AN/AN/A
Modulations
delay_resonance_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_samples/index.html b/opcodes/delay_samples/index.html new file mode 100644 index 000000000..e032c1eb8 --- /dev/null +++ b/opcodes/delay_samples/index.html @@ -0,0 +1,731 @@ + + + + + + + + + delay_samples - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_samples

+

Allows the region playback to be postponed for the specified time, measured in samples (and therefore dependent on current sample rate).

If the region receives a note-off message before delay time, the region won’t play.

+

Similar to delay, but measured in samples rather than seconds.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_samplesSFZ v2integerN/Asample units
Modulations
delay_samples_onccNintegerN/Asample units
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_samples_onccN/index.html b/opcodes/delay_samples_onccN/index.html new file mode 100644 index 000000000..0cf79da5f --- /dev/null +++ b/opcodes/delay_samples_onccN/index.html @@ -0,0 +1,731 @@ + + + + + + + + + delay_samples_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_samples

+

Allows the region playback to be postponed for the specified time, measured in samples (and therefore dependent on current sample rate).

If the region receives a note-off message before delay time, the region won’t play.

+

Similar to delay, but measured in samples rather than seconds.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_samplesSFZ v2integerN/Asample units
Modulations
delay_samples_onccNintegerN/Asample units
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_spread/index.html b/opcodes/delay_spread/index.html new file mode 100644 index 000000000..3f2b6c929 --- /dev/null +++ b/opcodes/delay_spread/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_spread - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_spread

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_spreadSFZ v2N/A0 to 100N/A
Modulations
delay_spread_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_spread_onccN/index.html b/opcodes/delay_spread_onccN/index.html new file mode 100644 index 000000000..15090e6af --- /dev/null +++ b/opcodes/delay_spread_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_spread_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_spread

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_spreadSFZ v2N/A0 to 100N/A
Modulations
delay_spread_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_syncc_onccN/index.html b/opcodes/delay_syncc_onccN/index.html new file mode 100644 index 000000000..be811e69a --- /dev/null +++ b/opcodes/delay_syncc_onccN/index.html @@ -0,0 +1,715 @@ + + + + + + + + + delay_syncc_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_syncc_onccN

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_syncc_onccNSFZ v2N/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_syncl_onccN/index.html b/opcodes/delay_syncl_onccN/index.html new file mode 100644 index 000000000..09481236a --- /dev/null +++ b/opcodes/delay_syncl_onccN/index.html @@ -0,0 +1,715 @@ + + + + + + + + + delay_syncl_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_syncl_onccN

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_syncl_onccNSFZ v2N/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_syncr_onccN/index.html b/opcodes/delay_syncr_onccN/index.html new file mode 100644 index 000000000..90e3008ac --- /dev/null +++ b/opcodes/delay_syncr_onccN/index.html @@ -0,0 +1,715 @@ + + + + + + + + + delay_syncr_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_syncr_onccN

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_syncr_onccNSFZ v2N/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_time_tap/index.html b/opcodes/delay_time_tap/index.html new file mode 100644 index 000000000..f6db158cf --- /dev/null +++ b/opcodes/delay_time_tap/index.html @@ -0,0 +1,715 @@ + + + + + + + + + delay_time_tap - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_time_tap

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_time_tapSFZ v2N/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_timec/index.html b/opcodes/delay_timec/index.html new file mode 100644 index 000000000..4a3de7cb2 --- /dev/null +++ b/opcodes/delay_timec/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_timec - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_timec

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_timecSFZ v2N/AN/AN/A
Modulations
delay_timec_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_timec_onccN/index.html b/opcodes/delay_timec_onccN/index.html new file mode 100644 index 000000000..7f7b10dd1 --- /dev/null +++ b/opcodes/delay_timec_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_timec_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_timec

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_timecSFZ v2N/AN/AN/A
Modulations
delay_timec_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_timel/index.html b/opcodes/delay_timel/index.html new file mode 100644 index 000000000..549f0fde7 --- /dev/null +++ b/opcodes/delay_timel/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_timel - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_timel

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_timelSFZ v2N/AN/AN/A
Modulations
delay_timel_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_timel_onccN/index.html b/opcodes/delay_timel_onccN/index.html new file mode 100644 index 000000000..df3bb6da2 --- /dev/null +++ b/opcodes/delay_timel_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_timel_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_timel

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_timelSFZ v2N/AN/AN/A
Modulations
delay_timel_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_timer/index.html b/opcodes/delay_timer/index.html new file mode 100644 index 000000000..da5d3ed93 --- /dev/null +++ b/opcodes/delay_timer/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_timer - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_timer

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_timerSFZ v2N/AN/AN/A
Modulations
delay_timer_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_timer_onccN/index.html b/opcodes/delay_timer_onccN/index.html new file mode 100644 index 000000000..0e0cf28d9 --- /dev/null +++ b/opcodes/delay_timer_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_timer_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_timer

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_timerSFZ v2N/AN/AN/A
Modulations
delay_timer_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_wet/index.html b/opcodes/delay_wet/index.html new file mode 100644 index 000000000..5f709bf0a --- /dev/null +++ b/opcodes/delay_wet/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_wet - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_wet

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_wetSFZ v2N/A0 to 100N/A
Modulations
delay_wet_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/delay_wet_onccN/index.html b/opcodes/delay_wet_onccN/index.html new file mode 100644 index 000000000..eab54927b --- /dev/null +++ b/opcodes/delay_wet_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + delay_wet_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

delay_wet

+

Used under the ‹effect› header, with type=delay.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
delay_wetSFZ v2N/A0 to 100N/A
Modulations
delay_wet_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/direction/index.html b/opcodes/direction/index.html new file mode 100644 index 000000000..c89842429 --- /dev/null +++ b/opcodes/direction/index.html @@ -0,0 +1,725 @@ + + + + + + + + + direction - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

direction

+

The direction in which the sample is to be played.

This is similar to loop_type but affects the entire sample, +not just the defined loop regions.

+

Example

+
direction=reverse
+
+

Practical Considerations

+

At least in ARIA, direction=reverse doesn't always work as expected. +However, it seems to work if the sample= opcode is specified for every +region. Specifying the sample at the group header level and then +specifying direction under the region doesn't seem to work at least in +cases where one region has the sample playing forward, and another +region has the same sample playing backwards.

+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
directionSFZ v2stringforwardforward, reverse
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/directtomain/index.html b/opcodes/directtomain/index.html new file mode 100644 index 000000000..ce2693094 --- /dev/null +++ b/opcodes/directtomain/index.html @@ -0,0 +1,717 @@ + + + + + + + + + directtomain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

directtomain

+

Gain of the main bus into the output.

Global, can be set under any ‹effect› header for identical +result, see routing graph. +Translates from % into a linear gain 0-1.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
directtomainSFZ v2float1000 to 100%
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/disto_depth/index.html b/opcodes/disto_depth/index.html new file mode 100644 index 000000000..6a36e64d3 --- /dev/null +++ b/opcodes/disto_depth/index.html @@ -0,0 +1,730 @@ + + + + + + + + + disto_depth - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

disto_depth

+

Used under the ‹effect› header, with type=disto.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
disto_depthSFZ v2N/A0 to 100N/A
Modulations
disto_depth_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/disto_depth_onccN/index.html b/opcodes/disto_depth_onccN/index.html new file mode 100644 index 000000000..ec2e72774 --- /dev/null +++ b/opcodes/disto_depth_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + disto_depth_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

disto_depth

+

Used under the ‹effect› header, with type=disto.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
disto_depthSFZ v2N/A0 to 100N/A
Modulations
disto_depth_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/disto_dry/index.html b/opcodes/disto_dry/index.html new file mode 100644 index 000000000..6ae2963b5 --- /dev/null +++ b/opcodes/disto_dry/index.html @@ -0,0 +1,730 @@ + + + + + + + + + disto_dry - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

disto_dry

+

Used under the ‹effect› header, with type=disto.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
disto_drySFZ v2N/A0 to 100N/A
Modulations
disto_dry_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/disto_dry_onccN/index.html b/opcodes/disto_dry_onccN/index.html new file mode 100644 index 000000000..ef57a532e --- /dev/null +++ b/opcodes/disto_dry_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + disto_dry_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

disto_dry

+

Used under the ‹effect› header, with type=disto.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
disto_drySFZ v2N/A0 to 100N/A
Modulations
disto_dry_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/disto_stages/index.html b/opcodes/disto_stages/index.html new file mode 100644 index 000000000..85eca8638 --- /dev/null +++ b/opcodes/disto_stages/index.html @@ -0,0 +1,715 @@ + + + + + + + + + disto_stages - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

disto_stages

+

Used under the ‹effect› header, with type=disto.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
disto_stagesSFZ v2N/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/disto_tone/index.html b/opcodes/disto_tone/index.html new file mode 100644 index 000000000..408bd8c57 --- /dev/null +++ b/opcodes/disto_tone/index.html @@ -0,0 +1,730 @@ + + + + + + + + + disto_tone - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

disto_tone

+

Used under the ‹effect› header, with type=disto.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
disto_toneSFZ v2N/A0 to 100N/A
Modulations
disto_tone_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/disto_tone_onccN/index.html b/opcodes/disto_tone_onccN/index.html new file mode 100644 index 000000000..5a661556e --- /dev/null +++ b/opcodes/disto_tone_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + disto_tone_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

disto_tone

+

Used under the ‹effect› header, with type=disto.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
disto_toneSFZ v2N/A0 to 100N/A
Modulations
disto_tone_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/disto_wet/index.html b/opcodes/disto_wet/index.html new file mode 100644 index 000000000..4e9469dc8 --- /dev/null +++ b/opcodes/disto_wet/index.html @@ -0,0 +1,730 @@ + + + + + + + + + disto_wet - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

disto_wet

+

Used under the ‹effect› header, with type=disto.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
disto_wetSFZ v2N/A0 to 100N/A
Modulations
disto_wet_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/disto_wet_onccN/index.html b/opcodes/disto_wet_onccN/index.html new file mode 100644 index 000000000..14444cab2 --- /dev/null +++ b/opcodes/disto_wet_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + disto_wet_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

disto_wet

+

Used under the ‹effect› header, with type=disto.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
disto_wetSFZ v2N/A0 to 100N/A
Modulations
disto_wet_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/dsp_order/index.html b/opcodes/dsp_order/index.html new file mode 100644 index 000000000..f155603d4 --- /dev/null +++ b/opcodes/dsp_order/index.html @@ -0,0 +1,715 @@ + + + + + + + + + dsp_order - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

dsp_order

+

Signal flow type in Rapture's DSP block.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
dsp_orderSFZ v2integerN/A0 to 14N/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/effect1/index.html b/opcodes/effect1/index.html new file mode 100644 index 000000000..4b08fbf95 --- /dev/null +++ b/opcodes/effect1/index.html @@ -0,0 +1,722 @@ + + + + + + + + + effect1 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

effect1

+

Level of effect1 send, in percentage (reverb in Cakewalk sfz).

Effects handling varies across SFZ versions. In SFZ v1 only effect1 and +effect2 opcodes were available and only at ‹region› level. +In SFZ v2 the ‹effect› header was added, and effect3 and effect4. +ARIA uses the effect header as well, with the MDA effects built in and +the possibility to support vendor-specific effects as well.

+

Example

+
effect1=100
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
effect1SFZ v1float00 to 100%
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/effect2/index.html b/opcodes/effect2/index.html new file mode 100644 index 000000000..8d79dc306 --- /dev/null +++ b/opcodes/effect2/index.html @@ -0,0 +1,722 @@ + + + + + + + + + effect2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

effect2

+

Level of effect2 send, in percentage (chorus in Cakewalk sfz).

Effects handling varies across SFZ versions. In SFZ v1 only effect1 and +effect2 opcodes were available and only at ‹region› level. +In SFZ v2 the ‹effect› header was added, and effect3 and effect4. +ARIA uses the effect header as well, with the MDA effects built in and +the possibility to support vendor-specific effects as well.

+

Example

+
effect2=40
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
effect2SFZ v1float00 to 100%
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/effect3/index.html b/opcodes/effect3/index.html new file mode 100644 index 000000000..f904fce5b --- /dev/null +++ b/opcodes/effect3/index.html @@ -0,0 +1,734 @@ + + + + + + + + + effect3 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

effect3

+

Gain of the region's send into the 3rd effect bus.

Effects handling varies across SFZ versions. In SFZ v1 only effect1 and +effect2 opcodes were available and only at ‹region› level. +In SFZ v2 the ‹effect› header was added, and effect3 and effect4. +ARIA uses the effect header as well, with the MDA effects built in and +the possibility to support vendor-specific effects as well.

+

The below example should work in Cakewalk Rapture.

+

Example

+
<group>
+sample=../samples/soundfx.wav
+...
+
+<region>
+...
+effect3=75
+
+<effect>
+type=delay
+bus=fx3
+...
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
effect3SFZ v2float00 to 100%
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/effect4/index.html b/opcodes/effect4/index.html new file mode 100644 index 000000000..3a046c183 --- /dev/null +++ b/opcodes/effect4/index.html @@ -0,0 +1,734 @@ + + + + + + + + + effect4 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

effect4

+

Gain of the region's send into the 4th effect bus.

Effects handling varies across SFZ versions. In SFZ v1 only effect1 and +effect2 opcodes were available and only at ‹region› level. +In SFZ v2 the ‹effect› header was added, and effect3 and effect4. +ARIA uses the effect header as well, with the MDA effects built in and +the possibility to support vendor-specific effects as well.

+

The below example should work in Cakewalk Rapture.

+

Example

+
<group>
+sample=../samples/soundfx.wav
+...
+
+<region>
+...
+effect4=50
+
+<effect>
+type=filter
+bus=fx4
+...
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
effect4SFZ v2float00 to 100%
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_ampeg/index.html b/opcodes/egN_ampeg/index.html new file mode 100644 index 000000000..5326827dd --- /dev/null +++ b/opcodes/egN_ampeg/index.html @@ -0,0 +1,736 @@ + + + + + + + + + egN_ampeg - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_ampeg

+

Examples

+

Generate a standard ADSR shape FlexEG envelope

+
<region>
+sample=*sine
+
+eg1_time1=1 eg1_level1=1
+eg1_time2=1 eg1_level2=.5 eg1_sustain=2
+eg1_time3=1 eg1_level3=0
+
+eg1_ampeg=1 //ARIA boolean value, 1=true, 0=false
+
+

Practical Considerations

+

egN_ampeg allows the regions envelope to be controlled by the FlexEG: egN completely. +This is only needed for the amplitude envelope, and is a special case. +There is no egN_pitcheg or egN_fileg, using egN_pitch & egN_cutoffX is enough.

+

The FlexEG can also work with the standard ampeg envelope, to achieve this add:

+

egN_amplitude=

+

The total envelope will be calculated as: egN * ampeg

+

It is also possible to use CC modulation:

+

egN_amplitude_onccX=

+

In order to allow MIDI Note-On velocity to modulate the envelope level, use cc 131:

+

eg1_amplitude_oncc131=100

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_ampegARIAN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_amplitude/index.html b/opcodes/egN_amplitude/index.html new file mode 100644 index 000000000..f33aaddd2 --- /dev/null +++ b/opcodes/egN_amplitude/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_amplitude - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_amplitude

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_amplitudeSFZ v2N/AN/AN/A
Modulations
egN_amplitude_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_amplitude_onccX/index.html b/opcodes/egN_amplitude_onccX/index.html new file mode 100644 index 000000000..fe764f8af --- /dev/null +++ b/opcodes/egN_amplitude_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_amplitude_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_amplitude

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_amplitudeSFZ v2N/AN/AN/A
Modulations
egN_amplitude_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_bitred/index.html b/opcodes/egN_bitred/index.html new file mode 100644 index 000000000..9edb77ef4 --- /dev/null +++ b/opcodes/egN_bitred/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_bitred - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_bitred

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_bitredSFZ v2N/AN/AN/A
Modulations
egN_bitred_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_bitred_onccX/index.html b/opcodes/egN_bitred_onccX/index.html new file mode 100644 index 000000000..b19f1fcb2 --- /dev/null +++ b/opcodes/egN_bitred_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_bitred_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_bitred

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_bitredSFZ v2N/AN/AN/A
Modulations
egN_bitred_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_curveX/index.html b/opcodes/egN_curveX/index.html new file mode 100644 index 000000000..bcd2c423f --- /dev/null +++ b/opcodes/egN_curveX/index.html @@ -0,0 +1,718 @@ + + + + + + + + + egN_curveX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_curveX

+

Instructs the player to use a curve shape defined under a curve header for the specified envelope segment.

Example

+
eg01_curve1=10
+eg01_curve2=11
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_curveXSFZ v2N/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_cutoff/index.html b/opcodes/egN_cutoff/index.html new file mode 100644 index 000000000..4d32ce493 --- /dev/null +++ b/opcodes/egN_cutoff/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_cutoff - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_cutoff

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_cutoffSFZ v2N/AN/AN/A
Modulations
egN_cutoff_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_cutoff2/index.html b/opcodes/egN_cutoff2/index.html new file mode 100644 index 000000000..3fd492a56 --- /dev/null +++ b/opcodes/egN_cutoff2/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_cutoff2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_cutoff

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_cutoffSFZ v2N/AN/AN/A
Modulations
egN_cutoff_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_cutoff2_onccX/index.html b/opcodes/egN_cutoff2_onccX/index.html new file mode 100644 index 000000000..1b22b6a69 --- /dev/null +++ b/opcodes/egN_cutoff2_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_cutoff2_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_cutoff

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_cutoffSFZ v2N/AN/AN/A
Modulations
egN_cutoff_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_cutoff_onccX/index.html b/opcodes/egN_cutoff_onccX/index.html new file mode 100644 index 000000000..e0119990a --- /dev/null +++ b/opcodes/egN_cutoff_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_cutoff_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_cutoff

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_cutoffSFZ v2N/AN/AN/A
Modulations
egN_cutoff_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_decim/index.html b/opcodes/egN_decim/index.html new file mode 100644 index 000000000..46f31c90c --- /dev/null +++ b/opcodes/egN_decim/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_decim - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_decim

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_decimSFZ v2N/AN/AN/A
Modulations
egN_decim_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_decim_onccX/index.html b/opcodes/egN_decim_onccX/index.html new file mode 100644 index 000000000..f2cf96ba3 --- /dev/null +++ b/opcodes/egN_decim_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_decim_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_decim

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_decimSFZ v2N/AN/AN/A
Modulations
egN_decim_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_depth_lfoX/index.html b/opcodes/egN_depth_lfoX/index.html new file mode 100644 index 000000000..9ab2fb091 --- /dev/null +++ b/opcodes/egN_depth_lfoX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_depth_lfoX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_depth_lfoX

+

Allows egN to scale lfoX's effect on its targets

Examples

+

Modulate the scale of lfo1's effect on cutoff and pan, from 0% to 200%, over the course of 4 seconds:

+
<region>
+sample=*saw
+cutoff=800
+
+lfo1_freq=2
+lfo1_cutoff=1200    // will be modulated from 0 to 2400 (200%)
+lfo1_pan=50         // will be modulated from 0 to 100  (200%)
+
+eg1_level0=0
+eg1_time1=4 eg1_level1=1
+eg1_sustain=1
+eg1_depth_lfo1=200  //..as eg1's move from 0 to 1 scales lfo1's effect from 0 to 200%
+
+

NB. Tested with Aria/Sforzando

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_depth_lfoXSFZ v2float100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_depthadd_lfoX/index.html b/opcodes/egN_depthadd_lfoX/index.html new file mode 100644 index 000000000..4e290a427 --- /dev/null +++ b/opcodes/egN_depthadd_lfoX/index.html @@ -0,0 +1,715 @@ + + + + + + + + + egN_depthadd_lfoX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_depthadd_lfoX

+

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_depthadd_lfoXSFZ v2N/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_driveshape/index.html b/opcodes/egN_driveshape/index.html new file mode 100644 index 000000000..d8579f0bb --- /dev/null +++ b/opcodes/egN_driveshape/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_driveshape - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_driveshape

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_driveshapeSFZ v2N/AN/AN/A
Modulations
egN_driveshape_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_driveshape_onccX/index.html b/opcodes/egN_driveshape_onccX/index.html new file mode 100644 index 000000000..feaa1d636 --- /dev/null +++ b/opcodes/egN_driveshape_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_driveshape_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_driveshape

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_driveshapeSFZ v2N/AN/AN/A
Modulations
egN_driveshape_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_dynamic/index.html b/opcodes/egN_dynamic/index.html new file mode 100644 index 000000000..6496cc313 --- /dev/null +++ b/opcodes/egN_dynamic/index.html @@ -0,0 +1,729 @@ + + + + + + + + + egN_dynamic - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_dynamic

+

Specifies when envelope durations are recalculated.

When 1, causes envelope segment durations and levels to be recalculated when a MIDI CC message modulating those envelopes is received. When 0, envelope segment durations and levels are calculated only at the start of the particular envelope segment.

+

Examples

+
<region>
+sample=*saw
+
+eg1_ampeg=1     // Create envelope to control amplitude..
+eg1_sustain=1
+eg1_level1=1
+eg1_level2=0
+eg1_time2=4     // ..with a release time of 4 seconds
+
+eg1_time2_oncc1=-8  // assign modwheel to modulate release time
+
+eg1_dynamic=1   // 1 = modulation will affect all notes immediately, or 0 (default) = new segments only
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_dynamicARIAinteger00 to 1N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_eqXbw/index.html b/opcodes/egN_eqXbw/index.html new file mode 100644 index 000000000..412bf8ef3 --- /dev/null +++ b/opcodes/egN_eqXbw/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_eqXbw - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_eqXbw

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_eqXbwSFZ v2N/AN/AN/A
Modulations
egN_eqXbw_onccYN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_eqXbw_onccY/index.html b/opcodes/egN_eqXbw_onccY/index.html new file mode 100644 index 000000000..bb5e8ac7d --- /dev/null +++ b/opcodes/egN_eqXbw_onccY/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_eqXbw_onccY - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_eqXbw

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_eqXbwSFZ v2N/AN/AN/A
Modulations
egN_eqXbw_onccYN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_eqXfreq/index.html b/opcodes/egN_eqXfreq/index.html new file mode 100644 index 000000000..0e3515ae2 --- /dev/null +++ b/opcodes/egN_eqXfreq/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_eqXfreq - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_eqXfreq

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_eqXfreqSFZ v2N/AN/AN/A
Modulations
egN_eqXfreq_onccYN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_eqXfreq_onccY/index.html b/opcodes/egN_eqXfreq_onccY/index.html new file mode 100644 index 000000000..3475c7728 --- /dev/null +++ b/opcodes/egN_eqXfreq_onccY/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_eqXfreq_onccY - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_eqXfreq

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_eqXfreqSFZ v2N/AN/AN/A
Modulations
egN_eqXfreq_onccYN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_eqXgain/index.html b/opcodes/egN_eqXgain/index.html new file mode 100644 index 000000000..a6c0d8adb --- /dev/null +++ b/opcodes/egN_eqXgain/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_eqXgain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_eqXgain

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_eqXgainSFZ v2N/AN/AN/A
Modulations
egN_eqXgain_onccYN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_eqXgain_onccY/index.html b/opcodes/egN_eqXgain_onccY/index.html new file mode 100644 index 000000000..dd14243e3 --- /dev/null +++ b/opcodes/egN_eqXgain_onccY/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_eqXgain_onccY - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_eqXgain

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_eqXgainSFZ v2N/AN/AN/A
Modulations
egN_eqXgain_onccYN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_freq_lfoX/index.html b/opcodes/egN_freq_lfoX/index.html new file mode 100644 index 000000000..b8f0b39f5 --- /dev/null +++ b/opcodes/egN_freq_lfoX/index.html @@ -0,0 +1,715 @@ + + + + + + + + + egN_freq_lfoX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_freq_lfoX

+

Allows egN to shape a change to lfoX's frequency

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_freq_lfoXSFZ v2float0Hz
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_levelX/index.html b/opcodes/egN_levelX/index.html new file mode 100644 index 000000000..84cda6325 --- /dev/null +++ b/opcodes/egN_levelX/index.html @@ -0,0 +1,735 @@ + + + + + + + + + egN_levelX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_levelX

+

Sets the envelope level at a specific point in envelope number N.

Examples

+
eg01_level0=-1
+eg02_level1=0.3
+eg03_level2=0.5
+eg03_level2_oncc51=0.5
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_levelXSFZ v2float0-1 to 1N/A
Modulations
egN_levelX_onccYfloat0-1 to 1N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_levelX_onccY/index.html b/opcodes/egN_levelX_onccY/index.html new file mode 100644 index 000000000..3c78b0b8c --- /dev/null +++ b/opcodes/egN_levelX_onccY/index.html @@ -0,0 +1,735 @@ + + + + + + + + + egN_levelX_onccY - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_levelX

+

Sets the envelope level at a specific point in envelope number N.

Examples

+
eg01_level0=-1
+eg02_level1=0.3
+eg03_level2=0.5
+eg03_level2_oncc51=0.5
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_levelXSFZ v2float0-1 to 1N/A
Modulations
egN_levelX_onccYfloat0-1 to 1N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_loop/index.html b/opcodes/egN_loop/index.html new file mode 100644 index 000000000..8c7b8aaa3 --- /dev/null +++ b/opcodes/egN_loop/index.html @@ -0,0 +1,722 @@ + + + + + + + + + egN_loop - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_loop

+

Specifies which envelope node is the loop node.

+

Example

+
eg01_loop=2
+eg01_loop_shape=1
+eg01_loop_count=8
+
+

Practical Considerations

+

This is either not implemented in ARIA or sfizz, or our testing was not able to discover how it works. The relevant opcodes are egN_loop, egN_loop_count and possibly egN_loop_shape. In the existing test examples, egN_loop_shape is always set to 1.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_loopSFZ v2N/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_loop_count/index.html b/opcodes/egN_loop_count/index.html new file mode 100644 index 000000000..4c4c9bb18 --- /dev/null +++ b/opcodes/egN_loop_count/index.html @@ -0,0 +1,722 @@ + + + + + + + + + egN_loop_count - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_loop_count

+

Specifies how many times the loop for envelope N is to repeat.

+

Example

+
eg01_loop=2
+eg01_loop_shape=1
+eg01_loop_count=8
+
+

Practical Considerations

+

This is either not implemented in ARIA or sfizz, or our testing was not able to discover how it works. The relevant opcodes are egN_loop, egN_loop_count and possibly egN_loop_shape. In the existing test examples, egN_loop_shape is always set to 1.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_loop_countSFZ v2N/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_noiselevel/index.html b/opcodes/egN_noiselevel/index.html new file mode 100644 index 000000000..d088f157d --- /dev/null +++ b/opcodes/egN_noiselevel/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_noiselevel - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_noiselevel

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_noiselevelSFZ v2N/AN/AN/A
Modulations
egN_noiselevel_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_noiselevel_onccX/index.html b/opcodes/egN_noiselevel_onccX/index.html new file mode 100644 index 000000000..0f57e774b --- /dev/null +++ b/opcodes/egN_noiselevel_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_noiselevel_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_noiselevel

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_noiselevelSFZ v2N/AN/AN/A
Modulations
egN_noiselevel_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_noisestep/index.html b/opcodes/egN_noisestep/index.html new file mode 100644 index 000000000..31b919c01 --- /dev/null +++ b/opcodes/egN_noisestep/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_noisestep - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_noisestep

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_noisestepSFZ v2N/AN/AN/A
Modulations
egN_noisestep_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_noisestep_onccX/index.html b/opcodes/egN_noisestep_onccX/index.html new file mode 100644 index 000000000..9b1de3ae2 --- /dev/null +++ b/opcodes/egN_noisestep_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_noisestep_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_noisestep

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_noisestepSFZ v2N/AN/AN/A
Modulations
egN_noisestep_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_noisetone/index.html b/opcodes/egN_noisetone/index.html new file mode 100644 index 000000000..4de5a4dc4 --- /dev/null +++ b/opcodes/egN_noisetone/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_noisetone - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_noisetone

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_noisetoneSFZ v2N/AN/AN/A
Modulations
egN_noisetone_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_noisetone_onccX/index.html b/opcodes/egN_noisetone_onccX/index.html new file mode 100644 index 000000000..960a9f31e --- /dev/null +++ b/opcodes/egN_noisetone_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_noisetone_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_noisetone

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_noisetoneSFZ v2N/AN/AN/A
Modulations
egN_noisetone_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_pan/index.html b/opcodes/egN_pan/index.html new file mode 100644 index 000000000..efd90d0df --- /dev/null +++ b/opcodes/egN_pan/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_pan - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_pan

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_panSFZ v2N/AN/AN/A
Modulations
egN_pan_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_pan_curve/index.html b/opcodes/egN_pan_curve/index.html new file mode 100644 index 000000000..222e76f39 --- /dev/null +++ b/opcodes/egN_pan_curve/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_pan_curve - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_pan_curve

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_pan_curveSFZ v2N/AN/AN/A
Modulations
egN_pan_curveccXinteger00 to 255N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_pan_curveccX/index.html b/opcodes/egN_pan_curveccX/index.html new file mode 100644 index 000000000..e8bd4ea84 --- /dev/null +++ b/opcodes/egN_pan_curveccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_pan_curveccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_pan_curve

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_pan_curveSFZ v2N/AN/AN/A
Modulations
egN_pan_curveccXinteger00 to 255N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_pan_onccX/index.html b/opcodes/egN_pan_onccX/index.html new file mode 100644 index 000000000..9e7c85c8d --- /dev/null +++ b/opcodes/egN_pan_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_pan_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_pan

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_panSFZ v2N/AN/AN/A
Modulations
egN_pan_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_pitch/index.html b/opcodes/egN_pitch/index.html new file mode 100644 index 000000000..f69d696bf --- /dev/null +++ b/opcodes/egN_pitch/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_pitch - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_pitch

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_pitchSFZ v2N/AN/AN/A
Modulations
egN_pitch_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_pitch_onccX/index.html b/opcodes/egN_pitch_onccX/index.html new file mode 100644 index 000000000..cb6331269 --- /dev/null +++ b/opcodes/egN_pitch_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_pitch_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_pitch

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_pitchSFZ v2N/AN/AN/A
Modulations
egN_pitch_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_points/index.html b/opcodes/egN_points/index.html new file mode 100644 index 000000000..026ca115c --- /dev/null +++ b/opcodes/egN_points/index.html @@ -0,0 +1,741 @@ + + + + + + + + + egN_points - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_points

+

Sets the number of points in envelope number N. The level of the envelope +at those points can then be set with egN_levelX. When a region +begins playing, the envelope starts at point number 0, and therefore an +envelope with 4 points will have points numbered 0 through 3, not 1 through 4.

+

Examples

+
eg01_points=3   eg01_sustain=2
+eg01_level0=0   eg01_time0=0
+eg01_level1=1   eg01_time1=1
+eg01_level2=1   eg01_time2=1
+
+eg01_points=7    eg01_sustain=5
+eg01_level0=0    eg01_time0=0
+eg01_level1=1    eg01_time1=0.5
+eg01_level2=0.7  eg01_time2=0.5
+eg01_level3=1    eg01_time3=0.5
+eg01_level4=0.7  eg01_time4=0.5
+eg01_level5=0.1  eg01_time5=0.5
+eg01_level6=0    eg01_time6=1
+
+

Practical Considerations

+

At least in ARIA, it's not necessary to define egN_points as the parser will +calculate how many points the envelope has from the number of points defined using +egN_level and egN_time for the specific number N. If egN_points is set to a lower +value than the number of points defined for the envelope, the entire envelope will +be used, and it will not be truncated at the number set usign egN_points - so in +effect, in ARIA this opcode appears to do nothing.

+

It may be necessary to specify this in Cakewalk players, however.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_pointsSFZ v2N/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_rectify/index.html b/opcodes/egN_rectify/index.html new file mode 100644 index 000000000..7c1381d93 --- /dev/null +++ b/opcodes/egN_rectify/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_rectify - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_rectify

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_rectifySFZ v2N/AN/AN/A
Modulations
egN_rectify_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_rectify_onccX/index.html b/opcodes/egN_rectify_onccX/index.html new file mode 100644 index 000000000..4f1fb4522 --- /dev/null +++ b/opcodes/egN_rectify_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_rectify_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_rectify

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_rectifySFZ v2N/AN/AN/A
Modulations
egN_rectify_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_resonance/index.html b/opcodes/egN_resonance/index.html new file mode 100644 index 000000000..26d9b29ee --- /dev/null +++ b/opcodes/egN_resonance/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_resonance - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_resonance

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_resonanceSFZ v2N/AN/AN/A
Modulations
egN_resonance_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_resonance2/index.html b/opcodes/egN_resonance2/index.html new file mode 100644 index 000000000..ca5fdedba --- /dev/null +++ b/opcodes/egN_resonance2/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_resonance2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_resonance

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_resonanceSFZ v2N/AN/AN/A
Modulations
egN_resonance_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_resonance2_onccX/index.html b/opcodes/egN_resonance2_onccX/index.html new file mode 100644 index 000000000..4d5254db8 --- /dev/null +++ b/opcodes/egN_resonance2_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_resonance2_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_resonance

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_resonanceSFZ v2N/AN/AN/A
Modulations
egN_resonance_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_resonance_onccX/index.html b/opcodes/egN_resonance_onccX/index.html new file mode 100644 index 000000000..93f40f30b --- /dev/null +++ b/opcodes/egN_resonance_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_resonance_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_resonance

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_resonanceSFZ v2N/AN/AN/A
Modulations
egN_resonance_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_ringmod/index.html b/opcodes/egN_ringmod/index.html new file mode 100644 index 000000000..71e20cec2 --- /dev/null +++ b/opcodes/egN_ringmod/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_ringmod - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_ringmod

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_ringmodSFZ v2N/AN/AN/A
Modulations
egN_ringmod_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_ringmod_onccX/index.html b/opcodes/egN_ringmod_onccX/index.html new file mode 100644 index 000000000..a141dce6f --- /dev/null +++ b/opcodes/egN_ringmod_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_ringmod_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_ringmod

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_ringmodSFZ v2N/AN/AN/A
Modulations
egN_ringmod_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_shapeX/index.html b/opcodes/egN_shapeX/index.html new file mode 100644 index 000000000..e4f336e19 --- /dev/null +++ b/opcodes/egN_shapeX/index.html @@ -0,0 +1,726 @@ + + + + + + + + + egN_shapeX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_shapeX

+

Curve shape before the specified envelope point in envelope N. +0 is linear, positive values are slower and negative values faster. +Past 10 or -10, there's little difference - at that point, the envelope is +practically a horizontal line and a vertical line (if positive) or a +vertical line followed by a horizontal line (if negative).

+

Shapes values can also be applied to "regular" ampeg, pitch and cutoff envelopes.

+

Examples

+
eg01_shape1=5.2
+eg02_shape2=-3.5
+ampeg_attack_shape=3.8
+ampeg_decay_shape=-1.4
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_shapeXSFZ v2float0N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_sustain/index.html b/opcodes/egN_sustain/index.html new file mode 100644 index 000000000..8e6006bce --- /dev/null +++ b/opcodes/egN_sustain/index.html @@ -0,0 +1,722 @@ + + + + + + + + + egN_sustain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_sustain

+

Defines which envelope point is used for the sustain level. +The part of the specified envelope before that point will be triggered +on note attack, and the part after that point will be triggered on note release. +While the note sustains, the envelope will be at the level set by +the same numbered egN_level opcode.

+

Example

+
eg01_sustain=5
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_sustainSFZ v2N/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_timeX/index.html b/opcodes/egN_timeX/index.html new file mode 100644 index 000000000..9af13370d --- /dev/null +++ b/opcodes/egN_timeX/index.html @@ -0,0 +1,736 @@ + + + + + + + + + egN_timeX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_timeX

+

The time duration from an envelope point to another, in seconds. +Can also be modulated with MIDI CC.

+

Examples

+
eg01_time1=0.5
+eg01_time2_oncc50=1
+eg02_time1=1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_timeXSFZ v2floatN/Aseconds
Modulations
egN_timeX_onccYfloatN/Aseconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_timeX_onccY/index.html b/opcodes/egN_timeX_onccY/index.html new file mode 100644 index 000000000..5b03ed689 --- /dev/null +++ b/opcodes/egN_timeX_onccY/index.html @@ -0,0 +1,736 @@ + + + + + + + + + egN_timeX_onccY - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_timeX

+

The time duration from an envelope point to another, in seconds. +Can also be modulated with MIDI CC.

+

Examples

+
eg01_time1=0.5
+eg01_time2_oncc50=1
+eg02_time1=1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_timeXSFZ v2floatN/Aseconds
Modulations
egN_timeX_onccYfloatN/Aseconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_volume/index.html b/opcodes/egN_volume/index.html new file mode 100644 index 000000000..a37923dbd --- /dev/null +++ b/opcodes/egN_volume/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_volume - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_volume

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_volumeSFZ v2N/AN/AN/A
Modulations
egN_volume_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_volume_onccX/index.html b/opcodes/egN_volume_onccX/index.html new file mode 100644 index 000000000..f04ddca77 --- /dev/null +++ b/opcodes/egN_volume_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_volume_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_volume

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_volumeSFZ v2N/AN/AN/A
Modulations
egN_volume_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_width/index.html b/opcodes/egN_width/index.html new file mode 100644 index 000000000..9ffa8ad35 --- /dev/null +++ b/opcodes/egN_width/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_width - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_width

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_widthSFZ v2N/AN/AN/A
Modulations
egN_width_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/egN_width_onccX/index.html b/opcodes/egN_width_onccX/index.html new file mode 100644 index 000000000..2d2e11461 --- /dev/null +++ b/opcodes/egN_width_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + egN_width_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_width

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_widthSFZ v2N/AN/AN/A
Modulations
egN_width_onccXN/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/end/index.html b/opcodes/end/index.html new file mode 100644 index 000000000..e999d1430 --- /dev/null +++ b/opcodes/end/index.html @@ -0,0 +1,733 @@ + + + + + + + + + end - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

end

+

The endpoint of the sample. If unspecified, the entire sample will play.

end is inclusive, so if set to 133000, the sample will play all samples up to and +including 133000. The player will reproduce the whole sample if end is not specified. +In other words, in most cases, this does not need to be set.

+

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. In certain cases, possibly due to ill-formed WAV files, +setting end to -1 can cause errors, but setting loop_mode to no_loop or +one_shot seems to be a workaround.

+

A region which does not play is still triggered, however, which means it can mute +other regions. When using sample=*silence it is very useful to set end=-1 +(or a zero-duration volume envelope with zero sutain) so the silence region does not +continue to play and does not use up a polyphony voice. Another way to accomplish +the same thing is to use an ampeg envelope wiht zero ampeg_attack, +ampeg_decay and ampeg_sustain.

+

Examples

+
end=133000
+end=4432425
+end=-1
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
endSFZ v1integerunspecified0 to 4294967296sample units
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eqN_bw/index.html b/opcodes/eqN_bw/index.html new file mode 100644 index 000000000..b1e233462 --- /dev/null +++ b/opcodes/eqN_bw/index.html @@ -0,0 +1,742 @@ + + + + + + + + + eqN_bw - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eqN_bw

+

Bandwidth of the equalizer band, in octaves.

Examples

+
eq1_bw=1
+eq2_bw=0.4
+eq3_bw=1.4
+
+
Note
+

While 0.001 is the minimum value in the SFZ specification, many SFZ players use +CPU-efficient EQ algorithms and any values below 1 may yield unexpected results.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
eqN_bwSFZ v1float10.001 to 4octaves
Modulations
eqN_bwccXfloat0-4 to 4octaves
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, EQ

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eqN_bw_onccX/index.html b/opcodes/eqN_bw_onccX/index.html new file mode 100644 index 000000000..d40c5ceda --- /dev/null +++ b/opcodes/eqN_bw_onccX/index.html @@ -0,0 +1,742 @@ + + + + + + + + + eqN_bw_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eqN_bw

+

Bandwidth of the equalizer band, in octaves.

Examples

+
eq1_bw=1
+eq2_bw=0.4
+eq3_bw=1.4
+
+
Note
+

While 0.001 is the minimum value in the SFZ specification, many SFZ players use +CPU-efficient EQ algorithms and any values below 1 may yield unexpected results.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
eqN_bwSFZ v1float10.001 to 4octaves
Modulations
eqN_bwccXfloat0-4 to 4octaves
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, EQ

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eqN_bwccX/index.html b/opcodes/eqN_bwccX/index.html new file mode 100644 index 000000000..28a3b99da --- /dev/null +++ b/opcodes/eqN_bwccX/index.html @@ -0,0 +1,742 @@ + + + + + + + + + eqN_bwccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eqN_bw

+

Bandwidth of the equalizer band, in octaves.

Examples

+
eq1_bw=1
+eq2_bw=0.4
+eq3_bw=1.4
+
+
Note
+

While 0.001 is the minimum value in the SFZ specification, many SFZ players use +CPU-efficient EQ algorithms and any values below 1 may yield unexpected results.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
eqN_bwSFZ v1float10.001 to 4octaves
Modulations
eqN_bwccXfloat0-4 to 4octaves
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, EQ

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eqN_freq/index.html b/opcodes/eqN_freq/index.html new file mode 100644 index 000000000..346499d0d --- /dev/null +++ b/opcodes/eqN_freq/index.html @@ -0,0 +1,755 @@ + + + + + + + + + eqN_freq - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eqN_freq

+

Frequency of the equalizer band, in Hertz.

The SFZ specification has three EQ bands, with this opcode setting +the center frequency of band N. There are three parametric bands: +eq1, eq2 and eq3.

+

If more than three bands are needed, ARIA allows fil_type +to be set to lsh, hsh or peq to use one or both filters as additional +EQ bands, including low shelf and high shelf.

+

Examples

+
eq1_freq=80
+eq2_freq=1000
+eq3_freq=4500
+
+eq2_freq_oncc30=2500
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
eqN_freqSFZ v1floateq1_freq=50
eq2_freq=500
eq3_freq=5000
0 to 30000Hz
Modulations
eqN_freqccXfloat0-30000 to 30000Hz
eqN_vel2freqfloat0-30000 to 30000Hz
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, EQ

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eqN_freq_onccX/index.html b/opcodes/eqN_freq_onccX/index.html new file mode 100644 index 000000000..c5df8f86b --- /dev/null +++ b/opcodes/eqN_freq_onccX/index.html @@ -0,0 +1,755 @@ + + + + + + + + + eqN_freq_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eqN_freq

+

Frequency of the equalizer band, in Hertz.

The SFZ specification has three EQ bands, with this opcode setting +the center frequency of band N. There are three parametric bands: +eq1, eq2 and eq3.

+

If more than three bands are needed, ARIA allows fil_type +to be set to lsh, hsh or peq to use one or both filters as additional +EQ bands, including low shelf and high shelf.

+

Examples

+
eq1_freq=80
+eq2_freq=1000
+eq3_freq=4500
+
+eq2_freq_oncc30=2500
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
eqN_freqSFZ v1floateq1_freq=50
eq2_freq=500
eq3_freq=5000
0 to 30000Hz
Modulations
eqN_freqccXfloat0-30000 to 30000Hz
eqN_vel2freqfloat0-30000 to 30000Hz
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, EQ

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eqN_freqccX/index.html b/opcodes/eqN_freqccX/index.html new file mode 100644 index 000000000..6d44b392a --- /dev/null +++ b/opcodes/eqN_freqccX/index.html @@ -0,0 +1,755 @@ + + + + + + + + + eqN_freqccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eqN_freq

+

Frequency of the equalizer band, in Hertz.

The SFZ specification has three EQ bands, with this opcode setting +the center frequency of band N. There are three parametric bands: +eq1, eq2 and eq3.

+

If more than three bands are needed, ARIA allows fil_type +to be set to lsh, hsh or peq to use one or both filters as additional +EQ bands, including low shelf and high shelf.

+

Examples

+
eq1_freq=80
+eq2_freq=1000
+eq3_freq=4500
+
+eq2_freq_oncc30=2500
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
eqN_freqSFZ v1floateq1_freq=50
eq2_freq=500
eq3_freq=5000
0 to 30000Hz
Modulations
eqN_freqccXfloat0-30000 to 30000Hz
eqN_vel2freqfloat0-30000 to 30000Hz
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, EQ

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eqN_gain/index.html b/opcodes/eqN_gain/index.html new file mode 100644 index 000000000..5e43e17a5 --- /dev/null +++ b/opcodes/eqN_gain/index.html @@ -0,0 +1,753 @@ + + + + + + + + + eqN_gain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eqN_gain

+

Gain of the equalizer band, in decibels.

Examples

+
eq1_gain=-3
+eq2_gain=6
+eq3_gain=-6
+
+eq1_gain_oncc23=-12
+
+
Notes
+

When emulating timbral changes when there are not enough dynamic level samples +available, and modulating EQ bands with MIDI CC, this will often be a negative +value for the lowest band, and a positive value for the two higher bands.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
eqN_gainSFZ v1float0-96 to 24dB
Modulations
eqN_gainccXfloat0-96 to 24dB
eqN_vel2gainfloat0-96 to 24dB
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, EQ

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eqN_gain_onccX/index.html b/opcodes/eqN_gain_onccX/index.html new file mode 100644 index 000000000..add25007b --- /dev/null +++ b/opcodes/eqN_gain_onccX/index.html @@ -0,0 +1,753 @@ + + + + + + + + + eqN_gain_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eqN_gain

+

Gain of the equalizer band, in decibels.

Examples

+
eq1_gain=-3
+eq2_gain=6
+eq3_gain=-6
+
+eq1_gain_oncc23=-12
+
+
Notes
+

When emulating timbral changes when there are not enough dynamic level samples +available, and modulating EQ bands with MIDI CC, this will often be a negative +value for the lowest band, and a positive value for the two higher bands.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
eqN_gainSFZ v1float0-96 to 24dB
Modulations
eqN_gainccXfloat0-96 to 24dB
eqN_vel2gainfloat0-96 to 24dB
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, EQ

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eqN_gainccX/index.html b/opcodes/eqN_gainccX/index.html new file mode 100644 index 000000000..da0d6e96e --- /dev/null +++ b/opcodes/eqN_gainccX/index.html @@ -0,0 +1,753 @@ + + + + + + + + + eqN_gainccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eqN_gain

+

Gain of the equalizer band, in decibels.

Examples

+
eq1_gain=-3
+eq2_gain=6
+eq3_gain=-6
+
+eq1_gain_oncc23=-12
+
+
Notes
+

When emulating timbral changes when there are not enough dynamic level samples +available, and modulating EQ bands with MIDI CC, this will often be a negative +value for the lowest band, and a positive value for the two higher bands.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
eqN_gainSFZ v1float0-96 to 24dB
Modulations
eqN_gainccXfloat0-96 to 24dB
eqN_vel2gainfloat0-96 to 24dB
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, EQ

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eqN_type/index.html b/opcodes/eqN_type/index.html new file mode 100644 index 000000000..fc33f7c6b --- /dev/null +++ b/opcodes/eqN_type/index.html @@ -0,0 +1,726 @@ + + + + + + + + + eqN_type - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eqN_type

+

Sets the type of EQ filter.

Example

+

In some Cakewalk plugins it's possible to have shelving EQ by "borrows" +from the three EQ bands. +Allowed values are lshelf (low shelf), hshelf (high shelf) and peak +(the default EQ band behavior).

+

In ARIA, low-shelf or high-shelf EQ "borrows" one of the filters instead, +as documented under the fil_gain opcode.

+
<region>
+eq1_gain=20
+eq1_freq=10000
+eq1_bw=1
+eq1_type=lshelf
+
+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
eqN_typeSFZ v2stringpeakpeak, lshelf, hshelf
+

Category: Performance Parameters, EQ

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eqN_vel2freq/index.html b/opcodes/eqN_vel2freq/index.html new file mode 100644 index 000000000..e8c4f605d --- /dev/null +++ b/opcodes/eqN_vel2freq/index.html @@ -0,0 +1,755 @@ + + + + + + + + + eqN_vel2freq - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eqN_freq

+

Frequency of the equalizer band, in Hertz.

The SFZ specification has three EQ bands, with this opcode setting +the center frequency of band N. There are three parametric bands: +eq1, eq2 and eq3.

+

If more than three bands are needed, ARIA allows fil_type +to be set to lsh, hsh or peq to use one or both filters as additional +EQ bands, including low shelf and high shelf.

+

Examples

+
eq1_freq=80
+eq2_freq=1000
+eq3_freq=4500
+
+eq2_freq_oncc30=2500
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
eqN_freqSFZ v1floateq1_freq=50
eq2_freq=500
eq3_freq=5000
0 to 30000Hz
Modulations
eqN_freqccXfloat0-30000 to 30000Hz
eqN_vel2freqfloat0-30000 to 30000Hz
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, EQ

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eqN_vel2gain/index.html b/opcodes/eqN_vel2gain/index.html new file mode 100644 index 000000000..81cf6bb80 --- /dev/null +++ b/opcodes/eqN_vel2gain/index.html @@ -0,0 +1,753 @@ + + + + + + + + + eqN_vel2gain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eqN_gain

+

Gain of the equalizer band, in decibels.

Examples

+
eq1_gain=-3
+eq2_gain=6
+eq3_gain=-6
+
+eq1_gain_oncc23=-12
+
+
Notes
+

When emulating timbral changes when there are not enough dynamic level samples +available, and modulating EQ bands with MIDI CC, this will often be a negative +value for the lowest band, and a positive value for the two higher bands.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
eqN_gainSFZ v1float0-96 to 24dB
Modulations
eqN_gainccXfloat0-96 to 24dB
eqN_vel2gainfloat0-96 to 24dB
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, EQ

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eq_bw/index.html b/opcodes/eq_bw/index.html new file mode 100644 index 000000000..3e49987e3 --- /dev/null +++ b/opcodes/eq_bw/index.html @@ -0,0 +1,730 @@ + + + + + + + + + eq_bw - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eq_bw

+

Used under the ‹effect› header, with type=eq.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
eq_bwSFZ v2N/AN/AN/A
Modulations
eq_bw_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eq_bw_onccN/index.html b/opcodes/eq_bw_onccN/index.html new file mode 100644 index 000000000..d0d10c376 --- /dev/null +++ b/opcodes/eq_bw_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + eq_bw_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eq_bw

+

Used under the ‹effect› header, with type=eq.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
eq_bwSFZ v2N/AN/AN/A
Modulations
eq_bw_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eq_freq/index.html b/opcodes/eq_freq/index.html new file mode 100644 index 000000000..95c1e388e --- /dev/null +++ b/opcodes/eq_freq/index.html @@ -0,0 +1,730 @@ + + + + + + + + + eq_freq - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eq_freq

+

Used under the ‹effect› header, with type=eq.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
eq_freqSFZ v2N/AN/AN/A
Modulations
eq_freq_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eq_freq_onccN/index.html b/opcodes/eq_freq_onccN/index.html new file mode 100644 index 000000000..e9d2ecf61 --- /dev/null +++ b/opcodes/eq_freq_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + eq_freq_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eq_freq

+

Used under the ‹effect› header, with type=eq.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
eq_freqSFZ v2N/AN/AN/A
Modulations
eq_freq_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eq_gain/index.html b/opcodes/eq_gain/index.html new file mode 100644 index 000000000..8b606b860 --- /dev/null +++ b/opcodes/eq_gain/index.html @@ -0,0 +1,730 @@ + + + + + + + + + eq_gain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eq_gain

+

Used under the ‹effect› header, with type=eq.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
eq_gainSFZ v2N/AN/AN/A
Modulations
eq_gain_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eq_gain_onccN/index.html b/opcodes/eq_gain_onccN/index.html new file mode 100644 index 000000000..735212323 --- /dev/null +++ b/opcodes/eq_gain_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + eq_gain_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eq_gain

+

Used under the ‹effect› header, with type=eq.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
eq_gainSFZ v2N/AN/AN/A
Modulations
eq_gain_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/eq_type/index.html b/opcodes/eq_type/index.html new file mode 100644 index 000000000..f9b9243b9 --- /dev/null +++ b/opcodes/eq_type/index.html @@ -0,0 +1,715 @@ + + + + + + + + + eq_type - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

eq_type

+

Used under the ‹effect› header, with type=eq.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
eq_typeSFZ v2N/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil2_gain/index.html b/opcodes/fil2_gain/index.html new file mode 100644 index 000000000..4c9d2c12e --- /dev/null +++ b/opcodes/fil2_gain/index.html @@ -0,0 +1,746 @@ + + + + + + + + + fil_gain / fil2_gain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fil_gain / fil2_gain

+

Gain for lsh, hsh and peq filter types.

fil_gain and fil2_gain are used by the additional ARIA extension +filter types lsh (low shelf), hsh (high shelf) and peq +(parametric EQ). This allows the two filters to instead be used +as additional EQ bands, on top of SFZ's regular three bands. It +also allows shelving EQ.

+

In ARIA, low-shelf or high-shelf EQ "borrows" one of the +filters, while in some Cakewalk plugins it's also possible to have shelf EQ +but it "borrows" from the three EQ bands rather than the two filters, +and uses the eqN_type opcode.

+

Examples

+
fil_type=lsh
+cutoff=150
+fil_gain=-6
+fil2_type=hsh
+cutoff2=80000
+fil2_gain=3
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fil_gainARIAfloat0dB
Modulations
fil_gain_onccNN/AN/AN/A
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil2_gain_onccN/index.html b/opcodes/fil2_gain_onccN/index.html new file mode 100644 index 000000000..a30052180 --- /dev/null +++ b/opcodes/fil2_gain_onccN/index.html @@ -0,0 +1,746 @@ + + + + + + + + + fil_gain / fil2_gain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fil_gain / fil2_gain

+

Gain for lsh, hsh and peq filter types.

fil_gain and fil2_gain are used by the additional ARIA extension +filter types lsh (low shelf), hsh (high shelf) and peq +(parametric EQ). This allows the two filters to instead be used +as additional EQ bands, on top of SFZ's regular three bands. It +also allows shelving EQ.

+

In ARIA, low-shelf or high-shelf EQ "borrows" one of the +filters, while in some Cakewalk plugins it's also possible to have shelf EQ +but it "borrows" from the three EQ bands rather than the two filters, +and uses the eqN_type opcode.

+

Examples

+
fil_type=lsh
+cutoff=150
+fil_gain=-6
+fil2_type=hsh
+cutoff2=80000
+fil2_gain=3
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fil_gainARIAfloat0dB
Modulations
fil_gain_onccNN/AN/AN/A
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil2_keycenter/index.html b/opcodes/fil2_keycenter/index.html new file mode 100644 index 000000000..6b05d76e8 --- /dev/null +++ b/opcodes/fil2_keycenter/index.html @@ -0,0 +1,720 @@ + + + + + + + + + fil_keycenter / fil2_keycenter - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fil_keycenter / fil2_keycenter

+

Center key for filter keyboard tracking.

In this key, the filter keyboard tracking will have no effect.

+

Examples

+
fil_keycenter=60
+
+fil_keycenter=E3
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fil_keycenterSFZ v1integer600 to 127N/A
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil2_keytrack/index.html b/opcodes/fil2_keytrack/index.html new file mode 100644 index 000000000..4d0947a7d --- /dev/null +++ b/opcodes/fil2_keytrack/index.html @@ -0,0 +1,724 @@ + + + + + + + + + fil_keytrack / fil2_keytrack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fil_keytrack / fil2_keytrack

+

Filter keyboard tracking (change on cutoff for each key) in cents.

A value of 100 means 100 cents per half-step.

+

Examples

+
fil_keytrack=100
+
+fil_keytrack=0
+
+

The center key for this is specified by fil_keycenter - +for keys below this key, the change in filter cutoff will be negative, +and above this key, it will be positive.

+

Sforzando accepts and honours negative values.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fil_keytrackSFZ v1integer00 to 1200cents
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil2_type/index.html b/opcodes/fil2_type/index.html new file mode 100644 index 000000000..12dd52f4a --- /dev/null +++ b/opcodes/fil2_type/index.html @@ -0,0 +1,759 @@ + + + + + + + + + fil_type / fil2_type - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fil_type / fil2_type

+

Filter type.

Allows you to choose which type of filter you use if not specified +(ie.: only cutoff and resonance in the SFZ).

+

fil_type was created in SFZ v1, so under that specification level only the +v1 filters listed below are supported.

+

fil2_type was added later in SFZ v2 as a second filter to be used in series, +so under the v2 specification level both opcodes include both v1 and v2 filters.

+

ARIA adds three more possible values for both opcodes.

+

Examples

+
fil_type=lpf_2p
+fil_type=hpf_1p
+
+

Passive tone controls in guitars are one-pole low pass filters. +Typical subtractive synthesizer filters are two-pole filters.

+
fil2_type=hpf_2p
+
+

The combination of fil and fil2 can be used to have, for +example, both a high-pass and a low-pass filter, like this. +In the below example, the first filter does not have a type +set explicitly, so fil_type defaults to lpf_2p, making it +a lowpass filter. The second filter is set to be a highpass filter.

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

lsh, hsh and peq are ARIA extensions, allowing filters to be used as low-shelf, +high-shelf or up to two additional parametric EQ bands, +in addition to the default three eqN bands. +Filters of these three types use fil_gain or fil2_gain +to set the gain of the shelf or band.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
fil_typeSFZ v1stringlpf_2plpf_1p, hpf_1p, lpf_2p, hpf_2p, bpf_2p, brf_2p
SFZ v2bpf_1p, brf_1p, apf_1p, lpf_2p_sv, hpf_2p_sv, bpf_2p_sv, brf_2p_sv, pkf_2p, lpf_4p, hpf_4p, lpf_6p, hpf_6p, comb, pink
ARIAlsh, hsh, peq
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil2_veltrack/index.html b/opcodes/fil2_veltrack/index.html new file mode 100644 index 000000000..39e473288 --- /dev/null +++ b/opcodes/fil2_veltrack/index.html @@ -0,0 +1,719 @@ + + + + + + + + + fil_veltrack / fil2_veltrack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fil_veltrack / fil2_veltrack

+

Filter velocity tracking, the amount by which the cutoff changes with incoming note velocity, in cents.

Examples

+
fil_veltrack=0
+
+fil_veltrack=1200
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fil_veltrackSFZ v1integer0-9600 to 9600cents
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_attack/index.html b/opcodes/fil_attack/index.html new file mode 100644 index 000000000..e8e000a0a --- /dev/null +++ b/opcodes/fil_attack/index.html @@ -0,0 +1,752 @@ + + + + + + + + + fil_attack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_attackSFZ v1float00 to 100seconds
Modulations
fileg_attack_onccNARIAfloat0-100 to 100seconds
fileg_attack_curveccNARIAinteger00 to 255N/A
fileg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_decay/index.html b/opcodes/fil_decay/index.html new file mode 100644 index 000000000..360e3966c --- /dev/null +++ b/opcodes/fil_decay/index.html @@ -0,0 +1,750 @@ + + + + + + + + + fil_decay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_decaySFZ v1float00 to 100seconds
Modulations
fileg_decay_onccNARIAfloat0-100 to 100N/A
fileg_decay_curveccNARIAinteger00 to 255N/A
fileg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_delay/index.html b/opcodes/fil_delay/index.html new file mode 100644 index 000000000..3e74f4507 --- /dev/null +++ b/opcodes/fil_delay/index.html @@ -0,0 +1,759 @@ + + + + + + + + + fil_delay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random +are used in the same region, the envelope delays start after delay and +delay_random have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_delaySFZ v1float00 to 100seconds
Modulations
fileg_delay_onccNARIAfloat0-100 to 100N/A
fileg_delay_curveccNARIAinteger00 to 255N/A
fileg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_depth/index.html b/opcodes/fil_depth/index.html new file mode 100644 index 000000000..ce13b1a2b --- /dev/null +++ b/opcodes/fil_depth/index.html @@ -0,0 +1,752 @@ + + + + + + + + + fil_depth - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_depth

+

Envelope depth.

For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. +-12000 cents is 10 octaves.

+

For ampeg, this should not normally be used.

+

Examples

+
fileg_depth=1200
+pitcheg_depth=-100
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_depthSFZ v1integer0-12000 to 12000cents
Modulations
fileg_depth_onccNARIAinteger0-12000 to 12000cents
fileg_depth_curveccNARIAinteger00 to 255N/A
fileg_vel2depthinteger0-12000 to 12000cents
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_gain/index.html b/opcodes/fil_gain/index.html new file mode 100644 index 000000000..8bc3f72e0 --- /dev/null +++ b/opcodes/fil_gain/index.html @@ -0,0 +1,746 @@ + + + + + + + + + fil_gain / fil2_gain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fil_gain / fil2_gain

+

Gain for lsh, hsh and peq filter types.

fil_gain and fil2_gain are used by the additional ARIA extension +filter types lsh (low shelf), hsh (high shelf) and peq +(parametric EQ). This allows the two filters to instead be used +as additional EQ bands, on top of SFZ's regular three bands. It +also allows shelving EQ.

+

In ARIA, low-shelf or high-shelf EQ "borrows" one of the +filters, while in some Cakewalk plugins it's also possible to have shelf EQ +but it "borrows" from the three EQ bands rather than the two filters, +and uses the eqN_type opcode.

+

Examples

+
fil_type=lsh
+cutoff=150
+fil_gain=-6
+fil2_type=hsh
+cutoff2=80000
+fil2_gain=3
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fil_gainARIAfloat0dB
Modulations
fil_gain_onccNN/AN/AN/A
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_gain_onccN/index.html b/opcodes/fil_gain_onccN/index.html new file mode 100644 index 000000000..1b625901f --- /dev/null +++ b/opcodes/fil_gain_onccN/index.html @@ -0,0 +1,746 @@ + + + + + + + + + fil_gain / fil2_gain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fil_gain / fil2_gain

+

Gain for lsh, hsh and peq filter types.

fil_gain and fil2_gain are used by the additional ARIA extension +filter types lsh (low shelf), hsh (high shelf) and peq +(parametric EQ). This allows the two filters to instead be used +as additional EQ bands, on top of SFZ's regular three bands. It +also allows shelving EQ.

+

In ARIA, low-shelf or high-shelf EQ "borrows" one of the +filters, while in some Cakewalk plugins it's also possible to have shelf EQ +but it "borrows" from the three EQ bands rather than the two filters, +and uses the eqN_type opcode.

+

Examples

+
fil_type=lsh
+cutoff=150
+fil_gain=-6
+fil2_type=hsh
+cutoff2=80000
+fil2_gain=3
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fil_gainARIAfloat0dB
Modulations
fil_gain_onccNN/AN/AN/A
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_hold/index.html b/opcodes/fil_hold/index.html new file mode 100644 index 000000000..c17f44755 --- /dev/null +++ b/opcodes/fil_hold/index.html @@ -0,0 +1,755 @@ + + + + + + + + + fil_hold - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_holdSFZ v1float00 to 100seconds
Modulations
fileg_hold_onccNARIAfloat0-100 to 100N/A
fileg_hold_curveccNARIAinteger00 to 255N/A
fileg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_keycenter/index.html b/opcodes/fil_keycenter/index.html new file mode 100644 index 000000000..26606ecc6 --- /dev/null +++ b/opcodes/fil_keycenter/index.html @@ -0,0 +1,720 @@ + + + + + + + + + fil_keycenter / fil2_keycenter - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fil_keycenter / fil2_keycenter

+

Center key for filter keyboard tracking.

In this key, the filter keyboard tracking will have no effect.

+

Examples

+
fil_keycenter=60
+
+fil_keycenter=E3
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fil_keycenterSFZ v1integer600 to 127N/A
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_keytrack/index.html b/opcodes/fil_keytrack/index.html new file mode 100644 index 000000000..0982c2f58 --- /dev/null +++ b/opcodes/fil_keytrack/index.html @@ -0,0 +1,724 @@ + + + + + + + + + fil_keytrack / fil2_keytrack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fil_keytrack / fil2_keytrack

+

Filter keyboard tracking (change on cutoff for each key) in cents.

A value of 100 means 100 cents per half-step.

+

Examples

+
fil_keytrack=100
+
+fil_keytrack=0
+
+

The center key for this is specified by fil_keycenter - +for keys below this key, the change in filter cutoff will be negative, +and above this key, it will be positive.

+

Sforzando accepts and honours negative values.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fil_keytrackSFZ v1integer00 to 1200cents
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_random/index.html b/opcodes/fil_random/index.html new file mode 100644 index 000000000..f0f9dd03f --- /dev/null +++ b/opcodes/fil_random/index.html @@ -0,0 +1,723 @@ + + + + + + + + + fil_random - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fil_random

+

Random value added to the filter cutoff for the region, in cents.

Computed when the note is triggered, remains the same for that region +for as long as the region plays.

+

Examples

+
fil_random=100
+
+fil_random=400
+
+

Practical Considerations

+

In ARIA, this is unipolar. In rcg sfz and Cakewalk, this is bipolar.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fil_randomSFZ v1integer00 to 9600cents
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_release/index.html b/opcodes/fil_release/index.html new file mode 100644 index 000000000..9024aaf36 --- /dev/null +++ b/opcodes/fil_release/index.html @@ -0,0 +1,754 @@ + + + + + + + + + fil_release - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, ampeg_release will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will always play) +even if amplifier envelopes are not used otherwise to shape the sound. +Also, ampeg_release is used when off_mode is set to normal.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_releaseSFZ v1float00 to 100seconds
Modulations
fileg_release_onccNARIAfloat0-100 to 100seconds
fileg_release_curveccNARIAinteger00 to 255N/A
fileg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_sustain/index.html b/opcodes/fil_sustain/index.html new file mode 100644 index 000000000..981c45c8e --- /dev/null +++ b/opcodes/fil_sustain/index.html @@ -0,0 +1,749 @@ + + + + + + + + + fil_sustain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10(eg type)_sustain
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_sustainSFZ v1float00 to 100%
Modulations
fileg_sustain_onccNARIAfloat0-100 to 100seconds
fileg_sustain_curveccNARIAinteger00 to 255N/A
fileg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_type/index.html b/opcodes/fil_type/index.html new file mode 100644 index 000000000..537b1152f --- /dev/null +++ b/opcodes/fil_type/index.html @@ -0,0 +1,759 @@ + + + + + + + + + fil_type / fil2_type - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fil_type / fil2_type

+

Filter type.

Allows you to choose which type of filter you use if not specified +(ie.: only cutoff and resonance in the SFZ).

+

fil_type was created in SFZ v1, so under that specification level only the +v1 filters listed below are supported.

+

fil2_type was added later in SFZ v2 as a second filter to be used in series, +so under the v2 specification level both opcodes include both v1 and v2 filters.

+

ARIA adds three more possible values for both opcodes.

+

Examples

+
fil_type=lpf_2p
+fil_type=hpf_1p
+
+

Passive tone controls in guitars are one-pole low pass filters. +Typical subtractive synthesizer filters are two-pole filters.

+
fil2_type=hpf_2p
+
+

The combination of fil and fil2 can be used to have, for +example, both a high-pass and a low-pass filter, like this. +In the below example, the first filter does not have a type +set explicitly, so fil_type defaults to lpf_2p, making it +a lowpass filter. The second filter is set to be a highpass filter.

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

lsh, hsh and peq are ARIA extensions, allowing filters to be used as low-shelf, +high-shelf or up to two additional parametric EQ bands, +in addition to the default three eqN bands. +Filters of these three types use fil_gain or fil2_gain +to set the gain of the shelf or band.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
fil_typeSFZ v1stringlpf_2plpf_1p, hpf_1p, lpf_2p, hpf_2p, bpf_2p, brf_2p
SFZ v2bpf_1p, brf_1p, apf_1p, lpf_2p_sv, hpf_2p_sv, bpf_2p_sv, brf_2p_sv, pkf_2p, lpf_4p, hpf_4p, lpf_6p, hpf_6p, comb, pink
ARIAlsh, hsh, peq
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_vel2attack/index.html b/opcodes/fil_vel2attack/index.html new file mode 100644 index 000000000..aa1b35fd7 --- /dev/null +++ b/opcodes/fil_vel2attack/index.html @@ -0,0 +1,752 @@ + + + + + + + + + fil_vel2attack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_attackSFZ v1float00 to 100seconds
Modulations
fileg_attack_onccNARIAfloat0-100 to 100seconds
fileg_attack_curveccNARIAinteger00 to 255N/A
fileg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_vel2decay/index.html b/opcodes/fil_vel2decay/index.html new file mode 100644 index 000000000..6949d6d9f --- /dev/null +++ b/opcodes/fil_vel2decay/index.html @@ -0,0 +1,750 @@ + + + + + + + + + fil_vel2decay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_decaySFZ v1float00 to 100seconds
Modulations
fileg_decay_onccNARIAfloat0-100 to 100N/A
fileg_decay_curveccNARIAinteger00 to 255N/A
fileg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_vel2delay/index.html b/opcodes/fil_vel2delay/index.html new file mode 100644 index 000000000..c829a9bbc --- /dev/null +++ b/opcodes/fil_vel2delay/index.html @@ -0,0 +1,759 @@ + + + + + + + + + fil_vel2delay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random +are used in the same region, the envelope delays start after delay and +delay_random have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_delaySFZ v1float00 to 100seconds
Modulations
fileg_delay_onccNARIAfloat0-100 to 100N/A
fileg_delay_curveccNARIAinteger00 to 255N/A
fileg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_vel2depth/index.html b/opcodes/fil_vel2depth/index.html new file mode 100644 index 000000000..f27096fb7 --- /dev/null +++ b/opcodes/fil_vel2depth/index.html @@ -0,0 +1,752 @@ + + + + + + + + + fil_vel2depth - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_depth

+

Envelope depth.

For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. +-12000 cents is 10 octaves.

+

For ampeg, this should not normally be used.

+

Examples

+
fileg_depth=1200
+pitcheg_depth=-100
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_depthSFZ v1integer0-12000 to 12000cents
Modulations
fileg_depth_onccNARIAinteger0-12000 to 12000cents
fileg_depth_curveccNARIAinteger00 to 255N/A
fileg_vel2depthinteger0-12000 to 12000cents
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_vel2hold/index.html b/opcodes/fil_vel2hold/index.html new file mode 100644 index 000000000..b5bd5c8bb --- /dev/null +++ b/opcodes/fil_vel2hold/index.html @@ -0,0 +1,755 @@ + + + + + + + + + fil_vel2hold - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_holdSFZ v1float00 to 100seconds
Modulations
fileg_hold_onccNARIAfloat0-100 to 100N/A
fileg_hold_curveccNARIAinteger00 to 255N/A
fileg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_vel2release/index.html b/opcodes/fil_vel2release/index.html new file mode 100644 index 000000000..fc1eb8d0d --- /dev/null +++ b/opcodes/fil_vel2release/index.html @@ -0,0 +1,754 @@ + + + + + + + + + fil_vel2release - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, ampeg_release will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will always play) +even if amplifier envelopes are not used otherwise to shape the sound. +Also, ampeg_release is used when off_mode is set to normal.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_releaseSFZ v1float00 to 100seconds
Modulations
fileg_release_onccNARIAfloat0-100 to 100seconds
fileg_release_curveccNARIAinteger00 to 255N/A
fileg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_vel2sustain/index.html b/opcodes/fil_vel2sustain/index.html new file mode 100644 index 000000000..6a10f2882 --- /dev/null +++ b/opcodes/fil_vel2sustain/index.html @@ -0,0 +1,749 @@ + + + + + + + + + fil_vel2sustain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10(eg type)_sustain
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_sustainSFZ v1float00 to 100%
Modulations
fileg_sustain_onccNARIAfloat0-100 to 100seconds
fileg_sustain_curveccNARIAinteger00 to 255N/A
fileg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fil_veltrack/index.html b/opcodes/fil_veltrack/index.html new file mode 100644 index 000000000..5a0a5b9b1 --- /dev/null +++ b/opcodes/fil_veltrack/index.html @@ -0,0 +1,719 @@ + + + + + + + + + fil_veltrack / fil2_veltrack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fil_veltrack / fil2_veltrack

+

Filter velocity tracking, the amount by which the cutoff changes with incoming note velocity, in cents.

Examples

+
fil_veltrack=0
+
+fil_veltrack=1200
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fil_veltrackSFZ v1integer0-9600 to 9600cents
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_attack/index.html b/opcodes/fileg_attack/index.html new file mode 100644 index 000000000..4e7634e08 --- /dev/null +++ b/opcodes/fileg_attack/index.html @@ -0,0 +1,752 @@ + + + + + + + + + fileg_attack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_attackSFZ v1float00 to 100seconds
Modulations
fileg_attack_onccNARIAfloat0-100 to 100seconds
fileg_attack_curveccNARIAinteger00 to 255N/A
fileg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_attack_curveccN/index.html b/opcodes/fileg_attack_curveccN/index.html new file mode 100644 index 000000000..205478201 --- /dev/null +++ b/opcodes/fileg_attack_curveccN/index.html @@ -0,0 +1,752 @@ + + + + + + + + + fileg_attack_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_attackSFZ v1float00 to 100seconds
Modulations
fileg_attack_onccNARIAfloat0-100 to 100seconds
fileg_attack_curveccNARIAinteger00 to 255N/A
fileg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_attack_onccN/index.html b/opcodes/fileg_attack_onccN/index.html new file mode 100644 index 000000000..9e760350e --- /dev/null +++ b/opcodes/fileg_attack_onccN/index.html @@ -0,0 +1,752 @@ + + + + + + + + + fileg_attack_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_attackSFZ v1float00 to 100seconds
Modulations
fileg_attack_onccNARIAfloat0-100 to 100seconds
fileg_attack_curveccNARIAinteger00 to 255N/A
fileg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_attack_shape/index.html b/opcodes/fileg_attack_shape/index.html new file mode 100644 index 000000000..4616ed61f --- /dev/null +++ b/opcodes/fileg_attack_shape/index.html @@ -0,0 +1,725 @@ + + + + + + + + + fileg_attack_shape - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_attack_shape

+

Specifies the curvature of attack stage of the envelope.

0 is linear. Positive values are slower curves (that means the envelope will +initially not fade in much, and most of the fade in will happen towards the end +of the attack period) and negative values faster (quick initial fade in with the +latter part of the attack stage fading in less). Past 10 or -10, there's little +difference - at that point, the envelope is practically a horizontal line and a +vertical line (if positive) or a vertical line followed by a horizontal line +(if negative).

+

Examples

+
ampeg_attack_shape=2.1
+ampeg_attack_shape=-3.8
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_attack_shapeARIAfloat0N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_attackccN/index.html b/opcodes/fileg_attackccN/index.html new file mode 100644 index 000000000..8506652d5 --- /dev/null +++ b/opcodes/fileg_attackccN/index.html @@ -0,0 +1,752 @@ + + + + + + + + + fileg_attackccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_attackSFZ v1float00 to 100seconds
Modulations
fileg_attack_onccNARIAfloat0-100 to 100seconds
fileg_attack_curveccNARIAinteger00 to 255N/A
fileg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_decay/index.html b/opcodes/fileg_decay/index.html new file mode 100644 index 000000000..2699bfcd3 --- /dev/null +++ b/opcodes/fileg_decay/index.html @@ -0,0 +1,750 @@ + + + + + + + + + fileg_decay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_decaySFZ v1float00 to 100seconds
Modulations
fileg_decay_onccNARIAfloat0-100 to 100N/A
fileg_decay_curveccNARIAinteger00 to 255N/A
fileg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_decay_curveccN/index.html b/opcodes/fileg_decay_curveccN/index.html new file mode 100644 index 000000000..4cb2dbb65 --- /dev/null +++ b/opcodes/fileg_decay_curveccN/index.html @@ -0,0 +1,750 @@ + + + + + + + + + fileg_decay_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_decaySFZ v1float00 to 100seconds
Modulations
fileg_decay_onccNARIAfloat0-100 to 100N/A
fileg_decay_curveccNARIAinteger00 to 255N/A
fileg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_decay_onccN/index.html b/opcodes/fileg_decay_onccN/index.html new file mode 100644 index 000000000..e5166453e --- /dev/null +++ b/opcodes/fileg_decay_onccN/index.html @@ -0,0 +1,750 @@ + + + + + + + + + fileg_decay_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_decaySFZ v1float00 to 100seconds
Modulations
fileg_decay_onccNARIAfloat0-100 to 100N/A
fileg_decay_curveccNARIAinteger00 to 255N/A
fileg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_decay_shape/index.html b/opcodes/fileg_decay_shape/index.html new file mode 100644 index 000000000..4715b2206 --- /dev/null +++ b/opcodes/fileg_decay_shape/index.html @@ -0,0 +1,724 @@ + + + + + + + + + fileg_decay_shape - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_decay_shape

+

Specifies the curvature of decay stage of the envelope.

0 is linear, positive values are slower curves (that means the envelope will +initially not decay out much, and most of the decay will happen towards the end +of the decay period) and negative values faster (quick initial decay with quiet +tail decaying more slowly). Past 10 or -10, there's little difference - at that +point, the envelope is practically a horizontal line and a vertical line +(if positive) or a vertical line followed by a horizontal line (if negative).

+

Examples

+
ampeg_decay_shape=2.1
+ampeg_decay_shape=-3.8
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_decay_shapeARIAfloat0N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_decay_zero/index.html b/opcodes/fileg_decay_zero/index.html new file mode 100644 index 000000000..8af5c933e --- /dev/null +++ b/opcodes/fileg_decay_zero/index.html @@ -0,0 +1,726 @@ + + + + + + + + + fileg_decay_zero - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_decay_zero

+

Specifies how decay time is calculated.

When set to 1, the decay slope is fixed, and the higher +the sustain level of the envelope, the less time the decay stage will actually +take. Changing fileg_sustain will change the actual duration of the decay stage +as well, up to a maximum of the full fileg_decay value at +fileg_sustain equal to 0.

+

Setting this to 0 will make the decay always happen during the entire +time period specified by fileg_decay, regardless of the current +fileg_sustain level.

+

Examples

+
fileg_decay_zero=0
+fileg_decay_zero=1
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_decay_zeroARIAinteger10 to 1N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_decayccN/index.html b/opcodes/fileg_decayccN/index.html new file mode 100644 index 000000000..cd5aab59f --- /dev/null +++ b/opcodes/fileg_decayccN/index.html @@ -0,0 +1,750 @@ + + + + + + + + + fileg_decayccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_decaySFZ v1float00 to 100seconds
Modulations
fileg_decay_onccNARIAfloat0-100 to 100N/A
fileg_decay_curveccNARIAinteger00 to 255N/A
fileg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_delay/index.html b/opcodes/fileg_delay/index.html new file mode 100644 index 000000000..4918a5e3c --- /dev/null +++ b/opcodes/fileg_delay/index.html @@ -0,0 +1,759 @@ + + + + + + + + + fileg_delay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random +are used in the same region, the envelope delays start after delay and +delay_random have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_delaySFZ v1float00 to 100seconds
Modulations
fileg_delay_onccNARIAfloat0-100 to 100N/A
fileg_delay_curveccNARIAinteger00 to 255N/A
fileg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_delay_curveccN/index.html b/opcodes/fileg_delay_curveccN/index.html new file mode 100644 index 000000000..80903cd42 --- /dev/null +++ b/opcodes/fileg_delay_curveccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + fileg_delay_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random +are used in the same region, the envelope delays start after delay and +delay_random have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_delaySFZ v1float00 to 100seconds
Modulations
fileg_delay_onccNARIAfloat0-100 to 100N/A
fileg_delay_curveccNARIAinteger00 to 255N/A
fileg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_delay_onccN/index.html b/opcodes/fileg_delay_onccN/index.html new file mode 100644 index 000000000..4da482f69 --- /dev/null +++ b/opcodes/fileg_delay_onccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + fileg_delay_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random +are used in the same region, the envelope delays start after delay and +delay_random have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_delaySFZ v1float00 to 100seconds
Modulations
fileg_delay_onccNARIAfloat0-100 to 100N/A
fileg_delay_curveccNARIAinteger00 to 255N/A
fileg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_delayccN/index.html b/opcodes/fileg_delayccN/index.html new file mode 100644 index 000000000..4a99deee3 --- /dev/null +++ b/opcodes/fileg_delayccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + fileg_delayccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random +are used in the same region, the envelope delays start after delay and +delay_random have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_delaySFZ v1float00 to 100seconds
Modulations
fileg_delay_onccNARIAfloat0-100 to 100N/A
fileg_delay_curveccNARIAinteger00 to 255N/A
fileg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_depth/index.html b/opcodes/fileg_depth/index.html new file mode 100644 index 000000000..0f78cb3c8 --- /dev/null +++ b/opcodes/fileg_depth/index.html @@ -0,0 +1,752 @@ + + + + + + + + + fileg_depth - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_depth

+

Envelope depth.

For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. +-12000 cents is 10 octaves.

+

For ampeg, this should not normally be used.

+

Examples

+
fileg_depth=1200
+pitcheg_depth=-100
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_depthSFZ v1integer0-12000 to 12000cents
Modulations
fileg_depth_onccNARIAinteger0-12000 to 12000cents
fileg_depth_curveccNARIAinteger00 to 255N/A
fileg_vel2depthinteger0-12000 to 12000cents
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_depth_curveccN/index.html b/opcodes/fileg_depth_curveccN/index.html new file mode 100644 index 000000000..1dc00fbbf --- /dev/null +++ b/opcodes/fileg_depth_curveccN/index.html @@ -0,0 +1,752 @@ + + + + + + + + + fileg_depth_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_depth

+

Envelope depth.

For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. +-12000 cents is 10 octaves.

+

For ampeg, this should not normally be used.

+

Examples

+
fileg_depth=1200
+pitcheg_depth=-100
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_depthSFZ v1integer0-12000 to 12000cents
Modulations
fileg_depth_onccNARIAinteger0-12000 to 12000cents
fileg_depth_curveccNARIAinteger00 to 255N/A
fileg_vel2depthinteger0-12000 to 12000cents
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_depth_onccN/index.html b/opcodes/fileg_depth_onccN/index.html new file mode 100644 index 000000000..a0bc86e67 --- /dev/null +++ b/opcodes/fileg_depth_onccN/index.html @@ -0,0 +1,752 @@ + + + + + + + + + fileg_depth_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_depth

+

Envelope depth.

For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. +-12000 cents is 10 octaves.

+

For ampeg, this should not normally be used.

+

Examples

+
fileg_depth=1200
+pitcheg_depth=-100
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_depthSFZ v1integer0-12000 to 12000cents
Modulations
fileg_depth_onccNARIAinteger0-12000 to 12000cents
fileg_depth_curveccNARIAinteger00 to 255N/A
fileg_vel2depthinteger0-12000 to 12000cents
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_depthccN/index.html b/opcodes/fileg_depthccN/index.html new file mode 100644 index 000000000..735f403dd --- /dev/null +++ b/opcodes/fileg_depthccN/index.html @@ -0,0 +1,752 @@ + + + + + + + + + fileg_depthccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_depth

+

Envelope depth.

For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. +-12000 cents is 10 octaves.

+

For ampeg, this should not normally be used.

+

Examples

+
fileg_depth=1200
+pitcheg_depth=-100
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_depthSFZ v1integer0-12000 to 12000cents
Modulations
fileg_depth_onccNARIAinteger0-12000 to 12000cents
fileg_depth_curveccNARIAinteger00 to 255N/A
fileg_vel2depthinteger0-12000 to 12000cents
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_dynamic/index.html b/opcodes/fileg_dynamic/index.html new file mode 100644 index 000000000..4b101dcc7 --- /dev/null +++ b/opcodes/fileg_dynamic/index.html @@ -0,0 +1,719 @@ + + + + + + + + + fileg_dynamic - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_dynamic

+

Specifies when envelope durations are recalculated.

When 1, causes envelope segment durations and sustain level to be recalculated when a MIDI CC message modulating those envelopes is received. When 0, envelope segment durations and sustain level are calculated only at the start of the particular envelope segment.

+

Examples

+
fileg_dynamic=1
+fileg_dynamic=0
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_dynamicARIAinteger00 to 1N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_hold/index.html b/opcodes/fileg_hold/index.html new file mode 100644 index 000000000..0e0ffae53 --- /dev/null +++ b/opcodes/fileg_hold/index.html @@ -0,0 +1,755 @@ + + + + + + + + + fileg_hold - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_holdSFZ v1float00 to 100seconds
Modulations
fileg_hold_onccNARIAfloat0-100 to 100N/A
fileg_hold_curveccNARIAinteger00 to 255N/A
fileg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_hold_curveccN/index.html b/opcodes/fileg_hold_curveccN/index.html new file mode 100644 index 000000000..b2faa842f --- /dev/null +++ b/opcodes/fileg_hold_curveccN/index.html @@ -0,0 +1,755 @@ + + + + + + + + + fileg_hold_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_holdSFZ v1float00 to 100seconds
Modulations
fileg_hold_onccNARIAfloat0-100 to 100N/A
fileg_hold_curveccNARIAinteger00 to 255N/A
fileg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_hold_onccN/index.html b/opcodes/fileg_hold_onccN/index.html new file mode 100644 index 000000000..149361310 --- /dev/null +++ b/opcodes/fileg_hold_onccN/index.html @@ -0,0 +1,755 @@ + + + + + + + + + fileg_hold_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_holdSFZ v1float00 to 100seconds
Modulations
fileg_hold_onccNARIAfloat0-100 to 100N/A
fileg_hold_curveccNARIAinteger00 to 255N/A
fileg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_holdccN/index.html b/opcodes/fileg_holdccN/index.html new file mode 100644 index 000000000..3817c26e5 --- /dev/null +++ b/opcodes/fileg_holdccN/index.html @@ -0,0 +1,755 @@ + + + + + + + + + fileg_holdccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_holdSFZ v1float00 to 100seconds
Modulations
fileg_hold_onccNARIAfloat0-100 to 100N/A
fileg_hold_curveccNARIAinteger00 to 255N/A
fileg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_release/index.html b/opcodes/fileg_release/index.html new file mode 100644 index 000000000..22dae4d3c --- /dev/null +++ b/opcodes/fileg_release/index.html @@ -0,0 +1,754 @@ + + + + + + + + + fileg_release - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, ampeg_release will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will always play) +even if amplifier envelopes are not used otherwise to shape the sound. +Also, ampeg_release is used when off_mode is set to normal.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_releaseSFZ v1float00 to 100seconds
Modulations
fileg_release_onccNARIAfloat0-100 to 100seconds
fileg_release_curveccNARIAinteger00 to 255N/A
fileg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_release_curveccN/index.html b/opcodes/fileg_release_curveccN/index.html new file mode 100644 index 000000000..b9b9fee17 --- /dev/null +++ b/opcodes/fileg_release_curveccN/index.html @@ -0,0 +1,754 @@ + + + + + + + + + fileg_release_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, ampeg_release will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will always play) +even if amplifier envelopes are not used otherwise to shape the sound. +Also, ampeg_release is used when off_mode is set to normal.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_releaseSFZ v1float00 to 100seconds
Modulations
fileg_release_onccNARIAfloat0-100 to 100seconds
fileg_release_curveccNARIAinteger00 to 255N/A
fileg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_release_onccN/index.html b/opcodes/fileg_release_onccN/index.html new file mode 100644 index 000000000..9918ba02d --- /dev/null +++ b/opcodes/fileg_release_onccN/index.html @@ -0,0 +1,754 @@ + + + + + + + + + fileg_release_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, ampeg_release will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will always play) +even if amplifier envelopes are not used otherwise to shape the sound. +Also, ampeg_release is used when off_mode is set to normal.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_releaseSFZ v1float00 to 100seconds
Modulations
fileg_release_onccNARIAfloat0-100 to 100seconds
fileg_release_curveccNARIAinteger00 to 255N/A
fileg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_release_shape/index.html b/opcodes/fileg_release_shape/index.html new file mode 100644 index 000000000..95fdfc7fc --- /dev/null +++ b/opcodes/fileg_release_shape/index.html @@ -0,0 +1,724 @@ + + + + + + + + + fileg_release_shape - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_release_shape

+

Specifies the curvature of release stage of the envelope.

0 is linear, positive values are slower curves (that means the envelope will +initially not fade out much, and most of the fade will happen towards the end of +the release period) and negative values faster (quick initial fadeout with quiet +tail fading out more slowly). Past 10 or -10, there's little difference - at +that point, the envelope is practically a horizontal line and a vertical line +(if positive) or a vertical line followed by a horizontal line (if negative).

+

Examples

+
ampeg_release_shape=2.1
+ampeg_release_shape=-3.8
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_release_shapeARIAfloat0N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_release_zero/index.html b/opcodes/fileg_release_zero/index.html new file mode 100644 index 000000000..48c4c21f5 --- /dev/null +++ b/opcodes/fileg_release_zero/index.html @@ -0,0 +1,723 @@ + + + + + + + + + fileg_release_zero - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_release_zero

+

Specifies how release time is calculated.

When 1, indicates release time is the time it would take to get +from 0dBs to -oo, NOT the time to get from the current sustain to zero.

+

In other words, under default behavior, the release time is fixed, while +setting this to 1 makes the release slope fixed but time will be shorter +when sustain level is lower.

+

Examples

+
fileg_release_zero=1
+fileg_release_zero=0
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_release_zeroARIAinteger00 to 1N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_releaseccN/index.html b/opcodes/fileg_releaseccN/index.html new file mode 100644 index 000000000..6c0ad03fb --- /dev/null +++ b/opcodes/fileg_releaseccN/index.html @@ -0,0 +1,754 @@ + + + + + + + + + fileg_releaseccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, ampeg_release will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will always play) +even if amplifier envelopes are not used otherwise to shape the sound. +Also, ampeg_release is used when off_mode is set to normal.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_releaseSFZ v1float00 to 100seconds
Modulations
fileg_release_onccNARIAfloat0-100 to 100seconds
fileg_release_curveccNARIAinteger00 to 255N/A
fileg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_start/index.html b/opcodes/fileg_start/index.html new file mode 100644 index 000000000..05676af94 --- /dev/null +++ b/opcodes/fileg_start/index.html @@ -0,0 +1,751 @@ + + + + + + + + + fileg_start - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_start

+

Envelope start level, in percentage.

Examples

+
ampeg_start=20
+fileg_start=100
+
+

Setting this to 100 should have the same effect as setting the attack time to 0, +and adding the attack time to the hold time. +Note that in some cases (when the sample starts playing from a point which is +not near zero), setting this to a non-zero value for ampeg_start may result in +sample playback starting with an audible click.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_startSFZ v1float00 to 100%
Modulations
fileg_start_onccNARIAfloat0-100 to 100seconds
fileg_start_curveccNARIAinteger00 to 255N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_start_curveccN/index.html b/opcodes/fileg_start_curveccN/index.html new file mode 100644 index 000000000..e98eca970 --- /dev/null +++ b/opcodes/fileg_start_curveccN/index.html @@ -0,0 +1,751 @@ + + + + + + + + + fileg_start_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_start

+

Envelope start level, in percentage.

Examples

+
ampeg_start=20
+fileg_start=100
+
+

Setting this to 100 should have the same effect as setting the attack time to 0, +and adding the attack time to the hold time. +Note that in some cases (when the sample starts playing from a point which is +not near zero), setting this to a non-zero value for ampeg_start may result in +sample playback starting with an audible click.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_startSFZ v1float00 to 100%
Modulations
fileg_start_onccNARIAfloat0-100 to 100seconds
fileg_start_curveccNARIAinteger00 to 255N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_start_onccN/index.html b/opcodes/fileg_start_onccN/index.html new file mode 100644 index 000000000..f6efde81f --- /dev/null +++ b/opcodes/fileg_start_onccN/index.html @@ -0,0 +1,751 @@ + + + + + + + + + fileg_start_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_start

+

Envelope start level, in percentage.

Examples

+
ampeg_start=20
+fileg_start=100
+
+

Setting this to 100 should have the same effect as setting the attack time to 0, +and adding the attack time to the hold time. +Note that in some cases (when the sample starts playing from a point which is +not near zero), setting this to a non-zero value for ampeg_start may result in +sample playback starting with an audible click.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_startSFZ v1float00 to 100%
Modulations
fileg_start_onccNARIAfloat0-100 to 100seconds
fileg_start_curveccNARIAinteger00 to 255N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_startccN/index.html b/opcodes/fileg_startccN/index.html new file mode 100644 index 000000000..2d839c2ba --- /dev/null +++ b/opcodes/fileg_startccN/index.html @@ -0,0 +1,751 @@ + + + + + + + + + fileg_startccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_start

+

Envelope start level, in percentage.

Examples

+
ampeg_start=20
+fileg_start=100
+
+

Setting this to 100 should have the same effect as setting the attack time to 0, +and adding the attack time to the hold time. +Note that in some cases (when the sample starts playing from a point which is +not near zero), setting this to a non-zero value for ampeg_start may result in +sample playback starting with an audible click.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_startSFZ v1float00 to 100%
Modulations
fileg_start_onccNARIAfloat0-100 to 100seconds
fileg_start_curveccNARIAinteger00 to 255N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_sustain/index.html b/opcodes/fileg_sustain/index.html new file mode 100644 index 000000000..6787687ae --- /dev/null +++ b/opcodes/fileg_sustain/index.html @@ -0,0 +1,749 @@ + + + + + + + + + fileg_sustain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10(eg type)_sustain
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_sustainSFZ v1float00 to 100%
Modulations
fileg_sustain_onccNARIAfloat0-100 to 100seconds
fileg_sustain_curveccNARIAinteger00 to 255N/A
fileg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_sustain_curveccN/index.html b/opcodes/fileg_sustain_curveccN/index.html new file mode 100644 index 000000000..f6b982cdb --- /dev/null +++ b/opcodes/fileg_sustain_curveccN/index.html @@ -0,0 +1,749 @@ + + + + + + + + + fileg_sustain_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10(eg type)_sustain
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_sustainSFZ v1float00 to 100%
Modulations
fileg_sustain_onccNARIAfloat0-100 to 100seconds
fileg_sustain_curveccNARIAinteger00 to 255N/A
fileg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_sustain_onccN/index.html b/opcodes/fileg_sustain_onccN/index.html new file mode 100644 index 000000000..f12ca800d --- /dev/null +++ b/opcodes/fileg_sustain_onccN/index.html @@ -0,0 +1,749 @@ + + + + + + + + + fileg_sustain_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10(eg type)_sustain
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_sustainSFZ v1float00 to 100%
Modulations
fileg_sustain_onccNARIAfloat0-100 to 100seconds
fileg_sustain_curveccNARIAinteger00 to 255N/A
fileg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_sustainccN/index.html b/opcodes/fileg_sustainccN/index.html new file mode 100644 index 000000000..4b7db9668 --- /dev/null +++ b/opcodes/fileg_sustainccN/index.html @@ -0,0 +1,749 @@ + + + + + + + + + fileg_sustainccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10(eg type)_sustain
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_sustainSFZ v1float00 to 100%
Modulations
fileg_sustain_onccNARIAfloat0-100 to 100seconds
fileg_sustain_curveccNARIAinteger00 to 255N/A
fileg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_vel2attack/index.html b/opcodes/fileg_vel2attack/index.html new file mode 100644 index 000000000..e57e382cf --- /dev/null +++ b/opcodes/fileg_vel2attack/index.html @@ -0,0 +1,752 @@ + + + + + + + + + fileg_vel2attack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_attackSFZ v1float00 to 100seconds
Modulations
fileg_attack_onccNARIAfloat0-100 to 100seconds
fileg_attack_curveccNARIAinteger00 to 255N/A
fileg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_vel2decay/index.html b/opcodes/fileg_vel2decay/index.html new file mode 100644 index 000000000..9250b69e3 --- /dev/null +++ b/opcodes/fileg_vel2decay/index.html @@ -0,0 +1,750 @@ + + + + + + + + + fileg_vel2decay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_decaySFZ v1float00 to 100seconds
Modulations
fileg_decay_onccNARIAfloat0-100 to 100N/A
fileg_decay_curveccNARIAinteger00 to 255N/A
fileg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_vel2delay/index.html b/opcodes/fileg_vel2delay/index.html new file mode 100644 index 000000000..a662cc389 --- /dev/null +++ b/opcodes/fileg_vel2delay/index.html @@ -0,0 +1,759 @@ + + + + + + + + + fileg_vel2delay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random +are used in the same region, the envelope delays start after delay and +delay_random have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_delaySFZ v1float00 to 100seconds
Modulations
fileg_delay_onccNARIAfloat0-100 to 100N/A
fileg_delay_curveccNARIAinteger00 to 255N/A
fileg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_vel2depth/index.html b/opcodes/fileg_vel2depth/index.html new file mode 100644 index 000000000..6e4d2ed59 --- /dev/null +++ b/opcodes/fileg_vel2depth/index.html @@ -0,0 +1,752 @@ + + + + + + + + + fileg_vel2depth - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_depth

+

Envelope depth.

For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. +-12000 cents is 10 octaves.

+

For ampeg, this should not normally be used.

+

Examples

+
fileg_depth=1200
+pitcheg_depth=-100
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_depthSFZ v1integer0-12000 to 12000cents
Modulations
fileg_depth_onccNARIAinteger0-12000 to 12000cents
fileg_depth_curveccNARIAinteger00 to 255N/A
fileg_vel2depthinteger0-12000 to 12000cents
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_vel2hold/index.html b/opcodes/fileg_vel2hold/index.html new file mode 100644 index 000000000..34ca622f0 --- /dev/null +++ b/opcodes/fileg_vel2hold/index.html @@ -0,0 +1,755 @@ + + + + + + + + + fileg_vel2hold - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_holdSFZ v1float00 to 100seconds
Modulations
fileg_hold_onccNARIAfloat0-100 to 100N/A
fileg_hold_curveccNARIAinteger00 to 255N/A
fileg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_vel2release/index.html b/opcodes/fileg_vel2release/index.html new file mode 100644 index 000000000..032107847 --- /dev/null +++ b/opcodes/fileg_vel2release/index.html @@ -0,0 +1,754 @@ + + + + + + + + + fileg_vel2release - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, ampeg_release will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will always play) +even if amplifier envelopes are not used otherwise to shape the sound. +Also, ampeg_release is used when off_mode is set to normal.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_releaseSFZ v1float00 to 100seconds
Modulations
fileg_release_onccNARIAfloat0-100 to 100seconds
fileg_release_curveccNARIAinteger00 to 255N/A
fileg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fileg_vel2sustain/index.html b/opcodes/fileg_vel2sustain/index.html new file mode 100644 index 000000000..3af3402bd --- /dev/null +++ b/opcodes/fileg_vel2sustain/index.html @@ -0,0 +1,749 @@ + + + + + + + + + fileg_vel2sustain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fileg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10(eg type)_sustain
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fileg_sustainSFZ v1float00 to 100%
Modulations
fileg_sustain_onccNARIAfloat0-100 to 100seconds
fileg_sustain_curveccNARIAinteger00 to 255N/A
fileg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fillfo_delay/index.html b/opcodes/fillfo_delay/index.html new file mode 100644 index 000000000..cfdf744d4 --- /dev/null +++ b/opcodes/fillfo_delay/index.html @@ -0,0 +1,720 @@ + + + + + + + + + fillfo_delay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fillfo_delay

+

The time before the LFO starts oscillating.

Examples

+
pitchlfo_delay=1
+amplfo_delay=0.4
+
+

This is very useful, as many instruments and vocals don't trigger vibrato +immediately when a note starts, but slightly later.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fillfo_delaySFZ v1float00 to 100seconds
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fillfo_depth/index.html b/opcodes/fillfo_depth/index.html new file mode 100644 index 000000000..6be664ac6 --- /dev/null +++ b/opcodes/fillfo_depth/index.html @@ -0,0 +1,759 @@ + + + + + + + + + fillfo_depth - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fillfo_depth

+

LFO depth.

Examples

+
amplfo_depth=1
+pitchlfo_depth=40
+
+

For amplifier LFO, this is measured in decibels and can range from -10 to 10. +For pitch and filter LFO, this is measured in cents and can +range from -1200 to 1200. Whether these values are negative or positive, the LFO +will oscillate both up and down around the center value of the amplitude, pitch +or filter cutoff - a negative sign for depth only inverts the phase. +For cases where an LFO needs to oscillate only in one direction from the normal +value (for example: typical guitar vibrato which only bends the pitch upwards, +or saxophone vibrato which only bends the pitch down), an offset to the center +pitch value will need to be added using the appropriate opcode such as tune. +In SFZ2 LFOs add the ability to set the starting phase, making this much easier.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fillfo_depthSFZ v1float0-1200 to 1200cents
Modulations
fillfo_depthccNfloat0-1200 to 1200cents
fillfo_depthchanaftfloat0-1200 to 1200cents
fillfo_depthpolyaftfloat0-1200 to 1200cents
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fillfo_depth_onccN/index.html b/opcodes/fillfo_depth_onccN/index.html new file mode 100644 index 000000000..cd02f6364 --- /dev/null +++ b/opcodes/fillfo_depth_onccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + fillfo_depth_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fillfo_depth

+

LFO depth.

Examples

+
amplfo_depth=1
+pitchlfo_depth=40
+
+

For amplifier LFO, this is measured in decibels and can range from -10 to 10. +For pitch and filter LFO, this is measured in cents and can +range from -1200 to 1200. Whether these values are negative or positive, the LFO +will oscillate both up and down around the center value of the amplitude, pitch +or filter cutoff - a negative sign for depth only inverts the phase. +For cases where an LFO needs to oscillate only in one direction from the normal +value (for example: typical guitar vibrato which only bends the pitch upwards, +or saxophone vibrato which only bends the pitch down), an offset to the center +pitch value will need to be added using the appropriate opcode such as tune. +In SFZ2 LFOs add the ability to set the starting phase, making this much easier.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fillfo_depthSFZ v1float0-1200 to 1200cents
Modulations
fillfo_depthccNfloat0-1200 to 1200cents
fillfo_depthchanaftfloat0-1200 to 1200cents
fillfo_depthpolyaftfloat0-1200 to 1200cents
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fillfo_depthccN/index.html b/opcodes/fillfo_depthccN/index.html new file mode 100644 index 000000000..455a54a79 --- /dev/null +++ b/opcodes/fillfo_depthccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + fillfo_depthccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fillfo_depth

+

LFO depth.

Examples

+
amplfo_depth=1
+pitchlfo_depth=40
+
+

For amplifier LFO, this is measured in decibels and can range from -10 to 10. +For pitch and filter LFO, this is measured in cents and can +range from -1200 to 1200. Whether these values are negative or positive, the LFO +will oscillate both up and down around the center value of the amplitude, pitch +or filter cutoff - a negative sign for depth only inverts the phase. +For cases where an LFO needs to oscillate only in one direction from the normal +value (for example: typical guitar vibrato which only bends the pitch upwards, +or saxophone vibrato which only bends the pitch down), an offset to the center +pitch value will need to be added using the appropriate opcode such as tune. +In SFZ2 LFOs add the ability to set the starting phase, making this much easier.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fillfo_depthSFZ v1float0-1200 to 1200cents
Modulations
fillfo_depthccNfloat0-1200 to 1200cents
fillfo_depthchanaftfloat0-1200 to 1200cents
fillfo_depthpolyaftfloat0-1200 to 1200cents
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fillfo_depthchanaft/index.html b/opcodes/fillfo_depthchanaft/index.html new file mode 100644 index 000000000..bca6dd54b --- /dev/null +++ b/opcodes/fillfo_depthchanaft/index.html @@ -0,0 +1,759 @@ + + + + + + + + + fillfo_depthchanaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fillfo_depth

+

LFO depth.

Examples

+
amplfo_depth=1
+pitchlfo_depth=40
+
+

For amplifier LFO, this is measured in decibels and can range from -10 to 10. +For pitch and filter LFO, this is measured in cents and can +range from -1200 to 1200. Whether these values are negative or positive, the LFO +will oscillate both up and down around the center value of the amplitude, pitch +or filter cutoff - a negative sign for depth only inverts the phase. +For cases where an LFO needs to oscillate only in one direction from the normal +value (for example: typical guitar vibrato which only bends the pitch upwards, +or saxophone vibrato which only bends the pitch down), an offset to the center +pitch value will need to be added using the appropriate opcode such as tune. +In SFZ2 LFOs add the ability to set the starting phase, making this much easier.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fillfo_depthSFZ v1float0-1200 to 1200cents
Modulations
fillfo_depthccNfloat0-1200 to 1200cents
fillfo_depthchanaftfloat0-1200 to 1200cents
fillfo_depthpolyaftfloat0-1200 to 1200cents
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fillfo_depthpolyaft/index.html b/opcodes/fillfo_depthpolyaft/index.html new file mode 100644 index 000000000..fbbe77745 --- /dev/null +++ b/opcodes/fillfo_depthpolyaft/index.html @@ -0,0 +1,759 @@ + + + + + + + + + fillfo_depthpolyaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fillfo_depth

+

LFO depth.

Examples

+
amplfo_depth=1
+pitchlfo_depth=40
+
+

For amplifier LFO, this is measured in decibels and can range from -10 to 10. +For pitch and filter LFO, this is measured in cents and can +range from -1200 to 1200. Whether these values are negative or positive, the LFO +will oscillate both up and down around the center value of the amplitude, pitch +or filter cutoff - a negative sign for depth only inverts the phase. +For cases where an LFO needs to oscillate only in one direction from the normal +value (for example: typical guitar vibrato which only bends the pitch upwards, +or saxophone vibrato which only bends the pitch down), an offset to the center +pitch value will need to be added using the appropriate opcode such as tune. +In SFZ2 LFOs add the ability to set the starting phase, making this much easier.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fillfo_depthSFZ v1float0-1200 to 1200cents
Modulations
fillfo_depthccNfloat0-1200 to 1200cents
fillfo_depthchanaftfloat0-1200 to 1200cents
fillfo_depthpolyaftfloat0-1200 to 1200cents
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fillfo_fade/index.html b/opcodes/fillfo_fade/index.html new file mode 100644 index 000000000..10f6951e1 --- /dev/null +++ b/opcodes/fillfo_fade/index.html @@ -0,0 +1,720 @@ + + + + + + + + + fillfo_fade - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fillfo_fade

+

LFO fade-in effect time.

Examples

+
amplfo_fade=1
+pitchfo_fade=0.4
+
+

Useful for vibrato which grows in intensity gradually, +as commonly performed by bowed string players.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fillfo_fadeSFZ v1float00 to 100seconds
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fillfo_freq/index.html b/opcodes/fillfo_freq/index.html new file mode 100644 index 000000000..ad6a60245 --- /dev/null +++ b/opcodes/fillfo_freq/index.html @@ -0,0 +1,753 @@ + + + + + + + + + fillfo_freq - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fillfo_freq

+

LFO frequency, in hertz.

Examples

+
amplfo_freq=0.4
+amplfo_freq=10
+
+

Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, +similar to what is found in some classic hardware synthesizers, are not possible. +Some players may in fact be able to utilize higher rates, but 20 Hz is the upper +limit required by the SFZ specification.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fillfo_freqSFZ v1float00 to 20Hz
Modulations
fillfo_freqccNfloat0-200 to 200Hz
fillfo_freqchanaftfloat0-200 to 200Hz
fillfo_freqpolyaftfloat0-200 to 200Hz
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fillfo_freqccN/index.html b/opcodes/fillfo_freqccN/index.html new file mode 100644 index 000000000..88fa74130 --- /dev/null +++ b/opcodes/fillfo_freqccN/index.html @@ -0,0 +1,753 @@ + + + + + + + + + fillfo_freqccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fillfo_freq

+

LFO frequency, in hertz.

Examples

+
amplfo_freq=0.4
+amplfo_freq=10
+
+

Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, +similar to what is found in some classic hardware synthesizers, are not possible. +Some players may in fact be able to utilize higher rates, but 20 Hz is the upper +limit required by the SFZ specification.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fillfo_freqSFZ v1float00 to 20Hz
Modulations
fillfo_freqccNfloat0-200 to 200Hz
fillfo_freqchanaftfloat0-200 to 200Hz
fillfo_freqpolyaftfloat0-200 to 200Hz
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fillfo_freqchanaft/index.html b/opcodes/fillfo_freqchanaft/index.html new file mode 100644 index 000000000..e588a2eb7 --- /dev/null +++ b/opcodes/fillfo_freqchanaft/index.html @@ -0,0 +1,753 @@ + + + + + + + + + fillfo_freqchanaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fillfo_freq

+

LFO frequency, in hertz.

Examples

+
amplfo_freq=0.4
+amplfo_freq=10
+
+

Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, +similar to what is found in some classic hardware synthesizers, are not possible. +Some players may in fact be able to utilize higher rates, but 20 Hz is the upper +limit required by the SFZ specification.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fillfo_freqSFZ v1float00 to 20Hz
Modulations
fillfo_freqccNfloat0-200 to 200Hz
fillfo_freqchanaftfloat0-200 to 200Hz
fillfo_freqpolyaftfloat0-200 to 200Hz
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fillfo_freqpolyaft/index.html b/opcodes/fillfo_freqpolyaft/index.html new file mode 100644 index 000000000..4cfa78bf3 --- /dev/null +++ b/opcodes/fillfo_freqpolyaft/index.html @@ -0,0 +1,753 @@ + + + + + + + + + fillfo_freqpolyaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fillfo_freq

+

LFO frequency, in hertz.

Examples

+
amplfo_freq=0.4
+amplfo_freq=10
+
+

Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, +similar to what is found in some classic hardware synthesizers, are not possible. +Some players may in fact be able to utilize higher rates, but 20 Hz is the upper +limit required by the SFZ specification.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fillfo_freqSFZ v1float00 to 20Hz
Modulations
fillfo_freqccNfloat0-200 to 200Hz
fillfo_freqchanaftfloat0-200 to 200Hz
fillfo_freqpolyaftfloat0-200 to 200Hz
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/filter_cutoff/index.html b/opcodes/filter_cutoff/index.html new file mode 100644 index 000000000..90af389d3 --- /dev/null +++ b/opcodes/filter_cutoff/index.html @@ -0,0 +1,730 @@ + + + + + + + + + filter_cutoff - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

filter_cutoff

+

Used under the ‹effect› header, with type=filter.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
filter_cutoffSFZ v2N/AN/AN/A
Modulations
filter_cutoff_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/filter_cutoff_onccN/index.html b/opcodes/filter_cutoff_onccN/index.html new file mode 100644 index 000000000..546978f2b --- /dev/null +++ b/opcodes/filter_cutoff_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + filter_cutoff_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

filter_cutoff

+

Used under the ‹effect› header, with type=filter.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
filter_cutoffSFZ v2N/AN/AN/A
Modulations
filter_cutoff_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/filter_resonance/index.html b/opcodes/filter_resonance/index.html new file mode 100644 index 000000000..3f01b24c8 --- /dev/null +++ b/opcodes/filter_resonance/index.html @@ -0,0 +1,730 @@ + + + + + + + + + filter_resonance - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

filter_resonance

+

Used under the ‹effect› header, with type=filter.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
filter_resonanceSFZ v2N/AN/AN/A
Modulations
filter_resonance_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/filter_resonance_onccN/index.html b/opcodes/filter_resonance_onccN/index.html new file mode 100644 index 000000000..98e011b46 --- /dev/null +++ b/opcodes/filter_resonance_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + filter_resonance_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

filter_resonance

+

Used under the ‹effect› header, with type=filter.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
filter_resonanceSFZ v2N/AN/AN/A
Modulations
filter_resonance_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/filter_type/index.html b/opcodes/filter_type/index.html new file mode 100644 index 000000000..9d2386b4f --- /dev/null +++ b/opcodes/filter_type/index.html @@ -0,0 +1,716 @@ + + + + + + + + + filter_type - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

filter_type

+

Name of filter type.

Used under the ‹effect› header, with type=filter.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
filter_typeSFZ v2stringN/AN/A
+

See also: fil_type

+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/filtype/index.html b/opcodes/filtype/index.html new file mode 100644 index 000000000..0936fc71f --- /dev/null +++ b/opcodes/filtype/index.html @@ -0,0 +1,759 @@ + + + + + + + + + fil_type / fil2_type - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fil_type / fil2_type

+

Filter type.

Allows you to choose which type of filter you use if not specified +(ie.: only cutoff and resonance in the SFZ).

+

fil_type was created in SFZ v1, so under that specification level only the +v1 filters listed below are supported.

+

fil2_type was added later in SFZ v2 as a second filter to be used in series, +so under the v2 specification level both opcodes include both v1 and v2 filters.

+

ARIA adds three more possible values for both opcodes.

+

Examples

+
fil_type=lpf_2p
+fil_type=hpf_1p
+
+

Passive tone controls in guitars are one-pole low pass filters. +Typical subtractive synthesizer filters are two-pole filters.

+
fil2_type=hpf_2p
+
+

The combination of fil and fil2 can be used to have, for +example, both a high-pass and a low-pass filter, like this. +In the below example, the first filter does not have a type +set explicitly, so fil_type defaults to lpf_2p, making it +a lowpass filter. The second filter is set to be a highpass filter.

+
cutoff=1200
+resonance=6
+fil2_type=hpf_2p
+cutoff2=250
+resonance2=3
+
+

Practical Considerations

+

lsh, hsh and peq are ARIA extensions, allowing filters to be used as low-shelf, +high-shelf or up to two additional parametric EQ bands, +in addition to the default three eqN bands. +Filters of these three types use fil_gain or fil2_gain +to set the gain of the shelf or band.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
fil_typeSFZ v1stringlpf_2plpf_1p, hpf_1p, lpf_2p, hpf_2p, bpf_2p, brf_2p
SFZ v2bpf_1p, brf_1p, apf_1p, lpf_2p_sv, hpf_2p_sv, bpf_2p_sv, brf_2p_sv, pkf_2p, lpf_4p, hpf_4p, lpf_6p, hpf_6p, comb, pink
ARIAlsh, hsh, peq
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fxNtomain/index.html b/opcodes/fxNtomain/index.html new file mode 100644 index 000000000..d109f6a60 --- /dev/null +++ b/opcodes/fxNtomain/index.html @@ -0,0 +1,717 @@ + + + + + + + + + fxNtomain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fxNtomain

+

Gain of the Nth effect bus into the output.

Global, can be set under any ‹effect› header for identical +result. N: 1-4, see routing graph. +Translates from % into a linear gain 0-1.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fxNtomainSFZ v2float00 to 100%
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/fxNtomix/index.html b/opcodes/fxNtomix/index.html new file mode 100644 index 000000000..37307eff5 --- /dev/null +++ b/opcodes/fxNtomix/index.html @@ -0,0 +1,717 @@ + + + + + + + + + fxNtomix - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

fxNtomix

+

Gain of the Nth effect bus into the Mix node.

Global, can be set under any [‹effect›] header for identical +result. N: 1-4, see routing graph. +Translates from % into a linear gain 0-1.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
fxNtomixSFZ v2float00 to 100%
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/gain_ccN/index.html b/opcodes/gain_ccN/index.html new file mode 100644 index 000000000..0ba4e1337 --- /dev/null +++ b/opcodes/gain_ccN/index.html @@ -0,0 +1,776 @@ + + + + + + + + + gain_ccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

volume

+

The volume for the region, in decibels.

Range is -144.6 to 6 in the specification, +but many SFZ players can utilize values above 6. Sfz.dll, Rapture and Dimension +have a +24 dB maximum, and ARIA has an upper limit of at least +144, +perhaps even more.

+

Examples

+
volume=-24
+volume=0
+volume=3.5
+
+gain_cc1=12
+
+

This will play the sample at unchanged volume when CC1 is at 0, +and apply a 12 dB boost when CC1 is at maximum.

+

gain_ccN/volume_onccN is useful for creating volume controls.

+

In Aria, either gain or volume can be used in modulations; however, gain by itself +(for example gain=5) is not valid. For a fixed volume change wihtout modulation, +only volume works.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
volumeSFZ v1float0-144 to 6dB
Modulations
gain_ccNfloat0-144 to 48dB
volume_curveccNSFZ v2integer00 to 255N/A
volume_smoothccNSFZ v2N/AN/AN/A
volume_stepccNSFZ v2N/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

See also: Amplifier / Amplitude, Gain, Volume, Cross fade

+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/gain_onccN/index.html b/opcodes/gain_onccN/index.html new file mode 100644 index 000000000..1fcf49dda --- /dev/null +++ b/opcodes/gain_onccN/index.html @@ -0,0 +1,776 @@ + + + + + + + + + gain_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

volume

+

The volume for the region, in decibels.

Range is -144.6 to 6 in the specification, +but many SFZ players can utilize values above 6. Sfz.dll, Rapture and Dimension +have a +24 dB maximum, and ARIA has an upper limit of at least +144, +perhaps even more.

+

Examples

+
volume=-24
+volume=0
+volume=3.5
+
+gain_cc1=12
+
+

This will play the sample at unchanged volume when CC1 is at 0, +and apply a 12 dB boost when CC1 is at maximum.

+

gain_ccN/volume_onccN is useful for creating volume controls.

+

In Aria, either gain or volume can be used in modulations; however, gain by itself +(for example gain=5) is not valid. For a fixed volume change wihtout modulation, +only volume works.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
volumeSFZ v1float0-144 to 6dB
Modulations
gain_ccNfloat0-144 to 48dB
volume_curveccNSFZ v2integer00 to 255N/A
volume_smoothccNSFZ v2N/AN/AN/A
volume_stepccNSFZ v2N/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

See also: Amplifier / Amplitude, Gain, Volume, Cross fade

+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/gain_random/index.html b/opcodes/gain_random/index.html new file mode 100644 index 000000000..ef8cb664f --- /dev/null +++ b/opcodes/gain_random/index.html @@ -0,0 +1,728 @@ + + + + + + + + + gain_random - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

amp_random

+

Random volume for the region, in decibels.

Computed when the note is triggered, +remains the same for that region for as long as the region plays.

+

Examples

+
amp_random=10
+
+amp_random=3
+
+volume=-3 amp_random=6
+
+

Practical Considerations

+

In ARIA and Cakewalk, amp_random is unipolar. To create variation which can +be either negative or positive, this needs to be combined with a fixed +volume offset for half the negative value that amp_random is set to.

+

In the rgc sfz player, amp_random is bipolar.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
amp_randomSFZ v1float00 to 24dB
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/gate_attack/index.html b/opcodes/gate_attack/index.html new file mode 100644 index 000000000..743108268 --- /dev/null +++ b/opcodes/gate_attack/index.html @@ -0,0 +1,715 @@ + + + + + + + + + gate_attack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

gate_attack

+

Used under the ‹effect› header, with type=gate.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
gate_attackSFZ v2N/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/gate_onccN/index.html b/opcodes/gate_onccN/index.html new file mode 100644 index 000000000..735990d32 --- /dev/null +++ b/opcodes/gate_onccN/index.html @@ -0,0 +1,715 @@ + + + + + + + + + gate_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

gate_onccN

+

Gate manual control.

Used under the ‹effect› header, with type=gate.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
gate_onccNSFZ v2N/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/gate_release/index.html b/opcodes/gate_release/index.html new file mode 100644 index 000000000..dccbb1569 --- /dev/null +++ b/opcodes/gate_release/index.html @@ -0,0 +1,715 @@ + + + + + + + + + gate_release - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

gate_release

+

Used under the ‹effect› header, with type=gate.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
gate_releaseSFZ v2N/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/gate_stlink/index.html b/opcodes/gate_stlink/index.html new file mode 100644 index 000000000..53df2b409 --- /dev/null +++ b/opcodes/gate_stlink/index.html @@ -0,0 +1,714 @@ + + + + + + + + + gate_stlink - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

gate_stlink

+

Used under the ‹effect› header, with type=gate.

+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
gate_stlinkSFZ v2stringN/Aon, off
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/gate_threshold/index.html b/opcodes/gate_threshold/index.html new file mode 100644 index 000000000..f2b17e85a --- /dev/null +++ b/opcodes/gate_threshold/index.html @@ -0,0 +1,715 @@ + + + + + + + + + gate_threshold - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

gate_threshold

+

Used under the ‹effect› header, with type=gate.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
gate_thresholdSFZ v2N/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/global_amplitude/index.html b/opcodes/global_amplitude/index.html new file mode 100644 index 000000000..709a3de5d --- /dev/null +++ b/opcodes/global_amplitude/index.html @@ -0,0 +1,717 @@ + + + + + + + + + global_amplitude - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

global_amplitude

+

ARIA extension, like amplitude, but affecting everything when set under the ‹global› header.

Example

+
global_amplitude=60
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
global_amplitudeARIAfloat1000 to 100%
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/global_label/index.html b/opcodes/global_label/index.html new file mode 100644 index 000000000..b336d8f79 --- /dev/null +++ b/opcodes/global_label/index.html @@ -0,0 +1,721 @@ + + + + + + + + + global_label - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

global_label

+

An ARIA extension which sets what is displayed in the default info tab of Sforzando.

Useful for debugging. +It can be set anywhere, not just under the ‹global› header.

+

Examples

+
global_label=Acoustic piano
+global_label=Test legato patch
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
global_labelARIAstringN/AN/A
+

See also: master_label, group_label, region_label

+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/global_tune/index.html b/opcodes/global_tune/index.html new file mode 100644 index 000000000..18b114158 --- /dev/null +++ b/opcodes/global_tune/index.html @@ -0,0 +1,715 @@ + + + + + + + + + global_tune - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

global_tune

+

ARIA extension, like tune, but affecting everything when set under the ‹global› header.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
global_tuneARIAinteger0-9600 to 9600cents
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/global_volume/index.html b/opcodes/global_volume/index.html new file mode 100644 index 000000000..334b51ab1 --- /dev/null +++ b/opcodes/global_volume/index.html @@ -0,0 +1,715 @@ + + + + + + + + + global_volume - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

global_volume

+

ARIA extension, like volume, but affecting everything when set under the ‹global› header.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
global_volumeARIAfloat0-144 to 6dB
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/group/index.html b/opcodes/group/index.html new file mode 100644 index 000000000..4eb379c35 --- /dev/null +++ b/opcodes/group/index.html @@ -0,0 +1,743 @@ + + + + + + + + + group - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

group

+

Exclusive group number for this region.

ARIA adds also the polyphony_group alias to reduce the confusion between +the group opcode and the ‹group› header.

+

Examples

+
group=3
+
+group=334
+
+

The group opcode is used together with off_by to make something monophonic.

+

For example, the flute is by nature a monophonic instrument, so if a flute were +recorded with one microphone and had one set of samples, it would make sense to +set all its samples to have one group. A guitar is polyphonic, but each string +is monophonic, so a six-string guitar would naturally be split into six groups - +one per string. In these cases, the group number will be equal to the off_by +number.

+

This is also commonly used with hi-hats - this is an example of where things can +get more sophisticated with a large number of groups involved, as it's possible +to set more closed hi-hat sounds mute more open ones, but not vice-versa, and it's +also quite possible that there are separate close mic, overhead and room samples.

+

group and off_by can also be used in other contexts where one sound +should cause another to stop but enforcing monophony is not the goal - for example, +a crash cymbal doesn't need to be monophonic, as allowing the sound to build up +is reasonably natural, but if we wanted to implement a cymbal choke, then the +crash sounds would be in one group, the choke samples in another.

+

Practical Considerations

+

The actual minimum and maximum values are not currently known. Some players +will treat numbers outside a certain range as equivalent to group=0, and +ARIA/Sforzando will also do this with text strings. The behavior of +non-integer numbers is also currently unknown. This makes it possible to use +an extremely large number for one group, but it's obviously not recommended.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
groupSFZ v1integer0-2147483648 to 2147483647N/A
+

Category: Instrument Settings, Voice Lifecycle

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/group_amplitude/index.html b/opcodes/group_amplitude/index.html new file mode 100644 index 000000000..93e462655 --- /dev/null +++ b/opcodes/group_amplitude/index.html @@ -0,0 +1,717 @@ + + + + + + + + + group_amplitude - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

group_amplitude

+

ARIA extension, like amplitude, but affecting everything when set under the ‹group› header.

Example

+
group_amplitude=60
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
group_amplitudeARIAfloat1000 to 100%
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/group_label/index.html b/opcodes/group_label/index.html new file mode 100644 index 000000000..b0258e916 --- /dev/null +++ b/opcodes/group_label/index.html @@ -0,0 +1,725 @@ + + + + + + + + + group_label - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

group_label

+

An ARIA extension which sets what is displayed in the default info tab of Sforzando.

Useful for debugging. +It can be set anywhere, not just under the ‹group› header.

+

Example

+
group_label=Edge
+
+

group_label example image

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
group_labelARIAstringN/AN/A
+

See also: master_label, global_label, region_label

+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/group_tune/index.html b/opcodes/group_tune/index.html new file mode 100644 index 000000000..b9ae263f6 --- /dev/null +++ b/opcodes/group_tune/index.html @@ -0,0 +1,715 @@ + + + + + + + + + group_tune - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

group_tune

+

ARIA extension, like tune, but affecting everything when set under the ‹group› header.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
group_tuneARIAinteger0-9600 to 9600cents
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/group_volume/index.html b/opcodes/group_volume/index.html new file mode 100644 index 000000000..15820cd1a --- /dev/null +++ b/opcodes/group_volume/index.html @@ -0,0 +1,715 @@ + + + + + + + + + group_volume - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

group_volume

+

ARIA extension, like volume, but affecting everything when set under the ‹group› header.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
group_volumeARIAfloat0-144 to 6dB
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/hibend/index.html b/opcodes/hibend/index.html new file mode 100644 index 000000000..ec0cee801 --- /dev/null +++ b/opcodes/hibend/index.html @@ -0,0 +1,719 @@ + + + + + + + + + lobend / hibend - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lobend / hibend

+

Defines the range of the last Pitch Bend message required for the region to play.

The region will play only if last Pitch Bend message received was in the +0 to 4000 range.

+

Examples

+
lobend=0 hibend=4000
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
hibendSFZ v1integer8192-8192 to 8192N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/hibpm/index.html b/opcodes/hibpm/index.html new file mode 100644 index 000000000..e6ed3bd27 --- /dev/null +++ b/opcodes/hibpm/index.html @@ -0,0 +1,721 @@ + + + + + + + + + lobpm / hibpm - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lobpm / hibpm

+

Host tempo value.

Host tempo value. The region will play if the host tempo is equal to or higher +than lobpm, and lower than hibpm.

+

Examples

+
lobpm=0 hibpm=100
+
+lobpm=100 hibpm=200.5
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
hibpmSFZ v1float5000 to 500bpm
+

Category: Region Logic, Internal Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/hiccN/index.html b/opcodes/hiccN/index.html new file mode 100644 index 000000000..ad6fc4b97 --- /dev/null +++ b/opcodes/hiccN/index.html @@ -0,0 +1,736 @@ + + + + + + + + + loccN / hiccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loccN / hiccN

+

Defines the range of the last MIDI controller N required for the region to play.

N will normally be a number from 1 to 127.

+

Examples

+
locc74=30 hicc74=100
+
+

The region will play only if last MIDI controller 74 received was in the 30 to 100 range.

+

Allowed range is 0 to 127. The defaults are loccN=0 and hiccN=127.

+

Practical applications include using MIDI CC to switch things on and off - for +example, additional voices, release noises, vibrato etc. A common example would +be having a hi-hat with various degrees of openness sampled, all of those mapped +to the same MIDI note, and hicc/locc used to define the ranges for which each +degree of openness should play. A simpler example would be switching between +sine, saw and noise waveforms:

+
<region>hicc1=63 sample=*sine
+<region>locc1=64 hicc=126 sample=*saw
+<region>locc1=127 sample=*noise
+
+

This is a "hard" switch - if a region is within the locc to hicc range it plays, +if it's outside that range it does not play. For smooth fades controlled by CC +(such as crossfaded dynamic layers or crossfaded vibrato layers on sustained +instruments), other opcodes such as xfin_loccN / xfin_hiccN +and xfout_loccN / xfout_hiccN should be used, or perhaps +the amplitude_onccN ARIA extension.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
hiccNSFZ v1integer1270 to 127N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/hichan/index.html b/opcodes/hichan/index.html new file mode 100644 index 000000000..261428ac3 --- /dev/null +++ b/opcodes/hichan/index.html @@ -0,0 +1,724 @@ + + + + + + + + + lochan / hichan - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lochan / hichan

+

If incoming notes have a MIDI channel between lochan and hichan, the region will play.

lochan and hichan will almost always be used together. +One application of this is SFZ files which are to be controlled from MIDI guitar +controllers, which send MIDI data for each string on a separate MIDI channel. +The regions for that string would then have lochan and hichan set to the +proper number.

+

Examples

+
lochan=1 hichan=7
+
+lochan=2 hichan=2
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
hichanSFZ v1integer161 to 16N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/hichanaft/index.html b/opcodes/hichanaft/index.html new file mode 100644 index 000000000..63630a527 --- /dev/null +++ b/opcodes/hichanaft/index.html @@ -0,0 +1,719 @@ + + + + + + + + + lochanaft / hichanaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lochanaft / hichanaft

+

Defines the range of last Channel Aftertouch message required for the region to play.

Examples

+

The region will play only if last Channel Aftertouch message received was +in the 30-100 range.

+
lochanaft=30 hichanaft=100
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
hichanaftSFZ v1integer1270 to 127N/A
+

Category: Region Logic, Internal Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/hihdccN/index.html b/opcodes/hihdccN/index.html new file mode 100644 index 000000000..c671d67b4 --- /dev/null +++ b/opcodes/hihdccN/index.html @@ -0,0 +1,719 @@ + + + + + + + + + lohdccN / hihdccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lohdccN / hihdccN

+

Like hiccN but with floating point MIDI CCs

Other opcodes such as set_hdccN can also be used with these.

+

Example

+
lohdcc90=0.333
+hihdcc90=0.7
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
hihdccNARIAfloat10 to 1N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/hikey/index.html b/opcodes/hikey/index.html new file mode 100644 index 000000000..705988fda --- /dev/null +++ b/opcodes/hikey/index.html @@ -0,0 +1,737 @@ + + + + + + + + + lokey / hikey - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lokey / hikey

+

Determine the high boundary of a certain region.

When a region only covers one note, it is generally more convenient to use +key instead of hikey and lokey. When hikey and lokey are used, +they will usually need to be used together with pitch_keycenter.

+

These opcodes, as well as key, can use either MIDI note numbers (0 to 127) or +MIDI note names (e.g. c3 or D#4). Using note numbers is recommended, however, +as note numbers are interpreted consistently, while the same note names can be +mapped to note numbers an octave or even two apart in different DAWs.

+

In the SFZ 1 specification, the allowed range is 0 to 127. However, SFZ 2 additionally +includes the possibility to set lokey and hikey to -1, to prevent a region from +being triggered by any keys. This is a way (though, admittedly, not a very +elegant one) to use the on_loccN / onhiccN opcodes to trigger, +for example, pedal noises which are triggered whether any keys are pressed or not.

+

Examples

+
<region> sample=*sine lokey=72 hikey=84
+
+

As with the key opcode, the values can also be MIDI note names:

+
<region> sample=*sine lokey=c5 hikey=c6
+
+

When an instrument is sampled every minor third, this kind of usage will be common:

+
<region> sample=a4.wav  lokey=68 hikey=70 pitch_keycenter=69
+<region> sample=c5.wav  lokey=71 hikey=73 pitch_keycenter=72
+<region> sample=eb5.wav lokey=74 hikey=76 pitch_keycenter=75
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
hikeySFZ v1integer1270 to 127N/A
+

Category: Region Logic, Key Mapping

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/hint_/index.html b/opcodes/hint_/index.html new file mode 100644 index 000000000..027aaca9e --- /dev/null +++ b/opcodes/hint_/index.html @@ -0,0 +1,722 @@ + + + + + + + + + hint_ - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

hint_*

+

Its a 'hint' to the ARIA engine, others implementations don't have to follow.

ARIA supports specific opcodes in ‹control› +which start with "hint", these should be ignored by any other SFZ parser. +Other engines could implement other hints as they wished.

+

A useful case is hint_ram_based=1, which will cause the samples to be +loaded into RAM in their entirety, instead of preloading only starts into +RAM and streaming the rest from disk. This can be useful for preventing +sound dropout with larger instruments on lower-performance systems, +or instruments located on a HDD.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
hint_*ARIAN/AN/AN/A
+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/hipolyaft/index.html b/opcodes/hipolyaft/index.html new file mode 100644 index 000000000..67cae7470 --- /dev/null +++ b/opcodes/hipolyaft/index.html @@ -0,0 +1,725 @@ + + + + + + + + + lopolyaft / hipolyaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lopolyaft / hipolyaft

+

Defines the range of last Polyphonic Aftertouch message required for the region to play.

Example

+

The region will play only if last Polyphonic Aftertouch message received was +in the 30-100 range.

+
lopolyaft=30 hipolyaft=100
+
+

Practical Considerations

+

In the rgcaudio sfz player, the incoming note information in the Polyphonic +Aftertouch message is not relevant (which basically means polyphonic aftertouch +isn't polyphonic, and works like channel aftertouch). In ARIA, the incoming note +information is used, and polyphonic aftertouch works polyphonically. +Other SFZ players need testing.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
hipolyaftSFZ v1integer1270 to 127N/A
+

Category: Region Logic, Internal Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/hiprog/index.html b/opcodes/hiprog/index.html new file mode 100644 index 000000000..8f3715219 --- /dev/null +++ b/opcodes/hiprog/index.html @@ -0,0 +1,723 @@ + + + + + + + + + loprog / hiprog - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loprog / hiprog

+

The region plays when the MIDI program number is between loprog and hiprog.

MIDI program numbers in the General MIDI spec ranged from 0 to 127 but were +often displayed externally as 1 to 128. This uses the 0 to 127 range. +By default, most DAWs seem to have the program number set to 0, so setting +loprog higher than 0 without sending program change messages results in no sound.

+

Examples

+
loprog=0 hiprog=0
+loprog=1 hiprog=1
+loprog=10 hiprog=12
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
hiprogSFZ v2integer1270 to 127N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/hirand/index.html b/opcodes/hirand/index.html new file mode 100644 index 000000000..c498ed340 --- /dev/null +++ b/opcodes/hirand/index.html @@ -0,0 +1,759 @@ + + + + + + + + + lorand / hirand - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lorand / hirand

+

The region will play if the random number is equal to or higher than lorand, and lower than hirand.

Random values. The player will generate a new random number on every note-on event, +in the range 0 to 1.

+

Examples

+
lorand=0.2 hirand=0.4
+
+lorand=0.4 hirand=1
+
+

The most common application for this is randomized round robins. Note that +hirand for a region should equal lorand for the next region - if we had, for +example, hirand=0.249 for the first region and lorand=0.25 for the next, +that would result in no sound playing if the random number generated was, for +example, 0.2496343491. So, an 0.001 chance of no sound at all - a difficult +problem to spot when testing.

+
<region> hirand=0.25 sample=kick_vl1_rr1.wav
+<region> lorand=0.25 hirand=0.5 sample=kick_vl1_rr2.wav
+<region> lorand=0.5 hirand=0.75 sample=kick_vl1_rr3.wav
+<region> lorand=0.75 sample=kick_vl1_rr4.wav
+
+

It is also possible to combine this with the seq_length and seq_position +opcodes to split round robins into two subsets, and randomize within each subset. +This results in randomization, but prevents the possibility of the same sample +being triggered twice in a row when the random number generated falls into the +same range as the previously generated number. This can be good when there are +a lot (6 or more) round robin samples available. The code for 8 samples split +into two sequential subsets might look like this:

+
<region> seq_length=2 seq_position=1 hirand=0.25 sample=kick_vl1_rr1.wav
+<region> seq_length=2 seq_position=1 lorand=0.25 hirand=0.5 sample=kick_vl1_rr2.wav
+<region> seq_length=2 seq_position=1 lorand=0.5 hirand=0.75 sample=kick_vl1_rr3.wav
+<region> seq_length=2 seq_position=1 lorand=0.75 sample=kick_vl1_rr4.wav
+<region> seq_length=2 seq_position=2 hirand=0.25 sample=kick_vl1_rr5.wav
+<region> seq_length=2 seq_position=2 lorand=0.25 hirand=0.5 sample=kick_vl1_rr6.wav
+<region> seq_length=2 seq_position=2 lorand=0.5 hirand=0.75 sample=kick_vl1_rr7.wav
+<region> seq_length=2 seq_position=2 lorand=0.75 sample=kick_vl1_rr8.wav
+
+

Practical Considerations

+

In the ARIA implementation of SFZ, sequence position is not tracked together for +all regions, which means the above is not a practical way to implement alternating +left/right hand or up/down bowing samples.

+

Also in ARIA, a separate random number is generated for each region which is playing, +which means lorand/hirand probably should not be used with samples which have +multiple mic positions. Using it can result in triggering spot, overhead and room +mics which do not match, and that can result in phasing issues etc.

+

There are other potential uses which have nothing to do with round robins, for +example having key fingering noises on a clarinet trigger sometimes +(but not always) when a note is played.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
hirandSFZ v1float10 to 1N/A
+

Category: Region Logic, Internal Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/hitimer/index.html b/opcodes/hitimer/index.html new file mode 100644 index 000000000..54485ebf7 --- /dev/null +++ b/opcodes/hitimer/index.html @@ -0,0 +1,725 @@ + + + + + + + + + lotimer / hitimer - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lotimer / hitimer

+

Region plays if timer is between lotimer and hitimer.

Not implemented in ARIA, may have been implemented in some Cakewalk products. +The timer is how long has passed since the last sample had played in the same +group. It is, however, not known whether this is a group header or polyphony group.

+

Examples

+
<region>
+hitimer=0.25
+sample=quick.wav
+<region>
+lotimer=0.25
+sample=slow.wav
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
hitimerSFZ v2floatN/AN/A
+

Category: Region Logic, Internal Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/hivel/index.html b/opcodes/hivel/index.html new file mode 100644 index 000000000..1c46c9bd5 --- /dev/null +++ b/opcodes/hivel/index.html @@ -0,0 +1,742 @@ + + + + + + + + + lovel / hivel - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

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.

This is obviously useful for instruments with dynamic layers controlled by velocity. +Though dynamic layers can also be controlled by CC, especially for sustained +instruments, lovel and hivel are the standard way of controlling dynamics for +instruments such as drums and pianos. It is also possible to use lovel / hivel +to control other things instead, such as articulations - for example, a guitar +could have palm-muted samples on low velocities, and pinch harmonics on velocity 127.

+

These opcodes will often need to be used with amp_velcurve_N, unless +amp_veltrack is set to 0. The reason for this is that with default +velocity tracking behavior and non-normalized samples (and there are many reasons +why normalizing samples should be avoided), the quiet velocity layers will be too quiet.

+

Velocity 0 is a note-off message, so 1 is the lowest usable value with hivel/lovel.

+

Example

+
lovel=64 hivel=95
+
+

An instrument with four velocity-controlled dynamic layers might use lovel and +hivel like this:

+
<region>hivel=31 amp_velcurve_31=1 sample=kick_vl1.wav
+<region>lovel=32 hivel=63 amp_velcurve_63=1 sample=kick_vl2.wav
+<region>lovel=64 hivel=95 amp_velcurve_95=1 sample=kick_vl3.wav
+<region>lovel=96 sample=kick_vl4.wav
+
+

The way this would work is the kick_vl1.wav region will play at velocities up +to 31, with volume going gradually from 0 at velocity 0 (so, no sound) to full +volume at velocity 31. The kick_vl2.wav region will play at velocties 32 to 63, +with volume being full at velocity 63 and lower volume (but not zero) at 32. +The kick_vl3 wav region will play at velocites 64 to 95, with full volume at +velocity 95. Finally, the kick_vl4 layer plays at velocities 96 to 127, with no +amp_velcurve_N set meaning it will have full volume at velocity 127.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
hivelSFZ v1integer1271 to 127N/A
+

Category: Region Logic, Key Mapping

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/image/index.html b/opcodes/image/index.html new file mode 100644 index 000000000..44a7f443d --- /dev/null +++ b/opcodes/image/index.html @@ -0,0 +1,729 @@ + + + + + + + + + image - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

image

+

Sets the background image of the instrument.

Practical Considerations

+

Supported in Cakewalk DropZone, sfizz and possibly other players, +but not ARIA / Sforzando.

+
    +
  • DropZone supports bitmap images with transparent alpha channels, +showing one image per instrument and can be placed under any header. +The visible image is approximately 530x150 pixels. If a larger image is loaded, +only the top left part will be visible. +If set multiple times, the last image set in the SFZ file is actually used.
  • +
  • Dimension Pro parses but ignores the opcode.
  • +
  • sfizz supports it under the <control> header only, +together with a custom image_controls opcode to support an additional image +in its controls tab. +The image size is 775x335 pixels with 1:1 aspect ratio, not limited to BMP images.
  • +
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
imageSFZ v2stringN/AN/A
+

Category: Loading

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/include/index.html b/opcodes/include/index.html new file mode 100644 index 000000000..0e44f8fd6 --- /dev/null +++ b/opcodes/include/index.html @@ -0,0 +1,780 @@ + + + + + + + + + include - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

#include

+

A special directive, which allows using SFZ files as building blocks for creating larger, more complex SFZ files.

The file to which #include points is, in effect, +pasted into the SFZ file at the point of the #include. This means that +the file structure needs to be respected - after all #includes are processed, +‹control› header needs to be before the regions in the file, +‹curve› opcodes need to be at the bottom etc. This can be +nested - #included files can contain more #includes of their own, +though of course recursion must be avoided!

+

The included path must be surrounded by double quotes, similar to how include +works in C/C++ files. Note that this is different from how the paths in the +sample opcode works, which do not need quotes.

+

Either a filename or a path can be used. If the #included files are in another +folder, the SFZ is interpreted as if it was in the main SFZ file's path, not the +path where the #included files are. The #included files can either have the +extension sfz or sfzh, which is functionally no different from sfz, just used +for clarity when #including a header.

+

This is useful for creating large complex files, and also for simplifying the +management of files which repeat similar regions with different opcodes. This is +especially convenient in conjunction with the ‹master› header.

+

Examples

+
#include "header.sfz"
+#include "note_map.sfz"
+#include "legato/dynfade_legato_first_map.sfz"
+
+

Here's an example of how #include and master can be used together:

+
<global>
+loop_mode=one_shot
+off_mode=normal
+tune=-1200 //Everything is tuned down an octave, then tuned back up with its own tune param
+pan=-100 //Similar for pan - hard left, brought to proper position with param
+pan_oncc10=0 //Disable master pan
+amplitude_oncc7=100
+ampeg_attack=0.001
+ampeg_decay=0.7
+ampeg_sustain=100
+
+<master>
+amplitude_cc30=100
+pan_cc31=200
+tune_cc32=2400
+tune_cc55=-500
+offset_cc33=3000
+ampeg_sustain_oncc33=-100
+#include "mappings/bobobo_bass.sfz"
+
+<master>
+amplitude_cc35=100
+pan_cc36=200
+tune_cc37=2400
+offset_cc38=1500
+ampeg_sustain_oncc38=-100
+tune_cc55=-250
+#include "mappings/bobobo_tenor_l_1.sfz"
+#include "mappings/bobobo_tenor_l_2.sfz"
+
+

Using #include with #define in the same instrument requires care, +especially if the same value has to be #defined to have different settings at +different points in an instrument.

+

The following does not work well in ARIA/Sforzando, assuming that B.sfz uses MYVAR:

+
#define $MYVAR cc12
+#include B.sfz
+#define $MYVAR cc13
+#include B.sfz
+
+

However, a workaround there is to use #include to put each #define statement +in a separate file. +In simple tests, that has been successful.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
#includeARIAstringN/AN/A
+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/index.html b/opcodes/index.html new file mode 100644 index 000000000..bda169623 --- /dev/null +++ b/opcodes/index.html @@ -0,0 +1,8432 @@ + + + + + + + + + Opcodes - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Opcodes

All opcode versions, including extensions, starting in alphabetical order. +Note that modulations such as (on)ccN and vel2* are included in the pages +describing the parameters they modulate.

+

Opcode links in red color +represent obsolete opcodes which should not be used in new instruments.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OpcodeDescriptionTypeDefaultRangeVersion
Real-Time Instrument ScriptscriptAllows to load real-time instrument scripts for SFZ instruments.stringN/ALinuxSampler
Sample PlaybackcountThe number of times the sample will be played.integer00 to 4294967296SFZ v1
Sample PlaybackdelayRegion delay time.float00 to 100SFZ v1
Sample Playbackdelay_ccNRegion delay time after MIDI continuous controller N messages are received. If the region receives a note-off message before delay time, the region won't play.float0-100 to 100
Sample Playbackdelay_onccNdelay_ccN alias.N/AN/ASFZ v2
Sample Playbackdelay_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate delay.integer00 to 255ARIA
Sample Playbackdelay_randomRegion random delay time.float00 to 100SFZ v1
Sample Playbackdelay_samplesAllows the region playback to be postponed for the specified time, measured in samples (and therefore dependent on current sample rate).integerN/ASFZ v2
Sample Playbackdelay_samples_onccNintegerN/A
Sample PlaybackendThe endpoint of the sample. If unspecified, the entire sample will play.integerunspecified0 to 4294967296SFZ v1
Sample Playbackloop_countThe number of times a loop will repeat.integerN/ASFZ v2
Sample Playbackloopcountloop_count alias.N/AN/AARIA
Sample Playbackloop_crossfadeLoop cross fade.floatN/ASFZ v2
Sample Playbackloop_endThe loop end point, in samples.integer00 to 4294967296SFZ v1
Sample Playbackloopendloop_end alias.N/AN/A
Sample Playbackloop_lengthccNChange of loop end point.N/AN/ASFZ v2
Sample Playbackloop_length_onccNloop_lengthccN alias.N/AN/A
Sample Playbackloop_modeAllows playing samples with loops defined in the unlooped mode.stringno_loop for samples without a loop defined,
loop_continuous for samples with defined loop(s).
SFZ v1
Sample Playbackloopmodeloop_mode alias.N/AN/A
Sample Playbackloop_startThe loop start point, in samples.integer00 to 4294967296SFZ v1
Sample Playbackloopstartloop_start alias.N/AN/A
Sample Playbackloop_startccNChange of loop start point.N/AN/ASFZ v2
Sample Playbackloop_start_onccNloop_startccN alias.N/AN/A
Sample Playbackloop_tuneTuning for only the loop segment.float0SFZ v2
Sample Playbacklooptuneloop_tune alias.N/AN/AARIA
Sample Playbackloop_typeDefines the looping mode.stringforwardSFZ v2
Sample Playbacklooptypeloop_type alias.N/AN/AARIA
Sample PlaybackoffsetThe offset used to play the sample.integer00 to 4294967296SFZ v1
Sample Playbackoffset_ccNThe offset used to play the sample according to last position of MIDI continuous controller N.integer00 to 4294967296
Sample Playbackoffset_onccNoffset_ccN alias.N/AN/ASFZ v2
Sample Playbackoffset_randomRandom offset added to the region offset.integer00 to 4294967296SFZ v1
Sample Playbackoffset_modeDefines whether offset is measured in samples or percentage of sample length.stringsamplesARIA
Sample PlaybacksampleDefines which sample file the region will play.stringN/ASFZ v1
Sample Playbacksample_fadeoutNumber of seconds before the end of sample playback that the player should begin a realtime fadeout.floatN/ASFZ v2
Sample Playbacksample_dyn_paramNfloatN/AARIA
Sample Playbacksample_dyn_paramN_onccXfloatN/A
Sample Playbacksync_beatsRegion playing synchronization to host position.float00 to 32SFZ v1
Sample Playbacksync_offsetRegion playing synchronization to host position offset.float00 to 32SFZ v1
Sample Playbackdelay_beatsDelays the start of the region until a certain amount of musical beats are passed.floatN/ASFZ v2
Sample Playbackdelay_beats_onccNN/AN/AARIA
Sample Playbackdelay_beats_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate delay_beats.integer00 to 255ARIA
Sample Playbackdelay_beats_randomDelays the start of the region after a random amount of musical beats.floatN/AARIA
Sample Playbackstop_beatsStops a region after a certain amount of beats have played.floatN/ASFZ v2
Sample PlaybackdirectionThe direction in which the sample is to be played.stringforwardSFZ v2
Sample Playbackmd5Calculates the MD5 digital fingerprint hash of a sample file, represented as a sequence of 32 hexadecimal digits.stringnullSFZ v2
Sample Playbackreverse_loccNIf MIDI CC N is between reverse_loccN and reverse_hiccN, the region plays reversed.integerN/A0 to 127SFZ v2
Sample Playbackreverse_hiccNIf MIDI CC N is between reverse_loccN and reverse_hiccN, the region plays reversed.integerN/A0 to 127SFZ v2
Sample PlaybackwaveguideEnables waveguide synthesis for the region.stringN/ASFZ v2
Instrument SettingsdefineCreates a variable and gives it a value.stringN/ASFZ v2
Instrument Settingsdefault_pathDefault file path.stringN/ASFZ v2
Instrument Settingsnote_offsetMIDI note transpose; tells the SFZ player to offset all incoming MIDI notes by the specified number of semitones.integer0-127 to 127SFZ v2
Instrument Settingsoctave_offsetMIDI octave transpose; tells the SFZ player to offset all incoming MIDI notes by the specified number of octaves.integer0-10 to 10SFZ v2
Instrument Settingslabel_ccNCreates a label for the MIDI CC.stringN/AARIA
Instrument Settingslabel_keyNCreates a label for a key.stringN/Asfizz
Instrument Settingslabel_outputNCreates a label for the output N.stringN/ACalfbox
Instrument Settingsset_ccNSets a default initial value for MIDI CC number N, when the instrument is initially loaded.integerN/A0 to 127SFZ v2
Instrument SettingsincludeA special directive, which allows using SFZ files as building blocks for creating larger, more complex SFZ files.stringN/AARIA
Instrument Settingshint_Its a 'hint' to the ARIA engine, others implementations don't have to follow.N/AN/AARIA
Instrument Settings_modDetermines whether a parameter is modulated by addition or multiplication.stringN/AARIA
Instrument Settingsset_hdccNLike set_ccN but with floating point MIDI CCs.floatN/A0 to 1ARIA
Instrument Settingsset_realccNset_hdccN alias.N/AN/A
Instrument Settingssw_note_offsetFollows the same logic as SFZ 2.0’s note_offset but for key switches.integerN/AARIA
Instrument Settingssw_octave_offsetFollows the same logic as SFZ 2.0’s octave_offset but for key switches.integerN/AARIA
Instrument Settingsglobal_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Instrument Settingsmaster_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Instrument Settingsgroup_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Instrument Settingsregion_labelAn ARIA extension which sets what is displayed in the default info tab of Sforzando.stringN/AARIA
Voice LifecyclegroupExclusive group number for this region.integer0-2147483648 to 2147483647SFZ v1
Voice Lifecyclepolyphony_groupgroup alias.N/AN/AARIA
Voice Lifecycleoff_byRegion off group.integer0-2147483648 to 2147483647SFZ v1
Voice Lifecycleoffbyoff_by alias.N/AN/A
Voice Lifecycleoff_modeRegion off mode.stringfastSFZ v1
Voice LifecycleoutputThe stereo output number for this region.integer00 to 1024SFZ v1
Voice LifecyclepolyphonyPolyphony voice limit.integerN/ASFZ v2
Voice Lifecyclenote_polyphonyPolyphony limit for playing the same note repeatedly.integerN/ASFZ v2
Voice Lifecyclepolyphony_stealingintegerN/AARIA
Voice Lifecyclenote_selfmaskControls note-stealing behavior for a single pitch, when using note_polyphony.stringonSFZ v2
Voice Lifecyclert_deadControls whether a release sample should play if its sustain sample has ended, or not.stringoffSFZ v2
Voice Lifecycleoff_curveWhen off_mode is set to time, this specifies the math to be used to fade out the regions being muted by voice-stealing.integer10-2 to 10ARIA
Voice Lifecycleoff_shapeThe coefficient used by off_curve.float-10.3616ARIA
Voice Lifecycleoff_timeWhen off_mode is set to time, this specifies the fadeout time for regions being muted by voice-stealing.float0.006ARIA
Key MappingkeyEquivalent to using lokey, hikey and pitch_keycenter and setting them all to the same note value.integerN/A0 to 127SFZ v1
Key MappinglokeyDetermine the low boundary of a certain region.integer00 to 127SFZ v1
Key MappinghikeyDetermine the high boundary of a certain region.integer1270 to 127SFZ v1
Key MappinglovelIf a note with velocity value equal to or higher than lovel AND equal to or lower than hivel is played, the region will play.integer11 to 127SFZ v1
Key MappinghivelIf a note with velocity value equal to or higher than lovel AND equal to or lower than hivel is played, the region will play.integer1271 to 127SFZ v1
MIDI ConditionslochanIf incoming notes have a MIDI channel between lochan and hichan, the region will play.integer11 to 16SFZ v1
MIDI ConditionshichanIf incoming notes have a MIDI channel between lochan and hichan, the region will play.integer161 to 16SFZ v1
MIDI ConditionsloccNDefines the range of the last MIDI controller N required for the region to play.integer00 to 127SFZ v1
MIDI ConditionshiccNDefines the range of the last MIDI controller N required for the region to play.integer1270 to 127SFZ v1
MIDI ConditionslobendDefines the range of the last Pitch Bend message required for the region to play.integer-8192-8192 to 8192SFZ v1
MIDI ConditionshibendDefines the range of the last Pitch Bend message required for the region to play.integer8192-8192 to 8192SFZ v1
MIDI Conditionssostenuto_ccReassigns the sostenuto pedal CC to a non-standard value.integer660 to 127ARIA
MIDI Conditionssostenuto_loSets the minimum point at which the sostenuto pedal (MIDI CC 66) is considered 'down'.float0.50 to 127ARIA
MIDI Conditionssostenuto_swTurns the sostenuto switch on or off.stringN/ASFZ v2
MIDI Conditionssustain_ccReassigns the sustain pedal CC to a non-standard value.integer640 to 127ARIA
MIDI Conditionssustain_loSets the minimum point at which the sustain pedal (MIDI CC 64) is considered 'down'.float0.50 to 127ARIA
MIDI Conditionssustain_swTurns the sustain switch on or off.stringN/ASFZ v2
MIDI Conditionssw_lokeyDefines the range of the keyboard to be used as trigger selectors for the sw_last opcode.integer00 to 127SFZ v1
MIDI Conditionssw_hikeyDefines the range of the keyboard to be used as trigger selectors for the sw_last opcode.integer1270 to 127SFZ v1
MIDI Conditionssw_lastEnables 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.integer00 to 127SFZ v1
MIDI Conditionssw_downEnables 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.integer00 to 127SFZ v1
MIDI Conditionssw_upEnables the region to play if the key equal to sw_up value is not depressed.integer00 to 127SFZ v1
MIDI Conditionssw_previousPrevious note value. The region will play if last note-on message was equal to sw_previous value.integerN/A0 to 127SFZ v1
MIDI Conditionssw_velAllows overriding the velocity for the region with the velocity of the previous note.stringcurrentSFZ v1
MIDI ConditionsloprogThe region plays when the MIDI program number is between loprog and hiprog.integer00 to 127SFZ v2
MIDI ConditionshiprogThe region plays when the MIDI program number is between loprog and hiprog.integer1270 to 127SFZ v2
MIDI ConditionslohdccNLike loccN but with floating point MIDI CCsfloat00 to 1ARIA
MIDI ConditionshihdccNLike hiccN but with floating point MIDI CCsfloat10 to 1ARIA
MIDI Conditionssw_defaultDefine keyswitch 'power on default' so that you hear something when a patch loads.integerN/A0 to 127SFZ v2
MIDI Conditionssw_labelLabel for activated keyswitch on GUI.stringN/AARIA
MIDI Conditionssw_lolastLike sw_last, but allowing a region to be triggered across a range of keyswitches.integerN/A0 to 127ARIA
MIDI Conditionssw_hilastLike sw_last, but allowing a region to be triggered across a range of keyswitches.integerN/A0 to 127ARIA
MIDI ConditionsvarNN_modSpecifies the method used to calculate variable number NN from MIDI CCs.stringN/AARIA
MIDI ConditionsvarNN_onccXSpecifies the method used to calculate variable number NN from MIDI CCs.floatN/A0 to 1
MIDI ConditionsvarNN_curveccXSpecifies the ‹curve› number which MIDI CC X uses to modulate varNN.integer00 to 255
MIDI ConditionsvarNN_Specifies the target for variable NN to modulate.N/AN/AARIA
Internal ConditionslobpmHost tempo value.float00 to 500SFZ v1
Internal ConditionshibpmHost tempo value.float5000 to 500SFZ v1
Internal ConditionslochanaftDefines the range of last Channel Aftertouch message required for the region to play.integer00 to 127SFZ v1
Internal ConditionshichanaftDefines the range of last Channel Aftertouch message required for the region to play.integer1270 to 127SFZ v1
Internal ConditionslopolyaftDefines the range of last Polyphonic Aftertouch message required for the region to play.integer00 to 127SFZ v1
Internal ConditionshipolyaftDefines the range of last Polyphonic Aftertouch message required for the region to play.integer1270 to 127SFZ v1
Internal ConditionslorandThe region will play if the random number is equal to or higher than lorand, and lower than hirand.float00 to 1SFZ v1
Internal ConditionshirandThe region will play if the random number is equal to or higher than lorand, and lower than hirand.float10 to 1SFZ v1
Internal Conditionsseq_lengthSequence length, used together with seq_position to use samples as round robins.integer11 to 100SFZ v1
Internal Conditionsseq_positionSequence position. The region will play if the internal sequence counter is equal to seq_position.integer11 to 100SFZ v1
Internal ConditionslotimerRegion plays if the time passed since the last sample in the same group played is between lotimer and hitimer.floatN/ASFZ v2
Internal ConditionshitimerRegion plays if timer is between lotimer and hitimer.floatN/ASFZ v2
TriggerstriggerSets the trigger which will be used for the sample to play.stringattackSFZ v1
Triggerson_loccNIf a MIDI control message with a value between on_loccN and on_hiccN is received, the region will play. Default value is -1, it means unassigned.integer-10 to 127SFZ v1
Triggersstart_loccNon_loccN alias.N/AN/ASFZ v2
Triggerson_hiccNIf a MIDI control message with a value between on_loccN and on_hiccN is received, the region will play. Default value is -1, it means unassigned.integer-10 to 127SFZ v1
Triggersstart_hiccNon_hiccN alias.N/AN/ASFZ v2
Triggerson_lohdccNLike on_loccN but with floating point MIDI CCs.float-10 to 1ARIA
Triggersstart_lohdccNon_lohdccN alias.N/AN/A
Triggerson_hihdccNLike on_hiccN but with floating point MIDI CCs.float-10 to 1ARIA
Triggersstart_hihdccNon_hihdccN alias.N/AN/A
Triggersstop_loccNIf a MIDI control message with a value between stop_loccN and stop_hiccN is received, the region will stop playing. Default value is -1, it means unassigned.integer-10 to 127SFZ v2
Triggersstop_hiccNIf a MIDI control message with a value between stop_loccN and stop_hiccN is received, the region will stop playing. Default value is -1, it means unassigned.integer-10 to 127SFZ v2
Triggersstop_lohdccNLike stop_loccN but with floating point MIDI CCs.float-10 to 1ARIA
Triggersstop_hihdccNLike stop_hiccN but with floating point MIDI CCs.float-10 to 1ARIA
AmplifierpanThe panoramic position for the region.float0-100 to 100SFZ v1
Amplifierpan_onccNN/AN/ASFZ v2
Amplifierpan_ccNpan_onccN alias.N/AN/AARIA
Amplifierpan_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate pan.integer00 to 255SFZ v2
Amplifierpan_smoothccNN/AN/ASFZ v2
Amplifierpan_stepccNN/AN/ASFZ v2
Amplifierpan_randomRandom panoramic position for the region.float0-100 to 100ARIA
AmplifierpositionOnly operational for stereo samples, position defines the position in the stereo field of a stereo signal, after channel mixing as defined in the width opcode.float0-100 to 100SFZ v1
Amplifierposition_onccNN/AN/AARIA
Amplifierposition_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate position.integer00 to 255ARIA
Amplifierposition_smoothccNN/AN/AARIA
Amplifierposition_stepccNN/AN/AARIA
Amplifierposition_randomfloat0-100 to 100ARIA
Amplifierposition_keycenterN/AN/AARIA
Amplifierposition_keytrackN/AN/AARIA
Amplifierposition_veltrackinteger0-200 to 200ARIA
AmplifiervolumeThe volume for the region, in decibels.float0-144 to 6SFZ v1
Amplifiergain_ccNGain applied on MIDI control N, in decibels.float0-144 to 48
Amplifiergain_onccNgain_ccN alias.N/AN/ASFZ v2
Amplifiervolume_onccNgain_ccN alias.N/AN/ASFZ v2
Amplifiervolume_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate volume.integer00 to 255SFZ v2
Amplifiervolume_smoothccNN/AN/ASFZ v2
Amplifiervolume_stepccNN/AN/ASFZ v2
AmplifierwidthOnly operational for stereo samples, width defines the amount of channel mixing applied to play the sample.float100-100 to 100SFZ v1
Amplifierwidth_onccNN/AN/ASFZ v2
Amplifierwidth_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate width.integer00 to 255SFZ v2
Amplifierwidth_smoothccNN/AN/ASFZ v2
Amplifierwidth_stepccNN/AN/ASFZ v2
Amplifieramp_keycenterCenter key for amplifier keyboard tracking. In this key, the amplifier keyboard tracking will have no effect.integer600 to 127SFZ v1
Amplifieramp_keytrackAmplifier keyboard tracking (change in amplitude per key) in decibels.float0-96 to 12SFZ v1
Amplifieramp_veltrackAmplifier velocity tracking, represents how much the amplitude changes with incoming note velocity.float100-100 to 100SFZ v1
Amplifieramp_veltrack_onccNN/AN/AARIA
Amplifieramp_veltrack_ccNamp_veltrack_onccN alias.N/AN/A
Amplifieramp_veltrack_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate amp_veltrack.integer00 to 255ARIA
Amplifieramp_veltrack_randomN/AN/AARIA
Amplifieramp_velcurve_NUser-defined amplifier velocity curve.floatStandard curve (see amp_veltrack)0 to 1SFZ v1
Amplifieramp_randomRandom volume for the region, in decibels.float00 to 24SFZ v1
Amplifiergain_randomamp_random alias.N/AN/ASFZ v2
Amplifierrt_decayApplies only to regions that triggered through trigger=release. The volume decrease (in decibels) per seconds after the corresponding attack region was triggered.float00 to 200SFZ v1
Amplifierrt_decayNApplies only to regions that triggered through trigger=release. The volume decrease (in decibels) per seconds after the corresponding attack region was triggered, for decrease curve segment number N.float00 to 200ARIA
Amplifierrt_decayN_timeThe duration of release sample volue decrease curve segment number N.floatN/AARIA
Amplifierxf_cccurveMIDI controllers crossfade curve for the region.stringpowerSFZ v1
Amplifierxf_keycurveKeyboard crossfade curve for the region.stringpowerSFZ v1
Amplifierxf_velcurveVelocity crossfade curve for the region.stringpowerSFZ v1
Amplifierxfin_loccNFade in control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfin_hiccNFade in control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfout_loccNFade out control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfout_hiccNFade out control based on MIDI CC.integer00 to 127SFZ v1
Amplifierxfin_lokeyFade in control based on MIDI note (keyboard position).integer00 to 127SFZ v1
Amplifierxfin_hikeyFade in control based on MIDI note (keyboard position).integer00 to 127SFZ v1
Amplifierxfout_lokeyFade out control based on MIDI note number (keyboard position).integer1270 to 127SFZ v1
Amplifierxfout_hikeyFade out control based on MIDI note number (keyboard position).integer1270 to 127SFZ v1
Amplifierxfin_lovelFade in control based on velocity.integer00 to 127SFZ v1
Amplifierxfin_hivelFade in control based on velocity.integer00 to 127SFZ v1
Amplifierxfout_lovelFade out control, based on velocity.integer1270 to 127SFZ v1
Amplifierxfout_hivelFade out control, based on velocity.integer1270 to 127SFZ v1
AmplifierphaseIf invert is set, the region is played with inverted phase.stringnormalSFZ v2
AmplifieramplitudeAmplitude for the specified region in percentage of full amplitude.float1000 to 100ARIA
Amplifieramplitude_onccNfloatN/A-100 to 100
Amplifieramplitude_ccNamplitude_onccN alias.N/AN/A
Amplifieramplitude_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate amplitude.integer00 to 255
Amplifieramplitude_smoothccNN/AN/A
Amplifierglobal_amplitudeARIA extension, like amplitude, but affecting everything when set under the ‹global› header.float1000 to 100ARIA
Amplifiermaster_amplitudeARIA extension, like amplitude, but affecting everything when set under the ‹master› header.float1000 to 100ARIA
Amplifiergroup_amplitudeARIA extension, like amplitude, but affecting everything when set under the ‹group› header.float1000 to 100ARIA
Amplifierpan_lawSets the pan law to be used.stringN/AARIA
Amplifierpan_keycenterCenter key for pan keyboard tracking.integer600 to 127SFZ v2
Amplifierpan_keytrackThe amount by which the panning of a note is shifted with each key.float0-100 to 100SFZ v2
Amplifierpan_veltrackThe effect of note velocity on panning.float0-100 to 100SFZ v2
Amplifierglobal_volumeARIA extension, like volume, but affecting everything when set under the ‹global› header.float0-144 to 6ARIA
Amplifiermaster_volumeARIA extension, like volume, but affecting everything when set under the ‹master› header.float0-144 to 6ARIA
Amplifiergroup_volumeARIA extension, like volume, but affecting everything when set under the ‹group› header.float0-144 to 6ARIA
EQeqN_bwBandwidth of the equalizer band, in octaves.float10.001 to 4SFZ v1
EQeqN_bwccXfloat0-4 to 4
EQeqN_bw_onccXeqN_bwccX alias.N/AN/ASFZ v2
EQeqN_freqFrequency of the equalizer band, in Hertz.floateq1_freq=50
eq2_freq=500
eq3_freq=5000
0 to 30000SFZ v1
EQeqN_freqccXfloat0-30000 to 30000
EQeqN_freq_onccXeqN_freqccX alias.N/AN/ASFZ v2
EQeqN_vel2freqFrequency change of the equalizer band with MIDI velocity, in Hertz.float0-30000 to 30000
EQeqN_gainGain of the equalizer band, in decibels.float0-96 to 24SFZ v1
EQeqN_gainccXfloat0-96 to 24
EQeqN_gain_onccXeqN_gainccX alias.N/AN/ASFZ v2
EQeqN_vel2gainGain change of the equalizer band with MIDI velocity, in decibels.float0-96 to 24
EQeqN_dynamicSpecifies when EQ is recalculated.integer00 to 1ARIA
EQeqN_typeSets the type of EQ filter.stringpeakSFZ v2
FiltercutoffSets the cutoff frequency (Hz) of the filters.floatfilter disabled0 to SampleRate / 2SFZ v1
Filtercutoff2cutoff alias.N/AN/ASFZ v2
Filtercutoff2_ccNN/AN/A
Filtercutoff2_onccNN/AN/A
Filtercutoff2_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate cutoff2.integer00 to 255
Filtercutoff2_smoothccNN/AN/A
Filtercutoff2_stepccNN/AN/A
Filtercutoff2_chanaftN/AN/A
Filtercutoff2_polyaftN/AN/A
Filtercutoff_ccNThe variation in the cutoff frequency when MIDI continuous controller N is received.integer0-9600 to 9600
Filtercutoff_onccNcutoff_ccN alias.N/AN/ASFZ v2
Filtercutoff_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate cutoff.integer00 to 255SFZ v2
Filtercutoff_smoothccNfloat00 to ?SFZ v2
Filtercutoff_stepccNinteger00 to ?SFZ v2
Filtercutoff_chanaftThe variation in the cutoff frequency when MIDI channel aftertouch messages are received, in cents.integer0-9600 to 9600
Filtercutoff_polyaftThe variation in the cutoff frequency when MIDI polyphonic aftertouch messages are received, in cents.integer0-9600 to 9600
Filterfil_gainGain for lsh, hsh and peq filter types.float0ARIA
Filterfil2_gainfil_gain alias.N/AN/A
Filterfil2_gain_onccNN/AN/A
Filterfil_gain_onccNN/AN/A
Filterfil_keycenterCenter key for filter keyboard tracking.integer600 to 127SFZ v1
Filterfil2_keycenterfil_keycenter alias.N/AN/ASFZ v2
Filterfil_keytrackFilter keyboard tracking (change on cutoff for each key) in cents.integer00 to 1200SFZ v1
Filterfil2_keytrackfil_keytrack alias.N/AN/ASFZ v2
Filterfil_randomRandom value added to the filter cutoff for the region, in cents.integer00 to 9600SFZ v1
Filtercutoff_randomfil_random alias.N/AN/ASFZ v2
Filtercutoff2_randomfil_random alias.N/AN/AARIA
Filterfil_typeFilter type.stringlpf_2pSFZ v1
Filterfiltypefil_type alias.N/AN/A
Filterfil2_typefil_type alias.N/AN/ASFZ v2
Filterfil_veltrackFilter velocity tracking, the amount by which the cutoff changes with incoming note velocity, in cents.integer0-9600 to 9600SFZ v1
Filterfil2_veltrackfil_veltrack alias.N/AN/ASFZ v2
FilterresonanceThe filter cutoff resonance value, in decibels.float00 to 40SFZ v1
Filterresonance2resonance alias.N/AN/ASFZ v2
Filterresonance2_onccNfloat0-40 to 40
Filterresonance2_ccNresonance2_onccN alias.N/AN/ASFZ v2
Filterresonance2_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate resonance2.integer00 to 255
Filterresonance2_smoothccNfloat00 to ?
Filterresonance2_stepccNinteger00 to ?
Filterresonance_onccNfloat0-40 to 40SFZ v2
Filterresonance_ccNresonance_onccN alias.N/AN/A
Filterresonance_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate resonance.integer00 to 255SFZ v2
Filterresonance_smoothccNfloat00 to ?SFZ v2
Filterresonance_stepccNinteger00 to ?SFZ v2
Filterresonance_randomFilter cutoff resonance random value, in decibels.float00 to 40ARIA
Filterresonance2_randomFilter#2 cutoff resonance random value, in decibels.float00 to 40ARIA
Filternoise_filterstringN/ASFZ v2
Filternoise_stereostringN/ASFZ v2
Filternoise_levelfloatN/A-96 to 24SFZ v2
Filternoise_level_onccNfloatN/A-96 to 24
Filternoise_level_smoothccNfloat00 to ?
Filternoise_stepintegerN/A0 to 100SFZ v2
Filternoise_step_onccNintegerN/A0 to 100
Filternoise_toneintegerN/A0 to 100SFZ v2
Filternoise_tone_onccNintegerN/A0 to 100
Pitchbend_upPitch bend range when Bend Wheel or Joystick is moved up, in cents.integer200-9600 to 9600SFZ v1
Pitchbendupbend_up alias.N/AN/A
Pitchbend_downPitch bend range when Bend Wheel or Joystick is moved down, in cents.integer-200-9600 to 9600SFZ v1
Pitchbenddownbend_down alias.N/AN/A
Pitchbend_smoothPitch bend smoothness. Adds “inertia” to pitch bends, so fast movements of the pitch bend wheel will have a delayed effect on the pitch change.float00 to ?SFZ v2
Pitchbend_stepPitch bend step, in cents.integer11 to 1200SFZ v1
Pitchbendstepbend_step alias.N/AN/A
PitchtuneThe fine tuning for the sample, in cents.integer0-100 to 100SFZ v1
Pitchpitchtune alias.N/AN/AARIA
Pitchpitch_onccNN/AN/A-9600 to 9600SFZ v2
Pitchtune_ccNpitch_onccN alias.N/AN/AARIA
Pitchtune_onccNpitch_onccN alias.N/AN/AARIA
Pitchpitch_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate pitch.integer00 to 255SFZ v2
Pitchtune_curveccNpitch_curveccN alias.N/AN/AARIA
Pitchpitch_smoothccNfloat00 to ?SFZ v2
Pitchtune_smoothccNpitch_smoothccN alias.N/AN/AARIA
Pitchpitch_stepccNN/A00 to ?SFZ v2
Pitchtune_stepccNpitch_stepccN alias.N/AN/AARIA
Pitchgroup_tuneARIA extension, like tune, but affecting everything when set under the ‹group› header.integer0-9600 to 9600ARIA
Pitchmaster_tuneARIA extension, like tune, but affecting everything when set under the ‹master› header.integer0-9600 to 9600ARIA
Pitchglobal_tuneARIA extension, like tune, but affecting everything when set under the ‹global› header.integer0-9600 to 9600ARIA
Pitchpitch_keycenterRoot key for the sample.integer600 to 127SFZ v1
Pitchpitch_keytrackWithin the region, this value defines how much the pitch changes with every note.integer100-1200 to 1200SFZ v1
Pitchtune_keytrackpitch_keytrack alias.N/AN/AARIA
Pitchpitch_randomRandom tuning for the region, in cents.integer00 to 9600SFZ v1
Pitchtune_randompitch_random alias.N/AN/AARIA
Pitchpitch_veltrackPitch velocity tracking, represents how much the pitch changes with incoming note velocity, in cents.integer0-9600 to 9600SFZ v1
Pitchtune_veltrackpitch_veltrack alias.N/AN/AARIA
PitchtransposeThe transposition value for this region which will be applied to the sample.integer0-127 to 127SFZ v1
Pitchbend_stepupPitch bend step, in cents, applied to upwards bends only.integer11 to 1200SFZ v2
Pitchbend_stepdownPitch bend step, in cents, for downward pitch bends.integer11 to 1200SFZ v2
Envelope Generatorsampeg_attackEG attack time.float00 to 100SFZ v1
Envelope Generatorsamp_attackampeg_attack alias.N/AN/ASFZ v2
Envelope Generatorsampeg_attackccNfloat0-100 to 100
Envelope Generatorsampeg_attack_onccNampeg_attackccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_attack_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_vel2attackVelocity effect on EG attack time.float0-100 to 100
Envelope Generatorsamp_vel2attackampeg_vel2attack alias.N/AN/ASFZ v2
Envelope Generatorsampeg_decayEG decay time.float00 to 100SFZ v1
Envelope Generatorsamp_decayampeg_decay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_decayccNfloat0-100 to 100
Envelope Generatorsampeg_decay_onccNampeg_decayccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_decay_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate ampeg_decay.integer00 to 255ARIA
Envelope Generatorsampeg_vel2decayVelocity effect on EG decay time.float0-100 to 100
Envelope Generatorsamp_vel2decayampeg_vel2decay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_delayEG delay time.float00 to 100SFZ v1
Envelope Generatorsamp_delayampeg_delay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_delayccNfloat0-100 to 100
Envelope Generatorsampeg_delay_onccNampeg_delayccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_delay_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_vel2delayVelocity effect on EG delay time.float0-100 to 100
Envelope Generatorsamp_vel2delayampeg_vel2delay alias.N/AN/ASFZ v2
Envelope Generatorsampeg_holdEG hold time.float00 to 100SFZ v1
Envelope Generatorsamp_holdampeg_hold alias.N/AN/ASFZ v2
Envelope Generatorsampeg_holdccNfloat0-100 to 100
Envelope Generatorsampeg_hold_onccNampeg_holdccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_hold_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate ampeg_hold.integer00 to 255ARIA
Envelope Generatorsampeg_vel2holdVelocity effect on EG hold time.float0-100 to 100
Envelope Generatorsamp_vel2holdampeg_vel2hold alias.N/AN/ASFZ v2
Envelope Generatorsampeg_releaseEG release time (after note release).float0.0010 to 100SFZ v1
Envelope Generatorsamp_releaseampeg_release alias.N/AN/ASFZ v2
Envelope Generatorsampeg_releaseccNfloat0-100 to 100
Envelope Generatorsampeg_release_onccNampeg_releaseccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_release_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_vel2releaseVelocity effect on EG release time.float0-100 to 100
Envelope Generatorsamp_vel2releaseampeg_vel2release alias.N/AN/ASFZ v2
Envelope Generatorsampeg_sustainEG sustain level, in percentage.float1000 to 100SFZ v1
Envelope Generatorsamp_sustainampeg_sustain alias.N/AN/ASFZ v2
Envelope Generatorsampeg_sustainccNfloat0-100 to 100
Envelope Generatorsampeg_sustain_onccNampeg_sustainccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_sustain_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate ampeg_sustain.integer00 to 255ARIA
Envelope Generatorsampeg_vel2sustainVelocity effect on EG sustain level, in percentage.float0-100 to 100
Envelope Generatorsamp_vel2sustainampeg_vel2sustain alias.N/AN/ASFZ v2
Envelope Generatorsampeg_startEnvelope start level, in percentage.float00 to 100SFZ v1
Envelope Generatorsampeg_startccNfloat0-100 to 100
Envelope Generatorsampeg_start_onccNampeg_startccN alias.N/AN/ASFZ v2
Envelope Generatorsampeg_start_curveccNinteger00 to 255ARIA
Envelope Generatorsampeg_attack_shapeSpecifies the curvature of attack stage of the envelope.float0ARIA
Envelope Generatorsampeg_decay_shapeSpecifies the curvature of decay stage of the envelope.float-10.3616ARIA
Envelope Generatorsampeg_decay_zeroSpecifies how decay time is calculated.integer10 to 1ARIA
Envelope Generatorsampeg_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope Generatorsampeg_release_shapeSpecifies the curvature of release stage of the envelope.float-10.3616ARIA
Envelope Generatorsampeg_release_zeroSpecifies how release time is calculated.integer00 to 1ARIA
Envelope Generatorsfileg_attack_shapeSpecifies the curvature of attack stage of the envelope.float0ARIA
Envelope Generatorsfileg_decay_shapeSpecifies the curvature of decay stage of the envelope.float0ARIA
Envelope Generatorsfileg_decay_zeroSpecifies how decay time is calculated.integer10 to 1ARIA
Envelope Generatorsfileg_release_shapeSpecifies the curvature of release stage of the envelope.float0ARIA
Envelope Generatorsfileg_release_zeroSpecifies how release time is calculated.integer00 to 1ARIA
Envelope Generatorsfileg_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope Generatorspitcheg_attack_shapeSpecifies the curvature of attack stage of the envelope.float0ARIA
Envelope Generatorspitcheg_decay_shapeSpecifies the curvature of decay stage of the envelope.float0ARIA
Envelope Generatorspitcheg_decay_zeroSpecifies how decay time is calculated.integer10 to 1ARIA
Envelope Generatorspitcheg_release_shapeSpecifies the curvature of release stage of the envelope.float0ARIA
Envelope Generatorspitcheg_release_zeroSpecifies how release time is calculated.integer00 to 1ARIA
Envelope Generatorspitcheg_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope Generatorsfileg_attackEG attack time.float00 to 100SFZ v1
Envelope Generatorsfil_attackfileg_attack alias.N/AN/ASFZ v2
Envelope Generatorsfileg_attack_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_attackccNfileg_attack_onccN alias.N/AN/A
Envelope Generatorsfileg_attack_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2attackVelocity effect on EG attack time.float0-100 to 100
Envelope Generatorsfil_vel2attackfileg_vel2attack alias.N/AN/ASFZ v2
Envelope Generatorsfileg_decayEG decay time.float00 to 100SFZ v1
Envelope Generatorsfil_decayfileg_decay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_decay_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_decayccNfileg_decay_onccN alias.N/AN/A
Envelope Generatorsfileg_decay_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2decayVelocity effect on filter EG decay time.float0-100 to 100
Envelope Generatorsfil_vel2decayfileg_vel2decay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_delayEG delay time.float00 to 100SFZ v1
Envelope Generatorsfil_delayfileg_delay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_delay_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_delayccNfileg_delay_onccN alias.N/AN/A
Envelope Generatorsfileg_delay_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2delayVelocity effect on filter EG delay time.float0-100 to 100
Envelope Generatorsfil_vel2delayfileg_vel2delay alias.N/AN/ASFZ v2
Envelope Generatorsfileg_depthEnvelope depth.integer0-12000 to 12000SFZ v1
Envelope Generatorsfil_depthfileg_depth alias.N/AN/ASFZ v2
Envelope Generatorsfileg_depth_onccNinteger0-12000 to 12000ARIA
Envelope Generatorsfileg_depthccNfileg_depth_onccN alias.N/AN/A
Envelope Generatorsfileg_depth_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2depthVelocity effect on EG depth, in cents for pitch or filter cutoff.integer0-12000 to 12000
Envelope Generatorsfil_vel2depthfileg_vel2depth alias.N/AN/ASFZ v2
Envelope Generatorsfileg_holdEG hold time.float00 to 100SFZ v1
Envelope Generatorsfil_holdfileg_hold alias.N/AN/ASFZ v2
Envelope Generatorsfileg_hold_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_holdccNfileg_hold_onccN alias.N/AN/A
Envelope Generatorsfileg_hold_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2holdVelocity effect on EG hold time.float0-100 to 100
Envelope Generatorsfil_vel2holdfileg_vel2hold alias.N/AN/ASFZ v2
Envelope Generatorsfileg_releaseEG release time (after note release).float00 to 100SFZ v1
Envelope Generatorsfil_releasefileg_release alias.N/AN/ASFZ v2
Envelope Generatorsfileg_release_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_releaseccNfileg_release_onccN alias.N/AN/A
Envelope Generatorsfileg_release_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2releaseVelocity effect on EG release time.float0-100 to 100
Envelope Generatorsfil_vel2releasefileg_vel2release alias.N/AN/ASFZ v2
Envelope Generatorsfileg_startEnvelope start level, in percentage.float00 to 100SFZ v1
Envelope Generatorsfileg_start_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_startccNfileg_start_onccN alias.N/AN/A
Envelope Generatorsfileg_start_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_sustainEG sustain level, in percentage.float00 to 100SFZ v1
Envelope Generatorsfil_sustainfileg_sustain alias.N/AN/ASFZ v2
Envelope Generatorsfileg_sustain_onccNfloat0-100 to 100ARIA
Envelope Generatorsfileg_sustainccNfileg_sustain_onccN alias.N/AN/A
Envelope Generatorsfileg_sustain_curveccNinteger00 to 255ARIA
Envelope Generatorsfileg_vel2sustainVelocity effect on EG sustain level, in percentage.float0-100 to 100
Envelope Generatorsfil_vel2sustainfileg_vel2sustain alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_attackEG attack time.float00 to 100SFZ v1
Envelope Generatorspitch_attackpitcheg_attack alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_attack_onccNN/AN/AARIA
Envelope Generatorspitcheg_attack_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2attackVelocity effect on EG attack time.float0-100 to 100
Envelope Generatorspitch_vel2attackpitcheg_vel2attack alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_decayEG decay time.float00 to 100SFZ v1
Envelope Generatorspitch_decaypitcheg_decay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_decay_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_decay_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2decayVelocity effect on EG decay time.float0-100 to 100
Envelope Generatorspitch_vel2decaypitcheg_vel2decay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_delayEG delay time.float00 to 100SFZ v1
Envelope Generatorspitch_delaypitcheg_delay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_delay_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_delay_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2delayVelocity effect on EG delay time.float0-100 to 100
Envelope Generatorspitch_vel2delaypitcheg_vel2delay alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_depthEnvelope depth.integer0-12000 to 12000SFZ v1
Envelope Generatorspitch_depthpitcheg_depth alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_depth_onccNinteger0-12000 to 12000ARIA
Envelope Generatorspitcheg_depthccNpitcheg_depth_onccN alias.N/AN/A
Envelope Generatorspitcheg_depth_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2depthVelocity effect on EG depth, in cents for pitch or filter cutoff.integer0-12000 to 12000
Envelope Generatorspitch_vel2depthpitcheg_vel2depth alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_holdEG hold time.float00 to 100SFZ v1
Envelope Generatorspitch_holdpitcheg_hold alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_hold_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_hold_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2holdVelocity effect on EG hold time.float0-100 to 100
Envelope Generatorspitch_vel2holdpitcheg_vel2hold alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_releaseEG release time (after note release).float00 to 100SFZ v1
Envelope Generatorspitch_releasepitcheg_release alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_release_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_release_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2releaseVelocity effect on EG release time.float0-100 to 100
Envelope Generatorspitch_vel2releasepitcheg_vel2release alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_startEnvelope start level, in percentage.float00 to 100SFZ v1
Envelope Generatorspitcheg_start_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_start_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_sustainEG sustain level, in percentage.float00 to 100SFZ v1
Envelope Generatorspitch_sustainpitcheg_sustain alias.N/AN/ASFZ v2
Envelope Generatorspitcheg_sustain_onccNfloat0-100 to 100ARIA
Envelope Generatorspitcheg_sustain_curveccNinteger00 to 255ARIA
Envelope Generatorspitcheg_vel2sustainVelocity effect on EG sustain level, in percentage.float0-100 to 100
Envelope Generatorspitch_vel2sustainpitcheg_vel2sustain alias.N/AN/ASFZ v2
Envelope GeneratorsegN_pointsN/AN/ASFZ v2
Envelope GeneratorsegN_timeXfloatN/ASFZ v2
Envelope GeneratorsegN_timeX_onccYfloatN/A
Envelope GeneratorsegN_levelXSets the envelope level at a specific point in envelope number N.float0-1 to 1SFZ v2
Envelope GeneratorsegN_levelX_onccYfloat0-1 to 1
Envelope GeneratorsegN_ampegN/AN/AARIA
Envelope GeneratorsegN_dynamicSpecifies when envelope durations are recalculated.integer00 to 1ARIA
Envelope GeneratorsegN_shapeXfloat0SFZ v2
Envelope GeneratorsegN_curveXInstructs the player to use a curve shape defined under a curve header for the specified envelope segment.N/AN/ASFZ v2
Envelope GeneratorsegN_sustainN/AN/ASFZ v2
Envelope GeneratorsegN_loopN/AN/ASFZ v2
Envelope GeneratorsegN_loop_countN/AN/ASFZ v2
Envelope GeneratorsegN_volumeN/AN/ASFZ v2
Envelope GeneratorsegN_volume_onccXN/AN/A
Envelope GeneratorsegN_amplitudeN/AN/ASFZ v2
Envelope GeneratorsegN_amplitude_onccXN/AN/A
Envelope GeneratorsegN_panN/AN/ASFZ v2
Envelope GeneratorsegN_pan_onccXN/AN/A
Envelope GeneratorsegN_widthN/AN/ASFZ v2
Envelope GeneratorsegN_width_onccXN/AN/A
Envelope GeneratorsegN_pan_curveN/AN/ASFZ v2
Envelope GeneratorsegN_pan_curveccXSpecifies the ‹curve› number which MIDI CC X uses to modulate egN_pan.integer00 to 255
Envelope GeneratorsegN_freq_lfoXAllows egN to shape a change to lfoX's frequencyfloat0SFZ v2
Envelope GeneratorsegN_depth_lfoXAllows egN to scale lfoX's effect on its targetsfloat100SFZ v2
Envelope GeneratorsegN_depthadd_lfoXN/AN/ASFZ v2
Envelope GeneratorsegN_pitchN/AN/ASFZ v2
Envelope GeneratorsegN_pitch_onccXN/AN/A
Envelope GeneratorsegN_cutoffN/AN/ASFZ v2
Envelope GeneratorsegN_cutoff_onccXN/AN/A
Envelope GeneratorsegN_cutoff2N/AN/ASFZ v2
Envelope GeneratorsegN_cutoff2_onccXN/AN/A
Envelope GeneratorsegN_resonanceN/AN/ASFZ v2
Envelope GeneratorsegN_resonance_onccXN/AN/A
Envelope GeneratorsegN_resonance2N/AN/ASFZ v2
Envelope GeneratorsegN_resonance2_onccXN/AN/A
Envelope GeneratorsegN_eqXfreqN/AN/ASFZ v2
Envelope GeneratorsegN_eqXfreq_onccYN/AN/A
Envelope GeneratorsegN_eqXbwN/AN/ASFZ v2
Envelope GeneratorsegN_eqXbw_onccYN/AN/A
Envelope GeneratorsegN_eqXgainN/AN/ASFZ v2
Envelope GeneratorsegN_eqXgain_onccYN/AN/A
Envelope GeneratorsegN_decimN/AN/ASFZ v2
Envelope GeneratorsegN_decim_onccXN/AN/A
Envelope GeneratorsegN_bitredN/AN/ASFZ v2
Envelope GeneratorsegN_bitred_onccXN/AN/A
Envelope GeneratorsegN_rectifyN/AN/ASFZ v2
Envelope GeneratorsegN_rectify_onccXN/AN/A
Envelope GeneratorsegN_ringmodN/AN/ASFZ v2
Envelope GeneratorsegN_ringmod_onccXN/AN/A
Envelope GeneratorsegN_noiselevelN/AN/ASFZ v2
Envelope GeneratorsegN_noiselevel_onccXN/AN/A
Envelope GeneratorsegN_noisestepN/AN/ASFZ v2
Envelope GeneratorsegN_noisestep_onccXN/AN/A
Envelope GeneratorsegN_noisetoneN/AN/ASFZ v2
Envelope GeneratorsegN_noisetone_onccXN/AN/A
Envelope GeneratorsegN_driveshapeN/AN/ASFZ v2
Envelope GeneratorsegN_driveshape_onccXN/AN/A
LFOamplfo_delayThe time before the LFO starts oscillating.float00 to 100SFZ v1
LFOamplfo_depthLFO depth.float0-10 to 10SFZ v1
LFOamplfo_depthccNfloat0-10 to 10
LFOamplfo_depth_onccNamplfo_depthccN alias.N/AN/ASFZ v2
LFOamplfo_depthchanaftLFO depth when channel aftertouch MIDI messages are received.float0-10 to 10
LFOamplfo_depthpolyaftLFO depth when polyphonic aftertouch MIDI messages are received.float0-10 to 10
LFOamplfo_fadeLFO fade-in effect time.float00 to 100SFZ v1
LFOamplfo_freqLFO frequency, in hertz.float00 to 20SFZ v1
LFOamplfo_freqccNfloat0-200 to 200
LFOamplfo_freqchanaftLFO frequency change when channel aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOamplfo_freqpolyaftLFO frequency change when polyphonic aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOfillfo_delayThe time before the LFO starts oscillating.float00 to 100SFZ v1
LFOfillfo_depthLFO depth.float0-1200 to 1200SFZ v1
LFOfillfo_depthccNfloat0-1200 to 1200
LFOfillfo_depth_onccNfillfo_depthccN alias.N/AN/ASFZ v2
LFOfillfo_depthchanaftLFO depth when channel aftertouch MIDI messages are received.float0-1200 to 1200
LFOfillfo_depthpolyaftLFO depth when polyphonic aftertouch MIDI messages are received.float0-1200 to 1200
LFOfillfo_fadeLFO fade-in effect time.float00 to 100SFZ v1
LFOfillfo_freqLFO frequency, in hertz.float00 to 20SFZ v1
LFOfillfo_freqccNfloat0-200 to 200
LFOfillfo_freqchanaftLFO frequency change when channel aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOfillfo_freqpolyaftLFO frequency change when polyphonic aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOpitchlfo_delayThe time before the LFO starts oscillating.float00 to 100SFZ v1
LFOpitchlfo_depthLFO depth.float0-1200 to 1200SFZ v1
LFOpitchlfo_depthccNfloat0-1200 to 1200
LFOpitchlfo_depth_onccNpitchlfo_depthccN alias.N/AN/ASFZ v2
LFOpitchlfo_depthchanaftLFO depth when channel aftertouch MIDI messages are received.float0-1200 to 1200
LFOpitchlfo_depthpolyaftLFO depth when polyphonic aftertouch MIDI messages are received.float0-1200 to 1200
LFOpitchlfo_fadeLFO fade-in effect time.float00 to 100SFZ v1
LFOpitchlfo_freqLFO frequency, in hertz.float00 to 20SFZ v1
LFOpitchlfo_freqccNfloat0-200 to 200
LFOpitchlfo_freqchanaftLFO frequency change when channel aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOpitchlfo_freqpolyaftLFO frequency change when polyphonic aftertouch MIDI messages are received, in Hertz.float0-200 to 200
LFOlfoN_freqThe base frequency of LFO number N, in Hertz.floatN/ASFZ v2
LFOlfoN_freq_onccXN/AN/A
LFOlfoN_freq_smoothccXN/AN/A
LFOlfoN_freq_stepccXN/AN/A
LFOlfoN_delayOnset delay for LFO number N.float0SFZ v2
LFOlfoN_delay_onccXN/AN/A
LFOlfoN_fadeFade-in time for LFO number N.floatN/ASFZ v2
LFOlfoN_fade_onccXfloatN/A
LFOlfoN_phaseInitial phase shift for LFO number N.float00 to 1SFZ v2
LFOlfoN_phase_onccXN/AN/A
LFOlfoN_countNumber of LFO repetitions for LFO N before the LFO stops.integerN/ASFZ v2
LFOlfoN_waveLFO waveform selection.integer1SFZ v2
LFOlfoN_waveXlfoN_wave alias.N/AN/AARIA
LFOlfoN_wave_onccXN/AN/AARIA
LFOlfoN_stepsNumber of steps in LFO step sequencer.integerN/ASFZ v2
LFOlfoN_stepXLevel of the step number X in LFO step sequencer.floatN/A-100 to 100SFZ v2
LFOlfoN_stepX_onccYN/AN/A
LFOlfoN_smoothN/AN/ASFZ v2
LFOlfoN_smooth_onccXN/AN/A
LFOlfoN_volumeN/AN/ASFZ v2
LFOlfoN_volume_onccXN/AN/A
LFOlfoN_volume_smoothccXN/AN/A
LFOlfoN_volume_stepccXN/AN/A
LFOlfoN_amplitudeN/AN/ASFZ v2
LFOlfoN_amplitude_onccXN/AN/A
LFOlfoN_amplitude_smoothccXN/AN/A
LFOlfoN_amplitude_stepccXN/AN/A
LFOlfoN_panN/AN/ASFZ v2
LFOlfoN_pan_onccXN/AN/A
LFOlfoN_pan_smoothccXN/AN/A
LFOlfoN_pan_stepccXN/AN/A
LFOlfoN_widthN/AN/ASFZ v2
LFOlfoN_width_onccXN/AN/A
LFOlfoN_width_smoothccXN/AN/A
LFOlfoN_width_stepccXN/AN/A
LFOlfoN_freq_lfoXN/AN/ASFZ v2
LFOlfoN_freq_lfoX_onccYN/AN/AARIA
LFOlfoN_depth_lfoXN/AN/ASFZ v2
LFOlfoN_depthadd_lfoXN/AN/ASFZ v2
LFOlfoN_pitchN/AN/ASFZ v2
LFOlfoN_pitch_curveccXSpecifies the ‹curve› number which MIDI CC X uses to modulate lfoN_pitch.integer00 to 255
LFOlfoN_pitch_onccXN/AN/A
LFOlfoN_pitch_smoothccXN/AN/A
LFOlfoN_pitch_stepccXN/AN/A
LFOlfoN_cutoffN/AN/ASFZ v2
LFOlfoN_cutoff2lfoN_cutoff alias.N/AN/ASFZ v2
LFOlfoN_cutoff2_onccXN/AN/A
LFOlfoN_cutoff2_smoothccXN/AN/A
LFOlfoN_cutoff2_stepccXN/AN/A
LFOlfoN_cutoff_onccXN/AN/A
LFOlfoN_cutoff_smoothccXN/AN/A
LFOlfoN_cutoff_stepccXN/AN/A
LFOlfoN_resonanceN/AN/ASFZ v2
LFOlfoN_resonance2lfoN_resonance alias.N/AN/ASFZ v2
LFOlfoN_resonance2_onccXN/AN/A
LFOlfoN_resonance2_smoothccXN/AN/A
LFOlfoN_resonance2_stepccXN/AN/A
LFOlfoN_resonance_onccXN/AN/A
LFOlfoN_resonance_smoothccXN/AN/A
LFOlfoN_resonance_stepccXN/AN/A
LFOlfoN_eqXfreqN/AN/ASFZ v2
LFOlfoN_eqXfreq_onccYN/AN/A
LFOlfoN_eqXfreq_smoothccYN/AN/A
LFOlfoN_eqXfreq_stepccYN/AN/A
LFOlfoN_eqXbwN/AN/ASFZ v2
LFOlfoN_eqXbw_onccYN/AN/A
LFOlfoN_eqXbw_smoothccYN/AN/A
LFOlfoN_eqXbw_stepccYN/AN/A
LFOlfoN_eqXgainN/AN/ASFZ v2
LFOlfoN_eqXgain_onccYN/AN/A
LFOlfoN_eqXgain_smoothccYN/AN/A
LFOlfoN_eqXgain_stepccYN/AN/A
LFOlfoN_decimN/AN/ASFZ v2
LFOlfoN_decim_onccXN/AN/A
LFOlfoN_decim_smoothccXN/AN/A
LFOlfoN_decim_stepccXN/AN/A
LFOlfoN_bitredN/AN/ASFZ v2
LFOlfoN_bitred_onccXN/AN/A
LFOlfoN_bitred_smoothccXN/AN/A
LFOlfoN_bitred_stepccXN/AN/A
LFOlfoN_noiselevelN/AN/ASFZ v2
LFOlfoN_noiselevel_onccXN/AN/A
LFOlfoN_noiselevel_smoothccXN/AN/A
LFOlfoN_noiselevel_stepccXN/AN/A
LFOlfoN_noisestepN/AN/ASFZ v2
LFOlfoN_noisestep_onccXN/AN/A
LFOlfoN_noisestep_smoothccXN/AN/A
LFOlfoN_noisestep_stepccXN/AN/A
LFOlfoN_noisetoneN/AN/ASFZ v2
LFOlfoN_noisetone_onccXN/AN/A
LFOlfoN_noisetone_smoothccXN/AN/A
LFOlfoN_noisetone_stepccXN/AN/A
LFOlfoN_driveN/AN/ASFZ v2
LFOlfoN_drive_onccXN/AN/A
LFOlfoN_drive_smoothccXN/AN/A
LFOlfoN_drive_stepccXN/AN/A
LFOlfoN_offsetDC offset - Add to LFO output; not affected by scale.floatN/AARIA
LFOlfoN_offsetXlfoN_offset alias.N/AN/A
LFOlfoN_ratioSets the ratio between the specified sub waveform and the main waveform.floatN/AARIA
LFOlfoN_ratioXlfoN_ratio alias.N/AN/A
LFOlfoN_scaleSets the scaling between the specified sub waveform and the main waveform.floatN/AARIA
LFOlfoN_scaleXlfoN_scale alias.N/AN/A
LFOlfoN_sample_dyn_paramXN/AN/AARIA
LFOlfoN_sample_dyn_paramX_onccYN/AN/A
Curvescurve_indexCurve definition ID.integerN/A0 to 255ARIA
CurvesvNNNDefines a point in a custom curve definition.floatN/A-1 to 1SFZ v2
Effectsapan_depthN/A0 to 100SFZ v2
Effectsapan_depth_onccNN/AN/A
Effectsapan_dryN/A0 to 100SFZ v2
Effectsapan_dry_onccNN/AN/A
Effectsapan_freqfloatN/ASFZ v2
Effectsapan_freq_onccNN/AN/A
Effectsapan_phasefloatN/A0 to 180SFZ v2
Effectsapan_phase_onccNN/AN/A
Effectsapan_waveformLFO wave number.N/AN/ASFZ v2
Effectsapan_wetN/A0 to 100SFZ v2
Effectsapan_wet_onccNN/AN/A
EffectsbitredBit reduction.N/A0 to 100SFZ v2
Effectsbitred_onccNN/AN/A
Effectsbitred_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate bitred.integer00 to 255
Effectsbitred_smoothccNN/AN/A
Effectsbitred_stepccNN/AN/A
EffectsbusThe target bus for the effect.stringmainSFZ v2
Effectsbypass_onccNSets up a bypass controller for the effect.floatN/ASFZ v2
Effectscomp_attackfloatN/ASFZ v2
Effectscomp_gainN/AN/ASFZ v2
Effectscomp_ratioN/A0 to 100SFZ v2
Effectscomp_releasefloatN/ASFZ v2
Effectscomp_stlinkstringN/ASFZ v2
Effectscomp_thresholdfloatN/ASFZ v2
EffectsdecimDecimator.N/A0 to 100SFZ v2
Effectsdecim_onccNN/AN/A
Effectsdecim_curveccNSpecifies the ‹curve› number which MIDI CC N uses to modulate decim.integer00 to 255
Effectsdecim_smoothccNN/AN/A
Effectsdecim_stepccNN/AN/A
Effectsdelay_cutofffloatN/ASFZ v2
Effectsdelay_cutoff_onccNN/AN/A
Effectsdelay_damphiN/A0 to 100SFZ v2
Effectsdelay_damphi_onccNN/AN/A
Effectsdelay_damploN/A0 to 100SFZ v2
Effectsdelay_damplo_onccNN/AN/A
Effectsdelay_dryN/A0 to 100SFZ v2
Effectsdelay_dry_onccNN/AN/A
Effectsdelay_feedbackN/A0 to 100SFZ v2
Effectsdelay_feedback_onccNN/AN/A
Effectsdelay_filterName of filter type.stringN/ASFZ v2
Effectsdelay_inputN/A0 to 100SFZ v2
Effectsdelay_input_onccNN/AN/A
Effectsdelay_levelcN/A0 to 100SFZ v2
Effectsdelay_levellN/A0 to 100SFZ v2
Effectsdelay_levelrN/A0 to 100SFZ v2
Effectsdelay_lfofreqfloatN/ASFZ v2
Effectsdelay_lfofreq_onccNN/AN/A
Effectsdelay_moddepthN/A0 to 100SFZ v2
Effectsdelay_moddepth_onccNN/AN/A
Effectsdelay_modestringN/ASFZ v2
Effectsdelay_pancN/A0 to 100SFZ v2
Effectsdelay_panc_onccNN/AN/A
Effectsdelay_panlN/A0 to 100SFZ v2
Effectsdelay_panl_onccNN/AN/A
Effectsdelay_panrN/A0 to 100SFZ v2
Effectsdelay_panr_onccNN/AN/A
Effectsdelay_resonanceN/AN/ASFZ v2
Effectsdelay_resonance_onccNN/AN/A
Effectsdelay_spreadN/A0 to 100SFZ v2
Effectsdelay_spread_onccNN/AN/A
Effectsdelay_syncc_onccNN/AN/ASFZ v2
Effectsdelay_syncl_onccNN/AN/ASFZ v2
Effectsdelay_syncr_onccNN/AN/ASFZ v2
Effectsdelay_time_tapN/AN/ASFZ v2
Effectsdelay_timecN/AN/ASFZ v2
Effectsdelay_timec_onccNN/AN/A
Effectsdelay_timelN/AN/ASFZ v2
Effectsdelay_timel_onccNN/AN/A
Effectsdelay_timerN/AN/ASFZ v2
Effectsdelay_timer_onccNN/AN/A
Effectsdelay_wetN/A0 to 100SFZ v2
Effectsdelay_wet_onccNN/AN/A
EffectsdirecttomainGain of the main bus into the output.float1000 to 100SFZ v2
Effectsdisto_depthN/A0 to 100SFZ v2
Effectsdisto_depth_onccNN/AN/A
Effectsdisto_dryN/A0 to 100SFZ v2
Effectsdisto_dry_onccNN/AN/A
Effectsdisto_stagesN/AN/ASFZ v2
Effectsdisto_toneN/A0 to 100SFZ v2
Effectsdisto_tone_onccNN/AN/A
Effectsdisto_wetN/A0 to 100SFZ v2
Effectsdisto_wet_onccNN/AN/A
Effectsdsp_orderSignal flow type in Rapture's DSP block.integerN/A0 to 14SFZ v2
Effectseffect1Level of effect1 send, in percentage (reverb in Cakewalk sfz).float00 to 100SFZ v1
Effectseffect2Level of effect2 send, in percentage (chorus in Cakewalk sfz).float00 to 100SFZ v1
Effectseffect3Gain of the region's send into the 3rd effect bus.float00 to 100SFZ v2
Effectseffect4Gain of the region's send into the 4th effect bus.float00 to 100SFZ v2
Effectseq_bwN/AN/ASFZ v2
Effectseq_bw_onccNN/AN/A
Effectseq_freqN/AN/ASFZ v2
Effectseq_freq_onccNN/AN/A
Effectseq_gainN/AN/ASFZ v2
Effectseq_gain_onccNN/AN/A
Effectseq_typeN/AN/ASFZ v2
Effectsfilter_cutoffN/AN/ASFZ v2
Effectsfilter_cutoff_onccNN/AN/A
Effectsfilter_resonanceN/AN/ASFZ v2
Effectsfilter_resonance_onccNN/AN/A
Effectsfilter_typeName of filter type.stringN/ASFZ v2
EffectsfxNtomainGain of the Nth effect bus into the output.float00 to 100SFZ v2
EffectsfxNtomixGain of the Nth effect bus into the Mix node.float00 to 100SFZ v2
Effectsgate_onccNGate manual control.N/AN/ASFZ v2
Effectsgate_attackN/AN/ASFZ v2
Effectsgate_releaseN/AN/ASFZ v2
Effectsgate_stlinkstringN/ASFZ v2
Effectsgate_thresholdN/AN/ASFZ v2
EffectsinternalCakewalk internal features switch.stringoffSFZ v2
Effectsparam_offsetAdds a number to the parameter numbers of built-in or vendor-specific effects.integerN/AARIA
Effectsphaser_depthN/A0 to 100SFZ v2
Effectsphaser_depth_onccNN/AN/A
Effectsphaser_feedbackN/A0 to 100SFZ v2
Effectsphaser_feedback_onccNN/AN/A
Effectsphaser_freqfloatN/ASFZ v2
Effectsphaser_freq_onccNN/AN/A
Effectsphaser_phase_onccNN/A0 to 100SFZ v2
Effectsphaser_stagesN/AN/ASFZ v2
Effectsphaser_waveformLFO wave number.N/AN/ASFZ v2
Effectsphaser_wetN/A0 to 100SFZ v2
Effectsphaser_wet_onccNN/AN/A
Effectsreverb_dampN/A0 to 100SFZ v2
Effectsreverb_damp_onccNN/AN/A
Effectsreverb_dryN/A0 to 100SFZ v2
Effectsreverb_dry_onccNN/AN/A
Effectsreverb_inputN/A0 to 100SFZ v2
Effectsreverb_input_onccNN/AN/A
Effectsreverb_predelayfloatN/ASFZ v2
Effectsreverb_predelay_onccNN/AN/A
Effectsreverb_sizeN/A0 to 100SFZ v2
Effectsreverb_size_onccNN/AN/A
Effectsreverb_toneN/A0 to 100SFZ v2
Effectsreverb_tone_onccNN/AN/A
Effectsreverb_typestringN/ASFZ v2
Effectsreverb_wetN/A0 to 100SFZ v2
Effectsreverb_wet_onccNN/AN/A
Effectsstatic_cyclic_levelN/A0 to 100SFZ v2
Effectsstatic_cyclic_timefloatN/ASFZ v2
Effectsstatic_filterName of filter type.stringN/ASFZ v2
Effectsstatic_levelN/A0 to 100SFZ v2
Effectsstatic_level_onccNN/AN/A
Effectsstatic_random_levelN/A0 to 100SFZ v2
Effectsstatic_random_maxtimefloatN/ASFZ v2
Effectsstatic_random_mintimefloatN/ASFZ v2
Effectsstatic_stereoN/AN/ASFZ v2
Effectsstatic_toneN/A0 to 100SFZ v2
Effectsstrings_numberNumber of synthesized resonant strings.N/AN/ASFZ v2
Effectsstrings_wet_onccNN/A0 to 100SFZ v2
Effectstdfir_dryN/A0 to 100SFZ v2
Effectstdfir_dry_onccNN/AN/A
Effectstdfir_gainN/A0 to 100SFZ v2
Effectstdfir_impulseN/AN/ASFZ v2
Effectstdfir_wetN/A0 to 100SFZ v2
Effectstdfir_wet_onccNN/AN/A
EffectstypeEffect type or vendor-specific effect name. Varies across SFZ players.stringN/ASFZ v2
Effectsvendor_specificDefines vendor-specific effects, for example Garritan-specific stage depth effect in ARIA.stringN/AARIA
Loadingload_modeintegerN/A0 to 1SFZ v2
Loadingload_startintegerN/ASFZ v2
Loadingload_endintegerN/ASFZ v2
Loadingsample_qualitySample playback quality settings.integerN/A1 to 10SFZ v2
LoadingimageSets the background image of the instrument.stringN/ASFZ v2
Wavetable OscillatoroscillatorstringN/ASFZ v2
Wavetable Oscillatoroscillator_detuneN/AN/ASFZ v2
Wavetable Oscillatoroscillator_detune_onccNN/AN/A
Wavetable Oscillatoroscillator_modeThe modulation type.integer00 to 2SFZ v2
Wavetable Oscillatoroscillator_mod_depthN/AN/ASFZ v2
Wavetable Oscillatoroscillator_mod_depth_onccNN/AN/A
Wavetable Oscillatoroscillator_mod_smoothccNN/AN/A
Wavetable Oscillatoroscillator_multiConfigure a region to use more than one oscillator.integer11 to 9SFZ v2
Wavetable Oscillatoroscillator_phaseOscillator phase. Negative values for random phase.floatN/A-1 to 360SFZ v2
Wavetable Oscillatoroscillator_qualityintegerN/A0 to 3SFZ v2
Wavetable Oscillatoroscillator_table_sizeN/AN/ASFZ v2
+
+
+
+ +
+

+ +
+ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/internal/index.html b/opcodes/internal/index.html new file mode 100644 index 000000000..9e170156e --- /dev/null +++ b/opcodes/internal/index.html @@ -0,0 +1,714 @@ + + + + + + + + + internal - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

internal

+

Cakewalk internal features switch.

+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
internalSFZ v2stringoffon, off
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/key/index.html b/opcodes/key/index.html new file mode 100644 index 000000000..32ab95c9f --- /dev/null +++ b/opcodes/key/index.html @@ -0,0 +1,744 @@ + + + + + + + + + key - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

key

+

Equivalent to using lokey, hikey and pitch_keycenter and setting them all to the same note value.

Because of this, it is a very useful and convenient opcode for instruments which +do not need to spread a sample across multiple notes. +That means most chromatically sampled instruments or drum kits. +key values can be specified in MIDI note numbers (0-127) or note names +(IPN Standard). Numbers generally are better to use for getting the SFZ to +behave the same in all DAWs.

+

Example

+

These two conventions will yield the same key mapping:

+
key=72
+// or
+key=c5
+
+

Both are also equivalent to:

+
lokey=72 hikey=72 pitch_keycenter=72
+
+

Key can also be combined with the others, which will override the value set by key +although key should be specified first. In ARIA, the value set by pitch_keycenter +will always be used, whether key or pitch_keycenter is set first in the SFZ file. +However, in some other players, setting pitch_keycenter to a different value than key +is only effective if key is set first and pitch_keycenter second. Therefore, for +compatibility, it is best to set key first, and pitch_keycenter later.

+
key=72 lokey=70
+
+

Will be equivalent to

+
lokey=70 hikey=72 pitch_keycenter=72
+
+

However, this would just be the same as setting key=72, as key comes later and +the lokey value it would set will override the previous lokey.

+
lokey=70 key=72
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
keySFZ v1integerN/A0 to 127N/A
+

Category: Region Logic, Key Mapping

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/label_ccN/index.html b/opcodes/label_ccN/index.html new file mode 100644 index 000000000..00e5a9fa6 --- /dev/null +++ b/opcodes/label_ccN/index.html @@ -0,0 +1,728 @@ + + + + + + + + + label_ccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

label_ccN

+

Creates a label for the MIDI CC.

Used under the ‹control› header. +Some DAWs will display those labels as parameter names, and Sforzando will also +use them in the Control tab if no GUI is defined.

+

Examples

+
label_cc30=Bass vol
+label_cc31=Bass pan
+label_cc32=Tune
+label_cc33=Mute
+
+

label_cc example image

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
label_ccNARIAstringN/AN/A
+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/label_keyN/index.html b/opcodes/label_keyN/index.html new file mode 100644 index 000000000..68f1e803e --- /dev/null +++ b/opcodes/label_keyN/index.html @@ -0,0 +1,722 @@ + + + + + + + + + label_keyN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

label_keyN

+

Creates a label for a key.

Used under the ‹control› header.

+

Example

+
label_key36=Bass Drum
+label_key38=Snare Drum
+label_key54=Tambourine
+label_key56=Cowbell
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
label_keyNsfizzstringN/AN/A
+

See also: label_ccN

+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/label_outputN/index.html b/opcodes/label_outputN/index.html new file mode 100644 index 000000000..17bb116cc --- /dev/null +++ b/opcodes/label_outputN/index.html @@ -0,0 +1,729 @@ + + + + + + + + + label_outputN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

label_outputN

+

Creates a label for the output N.

Used under the ‹control› header.

+

Example

+
<control>
+// Keep output labels short
+label_output0=Snare
+label_output1=Kick Drum
+
+<master>
+output=0
+// ...
+
+<master>
+output=1
+// ...
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
label_outputNCalfboxstringN/AN/A
+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_amplitude/index.html b/opcodes/lfoN_amplitude/index.html new file mode 100644 index 000000000..0d1bf250c --- /dev/null +++ b/opcodes/lfoN_amplitude/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_amplitude - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_amplitude

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_amplitudeSFZ v2N/AN/AN/A
Modulations
lfoN_amplitude_onccXN/AN/AN/A
lfoN_amplitude_smoothccXN/AN/AN/A
lfoN_amplitude_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_amplitude_onccX/index.html b/opcodes/lfoN_amplitude_onccX/index.html new file mode 100644 index 000000000..61d403025 --- /dev/null +++ b/opcodes/lfoN_amplitude_onccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_amplitude_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_amplitude

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_amplitudeSFZ v2N/AN/AN/A
Modulations
lfoN_amplitude_onccXN/AN/AN/A
lfoN_amplitude_smoothccXN/AN/AN/A
lfoN_amplitude_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_amplitude_smoothccX/index.html b/opcodes/lfoN_amplitude_smoothccX/index.html new file mode 100644 index 000000000..6b73f6a0d --- /dev/null +++ b/opcodes/lfoN_amplitude_smoothccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_amplitude_smoothccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_amplitude

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_amplitudeSFZ v2N/AN/AN/A
Modulations
lfoN_amplitude_onccXN/AN/AN/A
lfoN_amplitude_smoothccXN/AN/AN/A
lfoN_amplitude_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_amplitude_stepccX/index.html b/opcodes/lfoN_amplitude_stepccX/index.html new file mode 100644 index 000000000..1bb771f54 --- /dev/null +++ b/opcodes/lfoN_amplitude_stepccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_amplitude_stepccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_amplitude

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_amplitudeSFZ v2N/AN/AN/A
Modulations
lfoN_amplitude_onccXN/AN/AN/A
lfoN_amplitude_smoothccXN/AN/AN/A
lfoN_amplitude_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_bitred/index.html b/opcodes/lfoN_bitred/index.html new file mode 100644 index 000000000..5f9b08a50 --- /dev/null +++ b/opcodes/lfoN_bitred/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_bitred - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_bitred

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_bitredSFZ v2N/AN/AN/A
Modulations
lfoN_bitred_onccXN/AN/AN/A
lfoN_bitred_smoothccXN/AN/AN/A
lfoN_bitred_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_bitred_onccX/index.html b/opcodes/lfoN_bitred_onccX/index.html new file mode 100644 index 000000000..6203ca646 --- /dev/null +++ b/opcodes/lfoN_bitred_onccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_bitred_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_bitred

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_bitredSFZ v2N/AN/AN/A
Modulations
lfoN_bitred_onccXN/AN/AN/A
lfoN_bitred_smoothccXN/AN/AN/A
lfoN_bitred_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_bitred_smoothccX/index.html b/opcodes/lfoN_bitred_smoothccX/index.html new file mode 100644 index 000000000..42ae4cf9e --- /dev/null +++ b/opcodes/lfoN_bitred_smoothccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_bitred_smoothccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_bitred

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_bitredSFZ v2N/AN/AN/A
Modulations
lfoN_bitred_onccXN/AN/AN/A
lfoN_bitred_smoothccXN/AN/AN/A
lfoN_bitred_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_bitred_stepccX/index.html b/opcodes/lfoN_bitred_stepccX/index.html new file mode 100644 index 000000000..da88ca8f0 --- /dev/null +++ b/opcodes/lfoN_bitred_stepccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_bitred_stepccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_bitred

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_bitredSFZ v2N/AN/AN/A
Modulations
lfoN_bitred_onccXN/AN/AN/A
lfoN_bitred_smoothccXN/AN/AN/A
lfoN_bitred_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_count/index.html b/opcodes/lfoN_count/index.html new file mode 100644 index 000000000..90c90aed8 --- /dev/null +++ b/opcodes/lfoN_count/index.html @@ -0,0 +1,720 @@ + + + + + + + + + lfoN_count - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_count

+

Number of LFO repetitions for LFO N before the LFO stops.

If this is not set, +the LFO will run and continue to repeat as long as the region plays.

+

Examples

+
lfo01_count=2
+lfo02_count=5
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_countSFZ v2integerN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_cutoff/index.html b/opcodes/lfoN_cutoff/index.html new file mode 100644 index 000000000..05dfe9df2 --- /dev/null +++ b/opcodes/lfoN_cutoff/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_cutoff - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_cutoff

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_cutoffSFZ v2N/AN/AN/A
Modulations
lfoN_cutoff_onccXN/AN/AN/A
lfoN_cutoff_smoothccXN/AN/AN/A
lfoN_cutoff_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_cutoff2/index.html b/opcodes/lfoN_cutoff2/index.html new file mode 100644 index 000000000..cc4ef0adf --- /dev/null +++ b/opcodes/lfoN_cutoff2/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_cutoff2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_cutoff

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_cutoffSFZ v2N/AN/AN/A
Modulations
lfoN_cutoff_onccXN/AN/AN/A
lfoN_cutoff_smoothccXN/AN/AN/A
lfoN_cutoff_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_cutoff2_onccX/index.html b/opcodes/lfoN_cutoff2_onccX/index.html new file mode 100644 index 000000000..e969298c8 --- /dev/null +++ b/opcodes/lfoN_cutoff2_onccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_cutoff2_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_cutoff

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_cutoffSFZ v2N/AN/AN/A
Modulations
lfoN_cutoff_onccXN/AN/AN/A
lfoN_cutoff_smoothccXN/AN/AN/A
lfoN_cutoff_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_cutoff2_smoothccX/index.html b/opcodes/lfoN_cutoff2_smoothccX/index.html new file mode 100644 index 000000000..22eb47c66 --- /dev/null +++ b/opcodes/lfoN_cutoff2_smoothccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_cutoff2_smoothccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_cutoff

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_cutoffSFZ v2N/AN/AN/A
Modulations
lfoN_cutoff_onccXN/AN/AN/A
lfoN_cutoff_smoothccXN/AN/AN/A
lfoN_cutoff_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_cutoff2_stepccX/index.html b/opcodes/lfoN_cutoff2_stepccX/index.html new file mode 100644 index 000000000..8f4783fc9 --- /dev/null +++ b/opcodes/lfoN_cutoff2_stepccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_cutoff2_stepccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_cutoff

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_cutoffSFZ v2N/AN/AN/A
Modulations
lfoN_cutoff_onccXN/AN/AN/A
lfoN_cutoff_smoothccXN/AN/AN/A
lfoN_cutoff_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_cutoff_onccX/index.html b/opcodes/lfoN_cutoff_onccX/index.html new file mode 100644 index 000000000..fd7f02cd9 --- /dev/null +++ b/opcodes/lfoN_cutoff_onccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_cutoff_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_cutoff

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_cutoffSFZ v2N/AN/AN/A
Modulations
lfoN_cutoff_onccXN/AN/AN/A
lfoN_cutoff_smoothccXN/AN/AN/A
lfoN_cutoff_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_cutoff_smoothccX/index.html b/opcodes/lfoN_cutoff_smoothccX/index.html new file mode 100644 index 000000000..c44f08033 --- /dev/null +++ b/opcodes/lfoN_cutoff_smoothccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_cutoff_smoothccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_cutoff

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_cutoffSFZ v2N/AN/AN/A
Modulations
lfoN_cutoff_onccXN/AN/AN/A
lfoN_cutoff_smoothccXN/AN/AN/A
lfoN_cutoff_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_cutoff_stepccX/index.html b/opcodes/lfoN_cutoff_stepccX/index.html new file mode 100644 index 000000000..0e7dbde4d --- /dev/null +++ b/opcodes/lfoN_cutoff_stepccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_cutoff_stepccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_cutoff

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_cutoffSFZ v2N/AN/AN/A
Modulations
lfoN_cutoff_onccXN/AN/AN/A
lfoN_cutoff_smoothccXN/AN/AN/A
lfoN_cutoff_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_decim/index.html b/opcodes/lfoN_decim/index.html new file mode 100644 index 000000000..14c221224 --- /dev/null +++ b/opcodes/lfoN_decim/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_decim - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_decim

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_decimSFZ v2N/AN/AN/A
Modulations
lfoN_decim_onccXN/AN/AN/A
lfoN_decim_smoothccXN/AN/AN/A
lfoN_decim_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_decim_onccX/index.html b/opcodes/lfoN_decim_onccX/index.html new file mode 100644 index 000000000..ebf3c72d9 --- /dev/null +++ b/opcodes/lfoN_decim_onccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_decim_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_decim

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_decimSFZ v2N/AN/AN/A
Modulations
lfoN_decim_onccXN/AN/AN/A
lfoN_decim_smoothccXN/AN/AN/A
lfoN_decim_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_decim_smoothccX/index.html b/opcodes/lfoN_decim_smoothccX/index.html new file mode 100644 index 000000000..87ad6a1ce --- /dev/null +++ b/opcodes/lfoN_decim_smoothccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_decim_smoothccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_decim

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_decimSFZ v2N/AN/AN/A
Modulations
lfoN_decim_onccXN/AN/AN/A
lfoN_decim_smoothccXN/AN/AN/A
lfoN_decim_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_decim_stepccX/index.html b/opcodes/lfoN_decim_stepccX/index.html new file mode 100644 index 000000000..921a2a844 --- /dev/null +++ b/opcodes/lfoN_decim_stepccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_decim_stepccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_decim

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_decimSFZ v2N/AN/AN/A
Modulations
lfoN_decim_onccXN/AN/AN/A
lfoN_decim_smoothccXN/AN/AN/A
lfoN_decim_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_delay/index.html b/opcodes/lfoN_delay/index.html new file mode 100644 index 000000000..207db21ca --- /dev/null +++ b/opcodes/lfoN_delay/index.html @@ -0,0 +1,742 @@ + + + + + + + + + lfoN_delay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_delay

+

Onset delay for LFO number N.

Often useful for delaying vibrato onset in strings, vocals, guitar, saxophone etc. +Can be combined with lfoN_fade in some cases.

+

Examples

+
lfo01_delay=0.1
+lfo02_delay=1.2
+lfo02_delay_oncc20=2.5
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_delaySFZ v2float0seconds
Modulations
lfoN_delay_onccXN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: egN_freq_lfoX
  • +
  • LFO:
  • +
+

See also: lfoN_fade, lfoN_freq, lfoN_offset, lfoN_ratio, lfoN_scale, lfoN_wave

+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_delay_onccX/index.html b/opcodes/lfoN_delay_onccX/index.html new file mode 100644 index 000000000..cce6c3836 --- /dev/null +++ b/opcodes/lfoN_delay_onccX/index.html @@ -0,0 +1,742 @@ + + + + + + + + + lfoN_delay_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_delay

+

Onset delay for LFO number N.

Often useful for delaying vibrato onset in strings, vocals, guitar, saxophone etc. +Can be combined with lfoN_fade in some cases.

+

Examples

+
lfo01_delay=0.1
+lfo02_delay=1.2
+lfo02_delay_oncc20=2.5
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_delaySFZ v2float0seconds
Modulations
lfoN_delay_onccXN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: egN_freq_lfoX
  • +
  • LFO:
  • +
+

See also: lfoN_fade, lfoN_freq, lfoN_offset, lfoN_ratio, lfoN_scale, lfoN_wave

+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_depth_lfoX/index.html b/opcodes/lfoN_depth_lfoX/index.html new file mode 100644 index 000000000..2b711bb4f --- /dev/null +++ b/opcodes/lfoN_depth_lfoX/index.html @@ -0,0 +1,715 @@ + + + + + + + + + lfoN_depth_lfoX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_depth_lfoX

+

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_depth_lfoXSFZ v2N/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_depthadd_lfoX/index.html b/opcodes/lfoN_depthadd_lfoX/index.html new file mode 100644 index 000000000..eb82fe98f --- /dev/null +++ b/opcodes/lfoN_depthadd_lfoX/index.html @@ -0,0 +1,715 @@ + + + + + + + + + lfoN_depthadd_lfoX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

egN_depthadd_lfoX

+

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
egN_depthadd_lfoXSFZ v2N/AN/AN/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_drive/index.html b/opcodes/lfoN_drive/index.html new file mode 100644 index 000000000..5e321e334 --- /dev/null +++ b/opcodes/lfoN_drive/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_drive - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_drive

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_driveSFZ v2N/AN/AN/A
Modulations
lfoN_drive_onccXN/AN/AN/A
lfoN_drive_smoothccXN/AN/AN/A
lfoN_drive_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_drive_onccX/index.html b/opcodes/lfoN_drive_onccX/index.html new file mode 100644 index 000000000..3325523e8 --- /dev/null +++ b/opcodes/lfoN_drive_onccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_drive_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_drive

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_driveSFZ v2N/AN/AN/A
Modulations
lfoN_drive_onccXN/AN/AN/A
lfoN_drive_smoothccXN/AN/AN/A
lfoN_drive_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_drive_smoothccX/index.html b/opcodes/lfoN_drive_smoothccX/index.html new file mode 100644 index 000000000..26ab95c91 --- /dev/null +++ b/opcodes/lfoN_drive_smoothccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_drive_smoothccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_drive

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_driveSFZ v2N/AN/AN/A
Modulations
lfoN_drive_onccXN/AN/AN/A
lfoN_drive_smoothccXN/AN/AN/A
lfoN_drive_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_drive_stepccX/index.html b/opcodes/lfoN_drive_stepccX/index.html new file mode 100644 index 000000000..765046ada --- /dev/null +++ b/opcodes/lfoN_drive_stepccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_drive_stepccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_drive

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_driveSFZ v2N/AN/AN/A
Modulations
lfoN_drive_onccXN/AN/AN/A
lfoN_drive_smoothccXN/AN/AN/A
lfoN_drive_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_eqXbw/index.html b/opcodes/lfoN_eqXbw/index.html new file mode 100644 index 000000000..d8e9cef62 --- /dev/null +++ b/opcodes/lfoN_eqXbw/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_eqXbw - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_eqXbw

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_eqXbwSFZ v2N/AN/AN/A
Modulations
lfoN_eqXbw_onccYN/AN/AN/A
lfoN_eqXbw_smoothccYN/AN/AN/A
lfoN_eqXbw_stepccYN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_eqXbw_onccY/index.html b/opcodes/lfoN_eqXbw_onccY/index.html new file mode 100644 index 000000000..c366dca05 --- /dev/null +++ b/opcodes/lfoN_eqXbw_onccY/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_eqXbw_onccY - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_eqXbw

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_eqXbwSFZ v2N/AN/AN/A
Modulations
lfoN_eqXbw_onccYN/AN/AN/A
lfoN_eqXbw_smoothccYN/AN/AN/A
lfoN_eqXbw_stepccYN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_eqXbw_smoothccY/index.html b/opcodes/lfoN_eqXbw_smoothccY/index.html new file mode 100644 index 000000000..b7e21b19c --- /dev/null +++ b/opcodes/lfoN_eqXbw_smoothccY/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_eqXbw_smoothccY - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_eqXbw

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_eqXbwSFZ v2N/AN/AN/A
Modulations
lfoN_eqXbw_onccYN/AN/AN/A
lfoN_eqXbw_smoothccYN/AN/AN/A
lfoN_eqXbw_stepccYN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_eqXbw_stepccY/index.html b/opcodes/lfoN_eqXbw_stepccY/index.html new file mode 100644 index 000000000..261803c22 --- /dev/null +++ b/opcodes/lfoN_eqXbw_stepccY/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_eqXbw_stepccY - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_eqXbw

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_eqXbwSFZ v2N/AN/AN/A
Modulations
lfoN_eqXbw_onccYN/AN/AN/A
lfoN_eqXbw_smoothccYN/AN/AN/A
lfoN_eqXbw_stepccYN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_eqXfreq/index.html b/opcodes/lfoN_eqXfreq/index.html new file mode 100644 index 000000000..aa028747c --- /dev/null +++ b/opcodes/lfoN_eqXfreq/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_eqXfreq - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_eqXfreq

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_eqXfreqSFZ v2N/AN/AN/A
Modulations
lfoN_eqXfreq_onccYN/AN/AN/A
lfoN_eqXfreq_smoothccYN/AN/AN/A
lfoN_eqXfreq_stepccYN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_eqXfreq_onccY/index.html b/opcodes/lfoN_eqXfreq_onccY/index.html new file mode 100644 index 000000000..e590873fe --- /dev/null +++ b/opcodes/lfoN_eqXfreq_onccY/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_eqXfreq_onccY - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_eqXfreq

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_eqXfreqSFZ v2N/AN/AN/A
Modulations
lfoN_eqXfreq_onccYN/AN/AN/A
lfoN_eqXfreq_smoothccYN/AN/AN/A
lfoN_eqXfreq_stepccYN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_eqXfreq_smoothccY/index.html b/opcodes/lfoN_eqXfreq_smoothccY/index.html new file mode 100644 index 000000000..fe7d420ee --- /dev/null +++ b/opcodes/lfoN_eqXfreq_smoothccY/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_eqXfreq_smoothccY - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_eqXfreq

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_eqXfreqSFZ v2N/AN/AN/A
Modulations
lfoN_eqXfreq_onccYN/AN/AN/A
lfoN_eqXfreq_smoothccYN/AN/AN/A
lfoN_eqXfreq_stepccYN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_eqXfreq_stepccY/index.html b/opcodes/lfoN_eqXfreq_stepccY/index.html new file mode 100644 index 000000000..4702d9468 --- /dev/null +++ b/opcodes/lfoN_eqXfreq_stepccY/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_eqXfreq_stepccY - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_eqXfreq

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_eqXfreqSFZ v2N/AN/AN/A
Modulations
lfoN_eqXfreq_onccYN/AN/AN/A
lfoN_eqXfreq_smoothccYN/AN/AN/A
lfoN_eqXfreq_stepccYN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_eqXgain/index.html b/opcodes/lfoN_eqXgain/index.html new file mode 100644 index 000000000..11100205c --- /dev/null +++ b/opcodes/lfoN_eqXgain/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_eqXgain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_eqXgain

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_eqXgainSFZ v2N/AN/AN/A
Modulations
lfoN_eqXgain_onccYN/AN/AN/A
lfoN_eqXgain_smoothccYN/AN/AN/A
lfoN_eqXgain_stepccYN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_eqXgain_onccY/index.html b/opcodes/lfoN_eqXgain_onccY/index.html new file mode 100644 index 000000000..f38575db6 --- /dev/null +++ b/opcodes/lfoN_eqXgain_onccY/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_eqXgain_onccY - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_eqXgain

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_eqXgainSFZ v2N/AN/AN/A
Modulations
lfoN_eqXgain_onccYN/AN/AN/A
lfoN_eqXgain_smoothccYN/AN/AN/A
lfoN_eqXgain_stepccYN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_eqXgain_smoothccY/index.html b/opcodes/lfoN_eqXgain_smoothccY/index.html new file mode 100644 index 000000000..6d029a037 --- /dev/null +++ b/opcodes/lfoN_eqXgain_smoothccY/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_eqXgain_smoothccY - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_eqXgain

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_eqXgainSFZ v2N/AN/AN/A
Modulations
lfoN_eqXgain_onccYN/AN/AN/A
lfoN_eqXgain_smoothccYN/AN/AN/A
lfoN_eqXgain_stepccYN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_eqXgain_stepccY/index.html b/opcodes/lfoN_eqXgain_stepccY/index.html new file mode 100644 index 000000000..4fb010826 --- /dev/null +++ b/opcodes/lfoN_eqXgain_stepccY/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_eqXgain_stepccY - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_eqXgain

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_eqXgainSFZ v2N/AN/AN/A
Modulations
lfoN_eqXgain_onccYN/AN/AN/A
lfoN_eqXgain_smoothccYN/AN/AN/A
lfoN_eqXgain_stepccYN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_fade/index.html b/opcodes/lfoN_fade/index.html new file mode 100644 index 000000000..abb0912e0 --- /dev/null +++ b/opcodes/lfoN_fade/index.html @@ -0,0 +1,737 @@ + + + + + + + + + lfoN_fade - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_fade

+

Fade-in time for LFO number N.

Can be quite useful for making vibrato sound more realistic on instruments such +as bowed strings, usually combined with lfoN_delay.

+

Examples

+
lfo01_fade=0.1
+lfo02_fade=1.2
+lfo02_fade_oncc21=2.5
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_fadeSFZ v2floatN/AN/A
Modulations
lfoN_fade_onccXfloatN/AN/A
+

See also: lfoN_delay, lfoN_freq, lfoN_offset, lfoN_ratio, lfoN_scale, lfoN_wave

+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_fade_onccX/index.html b/opcodes/lfoN_fade_onccX/index.html new file mode 100644 index 000000000..144378e95 --- /dev/null +++ b/opcodes/lfoN_fade_onccX/index.html @@ -0,0 +1,737 @@ + + + + + + + + + lfoN_fade_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_fade

+

Fade-in time for LFO number N.

Can be quite useful for making vibrato sound more realistic on instruments such +as bowed strings, usually combined with lfoN_delay.

+

Examples

+
lfo01_fade=0.1
+lfo02_fade=1.2
+lfo02_fade_oncc21=2.5
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_fadeSFZ v2floatN/AN/A
Modulations
lfoN_fade_onccXfloatN/AN/A
+

See also: lfoN_delay, lfoN_freq, lfoN_offset, lfoN_ratio, lfoN_scale, lfoN_wave

+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_freq/index.html b/opcodes/lfoN_freq/index.html new file mode 100644 index 000000000..290a4fef6 --- /dev/null +++ b/opcodes/lfoN_freq/index.html @@ -0,0 +1,759 @@ + + + + + + + + + lfoN_freq - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_freq

+

The base frequency of LFO number N, in Hertz.

Can be modulated by MIDI CC, and the modulation can be smoothed +so that rapid controller changes are applied with some "inertia".

+

Examples

+
lfo01_freq=2
+lfo01_freq_oncc117=8.2
+lfo01_freq_smoothcc117=50
+lfo02_freq=7
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_freqSFZ v2floatN/AHz
Modulations
lfoN_freq_onccXN/AN/AN/A
lfoN_freq_smoothccXN/AN/AN/A
lfoN_freq_stepccXN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: egN_freq_lfoX
  • +
  • LFO:
  • +
+

See also: lfoN_delay, lfoN_fade, lfoN_offset, lfoN_ratio, lfoN_scale, lfoN_wave

+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_freq_lfoX/index.html b/opcodes/lfoN_freq_lfoX/index.html new file mode 100644 index 000000000..c960c14aa --- /dev/null +++ b/opcodes/lfoN_freq_lfoX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + lfoN_freq_lfoX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_freq_lfoX

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_freq_lfoXSFZ v2N/AN/AN/A
Modulations
lfoN_freq_lfoX_onccYARIAN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_freq_lfoX_onccY/index.html b/opcodes/lfoN_freq_lfoX_onccY/index.html new file mode 100644 index 000000000..11afe197b --- /dev/null +++ b/opcodes/lfoN_freq_lfoX_onccY/index.html @@ -0,0 +1,730 @@ + + + + + + + + + lfoN_freq_lfoX_onccY - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_freq_lfoX

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_freq_lfoXSFZ v2N/AN/AN/A
Modulations
lfoN_freq_lfoX_onccYARIAN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_freq_onccX/index.html b/opcodes/lfoN_freq_onccX/index.html new file mode 100644 index 000000000..5142fa185 --- /dev/null +++ b/opcodes/lfoN_freq_onccX/index.html @@ -0,0 +1,759 @@ + + + + + + + + + lfoN_freq_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_freq

+

The base frequency of LFO number N, in Hertz.

Can be modulated by MIDI CC, and the modulation can be smoothed +so that rapid controller changes are applied with some "inertia".

+

Examples

+
lfo01_freq=2
+lfo01_freq_oncc117=8.2
+lfo01_freq_smoothcc117=50
+lfo02_freq=7
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_freqSFZ v2floatN/AHz
Modulations
lfoN_freq_onccXN/AN/AN/A
lfoN_freq_smoothccXN/AN/AN/A
lfoN_freq_stepccXN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: egN_freq_lfoX
  • +
  • LFO:
  • +
+

See also: lfoN_delay, lfoN_fade, lfoN_offset, lfoN_ratio, lfoN_scale, lfoN_wave

+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_freq_smoothccX/index.html b/opcodes/lfoN_freq_smoothccX/index.html new file mode 100644 index 000000000..0d7387cdb --- /dev/null +++ b/opcodes/lfoN_freq_smoothccX/index.html @@ -0,0 +1,759 @@ + + + + + + + + + lfoN_freq_smoothccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_freq

+

The base frequency of LFO number N, in Hertz.

Can be modulated by MIDI CC, and the modulation can be smoothed +so that rapid controller changes are applied with some "inertia".

+

Examples

+
lfo01_freq=2
+lfo01_freq_oncc117=8.2
+lfo01_freq_smoothcc117=50
+lfo02_freq=7
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_freqSFZ v2floatN/AHz
Modulations
lfoN_freq_onccXN/AN/AN/A
lfoN_freq_smoothccXN/AN/AN/A
lfoN_freq_stepccXN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: egN_freq_lfoX
  • +
  • LFO:
  • +
+

See also: lfoN_delay, lfoN_fade, lfoN_offset, lfoN_ratio, lfoN_scale, lfoN_wave

+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_freq_stepccX/index.html b/opcodes/lfoN_freq_stepccX/index.html new file mode 100644 index 000000000..538ff1da8 --- /dev/null +++ b/opcodes/lfoN_freq_stepccX/index.html @@ -0,0 +1,759 @@ + + + + + + + + + lfoN_freq_stepccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_freq

+

The base frequency of LFO number N, in Hertz.

Can be modulated by MIDI CC, and the modulation can be smoothed +so that rapid controller changes are applied with some "inertia".

+

Examples

+
lfo01_freq=2
+lfo01_freq_oncc117=8.2
+lfo01_freq_smoothcc117=50
+lfo02_freq=7
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_freqSFZ v2floatN/AHz
Modulations
lfoN_freq_onccXN/AN/AN/A
lfoN_freq_smoothccXN/AN/AN/A
lfoN_freq_stepccXN/AN/AN/A
+

Other modulations

+
    +
  • Envelope: egN_freq_lfoX
  • +
  • LFO:
  • +
+

See also: lfoN_delay, lfoN_fade, lfoN_offset, lfoN_ratio, lfoN_scale, lfoN_wave

+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_noiselevel/index.html b/opcodes/lfoN_noiselevel/index.html new file mode 100644 index 000000000..ba642e7eb --- /dev/null +++ b/opcodes/lfoN_noiselevel/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_noiselevel - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_noiselevel

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_noiselevelSFZ v2N/AN/AN/A
Modulations
lfoN_noiselevel_onccXN/AN/AN/A
lfoN_noiselevel_smoothccXN/AN/AN/A
lfoN_noiselevel_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_noiselevel_onccX/index.html b/opcodes/lfoN_noiselevel_onccX/index.html new file mode 100644 index 000000000..b91aab5e0 --- /dev/null +++ b/opcodes/lfoN_noiselevel_onccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_noiselevel_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_noiselevel

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_noiselevelSFZ v2N/AN/AN/A
Modulations
lfoN_noiselevel_onccXN/AN/AN/A
lfoN_noiselevel_smoothccXN/AN/AN/A
lfoN_noiselevel_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_noiselevel_smoothccX/index.html b/opcodes/lfoN_noiselevel_smoothccX/index.html new file mode 100644 index 000000000..fb1cccb6e --- /dev/null +++ b/opcodes/lfoN_noiselevel_smoothccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_noiselevel_smoothccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_noiselevel

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_noiselevelSFZ v2N/AN/AN/A
Modulations
lfoN_noiselevel_onccXN/AN/AN/A
lfoN_noiselevel_smoothccXN/AN/AN/A
lfoN_noiselevel_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_noiselevel_stepccX/index.html b/opcodes/lfoN_noiselevel_stepccX/index.html new file mode 100644 index 000000000..dafe15c68 --- /dev/null +++ b/opcodes/lfoN_noiselevel_stepccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_noiselevel_stepccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_noiselevel

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_noiselevelSFZ v2N/AN/AN/A
Modulations
lfoN_noiselevel_onccXN/AN/AN/A
lfoN_noiselevel_smoothccXN/AN/AN/A
lfoN_noiselevel_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_noisestep/index.html b/opcodes/lfoN_noisestep/index.html new file mode 100644 index 000000000..b32ba7556 --- /dev/null +++ b/opcodes/lfoN_noisestep/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_noisestep - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_noisestep

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_noisestepSFZ v2N/AN/AN/A
Modulations
lfoN_noisestep_onccXN/AN/AN/A
lfoN_noisestep_smoothccXN/AN/AN/A
lfoN_noisestep_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_noisestep_onccX/index.html b/opcodes/lfoN_noisestep_onccX/index.html new file mode 100644 index 000000000..051ed2d64 --- /dev/null +++ b/opcodes/lfoN_noisestep_onccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_noisestep_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_noisestep

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_noisestepSFZ v2N/AN/AN/A
Modulations
lfoN_noisestep_onccXN/AN/AN/A
lfoN_noisestep_smoothccXN/AN/AN/A
lfoN_noisestep_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_noisestep_smoothccX/index.html b/opcodes/lfoN_noisestep_smoothccX/index.html new file mode 100644 index 000000000..19cdfbf97 --- /dev/null +++ b/opcodes/lfoN_noisestep_smoothccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_noisestep_smoothccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_noisestep

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_noisestepSFZ v2N/AN/AN/A
Modulations
lfoN_noisestep_onccXN/AN/AN/A
lfoN_noisestep_smoothccXN/AN/AN/A
lfoN_noisestep_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_noisestep_stepccX/index.html b/opcodes/lfoN_noisestep_stepccX/index.html new file mode 100644 index 000000000..e32442d19 --- /dev/null +++ b/opcodes/lfoN_noisestep_stepccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_noisestep_stepccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_noisestep

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_noisestepSFZ v2N/AN/AN/A
Modulations
lfoN_noisestep_onccXN/AN/AN/A
lfoN_noisestep_smoothccXN/AN/AN/A
lfoN_noisestep_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_noisetone/index.html b/opcodes/lfoN_noisetone/index.html new file mode 100644 index 000000000..393333cf5 --- /dev/null +++ b/opcodes/lfoN_noisetone/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_noisetone - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_noisetone

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_noisetoneSFZ v2N/AN/AN/A
Modulations
lfoN_noisetone_onccXN/AN/AN/A
lfoN_noisetone_smoothccXN/AN/AN/A
lfoN_noisetone_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_noisetone_onccX/index.html b/opcodes/lfoN_noisetone_onccX/index.html new file mode 100644 index 000000000..c6cba7086 --- /dev/null +++ b/opcodes/lfoN_noisetone_onccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_noisetone_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_noisetone

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_noisetoneSFZ v2N/AN/AN/A
Modulations
lfoN_noisetone_onccXN/AN/AN/A
lfoN_noisetone_smoothccXN/AN/AN/A
lfoN_noisetone_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_noisetone_smoothccX/index.html b/opcodes/lfoN_noisetone_smoothccX/index.html new file mode 100644 index 000000000..a009d2045 --- /dev/null +++ b/opcodes/lfoN_noisetone_smoothccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_noisetone_smoothccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_noisetone

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_noisetoneSFZ v2N/AN/AN/A
Modulations
lfoN_noisetone_onccXN/AN/AN/A
lfoN_noisetone_smoothccXN/AN/AN/A
lfoN_noisetone_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_noisetone_stepccX/index.html b/opcodes/lfoN_noisetone_stepccX/index.html new file mode 100644 index 000000000..63638223e --- /dev/null +++ b/opcodes/lfoN_noisetone_stepccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_noisetone_stepccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_noisetone

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_noisetoneSFZ v2N/AN/AN/A
Modulations
lfoN_noisetone_onccXN/AN/AN/A
lfoN_noisetone_smoothccXN/AN/AN/A
lfoN_noisetone_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_offset/index.html b/opcodes/lfoN_offset/index.html new file mode 100644 index 000000000..010b7fa04 --- /dev/null +++ b/opcodes/lfoN_offset/index.html @@ -0,0 +1,739 @@ + + + + + + + + + lfoN_offset - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_offset

+

DC offset - Add to LFO output; not affected by scale.

It's possible for one LFO to use sub waveforms in addition to the main waveform. +This can be used to create more complex LFOs. +Up to 8 waveforms can be used in one LFO. +The second waveform is set by lfoN_offset2, the third by lfoN_offset3 etc. +Using lfoN_offset with no number after the offset sets the offset +for the main waveform, which is perhaps not needed very often. +Offset will likely mostly be used on the sub waveforms, +but it can also be set for the main waveform if needed.

+

Examples

+
lfo01_offset=0.1
+lfo02_offset2=-0.3
+lfo03_offset2=0.25
+lfo03_offset3=0.419
+
+
lfo01_wave=12 //S&H style LFO used here for randomization
+lfo01_pitch=10
+lfo01_freq=2
+lfo01_freq_oncc1=3
+
+lfo01_wave2=1 //Sine waveform for the secondary waveform
+lfo01_ratio2=4 //4 times faster
+lfo01_offset2=0 //No offset
+lfo01_scale2=0.3 //Shallower than the main wave
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_offsetARIAfloatN/AN/A
+

See also: lfoN_delay, lfoN_fade, lfoN_freq, lfoN_ratio, lfoN_scale, lfoN_wave

+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_offsetX/index.html b/opcodes/lfoN_offsetX/index.html new file mode 100644 index 000000000..fcced6e0a --- /dev/null +++ b/opcodes/lfoN_offsetX/index.html @@ -0,0 +1,739 @@ + + + + + + + + + lfoN_offsetX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_offset

+

DC offset - Add to LFO output; not affected by scale.

It's possible for one LFO to use sub waveforms in addition to the main waveform. +This can be used to create more complex LFOs. +Up to 8 waveforms can be used in one LFO. +The second waveform is set by lfoN_offset2, the third by lfoN_offset3 etc. +Using lfoN_offset with no number after the offset sets the offset +for the main waveform, which is perhaps not needed very often. +Offset will likely mostly be used on the sub waveforms, +but it can also be set for the main waveform if needed.

+

Examples

+
lfo01_offset=0.1
+lfo02_offset2=-0.3
+lfo03_offset2=0.25
+lfo03_offset3=0.419
+
+
lfo01_wave=12 //S&H style LFO used here for randomization
+lfo01_pitch=10
+lfo01_freq=2
+lfo01_freq_oncc1=3
+
+lfo01_wave2=1 //Sine waveform for the secondary waveform
+lfo01_ratio2=4 //4 times faster
+lfo01_offset2=0 //No offset
+lfo01_scale2=0.3 //Shallower than the main wave
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_offsetARIAfloatN/AN/A
+

See also: lfoN_delay, lfoN_fade, lfoN_freq, lfoN_ratio, lfoN_scale, lfoN_wave

+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_pan/index.html b/opcodes/lfoN_pan/index.html new file mode 100644 index 000000000..6623ba4a2 --- /dev/null +++ b/opcodes/lfoN_pan/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_pan - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_pan

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_panSFZ v2N/AN/AN/A
Modulations
lfoN_pan_onccXN/AN/AN/A
lfoN_pan_smoothccXN/AN/AN/A
lfoN_pan_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_pan_onccX/index.html b/opcodes/lfoN_pan_onccX/index.html new file mode 100644 index 000000000..0303c02e6 --- /dev/null +++ b/opcodes/lfoN_pan_onccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_pan_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_pan

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_panSFZ v2N/AN/AN/A
Modulations
lfoN_pan_onccXN/AN/AN/A
lfoN_pan_smoothccXN/AN/AN/A
lfoN_pan_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_pan_smoothccX/index.html b/opcodes/lfoN_pan_smoothccX/index.html new file mode 100644 index 000000000..be91b99e1 --- /dev/null +++ b/opcodes/lfoN_pan_smoothccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_pan_smoothccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_pan

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_panSFZ v2N/AN/AN/A
Modulations
lfoN_pan_onccXN/AN/AN/A
lfoN_pan_smoothccXN/AN/AN/A
lfoN_pan_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_pan_stepccX/index.html b/opcodes/lfoN_pan_stepccX/index.html new file mode 100644 index 000000000..e0ec36d68 --- /dev/null +++ b/opcodes/lfoN_pan_stepccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_pan_stepccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_pan

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_panSFZ v2N/AN/AN/A
Modulations
lfoN_pan_onccXN/AN/AN/A
lfoN_pan_smoothccXN/AN/AN/A
lfoN_pan_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_phase/index.html b/opcodes/lfoN_phase/index.html new file mode 100644 index 000000000..e249aa343 --- /dev/null +++ b/opcodes/lfoN_phase/index.html @@ -0,0 +1,736 @@ + + + + + + + + + lfoN_phase - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_phase

+

Initial phase shift for LFO number N.

Example

+
lfo02_phase=0.5
+lfo01_phase=0.25
+
+

If the wave is a sine (the default shape), then phase 0 means the LFO starts +at value 0 (center) and goes up first. Phase 0.5 means starting at 0 and going +down first. Phase 0.25 means starting at 1 (max).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_phaseSFZ v2float00 to 1N/A
Modulations
lfoN_phase_onccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_phase_onccX/index.html b/opcodes/lfoN_phase_onccX/index.html new file mode 100644 index 000000000..6f4e27959 --- /dev/null +++ b/opcodes/lfoN_phase_onccX/index.html @@ -0,0 +1,736 @@ + + + + + + + + + lfoN_phase_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_phase

+

Initial phase shift for LFO number N.

Example

+
lfo02_phase=0.5
+lfo01_phase=0.25
+
+

If the wave is a sine (the default shape), then phase 0 means the LFO starts +at value 0 (center) and goes up first. Phase 0.5 means starting at 0 and going +down first. Phase 0.25 means starting at 1 (max).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_phaseSFZ v2float00 to 1N/A
Modulations
lfoN_phase_onccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_pitch/index.html b/opcodes/lfoN_pitch/index.html new file mode 100644 index 000000000..433d37b77 --- /dev/null +++ b/opcodes/lfoN_pitch/index.html @@ -0,0 +1,761 @@ + + + + + + + + + lfoN_pitch - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_pitch

+

Destination for lfoN which effects the pitch of the region. The value assigned to the opcode is in cents, and oscillates up/down from the base frequency of the played region. For example playing middle C (MIDI note number 60) with lfo1_pitch set to 100 cents, the oscillation will be between C# a semitone above, and B a semitone below.

+

Negative cents are supported, which effects the start pitch of the region. For example lfo1_freq=100 will start at C# then oscillate downwards to B, while lfo1_freq=-100 will start at B and oscillate upwards to C#.

+

Example:

+
<region> sample=*sine
+
+lfo1_freq=2 // frequency of the LFO in hertz, (2 oscillations per second)
+lfo1_pitch=100 // value in cents
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_pitchSFZ v2N/AN/AN/A
Modulations
lfoN_pitch_curveccXinteger00 to 255N/A
lfoN_pitch_onccXN/AN/AN/A
lfoN_pitch_smoothccXN/AN/AN/A
lfoN_pitch_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_pitch_curveccX/index.html b/opcodes/lfoN_pitch_curveccX/index.html new file mode 100644 index 000000000..7550601e3 --- /dev/null +++ b/opcodes/lfoN_pitch_curveccX/index.html @@ -0,0 +1,761 @@ + + + + + + + + + lfoN_pitch_curveccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_pitch

+

Destination for lfoN which effects the pitch of the region. The value assigned to the opcode is in cents, and oscillates up/down from the base frequency of the played region. For example playing middle C (MIDI note number 60) with lfo1_pitch set to 100 cents, the oscillation will be between C# a semitone above, and B a semitone below.

+

Negative cents are supported, which effects the start pitch of the region. For example lfo1_freq=100 will start at C# then oscillate downwards to B, while lfo1_freq=-100 will start at B and oscillate upwards to C#.

+

Example:

+
<region> sample=*sine
+
+lfo1_freq=2 // frequency of the LFO in hertz, (2 oscillations per second)
+lfo1_pitch=100 // value in cents
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_pitchSFZ v2N/AN/AN/A
Modulations
lfoN_pitch_curveccXinteger00 to 255N/A
lfoN_pitch_onccXN/AN/AN/A
lfoN_pitch_smoothccXN/AN/AN/A
lfoN_pitch_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_pitch_onccX/index.html b/opcodes/lfoN_pitch_onccX/index.html new file mode 100644 index 000000000..6c8d46771 --- /dev/null +++ b/opcodes/lfoN_pitch_onccX/index.html @@ -0,0 +1,761 @@ + + + + + + + + + lfoN_pitch_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_pitch

+

Destination for lfoN which effects the pitch of the region. The value assigned to the opcode is in cents, and oscillates up/down from the base frequency of the played region. For example playing middle C (MIDI note number 60) with lfo1_pitch set to 100 cents, the oscillation will be between C# a semitone above, and B a semitone below.

+

Negative cents are supported, which effects the start pitch of the region. For example lfo1_freq=100 will start at C# then oscillate downwards to B, while lfo1_freq=-100 will start at B and oscillate upwards to C#.

+

Example:

+
<region> sample=*sine
+
+lfo1_freq=2 // frequency of the LFO in hertz, (2 oscillations per second)
+lfo1_pitch=100 // value in cents
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_pitchSFZ v2N/AN/AN/A
Modulations
lfoN_pitch_curveccXinteger00 to 255N/A
lfoN_pitch_onccXN/AN/AN/A
lfoN_pitch_smoothccXN/AN/AN/A
lfoN_pitch_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_pitch_smoothccX/index.html b/opcodes/lfoN_pitch_smoothccX/index.html new file mode 100644 index 000000000..79e207991 --- /dev/null +++ b/opcodes/lfoN_pitch_smoothccX/index.html @@ -0,0 +1,761 @@ + + + + + + + + + lfoN_pitch_smoothccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_pitch

+

Destination for lfoN which effects the pitch of the region. The value assigned to the opcode is in cents, and oscillates up/down from the base frequency of the played region. For example playing middle C (MIDI note number 60) with lfo1_pitch set to 100 cents, the oscillation will be between C# a semitone above, and B a semitone below.

+

Negative cents are supported, which effects the start pitch of the region. For example lfo1_freq=100 will start at C# then oscillate downwards to B, while lfo1_freq=-100 will start at B and oscillate upwards to C#.

+

Example:

+
<region> sample=*sine
+
+lfo1_freq=2 // frequency of the LFO in hertz, (2 oscillations per second)
+lfo1_pitch=100 // value in cents
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_pitchSFZ v2N/AN/AN/A
Modulations
lfoN_pitch_curveccXinteger00 to 255N/A
lfoN_pitch_onccXN/AN/AN/A
lfoN_pitch_smoothccXN/AN/AN/A
lfoN_pitch_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_pitch_stepccX/index.html b/opcodes/lfoN_pitch_stepccX/index.html new file mode 100644 index 000000000..20936075a --- /dev/null +++ b/opcodes/lfoN_pitch_stepccX/index.html @@ -0,0 +1,761 @@ + + + + + + + + + lfoN_pitch_stepccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_pitch

+

Destination for lfoN which effects the pitch of the region. The value assigned to the opcode is in cents, and oscillates up/down from the base frequency of the played region. For example playing middle C (MIDI note number 60) with lfo1_pitch set to 100 cents, the oscillation will be between C# a semitone above, and B a semitone below.

+

Negative cents are supported, which effects the start pitch of the region. For example lfo1_freq=100 will start at C# then oscillate downwards to B, while lfo1_freq=-100 will start at B and oscillate upwards to C#.

+

Example:

+
<region> sample=*sine
+
+lfo1_freq=2 // frequency of the LFO in hertz, (2 oscillations per second)
+lfo1_pitch=100 // value in cents
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_pitchSFZ v2N/AN/AN/A
Modulations
lfoN_pitch_curveccXinteger00 to 255N/A
lfoN_pitch_onccXN/AN/AN/A
lfoN_pitch_smoothccXN/AN/AN/A
lfoN_pitch_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_ratio/index.html b/opcodes/lfoN_ratio/index.html new file mode 100644 index 000000000..4ebfc7512 --- /dev/null +++ b/opcodes/lfoN_ratio/index.html @@ -0,0 +1,737 @@ + + + + + + + + + lfoN_ratio - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_ratio

+

Sets the ratio between the specified sub waveform and the main waveform.

It's possible for one LFO to use sub waveforms in addition to the main waveform. +This can be used to create more complex LFOs. +Up to 8 waveforms can be used in one LFO. +The second waveform is set by lfoN_ratio2, the third by lfoN_ratio3 etc. +Using lfoN_ratio with no number after the ratio sets the ratio +for the main waveform, which is perhaps not needed very often. +Ratio will likely mostly be used on the sub waveforms, +but it can also be set for the main waveform if needed.

+

Example

+
lfo01_ratio2=4
+lfo03_ratio=0.321
+
+
lfo01_wave=12 //S&H style LFO used here for randomization
+lfo01_pitch=10
+lfo01_freq=2
+lfo01_freq_oncc1=3
+
+lfo01_wave2=1 //Sine waveform for the secondary waveform
+lfo01_ratio2=4 //4 times faster
+lfo01_offset2=0 //No offset
+lfo01_scale2=0.3 //Shallower than the main wave
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_ratioARIAfloatN/AN/A
+

See also: lfoN_delay, lfoN_fade, lfoN_freq, lfoN_offset, lfoN_scale, lfoN_wave

+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_ratioX/index.html b/opcodes/lfoN_ratioX/index.html new file mode 100644 index 000000000..737811b9e --- /dev/null +++ b/opcodes/lfoN_ratioX/index.html @@ -0,0 +1,737 @@ + + + + + + + + + lfoN_ratioX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_ratio

+

Sets the ratio between the specified sub waveform and the main waveform.

It's possible for one LFO to use sub waveforms in addition to the main waveform. +This can be used to create more complex LFOs. +Up to 8 waveforms can be used in one LFO. +The second waveform is set by lfoN_ratio2, the third by lfoN_ratio3 etc. +Using lfoN_ratio with no number after the ratio sets the ratio +for the main waveform, which is perhaps not needed very often. +Ratio will likely mostly be used on the sub waveforms, +but it can also be set for the main waveform if needed.

+

Example

+
lfo01_ratio2=4
+lfo03_ratio=0.321
+
+
lfo01_wave=12 //S&H style LFO used here for randomization
+lfo01_pitch=10
+lfo01_freq=2
+lfo01_freq_oncc1=3
+
+lfo01_wave2=1 //Sine waveform for the secondary waveform
+lfo01_ratio2=4 //4 times faster
+lfo01_offset2=0 //No offset
+lfo01_scale2=0.3 //Shallower than the main wave
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_ratioARIAfloatN/AN/A
+

See also: lfoN_delay, lfoN_fade, lfoN_freq, lfoN_offset, lfoN_scale, lfoN_wave

+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_resonance/index.html b/opcodes/lfoN_resonance/index.html new file mode 100644 index 000000000..b012313ea --- /dev/null +++ b/opcodes/lfoN_resonance/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_resonance - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_resonance

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_resonanceSFZ v2N/AN/AN/A
Modulations
lfoN_resonance_onccXN/AN/AN/A
lfoN_resonance_smoothccXN/AN/AN/A
lfoN_resonance_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_resonance2/index.html b/opcodes/lfoN_resonance2/index.html new file mode 100644 index 000000000..5a1db0b19 --- /dev/null +++ b/opcodes/lfoN_resonance2/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_resonance2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_resonance

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_resonanceSFZ v2N/AN/AN/A
Modulations
lfoN_resonance_onccXN/AN/AN/A
lfoN_resonance_smoothccXN/AN/AN/A
lfoN_resonance_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_resonance2_onccX/index.html b/opcodes/lfoN_resonance2_onccX/index.html new file mode 100644 index 000000000..012ec792f --- /dev/null +++ b/opcodes/lfoN_resonance2_onccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_resonance2_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_resonance

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_resonanceSFZ v2N/AN/AN/A
Modulations
lfoN_resonance_onccXN/AN/AN/A
lfoN_resonance_smoothccXN/AN/AN/A
lfoN_resonance_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_resonance2_smoothccX/index.html b/opcodes/lfoN_resonance2_smoothccX/index.html new file mode 100644 index 000000000..5c4525993 --- /dev/null +++ b/opcodes/lfoN_resonance2_smoothccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_resonance2_smoothccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_resonance

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_resonanceSFZ v2N/AN/AN/A
Modulations
lfoN_resonance_onccXN/AN/AN/A
lfoN_resonance_smoothccXN/AN/AN/A
lfoN_resonance_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_resonance2_stepccX/index.html b/opcodes/lfoN_resonance2_stepccX/index.html new file mode 100644 index 000000000..8caa7b4e3 --- /dev/null +++ b/opcodes/lfoN_resonance2_stepccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_resonance2_stepccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_resonance

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_resonanceSFZ v2N/AN/AN/A
Modulations
lfoN_resonance_onccXN/AN/AN/A
lfoN_resonance_smoothccXN/AN/AN/A
lfoN_resonance_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_resonance_onccX/index.html b/opcodes/lfoN_resonance_onccX/index.html new file mode 100644 index 000000000..6c4c8c5ae --- /dev/null +++ b/opcodes/lfoN_resonance_onccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_resonance_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_resonance

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_resonanceSFZ v2N/AN/AN/A
Modulations
lfoN_resonance_onccXN/AN/AN/A
lfoN_resonance_smoothccXN/AN/AN/A
lfoN_resonance_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_resonance_smoothccX/index.html b/opcodes/lfoN_resonance_smoothccX/index.html new file mode 100644 index 000000000..c3015ba64 --- /dev/null +++ b/opcodes/lfoN_resonance_smoothccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_resonance_smoothccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_resonance

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_resonanceSFZ v2N/AN/AN/A
Modulations
lfoN_resonance_onccXN/AN/AN/A
lfoN_resonance_smoothccXN/AN/AN/A
lfoN_resonance_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_resonance_stepccX/index.html b/opcodes/lfoN_resonance_stepccX/index.html new file mode 100644 index 000000000..19a1c5f5a --- /dev/null +++ b/opcodes/lfoN_resonance_stepccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_resonance_stepccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_resonance

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_resonanceSFZ v2N/AN/AN/A
Modulations
lfoN_resonance_onccXN/AN/AN/A
lfoN_resonance_smoothccXN/AN/AN/A
lfoN_resonance_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_sample_dyn_paramX/index.html b/opcodes/lfoN_sample_dyn_paramX/index.html new file mode 100644 index 000000000..3ff3c2e3c --- /dev/null +++ b/opcodes/lfoN_sample_dyn_paramX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + lfoN_sample_dyn_paramX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_sample_dyn_paramX

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_sample_dyn_paramXARIAN/AN/AN/A
Modulations
lfoN_sample_dyn_paramX_onccYN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_sample_dyn_paramX_onccY/index.html b/opcodes/lfoN_sample_dyn_paramX_onccY/index.html new file mode 100644 index 000000000..5de1e2824 --- /dev/null +++ b/opcodes/lfoN_sample_dyn_paramX_onccY/index.html @@ -0,0 +1,730 @@ + + + + + + + + + lfoN_sample_dyn_paramX_onccY - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_sample_dyn_paramX

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_sample_dyn_paramXARIAN/AN/AN/A
Modulations
lfoN_sample_dyn_paramX_onccYN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_scale/index.html b/opcodes/lfoN_scale/index.html new file mode 100644 index 000000000..21acde8b3 --- /dev/null +++ b/opcodes/lfoN_scale/index.html @@ -0,0 +1,737 @@ + + + + + + + + + lfoN_scale - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_scale

+

Sets the scaling between the specified sub waveform and the main waveform.

It's possible for one LFO to use sub waveforms in addition to the main waveform. +This can be used to create more complex LFOs. +Up to 8 waveforms can be used in one LFO. +The second waveform is set by lfoN_scale2, the third by lfoN_scale3 etc. +Using lfoN_scale with no number after the scale sets the scale +for the main waveform, which is perhaps not needed very often. +Scale will likely mostly be used on the sub waveforms, +but it can also be set for the main waveform if needed.

+

Example

+
lfo01_scale2=0.5
+lfo03_scale=0.7
+
+
lfo01_wave=12 //S&H style LFO used here for randomization
+lfo01_pitch=10
+lfo01_freq=2
+lfo01_freq_oncc1=3
+
+lfo01_wave2=1 //Sine waveform for the secondary waveform
+lfo01_ratio2=4 //4 times faster
+lfo01_offset2=0 //No offset
+lfo01_scale2=0.3 //Shallower than the main wave
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_scaleARIAfloatN/AN/A
+

See also: lfoN_delay, lfoN_fade, lfoN_freq, lfoN_offset, lfoN_ratio, lfoN_wave

+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_scaleX/index.html b/opcodes/lfoN_scaleX/index.html new file mode 100644 index 000000000..e1a78c172 --- /dev/null +++ b/opcodes/lfoN_scaleX/index.html @@ -0,0 +1,737 @@ + + + + + + + + + lfoN_scaleX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_scale

+

Sets the scaling between the specified sub waveform and the main waveform.

It's possible for one LFO to use sub waveforms in addition to the main waveform. +This can be used to create more complex LFOs. +Up to 8 waveforms can be used in one LFO. +The second waveform is set by lfoN_scale2, the third by lfoN_scale3 etc. +Using lfoN_scale with no number after the scale sets the scale +for the main waveform, which is perhaps not needed very often. +Scale will likely mostly be used on the sub waveforms, +but it can also be set for the main waveform if needed.

+

Example

+
lfo01_scale2=0.5
+lfo03_scale=0.7
+
+
lfo01_wave=12 //S&H style LFO used here for randomization
+lfo01_pitch=10
+lfo01_freq=2
+lfo01_freq_oncc1=3
+
+lfo01_wave2=1 //Sine waveform for the secondary waveform
+lfo01_ratio2=4 //4 times faster
+lfo01_offset2=0 //No offset
+lfo01_scale2=0.3 //Shallower than the main wave
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_scaleARIAfloatN/AN/A
+

See also: lfoN_delay, lfoN_fade, lfoN_freq, lfoN_offset, lfoN_ratio, lfoN_wave

+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_smooth/index.html b/opcodes/lfoN_smooth/index.html new file mode 100644 index 000000000..2e186f5f8 --- /dev/null +++ b/opcodes/lfoN_smooth/index.html @@ -0,0 +1,730 @@ + + + + + + + + + lfoN_smooth - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_smooth

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_smoothSFZ v2N/AN/AN/A
Modulations
lfoN_smooth_onccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_smooth_onccX/index.html b/opcodes/lfoN_smooth_onccX/index.html new file mode 100644 index 000000000..d02ccc7ed --- /dev/null +++ b/opcodes/lfoN_smooth_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + lfoN_smooth_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_smooth

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_smoothSFZ v2N/AN/AN/A
Modulations
lfoN_smooth_onccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_stepX/index.html b/opcodes/lfoN_stepX/index.html new file mode 100644 index 000000000..347cce27e --- /dev/null +++ b/opcodes/lfoN_stepX/index.html @@ -0,0 +1,744 @@ + + + + + + + + + lfoN_stepX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_stepX

+

Level of the step number X in LFO step sequencer.

The level of step number X in an LFO used as a step sequencer, +which is possible in some Cakewalk products. Must have lfoN_steps +set for the LFO in order for this to mean anything.

+

Range is from -100% to 100%, and the range of the MIDI CC modulation +is the same, though both added together will effectively be -100% +or 100% if their sum exceeds one of those bounds.

+

If this is not set for a particular step, the default value for that +step is 0.

+

Examples

+
lfo01_step01=10
+lfo01_step01_oncc1=50
+
+lfo01_step02=80
+lfo01_step02_oncc1=50
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_stepXSFZ v2floatN/A-100 to 100percent
Modulations
lfoN_stepX_onccYN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_stepX_onccY/index.html b/opcodes/lfoN_stepX_onccY/index.html new file mode 100644 index 000000000..93358198b --- /dev/null +++ b/opcodes/lfoN_stepX_onccY/index.html @@ -0,0 +1,744 @@ + + + + + + + + + lfoN_stepX_onccY - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_stepX

+

Level of the step number X in LFO step sequencer.

The level of step number X in an LFO used as a step sequencer, +which is possible in some Cakewalk products. Must have lfoN_steps +set for the LFO in order for this to mean anything.

+

Range is from -100% to 100%, and the range of the MIDI CC modulation +is the same, though both added together will effectively be -100% +or 100% if their sum exceeds one of those bounds.

+

If this is not set for a particular step, the default value for that +step is 0.

+

Examples

+
lfo01_step01=10
+lfo01_step01_oncc1=50
+
+lfo01_step02=80
+lfo01_step02_oncc1=50
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_stepXSFZ v2floatN/A-100 to 100percent
Modulations
lfoN_stepX_onccYN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_steps/index.html b/opcodes/lfoN_steps/index.html new file mode 100644 index 000000000..d7e05b8b9 --- /dev/null +++ b/opcodes/lfoN_steps/index.html @@ -0,0 +1,727 @@ + + + + + + + + + lfoN_steps - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_steps

+

Number of steps in LFO step sequencer.

The number of steps in the step sequencer. This can be used in some +Cakewalk products, together with lfoN_stepX, to use an LFO as a +step sequencer instead of a typical LFO.

+

If both lfoN_steps and lfoN_wave are set for the same region, the +one which is set later in the SFZ file takes effect - an LFO can't +have both a wave and steps, so if lfoN_wave is set and then +lfoN_steps is set, the LFO will only act as a step sequencer.

+

lfoN_phase can't be used with step sequencers, but lfoN_delay, +lfoN_fade and lfoN_count all can.

+

Examples

+
lfo3_steps=16
+lfo1_steps=8
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_stepsSFZ v2integerN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_volume/index.html b/opcodes/lfoN_volume/index.html new file mode 100644 index 000000000..0f0918b39 --- /dev/null +++ b/opcodes/lfoN_volume/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_volume - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_volume

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_volumeSFZ v2N/AN/AN/A
Modulations
lfoN_volume_onccXN/AN/AN/A
lfoN_volume_smoothccXN/AN/AN/A
lfoN_volume_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_volume_onccX/index.html b/opcodes/lfoN_volume_onccX/index.html new file mode 100644 index 000000000..2867d0960 --- /dev/null +++ b/opcodes/lfoN_volume_onccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_volume_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_volume

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_volumeSFZ v2N/AN/AN/A
Modulations
lfoN_volume_onccXN/AN/AN/A
lfoN_volume_smoothccXN/AN/AN/A
lfoN_volume_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_volume_smoothccX/index.html b/opcodes/lfoN_volume_smoothccX/index.html new file mode 100644 index 000000000..3239eca25 --- /dev/null +++ b/opcodes/lfoN_volume_smoothccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_volume_smoothccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_volume

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_volumeSFZ v2N/AN/AN/A
Modulations
lfoN_volume_onccXN/AN/AN/A
lfoN_volume_smoothccXN/AN/AN/A
lfoN_volume_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_volume_stepccX/index.html b/opcodes/lfoN_volume_stepccX/index.html new file mode 100644 index 000000000..645ff756a --- /dev/null +++ b/opcodes/lfoN_volume_stepccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_volume_stepccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_volume

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_volumeSFZ v2N/AN/AN/A
Modulations
lfoN_volume_onccXN/AN/AN/A
lfoN_volume_smoothccXN/AN/AN/A
lfoN_volume_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_wave/index.html b/opcodes/lfoN_wave/index.html new file mode 100644 index 000000000..729db5be9 --- /dev/null +++ b/opcodes/lfoN_wave/index.html @@ -0,0 +1,797 @@ + + + + + + + + + lfoN_wave - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_wave

+

LFO waveform selection.

In ARIA it's possible for one LFO to use sub waveforms in addition to the main waveform. +This can be used to create more complex LFOs. +Up to 8 waveforms can be used in one LFO. +The second waveform is set by lfoN_wave2, the third by lfoN_wave3 etc.

+

lfoN_ratio2 is important for giving each wave a different +frequency, and lfoN_scale2 scale lfoN_offsetX can optionally be used as well.

+

In SFZ v2, the waves are:

+
    +
  1. triangle
  2. +
  3. sine
  4. +
  5. 75% pulse
  6. +
  7. square (50% pulse)
  8. +
  9. 25% pulse
  10. +
  11. 12:5% pulse
  12. +
  13. saw going up
  14. +
  15. saw going down
  16. +
+ +

In ARIA, the waves are:

+
    +
  1. deprecated, should not be used, but is random
  2. +
  3. triangle
  4. +
  5. sine
  6. +
  7. 75% pulse
  8. +
  9. square (50% pulse)
  10. +
  11. 25% pulse
  12. +
  13. 12:5% pulse
  14. +
  15. saw going up
  16. +
  17. saw going down
  18. +
  19. used in Chipsounds
  20. +
  21. used in Chipsounds
  22. +
  23. future user LFO
  24. +
  25. future user LFO
  26. +
  27. random sample & hold, generating a random value between -1 and 1 twice per period
  28. +
  29. stepped LFO
  30. +
+ +

Triangle is the default waveform in ARIA, though the SFZ1 LFOs in ARIA use the sine as +the default waveform. The default waveforms in Cakewalk products or other SFZ players +have not been tested.

+

The waveforms supported in the other player engines need to be tested.

+

Examples

+
lfo01_wave=6
+lfo02_wave=3
+lfo01_wave2=1
+lfo03_wave2=12
+
+
lfo01_wave=12 //S&H style LFO used here for randomization
+lfo01_pitch=10
+lfo01_freq=2
+lfo01_freq_oncc1=3
+
+lfo01_wave2=1 //Sine waveform for the secondary waveform
+lfo01_ratio2=4 //4 times faster
+lfo01_offset2=0 //No offset
+lfo01_scale2=0.3 //Shallower than the main wave
+
+

Wave 13 is a provision for ARIA to support SFZ 2.0's stepped LFO, equivalent to:

+
lfo01_steps=4
+lfo01_freq=1
+lfo01_pitch=1200
+
+lfo01_step01_oncc73=100 lfo01_step01_smoothcc73=100
+lfo01_step02_oncc73=100 lfo01_step02_smoothcc73=100
+lfo01_step03_oncc73=100 lfo01_step03_smoothcc73=100
+lfo01_step04_oncc73=100 lfo01_step04_smoothcc73=100
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_waveSFZ v2integer1N/A
Modulations
lfoN_wave_onccXARIAN/AN/AN/A
+

See also: lfoN_delay, lfoN_fade, lfoN_freq, lfoN_offset, lfoN_ratio, lfoN_scale

+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_waveX/index.html b/opcodes/lfoN_waveX/index.html new file mode 100644 index 000000000..de2e5adeb --- /dev/null +++ b/opcodes/lfoN_waveX/index.html @@ -0,0 +1,797 @@ + + + + + + + + + lfoN_waveX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_wave

+

LFO waveform selection.

In ARIA it's possible for one LFO to use sub waveforms in addition to the main waveform. +This can be used to create more complex LFOs. +Up to 8 waveforms can be used in one LFO. +The second waveform is set by lfoN_wave2, the third by lfoN_wave3 etc.

+

lfoN_ratio2 is important for giving each wave a different +frequency, and lfoN_scale2 scale lfoN_offsetX can optionally be used as well.

+

In SFZ v2, the waves are:

+
    +
  1. triangle
  2. +
  3. sine
  4. +
  5. 75% pulse
  6. +
  7. square (50% pulse)
  8. +
  9. 25% pulse
  10. +
  11. 12:5% pulse
  12. +
  13. saw going up
  14. +
  15. saw going down
  16. +
+ +

In ARIA, the waves are:

+
    +
  1. deprecated, should not be used, but is random
  2. +
  3. triangle
  4. +
  5. sine
  6. +
  7. 75% pulse
  8. +
  9. square (50% pulse)
  10. +
  11. 25% pulse
  12. +
  13. 12:5% pulse
  14. +
  15. saw going up
  16. +
  17. saw going down
  18. +
  19. used in Chipsounds
  20. +
  21. used in Chipsounds
  22. +
  23. future user LFO
  24. +
  25. future user LFO
  26. +
  27. random sample & hold, generating a random value between -1 and 1 twice per period
  28. +
  29. stepped LFO
  30. +
+ +

Triangle is the default waveform in ARIA, though the SFZ1 LFOs in ARIA use the sine as +the default waveform. The default waveforms in Cakewalk products or other SFZ players +have not been tested.

+

The waveforms supported in the other player engines need to be tested.

+

Examples

+
lfo01_wave=6
+lfo02_wave=3
+lfo01_wave2=1
+lfo03_wave2=12
+
+
lfo01_wave=12 //S&H style LFO used here for randomization
+lfo01_pitch=10
+lfo01_freq=2
+lfo01_freq_oncc1=3
+
+lfo01_wave2=1 //Sine waveform for the secondary waveform
+lfo01_ratio2=4 //4 times faster
+lfo01_offset2=0 //No offset
+lfo01_scale2=0.3 //Shallower than the main wave
+
+

Wave 13 is a provision for ARIA to support SFZ 2.0's stepped LFO, equivalent to:

+
lfo01_steps=4
+lfo01_freq=1
+lfo01_pitch=1200
+
+lfo01_step01_oncc73=100 lfo01_step01_smoothcc73=100
+lfo01_step02_oncc73=100 lfo01_step02_smoothcc73=100
+lfo01_step03_oncc73=100 lfo01_step03_smoothcc73=100
+lfo01_step04_oncc73=100 lfo01_step04_smoothcc73=100
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_waveSFZ v2integer1N/A
Modulations
lfoN_wave_onccXARIAN/AN/AN/A
+

See also: lfoN_delay, lfoN_fade, lfoN_freq, lfoN_offset, lfoN_ratio, lfoN_scale

+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_wave_onccX/index.html b/opcodes/lfoN_wave_onccX/index.html new file mode 100644 index 000000000..d49f02869 --- /dev/null +++ b/opcodes/lfoN_wave_onccX/index.html @@ -0,0 +1,797 @@ + + + + + + + + + lfoN_wave_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_wave

+

LFO waveform selection.

In ARIA it's possible for one LFO to use sub waveforms in addition to the main waveform. +This can be used to create more complex LFOs. +Up to 8 waveforms can be used in one LFO. +The second waveform is set by lfoN_wave2, the third by lfoN_wave3 etc.

+

lfoN_ratio2 is important for giving each wave a different +frequency, and lfoN_scale2 scale lfoN_offsetX can optionally be used as well.

+

In SFZ v2, the waves are:

+
    +
  1. triangle
  2. +
  3. sine
  4. +
  5. 75% pulse
  6. +
  7. square (50% pulse)
  8. +
  9. 25% pulse
  10. +
  11. 12:5% pulse
  12. +
  13. saw going up
  14. +
  15. saw going down
  16. +
+ +

In ARIA, the waves are:

+
    +
  1. deprecated, should not be used, but is random
  2. +
  3. triangle
  4. +
  5. sine
  6. +
  7. 75% pulse
  8. +
  9. square (50% pulse)
  10. +
  11. 25% pulse
  12. +
  13. 12:5% pulse
  14. +
  15. saw going up
  16. +
  17. saw going down
  18. +
  19. used in Chipsounds
  20. +
  21. used in Chipsounds
  22. +
  23. future user LFO
  24. +
  25. future user LFO
  26. +
  27. random sample & hold, generating a random value between -1 and 1 twice per period
  28. +
  29. stepped LFO
  30. +
+ +

Triangle is the default waveform in ARIA, though the SFZ1 LFOs in ARIA use the sine as +the default waveform. The default waveforms in Cakewalk products or other SFZ players +have not been tested.

+

The waveforms supported in the other player engines need to be tested.

+

Examples

+
lfo01_wave=6
+lfo02_wave=3
+lfo01_wave2=1
+lfo03_wave2=12
+
+
lfo01_wave=12 //S&H style LFO used here for randomization
+lfo01_pitch=10
+lfo01_freq=2
+lfo01_freq_oncc1=3
+
+lfo01_wave2=1 //Sine waveform for the secondary waveform
+lfo01_ratio2=4 //4 times faster
+lfo01_offset2=0 //No offset
+lfo01_scale2=0.3 //Shallower than the main wave
+
+

Wave 13 is a provision for ARIA to support SFZ 2.0's stepped LFO, equivalent to:

+
lfo01_steps=4
+lfo01_freq=1
+lfo01_pitch=1200
+
+lfo01_step01_oncc73=100 lfo01_step01_smoothcc73=100
+lfo01_step02_oncc73=100 lfo01_step02_smoothcc73=100
+lfo01_step03_oncc73=100 lfo01_step03_smoothcc73=100
+lfo01_step04_oncc73=100 lfo01_step04_smoothcc73=100
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_waveSFZ v2integer1N/A
Modulations
lfoN_wave_onccXARIAN/AN/AN/A
+

See also: lfoN_delay, lfoN_fade, lfoN_freq, lfoN_offset, lfoN_ratio, lfoN_scale

+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_width/index.html b/opcodes/lfoN_width/index.html new file mode 100644 index 000000000..6a2795546 --- /dev/null +++ b/opcodes/lfoN_width/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_width - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_width

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_widthSFZ v2N/AN/AN/A
Modulations
lfoN_width_onccXN/AN/AN/A
lfoN_width_smoothccXN/AN/AN/A
lfoN_width_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_width_onccX/index.html b/opcodes/lfoN_width_onccX/index.html new file mode 100644 index 000000000..2d0288c8e --- /dev/null +++ b/opcodes/lfoN_width_onccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_width_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_width

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_widthSFZ v2N/AN/AN/A
Modulations
lfoN_width_onccXN/AN/AN/A
lfoN_width_smoothccXN/AN/AN/A
lfoN_width_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_width_smoothccX/index.html b/opcodes/lfoN_width_smoothccX/index.html new file mode 100644 index 000000000..ebefea670 --- /dev/null +++ b/opcodes/lfoN_width_smoothccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_width_smoothccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_width

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_widthSFZ v2N/AN/AN/A
Modulations
lfoN_width_onccXN/AN/AN/A
lfoN_width_smoothccXN/AN/AN/A
lfoN_width_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lfoN_width_stepccX/index.html b/opcodes/lfoN_width_stepccX/index.html new file mode 100644 index 000000000..97a4e86e2 --- /dev/null +++ b/opcodes/lfoN_width_stepccX/index.html @@ -0,0 +1,746 @@ + + + + + + + + + lfoN_width_stepccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lfoN_width

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lfoN_widthSFZ v2N/AN/AN/A
Modulations
lfoN_width_onccXN/AN/AN/A
lfoN_width_smoothccXN/AN/AN/A
lfoN_width_stepccXN/AN/AN/A
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/load_end/index.html b/opcodes/load_end/index.html new file mode 100644 index 000000000..924bde009 --- /dev/null +++ b/opcodes/load_end/index.html @@ -0,0 +1,715 @@ + + + + + + + + + load_end - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

load_end

+

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
load_endSFZ v2integerN/AN/A
+

Category: Loading

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/load_mode/index.html b/opcodes/load_mode/index.html new file mode 100644 index 000000000..fef245c7d --- /dev/null +++ b/opcodes/load_mode/index.html @@ -0,0 +1,715 @@ + + + + + + + + + load_mode - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

load_mode

+

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
load_modeSFZ v2integerN/A0 to 1N/A
+

Category: Loading

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/load_start/index.html b/opcodes/load_start/index.html new file mode 100644 index 000000000..ae6783978 --- /dev/null +++ b/opcodes/load_start/index.html @@ -0,0 +1,715 @@ + + + + + + + + + load_start - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

load_start

+

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
load_startSFZ v2integerN/AN/A
+

Category: Loading

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lobend/index.html b/opcodes/lobend/index.html new file mode 100644 index 000000000..4e7fe0204 --- /dev/null +++ b/opcodes/lobend/index.html @@ -0,0 +1,719 @@ + + + + + + + + + lobend / hibend - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lobend / hibend

+

Defines the range of the last Pitch Bend message required for the region to play.

The region will play only if last Pitch Bend message received was in the +0 to 4000 range.

+

Examples

+
lobend=0 hibend=4000
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lobendSFZ v1integer-8192-8192 to 8192N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lobpm/index.html b/opcodes/lobpm/index.html new file mode 100644 index 000000000..6c95a5fd4 --- /dev/null +++ b/opcodes/lobpm/index.html @@ -0,0 +1,721 @@ + + + + + + + + + lobpm / hibpm - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lobpm / hibpm

+

Host tempo value.

Host tempo value. The region will play if the host tempo is equal to or higher +than lobpm, and lower than hibpm.

+

Examples

+
lobpm=0 hibpm=100
+
+lobpm=100 hibpm=200.5
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lobpmSFZ v1float00 to 500bpm
+

Category: Region Logic, Internal Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/loccN/index.html b/opcodes/loccN/index.html new file mode 100644 index 000000000..e67edc8bf --- /dev/null +++ b/opcodes/loccN/index.html @@ -0,0 +1,736 @@ + + + + + + + + + loccN / hiccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loccN / hiccN

+

Defines the range of the last MIDI controller N required for the region to play.

N will normally be a number from 1 to 127.

+

Examples

+
locc74=30 hicc74=100
+
+

The region will play only if last MIDI controller 74 received was in the 30 to 100 range.

+

Allowed range is 0 to 127. The defaults are loccN=0 and hiccN=127.

+

Practical applications include using MIDI CC to switch things on and off - for +example, additional voices, release noises, vibrato etc. A common example would +be having a hi-hat with various degrees of openness sampled, all of those mapped +to the same MIDI note, and hicc/locc used to define the ranges for which each +degree of openness should play. A simpler example would be switching between +sine, saw and noise waveforms:

+
<region>hicc1=63 sample=*sine
+<region>locc1=64 hicc=126 sample=*saw
+<region>locc1=127 sample=*noise
+
+

This is a "hard" switch - if a region is within the locc to hicc range it plays, +if it's outside that range it does not play. For smooth fades controlled by CC +(such as crossfaded dynamic layers or crossfaded vibrato layers on sustained +instruments), other opcodes such as xfin_loccN / xfin_hiccN +and xfout_loccN / xfout_hiccN should be used, or perhaps +the amplitude_onccN ARIA extension.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
loccNSFZ v1integer00 to 127N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lochan/index.html b/opcodes/lochan/index.html new file mode 100644 index 000000000..d713a1f4c --- /dev/null +++ b/opcodes/lochan/index.html @@ -0,0 +1,724 @@ + + + + + + + + + lochan / hichan - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lochan / hichan

+

If incoming notes have a MIDI channel between lochan and hichan, the region will play.

lochan and hichan will almost always be used together. +One application of this is SFZ files which are to be controlled from MIDI guitar +controllers, which send MIDI data for each string on a separate MIDI channel. +The regions for that string would then have lochan and hichan set to the +proper number.

+

Examples

+
lochan=1 hichan=7
+
+lochan=2 hichan=2
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lochanSFZ v1integer11 to 16N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lochanaft/index.html b/opcodes/lochanaft/index.html new file mode 100644 index 000000000..c9ebe4a9d --- /dev/null +++ b/opcodes/lochanaft/index.html @@ -0,0 +1,719 @@ + + + + + + + + + lochanaft / hichanaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lochanaft / hichanaft

+

Defines the range of last Channel Aftertouch message required for the region to play.

Examples

+

The region will play only if last Channel Aftertouch message received was +in the 30-100 range.

+
lochanaft=30 hichanaft=100
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lochanaftSFZ v1integer00 to 127N/A
+

Category: Region Logic, Internal Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lohdccN/index.html b/opcodes/lohdccN/index.html new file mode 100644 index 000000000..730cf07cf --- /dev/null +++ b/opcodes/lohdccN/index.html @@ -0,0 +1,719 @@ + + + + + + + + + lohdccN / hihdccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lohdccN / hihdccN

+

Like loccN but with floating point MIDI CCs

Other opcodes such as set_hdccN can also be used with these.

+

Example

+
lohdcc90=0.333
+hihdcc90=0.7
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lohdccNARIAfloat00 to 1N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lokey/index.html b/opcodes/lokey/index.html new file mode 100644 index 000000000..24264990e --- /dev/null +++ b/opcodes/lokey/index.html @@ -0,0 +1,737 @@ + + + + + + + + + lokey / hikey - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lokey / hikey

+

Determine the low boundary of a certain region.

When a region only covers one note, it is generally more convenient to use +key instead of hikey and lokey. When hikey and lokey are used, +they will usually need to be used together with pitch_keycenter.

+

These opcodes, as well as key, can use either MIDI note numbers (0 to 127) or +MIDI note names (e.g. c3 or D#4). Using note numbers is recommended, however, +as note numbers are interpreted consistently, while the same note names can be +mapped to note numbers an octave or even two apart in different DAWs.

+

In the SFZ 1 specification, the allowed range is 0 to 127. However, SFZ 2 additionally +includes the possibility to set lokey and hikey to -1, to prevent a region from +being triggered by any keys. This is a way (though, admittedly, not a very +elegant one) to use the on_loccN / onhiccN opcodes to trigger, +for example, pedal noises which are triggered whether any keys are pressed or not.

+

Examples

+
<region> sample=*sine lokey=72 hikey=84
+
+

As with the key opcode, the values can also be MIDI note names:

+
<region> sample=*sine lokey=c5 hikey=c6
+
+

When an instrument is sampled every minor third, this kind of usage will be common:

+
<region> sample=a4.wav  lokey=68 hikey=70 pitch_keycenter=69
+<region> sample=c5.wav  lokey=71 hikey=73 pitch_keycenter=72
+<region> sample=eb5.wav lokey=74 hikey=76 pitch_keycenter=75
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lokeySFZ v1integer00 to 127N/A
+

Category: Region Logic, Key Mapping

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/loop_count/index.html b/opcodes/loop_count/index.html new file mode 100644 index 000000000..9a61527ff --- /dev/null +++ b/opcodes/loop_count/index.html @@ -0,0 +1,724 @@ + + + + + + + + + loop_count - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loop_count

+

The number of times a loop will repeat.

This is in addition to the time the sample is played unlooped, as normal, +so loop_count=3 will result in the looped part of the sample being played +four times, not three times.

+

If the sample contains data after the end of the loop, this portion of the +sample will be played after all repetitions of the loop have been completed +(assuming no note-off message had been received by then).

+

Examples

+
loop_count=3
+loop_count=15
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
loop_countSFZ v2integerN/AN/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/loop_crossfade/index.html b/opcodes/loop_crossfade/index.html new file mode 100644 index 000000000..caf607916 --- /dev/null +++ b/opcodes/loop_crossfade/index.html @@ -0,0 +1,725 @@ + + + + + + + + + loop_crossfade - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loop_crossfade

+

Loop cross fade.

This can be used to add a crossfade to a loop where the looped sample does not have the crossfade "baked into" its audio data.

+

Practical Considerations

+

This opcode is uinimplemented in most SFZ players, but it is avaialble in OpenMPT and sfizz. +sfizz currently uses a sinusoidal formula as default.

+
\[ amp = (1-cos(pi*x))/2 \]
+

OpenMPT's crossfade implementation currently applies a fade halfway between a constant volume fade and constant power fade.

+
\[ amp = pow(x, 0.75) \]
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
loop_crossfadeSFZ v2floatN/Aseconds
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/loop_end/index.html b/opcodes/loop_end/index.html new file mode 100644 index 000000000..b64adc66e --- /dev/null +++ b/opcodes/loop_end/index.html @@ -0,0 +1,760 @@ + + + + + + + + + loop_end - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loop_end

+

The loop end point, in samples.

This is inclusive - the sample specified is played as part of the loop.

+

If loop_end is not specified and the sample has a loop defined, the SFZ player +will use the end point of the first loop defined in the file. That means for +files with one loop, loop_end does not usually need to be set, as it's generally +more practical to define loop points in an audio editor where they can be checked +for smoothness, crossfaded if necessary etc.

+

If loop_end is specified, it will be used instead the loop end point defined in +the sample. For files which have multiple loops defined, this is the only way to +get anything other than the first defined loop to play.

+

This opcode will not have any effect if loop_mode is set +to no_loop.

+

Practical Considerations

+

Loop endpoints can be modulated using loop_lengthccN in rgc sfz, and +loop_length_onccN in Cakewalk products - though the term "length" is used, +it's specifically the location of the end point which is modulated.

+

In ARIA, if loop_end is not specified, the sample does not have a loop defined +and loop_mode is set to loop_continuous or loop_sustain, the player +will loop through the entire file.

+

Not directly related to SFZ players, but causing a common error, some audio editors +number samples starting with 1, while according to the WAV file specification the +first sample should be number 0. If one of these editors is used to create sample +files which have loop point information, and the loop endpoint is set to the last +sample of the file, the SFZ player will think the loop endpoint is after the end +of the file, and will return an error. The solution to this is either to reduce the loop +start and endpoints in the WAV file by 1 each, or to set loop_start and loop_end +in the SFZ.

+

Examples

+
loop_end=4503
+
+loop_end=12445
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
loop_endSFZ v1integer00 to 4294967296sample units
Modulations
loop_lengthccNSFZ v2N/AN/AN/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/loop_length_onccN/index.html b/opcodes/loop_length_onccN/index.html new file mode 100644 index 000000000..c1c7e769a --- /dev/null +++ b/opcodes/loop_length_onccN/index.html @@ -0,0 +1,760 @@ + + + + + + + + + loop_length_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loop_end

+

The loop end point, in samples.

This is inclusive - the sample specified is played as part of the loop.

+

If loop_end is not specified and the sample has a loop defined, the SFZ player +will use the end point of the first loop defined in the file. That means for +files with one loop, loop_end does not usually need to be set, as it's generally +more practical to define loop points in an audio editor where they can be checked +for smoothness, crossfaded if necessary etc.

+

If loop_end is specified, it will be used instead the loop end point defined in +the sample. For files which have multiple loops defined, this is the only way to +get anything other than the first defined loop to play.

+

This opcode will not have any effect if loop_mode is set +to no_loop.

+

Practical Considerations

+

Loop endpoints can be modulated using loop_lengthccN in rgc sfz, and +loop_length_onccN in Cakewalk products - though the term "length" is used, +it's specifically the location of the end point which is modulated.

+

In ARIA, if loop_end is not specified, the sample does not have a loop defined +and loop_mode is set to loop_continuous or loop_sustain, the player +will loop through the entire file.

+

Not directly related to SFZ players, but causing a common error, some audio editors +number samples starting with 1, while according to the WAV file specification the +first sample should be number 0. If one of these editors is used to create sample +files which have loop point information, and the loop endpoint is set to the last +sample of the file, the SFZ player will think the loop endpoint is after the end +of the file, and will return an error. The solution to this is either to reduce the loop +start and endpoints in the WAV file by 1 each, or to set loop_start and loop_end +in the SFZ.

+

Examples

+
loop_end=4503
+
+loop_end=12445
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
loop_endSFZ v1integer00 to 4294967296sample units
Modulations
loop_lengthccNSFZ v2N/AN/AN/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/loop_lengthccN/index.html b/opcodes/loop_lengthccN/index.html new file mode 100644 index 000000000..ec0ce0b28 --- /dev/null +++ b/opcodes/loop_lengthccN/index.html @@ -0,0 +1,760 @@ + + + + + + + + + loop_lengthccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loop_end

+

The loop end point, in samples.

This is inclusive - the sample specified is played as part of the loop.

+

If loop_end is not specified and the sample has a loop defined, the SFZ player +will use the end point of the first loop defined in the file. That means for +files with one loop, loop_end does not usually need to be set, as it's generally +more practical to define loop points in an audio editor where they can be checked +for smoothness, crossfaded if necessary etc.

+

If loop_end is specified, it will be used instead the loop end point defined in +the sample. For files which have multiple loops defined, this is the only way to +get anything other than the first defined loop to play.

+

This opcode will not have any effect if loop_mode is set +to no_loop.

+

Practical Considerations

+

Loop endpoints can be modulated using loop_lengthccN in rgc sfz, and +loop_length_onccN in Cakewalk products - though the term "length" is used, +it's specifically the location of the end point which is modulated.

+

In ARIA, if loop_end is not specified, the sample does not have a loop defined +and loop_mode is set to loop_continuous or loop_sustain, the player +will loop through the entire file.

+

Not directly related to SFZ players, but causing a common error, some audio editors +number samples starting with 1, while according to the WAV file specification the +first sample should be number 0. If one of these editors is used to create sample +files which have loop point information, and the loop endpoint is set to the last +sample of the file, the SFZ player will think the loop endpoint is after the end +of the file, and will return an error. The solution to this is either to reduce the loop +start and endpoints in the WAV file by 1 each, or to set loop_start and loop_end +in the SFZ.

+

Examples

+
loop_end=4503
+
+loop_end=12445
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
loop_endSFZ v1integer00 to 4294967296sample units
Modulations
loop_lengthccNSFZ v2N/AN/AN/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/loop_mode/index.html b/opcodes/loop_mode/index.html new file mode 100644 index 000000000..8a1ec4296 --- /dev/null +++ b/opcodes/loop_mode/index.html @@ -0,0 +1,763 @@ + + + + + + + + + loop_mode - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loop_mode

+

Allows playing samples with loops defined in the unlooped mode.

If loop_mode is not specified, each sample will play according to its predefined +loop mode according to the loop metadata in the audio file. That is, the player +will play the sample looped using the first defined loop, if available. If no +loops are defined (which is usually the case with most files), the wave will +play unlooped.

+

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.

    +
  • +
  • +

    one_shot: sample will play from start to end, ignoring note off. + This is commonly used for drums. + 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. + This includes looping during the release phase.

    +
  • +
  • +

    loop_sustain: the player will play the loop while the note is held, + by keeping it depressed or by using the sustain pedal (CC64). + During the release phase, there's no looping.

    +
  • +
+

Whether no_loop, loop_continuous or loop_sustain is set, the duration +of the release phase is set using ampeg_release. However, in loop_sustain +or no_loop mode, the sound can be cut off before the release phase ends, +if the end of sample is reached. In loop_continuous mode, the loop will repeat +if the loop end is reached during the release phase, including repeating +multiple times if the release time is longer than the loop length.

+

Practical Considerations

+

For samples with trigger=release set, no_loop and one_shot will both behave +as one_shot and the entire release sample will play. If loop_continuous is set, +looping will be applied - and unless loop_count is set or there is some other way +the sound will be muted, that means the sound can potentially continue indefinitely.

+

If an instrument is using the default loop_mode=no_loop, there is no need to set +loop_mode=one_shot for the release samples; however, if an instrument has +loop_mode=loop_continuous set under a header which also includes release samples, +the release regions will normally need to be set to loop_mode=one_shot to override that.

+

In ARIA, if loop_mode=loop_continuous or loop_sustain, loop_end is not specified, +and the sample does not have a loop defined, the player will loop through +the entire sample file.

+

Examples

+
loop_mode=no_loop
+
+loop_mode=loop_continuous
+
+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
loop_modeSFZ v1stringno_loop for samples without a loop defined,
loop_continuous for samples with defined loop(s).
no_loop, one_shot, loop_continuous, loop_sustain
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/loop_start/index.html b/opcodes/loop_start/index.html new file mode 100644 index 000000000..5800ea7b4 --- /dev/null +++ b/opcodes/loop_start/index.html @@ -0,0 +1,743 @@ + + + + + + + + + loop_start - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loop_start

+

The loop start point, in samples.

If loop_start is not specified and the sample has a loop defined, the SFZ player +will use the start point of the first loop defined in the file. That means for +files with one loop, loop_start does not usually need to be set, as it's generally +more practical to define loop points in an audio editor where they can be checked +for smoothness, crossfaded if necessary etc.

+

If loop_start is specified, it will be used instead the loop start point defined +in the sample. For files which have multiple loops defined, this is the only way +to get anything other than the first defined loop to play.

+

This opcode will not have any effect if loop_mode is set to no_loop.

+

Examples

+
loop_start=4503
+
+loop_start=12445
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
loop_startSFZ v1integer00 to 4294967296sample units
Modulations
loop_startccNSFZ v2N/AN/AN/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/loop_start_onccN/index.html b/opcodes/loop_start_onccN/index.html new file mode 100644 index 000000000..1be460ee3 --- /dev/null +++ b/opcodes/loop_start_onccN/index.html @@ -0,0 +1,743 @@ + + + + + + + + + loop_start_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loop_start

+

The loop start point, in samples.

If loop_start is not specified and the sample has a loop defined, the SFZ player +will use the start point of the first loop defined in the file. That means for +files with one loop, loop_start does not usually need to be set, as it's generally +more practical to define loop points in an audio editor where they can be checked +for smoothness, crossfaded if necessary etc.

+

If loop_start is specified, it will be used instead the loop start point defined +in the sample. For files which have multiple loops defined, this is the only way +to get anything other than the first defined loop to play.

+

This opcode will not have any effect if loop_mode is set to no_loop.

+

Examples

+
loop_start=4503
+
+loop_start=12445
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
loop_startSFZ v1integer00 to 4294967296sample units
Modulations
loop_startccNSFZ v2N/AN/AN/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/loop_startccN/index.html b/opcodes/loop_startccN/index.html new file mode 100644 index 000000000..a23d51c32 --- /dev/null +++ b/opcodes/loop_startccN/index.html @@ -0,0 +1,743 @@ + + + + + + + + + loop_startccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loop_start

+

The loop start point, in samples.

If loop_start is not specified and the sample has a loop defined, the SFZ player +will use the start point of the first loop defined in the file. That means for +files with one loop, loop_start does not usually need to be set, as it's generally +more practical to define loop points in an audio editor where they can be checked +for smoothness, crossfaded if necessary etc.

+

If loop_start is specified, it will be used instead the loop start point defined +in the sample. For files which have multiple loops defined, this is the only way +to get anything other than the first defined loop to play.

+

This opcode will not have any effect if loop_mode is set to no_loop.

+

Examples

+
loop_start=4503
+
+loop_start=12445
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
loop_startSFZ v1integer00 to 4294967296sample units
Modulations
loop_startccNSFZ v2N/AN/AN/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/loop_tune/index.html b/opcodes/loop_tune/index.html new file mode 100644 index 000000000..863b595b9 --- /dev/null +++ b/opcodes/loop_tune/index.html @@ -0,0 +1,720 @@ + + + + + + + + + loop_tune - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loop_tune

+

Tuning for only the loop segment.

Examples

+
loop_tune=-4
+loop_tune=6
+
+

Useful with very short loops such as single-cycle waveforms, which can be slightly +out of tune compared to the complete waveform from which they were cut.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
loop_tuneSFZ v2float0cents
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/loop_type/index.html b/opcodes/loop_type/index.html new file mode 100644 index 000000000..89d3d6ce6 --- /dev/null +++ b/opcodes/loop_type/index.html @@ -0,0 +1,715 @@ + + + + + + + + + loop_type - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loop_type

+

Defines the looping mode.

This only affects the loop portion of the sample. +To play a sample backwards with no looping, use direction instead.

+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
loop_typeSFZ v2stringforwardforward, backward, alternate
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/loopcount/index.html b/opcodes/loopcount/index.html new file mode 100644 index 000000000..e2fe2c7fe --- /dev/null +++ b/opcodes/loopcount/index.html @@ -0,0 +1,724 @@ + + + + + + + + + loopcount - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loop_count

+

The number of times a loop will repeat.

This is in addition to the time the sample is played unlooped, as normal, +so loop_count=3 will result in the looped part of the sample being played +four times, not three times.

+

If the sample contains data after the end of the loop, this portion of the +sample will be played after all repetitions of the loop have been completed +(assuming no note-off message had been received by then).

+

Examples

+
loop_count=3
+loop_count=15
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
loop_countSFZ v2integerN/AN/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/loopend/index.html b/opcodes/loopend/index.html new file mode 100644 index 000000000..8d9de5673 --- /dev/null +++ b/opcodes/loopend/index.html @@ -0,0 +1,760 @@ + + + + + + + + + loopend - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loop_end

+

The loop end point, in samples.

This is inclusive - the sample specified is played as part of the loop.

+

If loop_end is not specified and the sample has a loop defined, the SFZ player +will use the end point of the first loop defined in the file. That means for +files with one loop, loop_end does not usually need to be set, as it's generally +more practical to define loop points in an audio editor where they can be checked +for smoothness, crossfaded if necessary etc.

+

If loop_end is specified, it will be used instead the loop end point defined in +the sample. For files which have multiple loops defined, this is the only way to +get anything other than the first defined loop to play.

+

This opcode will not have any effect if loop_mode is set +to no_loop.

+

Practical Considerations

+

Loop endpoints can be modulated using loop_lengthccN in rgc sfz, and +loop_length_onccN in Cakewalk products - though the term "length" is used, +it's specifically the location of the end point which is modulated.

+

In ARIA, if loop_end is not specified, the sample does not have a loop defined +and loop_mode is set to loop_continuous or loop_sustain, the player +will loop through the entire file.

+

Not directly related to SFZ players, but causing a common error, some audio editors +number samples starting with 1, while according to the WAV file specification the +first sample should be number 0. If one of these editors is used to create sample +files which have loop point information, and the loop endpoint is set to the last +sample of the file, the SFZ player will think the loop endpoint is after the end +of the file, and will return an error. The solution to this is either to reduce the loop +start and endpoints in the WAV file by 1 each, or to set loop_start and loop_end +in the SFZ.

+

Examples

+
loop_end=4503
+
+loop_end=12445
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
loop_endSFZ v1integer00 to 4294967296sample units
Modulations
loop_lengthccNSFZ v2N/AN/AN/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/loopmode/index.html b/opcodes/loopmode/index.html new file mode 100644 index 000000000..78118e6a8 --- /dev/null +++ b/opcodes/loopmode/index.html @@ -0,0 +1,763 @@ + + + + + + + + + loopmode - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loop_mode

+

Allows playing samples with loops defined in the unlooped mode.

If loop_mode is not specified, each sample will play according to its predefined +loop mode according to the loop metadata in the audio file. That is, the player +will play the sample looped using the first defined loop, if available. If no +loops are defined (which is usually the case with most files), the wave will +play unlooped.

+

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.

    +
  • +
  • +

    one_shot: sample will play from start to end, ignoring note off. + This is commonly used for drums. + 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. + This includes looping during the release phase.

    +
  • +
  • +

    loop_sustain: the player will play the loop while the note is held, + by keeping it depressed or by using the sustain pedal (CC64). + During the release phase, there's no looping.

    +
  • +
+

Whether no_loop, loop_continuous or loop_sustain is set, the duration +of the release phase is set using ampeg_release. However, in loop_sustain +or no_loop mode, the sound can be cut off before the release phase ends, +if the end of sample is reached. In loop_continuous mode, the loop will repeat +if the loop end is reached during the release phase, including repeating +multiple times if the release time is longer than the loop length.

+

Practical Considerations

+

For samples with trigger=release set, no_loop and one_shot will both behave +as one_shot and the entire release sample will play. If loop_continuous is set, +looping will be applied - and unless loop_count is set or there is some other way +the sound will be muted, that means the sound can potentially continue indefinitely.

+

If an instrument is using the default loop_mode=no_loop, there is no need to set +loop_mode=one_shot for the release samples; however, if an instrument has +loop_mode=loop_continuous set under a header which also includes release samples, +the release regions will normally need to be set to loop_mode=one_shot to override that.

+

In ARIA, if loop_mode=loop_continuous or loop_sustain, loop_end is not specified, +and the sample does not have a loop defined, the player will loop through +the entire sample file.

+

Examples

+
loop_mode=no_loop
+
+loop_mode=loop_continuous
+
+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
loop_modeSFZ v1stringno_loop for samples without a loop defined,
loop_continuous for samples with defined loop(s).
no_loop, one_shot, loop_continuous, loop_sustain
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/loopstart/index.html b/opcodes/loopstart/index.html new file mode 100644 index 000000000..68d700aa6 --- /dev/null +++ b/opcodes/loopstart/index.html @@ -0,0 +1,743 @@ + + + + + + + + + loopstart - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loop_start

+

The loop start point, in samples.

If loop_start is not specified and the sample has a loop defined, the SFZ player +will use the start point of the first loop defined in the file. That means for +files with one loop, loop_start does not usually need to be set, as it's generally +more practical to define loop points in an audio editor where they can be checked +for smoothness, crossfaded if necessary etc.

+

If loop_start is specified, it will be used instead the loop start point defined +in the sample. For files which have multiple loops defined, this is the only way +to get anything other than the first defined loop to play.

+

This opcode will not have any effect if loop_mode is set to no_loop.

+

Examples

+
loop_start=4503
+
+loop_start=12445
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
loop_startSFZ v1integer00 to 4294967296sample units
Modulations
loop_startccNSFZ v2N/AN/AN/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/looptune/index.html b/opcodes/looptune/index.html new file mode 100644 index 000000000..c99803784 --- /dev/null +++ b/opcodes/looptune/index.html @@ -0,0 +1,720 @@ + + + + + + + + + looptune - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loop_tune

+

Tuning for only the loop segment.

Examples

+
loop_tune=-4
+loop_tune=6
+
+

Useful with very short loops such as single-cycle waveforms, which can be slightly +out of tune compared to the complete waveform from which they were cut.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
loop_tuneSFZ v2float0cents
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/looptype/index.html b/opcodes/looptype/index.html new file mode 100644 index 000000000..fe266a376 --- /dev/null +++ b/opcodes/looptype/index.html @@ -0,0 +1,715 @@ + + + + + + + + + looptype - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loop_type

+

Defines the looping mode.

This only affects the loop portion of the sample. +To play a sample backwards with no looping, use direction instead.

+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
loop_typeSFZ v2stringforwardforward, backward, alternate
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lopolyaft/index.html b/opcodes/lopolyaft/index.html new file mode 100644 index 000000000..8f5bfc04c --- /dev/null +++ b/opcodes/lopolyaft/index.html @@ -0,0 +1,725 @@ + + + + + + + + + lopolyaft / hipolyaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lopolyaft / hipolyaft

+

Defines the range of last Polyphonic Aftertouch message required for the region to play.

Example

+

The region will play only if last Polyphonic Aftertouch message received was +in the 30-100 range.

+
lopolyaft=30 hipolyaft=100
+
+

Practical Considerations

+

In the rgcaudio sfz player, the incoming note information in the Polyphonic +Aftertouch message is not relevant (which basically means polyphonic aftertouch +isn't polyphonic, and works like channel aftertouch). In ARIA, the incoming note +information is used, and polyphonic aftertouch works polyphonically. +Other SFZ players need testing.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lopolyaftSFZ v1integer00 to 127N/A
+

Category: Region Logic, Internal Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/loprog/index.html b/opcodes/loprog/index.html new file mode 100644 index 000000000..eadd66263 --- /dev/null +++ b/opcodes/loprog/index.html @@ -0,0 +1,723 @@ + + + + + + + + + loprog / hiprog - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

loprog / hiprog

+

The region plays when the MIDI program number is between loprog and hiprog.

MIDI program numbers in the General MIDI spec ranged from 0 to 127 but were +often displayed externally as 1 to 128. This uses the 0 to 127 range. +By default, most DAWs seem to have the program number set to 0, so setting +loprog higher than 0 without sending program change messages results in no sound.

+

Examples

+
loprog=0 hiprog=0
+loprog=1 hiprog=1
+loprog=10 hiprog=12
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
loprogSFZ v2integer00 to 127N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lorand/index.html b/opcodes/lorand/index.html new file mode 100644 index 000000000..5e8bf4eaa --- /dev/null +++ b/opcodes/lorand/index.html @@ -0,0 +1,759 @@ + + + + + + + + + lorand / hirand - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lorand / hirand

+

The region will play if the random number is equal to or higher than lorand, and lower than hirand.

Random values. The player will generate a new random number on every note-on event, +in the range 0 to 1.

+

Examples

+
lorand=0.2 hirand=0.4
+
+lorand=0.4 hirand=1
+
+

The most common application for this is randomized round robins. Note that +hirand for a region should equal lorand for the next region - if we had, for +example, hirand=0.249 for the first region and lorand=0.25 for the next, +that would result in no sound playing if the random number generated was, for +example, 0.2496343491. So, an 0.001 chance of no sound at all - a difficult +problem to spot when testing.

+
<region> hirand=0.25 sample=kick_vl1_rr1.wav
+<region> lorand=0.25 hirand=0.5 sample=kick_vl1_rr2.wav
+<region> lorand=0.5 hirand=0.75 sample=kick_vl1_rr3.wav
+<region> lorand=0.75 sample=kick_vl1_rr4.wav
+
+

It is also possible to combine this with the seq_length and seq_position +opcodes to split round robins into two subsets, and randomize within each subset. +This results in randomization, but prevents the possibility of the same sample +being triggered twice in a row when the random number generated falls into the +same range as the previously generated number. This can be good when there are +a lot (6 or more) round robin samples available. The code for 8 samples split +into two sequential subsets might look like this:

+
<region> seq_length=2 seq_position=1 hirand=0.25 sample=kick_vl1_rr1.wav
+<region> seq_length=2 seq_position=1 lorand=0.25 hirand=0.5 sample=kick_vl1_rr2.wav
+<region> seq_length=2 seq_position=1 lorand=0.5 hirand=0.75 sample=kick_vl1_rr3.wav
+<region> seq_length=2 seq_position=1 lorand=0.75 sample=kick_vl1_rr4.wav
+<region> seq_length=2 seq_position=2 hirand=0.25 sample=kick_vl1_rr5.wav
+<region> seq_length=2 seq_position=2 lorand=0.25 hirand=0.5 sample=kick_vl1_rr6.wav
+<region> seq_length=2 seq_position=2 lorand=0.5 hirand=0.75 sample=kick_vl1_rr7.wav
+<region> seq_length=2 seq_position=2 lorand=0.75 sample=kick_vl1_rr8.wav
+
+

Practical Considerations

+

In the ARIA implementation of SFZ, sequence position is not tracked together for +all regions, which means the above is not a practical way to implement alternating +left/right hand or up/down bowing samples.

+

Also in ARIA, a separate random number is generated for each region which is playing, +which means lorand/hirand probably should not be used with samples which have +multiple mic positions. Using it can result in triggering spot, overhead and room +mics which do not match, and that can result in phasing issues etc.

+

There are other potential uses which have nothing to do with round robins, for +example having key fingering noises on a clarinet trigger sometimes +(but not always) when a note is played.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lorandSFZ v1float00 to 1N/A
+

Category: Region Logic, Internal Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lotimer/index.html b/opcodes/lotimer/index.html new file mode 100644 index 000000000..4877975a9 --- /dev/null +++ b/opcodes/lotimer/index.html @@ -0,0 +1,725 @@ + + + + + + + + + lotimer / hitimer - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

lotimer / hitimer

+

Region plays if the time passed since the last sample in the same group played is between lotimer and hitimer.

Not implemented in ARIA, may have been implemented in some Cakewalk products. +The timer is how long has passed since the last sample had played in the same +group. It is, however, not known whether this is a group header or polyphony group.

+

Examples

+
<region>
+hitimer=0.25
+sample=quick.wav
+<region>
+lotimer=0.25
+sample=slow.wav
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lotimerSFZ v2floatN/AN/A
+

Category: Region Logic, Internal Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/lovel/index.html b/opcodes/lovel/index.html new file mode 100644 index 000000000..f3009130b --- /dev/null +++ b/opcodes/lovel/index.html @@ -0,0 +1,742 @@ + + + + + + + + + lovel / hivel - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

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.

This is obviously useful for instruments with dynamic layers controlled by velocity. +Though dynamic layers can also be controlled by CC, especially for sustained +instruments, lovel and hivel are the standard way of controlling dynamics for +instruments such as drums and pianos. It is also possible to use lovel / hivel +to control other things instead, such as articulations - for example, a guitar +could have palm-muted samples on low velocities, and pinch harmonics on velocity 127.

+

These opcodes will often need to be used with amp_velcurve_N, unless +amp_veltrack is set to 0. The reason for this is that with default +velocity tracking behavior and non-normalized samples (and there are many reasons +why normalizing samples should be avoided), the quiet velocity layers will be too quiet.

+

Velocity 0 is a note-off message, so 1 is the lowest usable value with hivel/lovel.

+

Example

+
lovel=64 hivel=95
+
+

An instrument with four velocity-controlled dynamic layers might use lovel and +hivel like this:

+
<region>hivel=31 amp_velcurve_31=1 sample=kick_vl1.wav
+<region>lovel=32 hivel=63 amp_velcurve_63=1 sample=kick_vl2.wav
+<region>lovel=64 hivel=95 amp_velcurve_95=1 sample=kick_vl3.wav
+<region>lovel=96 sample=kick_vl4.wav
+
+

The way this would work is the kick_vl1.wav region will play at velocities up +to 31, with volume going gradually from 0 at velocity 0 (so, no sound) to full +volume at velocity 31. The kick_vl2.wav region will play at velocties 32 to 63, +with volume being full at velocity 63 and lower volume (but not zero) at 32. +The kick_vl3 wav region will play at velocites 64 to 95, with full volume at +velocity 95. Finally, the kick_vl4 layer plays at velocities 96 to 127, with no +amp_velcurve_N set meaning it will have full volume at velocity 127.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
lovelSFZ v1integer11 to 127N/A
+

Category: Region Logic, Key Mapping

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/master_amplitude/index.html b/opcodes/master_amplitude/index.html new file mode 100644 index 000000000..3e50cdbbd --- /dev/null +++ b/opcodes/master_amplitude/index.html @@ -0,0 +1,717 @@ + + + + + + + + + master_amplitude - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

master_amplitude

+

ARIA extension, like amplitude, but affecting everything when set under the ‹master› header.

Example

+
master_amplitude=60
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
master_amplitudeARIAfloat1000 to 100%
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/master_label/index.html b/opcodes/master_label/index.html new file mode 100644 index 000000000..2fd3df7f0 --- /dev/null +++ b/opcodes/master_label/index.html @@ -0,0 +1,725 @@ + + + + + + + + + master_label - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

master_label

+

An ARIA extension which sets what is displayed in the default info tab of Sforzando.

Useful for debugging. +It can be set anywhere, not just under the ‹master› header.

+

Example

+
master_label=China2
+
+

master_label example image

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
master_labelARIAstringN/AN/A
+

See also: global_label, group_label, region_label

+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/master_tune/index.html b/opcodes/master_tune/index.html new file mode 100644 index 000000000..179b5f589 --- /dev/null +++ b/opcodes/master_tune/index.html @@ -0,0 +1,715 @@ + + + + + + + + + master_tune - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

master_tune

+

ARIA extension, like tune, but affecting everything when set under the ‹master› header.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
master_tuneARIAinteger0-9600 to 9600cents
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/master_volume/index.html b/opcodes/master_volume/index.html new file mode 100644 index 000000000..3be25e146 --- /dev/null +++ b/opcodes/master_volume/index.html @@ -0,0 +1,715 @@ + + + + + + + + + master_volume - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

master_volume

+

ARIA extension, like volume, but affecting everything when set under the ‹master› header.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
master_volumeARIAfloat0-144 to 6dB
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/md5/index.html b/opcodes/md5/index.html new file mode 100644 index 000000000..676996045 --- /dev/null +++ b/opcodes/md5/index.html @@ -0,0 +1,723 @@ + + + + + + + + + md5 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

md5

+

Calculates the MD5 digital fingerprint hash of a sample file, represented as a sequence of 32 hexadecimal digits.

It may be used to verify the integrity of the sample file, +or to locate renamed files by content.

+

Example

+
/*
+  University of Iowa Music Instrument Samples - Piano
+  http://theremin.music.uiowa.edu/MISpiano.html
+*/
+<region> sample=Piano.ff.A0.aiff md5=4ce81c280832d99f05a0d609a1031d5e
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
md5SFZ v2stringnullN/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/noise_filter/index.html b/opcodes/noise_filter/index.html new file mode 100644 index 000000000..d7f105026 --- /dev/null +++ b/opcodes/noise_filter/index.html @@ -0,0 +1,714 @@ + + + + + + + + + noise_filter - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

noise_filter

+

+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
noise_filterSFZ v2stringN/Aon, off, 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
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/noise_level/index.html b/opcodes/noise_level/index.html new file mode 100644 index 000000000..6a3621ffa --- /dev/null +++ b/opcodes/noise_level/index.html @@ -0,0 +1,738 @@ + + + + + + + + + noise_level - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

noise_level

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
noise_levelSFZ v2floatN/A-96 to 24dB
Modulations
noise_level_onccNfloatN/A-96 to 24dB
noise_level_smoothccNfloat00 to ?ms
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/noise_level_onccN/index.html b/opcodes/noise_level_onccN/index.html new file mode 100644 index 000000000..fb8a2aaca --- /dev/null +++ b/opcodes/noise_level_onccN/index.html @@ -0,0 +1,738 @@ + + + + + + + + + noise_level_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

noise_level

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
noise_levelSFZ v2floatN/A-96 to 24dB
Modulations
noise_level_onccNfloatN/A-96 to 24dB
noise_level_smoothccNfloat00 to ?ms
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/noise_level_smoothccN/index.html b/opcodes/noise_level_smoothccN/index.html new file mode 100644 index 000000000..1b436d78a --- /dev/null +++ b/opcodes/noise_level_smoothccN/index.html @@ -0,0 +1,738 @@ + + + + + + + + + noise_level_smoothccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

noise_level

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
noise_levelSFZ v2floatN/A-96 to 24dB
Modulations
noise_level_onccNfloatN/A-96 to 24dB
noise_level_smoothccNfloat00 to ?ms
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/noise_step/index.html b/opcodes/noise_step/index.html new file mode 100644 index 000000000..92e5545d1 --- /dev/null +++ b/opcodes/noise_step/index.html @@ -0,0 +1,730 @@ + + + + + + + + + noise_step - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

noise_step

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
noise_stepSFZ v2integerN/A0 to 100N/A
Modulations
noise_step_onccNintegerN/A0 to 100N/A
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/noise_step_onccN/index.html b/opcodes/noise_step_onccN/index.html new file mode 100644 index 000000000..3c8b0819f --- /dev/null +++ b/opcodes/noise_step_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + noise_step_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

noise_step

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
noise_stepSFZ v2integerN/A0 to 100N/A
Modulations
noise_step_onccNintegerN/A0 to 100N/A
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/noise_stereo/index.html b/opcodes/noise_stereo/index.html new file mode 100644 index 000000000..bd26f1763 --- /dev/null +++ b/opcodes/noise_stereo/index.html @@ -0,0 +1,714 @@ + + + + + + + + + noise_stereo - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

noise_stereo

+

+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
noise_stereoSFZ v2stringN/Aon, off
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/noise_tone/index.html b/opcodes/noise_tone/index.html new file mode 100644 index 000000000..26a5c313b --- /dev/null +++ b/opcodes/noise_tone/index.html @@ -0,0 +1,730 @@ + + + + + + + + + noise_tone - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

noise_tone

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
noise_toneSFZ v2integerN/A0 to 100N/A
Modulations
noise_tone_onccNintegerN/A0 to 100N/A
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/noise_tone_onccN/index.html b/opcodes/noise_tone_onccN/index.html new file mode 100644 index 000000000..f65287eff --- /dev/null +++ b/opcodes/noise_tone_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + noise_tone_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

noise_tone

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
noise_toneSFZ v2integerN/A0 to 100N/A
Modulations
noise_tone_onccNintegerN/A0 to 100N/A
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/note_offset/index.html b/opcodes/note_offset/index.html new file mode 100644 index 000000000..b3bfc7e61 --- /dev/null +++ b/opcodes/note_offset/index.html @@ -0,0 +1,720 @@ + + + + + + + + + note_offset - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

note_offset

+

MIDI note transpose; tells the SFZ player to offset all incoming MIDI notes by the specified number of semitones.

This opcode tells SFZ to shift all incoming MIDI data by the specified number of +notes - basically like octave_offset but measured in half-steps instead of octaves. +It should be used under the ‹control› header.

+

Example

+
note_offset=-3
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
note_offsetSFZ v2integer0-127 to 127semitones
+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/note_polyphony/index.html b/opcodes/note_polyphony/index.html new file mode 100644 index 000000000..6acef5128 --- /dev/null +++ b/opcodes/note_polyphony/index.html @@ -0,0 +1,742 @@ + + + + + + + + + note_polyphony - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

note_polyphony

+

Polyphony limit for playing the same note repeatedly.

Example

+
note_polyphony=3
+
+

The difference between applying polyphony across one note and using +note_polyphony is that note_polyphony also uses note_selfmask which opens up +some additional options. +Default self-masking behavior is that higher-or-equal-velocity notes turn off +lower-velocity notes, but lower-velocity notes do not turn off +higher-velocity notes. A new note will always play.

+

To be more precise, assuming a note_polyphony=1, the self-masking behavior by default is: +- If a low-velocity note is playing, a higher-or-equal velocity note kills the + low-velocity note. +- If a high-velocity note is playing, a strictly-lower-velocity note will play + without killing the high-velocity note.

+

The note_polyphony opcode is thus not a strict polyphony limit but more of a hint +for the instrument behavior. This behavior is indeed generally desirable +when playing repeated piano notes, hammered dulcimers, etc. +It can also be useful for cymbals, although especially with hi-hats, +those will often use different notes for different articulations, +and note_polyphony would be limited to working within an articulation.

+

The note polyphony is checked within a polyphony group, set by the group or +polyphony_group opcodes. If no group is specified on the region (or its group, +master or globally) the note polyphony applies to the default group +as if group=0 was specified.

+

This means that instruments where one note needs to trigger multiple layers, +for example drums with separate microphone samples, will usually need to set +a separate group number for each microphone position, so the note polyphony limit +is tracked separately for each mic.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
note_polyphonySFZ v2integerN/AN/A
+

Category: Instrument Settings, Voice Lifecycle

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/note_selfmask/index.html b/opcodes/note_selfmask/index.html new file mode 100644 index 000000000..e9f5412d0 --- /dev/null +++ b/opcodes/note_selfmask/index.html @@ -0,0 +1,733 @@ + + + + + + + + + note_selfmask - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

note_selfmask

+

Controls note-stealing behavior for a single pitch, when using note_polyphony.

This affects only muting of notes where the polyphony is limited by +note_polyphony and not cases where polyphony is used.

+

Default self-masking behavior is that higher-or-equal-velocity notes turn off +lower-velocity notes, but lower-velocity notes do not turn off +higher-velocity notes. A new note will always play.

+

To be more precise, assuming a note_polyphony=1, the self-masking behavior by default is: +- If a low-velocity note is playing, a higher-or-equal velocity note kills + the low-velocity note. +- If a high-velocity note is playing, a strictly-lower-velocity note will play + without killing the high-velocity note.

+

The note_polyphony opcode is thus not a strict polyphony limit but more of a hint +for the instrument behavior. This behavior is indeed generally desirable +when playing repeated piano notes, ride cymbals, hammered dulcimers etc. +With note_selfmask set to off, notes turn off notes with the same pitch +regardless of velocity, which generally sounds less "musical" but does ensure that +note polyphony is always preserved within the set limit, and can sound right +for certain instruments.

+

Example

+
note_selfmask=off
+
+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
note_selfmaskSFZ v2stringonon, off
+

Category: Instrument Settings, Voice Lifecycle

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/octave_offset/index.html b/opcodes/octave_offset/index.html new file mode 100644 index 000000000..05acbd0ae --- /dev/null +++ b/opcodes/octave_offset/index.html @@ -0,0 +1,720 @@ + + + + + + + + + octave_offset - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

octave_offset

+

MIDI octave transpose; tells the SFZ player to offset all incoming MIDI notes by the specified number of octaves.

This opcode tells SFZ to shift all incoming MIDI data by the specified octave - +this allows changing IPN notation into MMA, so C4 will be MIDI note 48 instead +of MIDI note 60. It should be used under the ‹control› header.

+

Example

+
octave_offset=-1
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
octave_offsetSFZ v2integer0-10 to 10octaves
+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/off_by/index.html b/opcodes/off_by/index.html new file mode 100644 index 000000000..228905b15 --- /dev/null +++ b/opcodes/off_by/index.html @@ -0,0 +1,737 @@ + + + + + + + + + off_by - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

off_by

+

Region off group.

When a new region with a group number equal to off_by plays, +this region will be turned off.

+

Examples

+
off_by=3
+
+off_by=334
+
+

This is used in conjunction with group to make things +monophonic, but can also be used in other contexts where one sound should cause +another to stop - for example, cymbal chokes.

+

Practical considerations

+

With the default for both group and off_by being 0, any instruments that +leave these default values in place should in theory be monophonic. As a +workaround, rgc sfz, Cakewalk players, BassMIDI and LinuxSampler implement +special behavior where if group=0 and off_by=0, regions are not muted, +and muting only happens for non-zero values of off_by. ARIA/Sforzando +has a different workaround, with the default value of off_by being 4294967295.

+

The actual minimum and maximum values are not currently known. Some players +will treat numbers outside a certain range as equivalent to off_by=0, and +ARIA/Sforzando will also do this with text strings. The behavior of +non-integer numbers is also currently unknown. This makes it possible to use +an extremely large number for one group/off_by combination, but it's obviously +not recommended.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
off_bySFZ v1integer0-2147483648 to 2147483647N/A
+

Category: Instrument Settings, Voice Lifecycle

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/off_curve/index.html b/opcodes/off_curve/index.html new file mode 100644 index 000000000..d5839f9de --- /dev/null +++ b/opcodes/off_curve/index.html @@ -0,0 +1,726 @@ + + + + + + + + + off_curve - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

off_curve

+

When off_mode is set to time, this specifies the math to be used to fade out the regions being muted by voice-stealing.

    +
  • -2 is a static, non-changing envelope segment.
  • +
  • -1 is linear slope.
  • +
  • 0 is x^n with n being the coefficient set in off_shape.
  • +
  • 1 is n^x.
  • +
  • 2 logarithmic, possibly not implemented in any SFZ player.
  • +
  • 10 is vendor-specific math.
  • +
+

Examples

+
off_curve=-1
+off_curve=10
+
+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
off_curveARIAinteger10-2, -1, 0, 1, 2, 10
+

See also: off_shape, off_time

+

Category: Instrument Settings, Voice Lifecycle

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/off_mode/index.html b/opcodes/off_mode/index.html new file mode 100644 index 000000000..ea205f4bd --- /dev/null +++ b/opcodes/off_mode/index.html @@ -0,0 +1,748 @@ + + + + + + + + + off_mode - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

off_mode

+

Region off mode.

Region off mode. This opcode will determinate how a region is turned off by an +off_by opcode. There are two choices:

+
    +
  • 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.
  • +
+

ARIA also adds off_mode=time which can be used to specify a time independent +of the sample release time using off_time, +and also off_shape and off_curve to control the curve of the fadeout. +In ARIA, time is actually the default value with a default off_time of 6 ms. +6 ms is also the fadeout time for off_mode=fast so these are equivalent +in end result, but time is the true default value "under the hood".

+

Examples

+
off_mode=fast
+
+off_mode=normal
+
+

Note that the default is fast, and not normal, which means that +"normal isn't normal", and if normal is needed, it will need to be set explicitly. +Normal is useful for legato instruments where a fading in the previous samples +while the new one fades in is desirable, and can also be useful for making hi-hat +muting behavior sound a little more natural. With longer release times, +off_mode=normal is also a way to manage buildup in instruments which have a very +long sustain and can have the sound of several notes build up - for example, +hammered dulcimers or ride cymbals.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
off_modeSFZ v1stringfastfast, normal
ARIAtime
+

Category: Instrument Settings, Voice Lifecycle

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/off_shape/index.html b/opcodes/off_shape/index.html new file mode 100644 index 000000000..e5a81f52a --- /dev/null +++ b/opcodes/off_shape/index.html @@ -0,0 +1,721 @@ + + + + + + + + + off_shape - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

off_shape

+

The coefficient used by off_curve.

Like ampeg_release_shape, +but for regions being muted by polyphony limitations.

+

Examples

+
off_shape=2.1
+off_shape=-3.8
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
off_shapeARIAfloat-10.3616N/A
+

See also: off_curve, off_time

+

Category: Instrument Settings, Voice Lifecycle

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/off_time/index.html b/opcodes/off_time/index.html new file mode 100644 index 000000000..a9a9f4a94 --- /dev/null +++ b/opcodes/off_time/index.html @@ -0,0 +1,719 @@ + + + + + + + + + off_time - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

off_time

+

When off_mode is set to time, this specifies the fadeout time for regions being muted by voice-stealing.

Examples

+
off_time=0.1
+off_time=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
off_timeARIAfloat0.006N/A
+

See also: off_curve, off_shape

+

Category: Instrument Settings, Voice Lifecycle

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/offby/index.html b/opcodes/offby/index.html new file mode 100644 index 000000000..ab2951a61 --- /dev/null +++ b/opcodes/offby/index.html @@ -0,0 +1,737 @@ + + + + + + + + + offby - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

off_by

+

Region off group.

When a new region with a group number equal to off_by plays, +this region will be turned off.

+

Examples

+
off_by=3
+
+off_by=334
+
+

This is used in conjunction with group to make things +monophonic, but can also be used in other contexts where one sound should cause +another to stop - for example, cymbal chokes.

+

Practical considerations

+

With the default for both group and off_by being 0, any instruments that +leave these default values in place should in theory be monophonic. As a +workaround, rgc sfz, Cakewalk players, BassMIDI and LinuxSampler implement +special behavior where if group=0 and off_by=0, regions are not muted, +and muting only happens for non-zero values of off_by. ARIA/Sforzando +has a different workaround, with the default value of off_by being 4294967295.

+

The actual minimum and maximum values are not currently known. Some players +will treat numbers outside a certain range as equivalent to off_by=0, and +ARIA/Sforzando will also do this with text strings. The behavior of +non-integer numbers is also currently unknown. This makes it possible to use +an extremely large number for one group/off_by combination, but it's obviously +not recommended.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
off_bySFZ v1integer0-2147483648 to 2147483647N/A
+

Category: Instrument Settings, Voice Lifecycle

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/offset/index.html b/opcodes/offset/index.html new file mode 100644 index 000000000..61c79b6f0 --- /dev/null +++ b/opcodes/offset/index.html @@ -0,0 +1,755 @@ + + + + + + + + + offset - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

offset

+

The offset used to play the sample.

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. Note that this if this causes the region to play from a point +where the value in the file is not zero, this may result in a click in the audio. +When modulating offset with a MIDI CC, it's generally not possible to ensure the +offset will always land on a near-zero point, so a small ampeg_attack +value can be used to create a quick fade-in and avoid clicks.

+

Also, when using a player with disk streaming, such as Sforzando/ARIA, which does not +load entire samples to memory but instead preloads on only the start (usually about +half a second, following the original Gigasampler method), it is generally not a good +idea to use MIDI CC modulate offset by high values so high that they would cause the +offset to exceeed this buffer. In practice, that means keeping offset_random no higher +than 20000 or so on most systems.

+

Examples

+
offset=3000
+offset=32425
+
+offset_cc1=3000
+offset_cc64=1388
+
+

Uses include: +- having the player skip pre-attack pick noise in guitar samples +- phase-aligning samples from various microphones +- skipping the start of a saxophone sample in legato instruments

+

offset_ccN is useful to specify an alternate sample start point based +on MIDI controllers.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
offsetSFZ v1integer00 to 4294967296sample units
Modulations
offset_ccNinteger00 to 4294967296sample units
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/offset_ccN/index.html b/opcodes/offset_ccN/index.html new file mode 100644 index 000000000..2ae2d53e1 --- /dev/null +++ b/opcodes/offset_ccN/index.html @@ -0,0 +1,755 @@ + + + + + + + + + offset_ccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

offset

+

The offset used to play the sample.

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. Note that this if this causes the region to play from a point +where the value in the file is not zero, this may result in a click in the audio. +When modulating offset with a MIDI CC, it's generally not possible to ensure the +offset will always land on a near-zero point, so a small ampeg_attack +value can be used to create a quick fade-in and avoid clicks.

+

Also, when using a player with disk streaming, such as Sforzando/ARIA, which does not +load entire samples to memory but instead preloads on only the start (usually about +half a second, following the original Gigasampler method), it is generally not a good +idea to use MIDI CC modulate offset by high values so high that they would cause the +offset to exceeed this buffer. In practice, that means keeping offset_random no higher +than 20000 or so on most systems.

+

Examples

+
offset=3000
+offset=32425
+
+offset_cc1=3000
+offset_cc64=1388
+
+

Uses include: +- having the player skip pre-attack pick noise in guitar samples +- phase-aligning samples from various microphones +- skipping the start of a saxophone sample in legato instruments

+

offset_ccN is useful to specify an alternate sample start point based +on MIDI controllers.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
offsetSFZ v1integer00 to 4294967296sample units
Modulations
offset_ccNinteger00 to 4294967296sample units
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/offset_mode/index.html b/opcodes/offset_mode/index.html new file mode 100644 index 000000000..a858e47e1 --- /dev/null +++ b/opcodes/offset_mode/index.html @@ -0,0 +1,720 @@ + + + + + + + + + offset_mode - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

offset_mode

+

Defines whether offset is measured in samples or percentage of sample length.

An ARIA extension that can be used to set offset to a percentage of the +total sample length, instead of being measured in sample units. It +applies to both fixed offset and offset modulated by MIDI CC.

+

Examples

+
offset_mode=percent
+offset_oncc25=50
+
+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
offset_modeARIAstringsamplessamples, percent
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/offset_onccN/index.html b/opcodes/offset_onccN/index.html new file mode 100644 index 000000000..5e7351fb2 --- /dev/null +++ b/opcodes/offset_onccN/index.html @@ -0,0 +1,755 @@ + + + + + + + + + offset_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

offset

+

The offset used to play the sample.

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. Note that this if this causes the region to play from a point +where the value in the file is not zero, this may result in a click in the audio. +When modulating offset with a MIDI CC, it's generally not possible to ensure the +offset will always land on a near-zero point, so a small ampeg_attack +value can be used to create a quick fade-in and avoid clicks.

+

Also, when using a player with disk streaming, such as Sforzando/ARIA, which does not +load entire samples to memory but instead preloads on only the start (usually about +half a second, following the original Gigasampler method), it is generally not a good +idea to use MIDI CC modulate offset by high values so high that they would cause the +offset to exceeed this buffer. In practice, that means keeping offset_random no higher +than 20000 or so on most systems.

+

Examples

+
offset=3000
+offset=32425
+
+offset_cc1=3000
+offset_cc64=1388
+
+

Uses include: +- having the player skip pre-attack pick noise in guitar samples +- phase-aligning samples from various microphones +- skipping the start of a saxophone sample in legato instruments

+

offset_ccN is useful to specify an alternate sample start point based +on MIDI controllers.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
offsetSFZ v1integer00 to 4294967296sample units
Modulations
offset_ccNinteger00 to 4294967296sample units
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/offset_random/index.html b/opcodes/offset_random/index.html new file mode 100644 index 000000000..8ab8046e9 --- /dev/null +++ b/opcodes/offset_random/index.html @@ -0,0 +1,732 @@ + + + + + + + + + offset_random - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

offset_random

+

Random offset added to the region offset.

In many cases, will need to be used with a small ampeg_attack +value to avoid clicks caused by the region playing starting with a point +in the sample file where the value is non-zero. Computed when the note is +triggered. Unipolar in ARIA, Cakewalk and rcg sfz.

+

Note: when using a player with disk streaming, such as Sforzando/ARIA, which does +not load entire samples to memory but instead preloads on only the start (usually +about half a second, following the original Gigasampler method), it is generally +not a good idea to make the offset_random values so high that they would cause the +offset to exceeed this buffer. In practice, that means keeping offset_random no +higher than 20000 or so on most systems.

+

Examples

+
offset_random=300
+
+offset_random=100
+
+

Potential uses: randomizing the phase alignment of multiple samples playing in +unison; playing a looped sample from a randomized start point in order to create +natural variation.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
offset_randomSFZ v1integer00 to 4294967296sample units
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/on_hiccN/index.html b/opcodes/on_hiccN/index.html new file mode 100644 index 000000000..393891664 --- /dev/null +++ b/opcodes/on_hiccN/index.html @@ -0,0 +1,732 @@ + + + + + + + + + on_loccN / on_hiccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

on_loccN / on_hiccN

+

If a MIDI control message with a value between on_loccN and on_hiccN is received, the region will play. Default value is -1, it means unassigned.

Sample trigger on MIDI continuous control N. +This does not involve playing any MIDI notes.

+

Example

+
on_locc64=127 on_hicc64=127
+
+

Region will play when a MIDI CC64 (sustain pedal) message with 127 value is +received. So, basically, when the sustain pedal is pressed down, this region will play. +This is useful with piano pedals - in the above example, on_loccN and on_hiccN +could be used to trigger a mechanical noise sample, whether any keys are being played +or not. It would not typically be used with hi-hat pedals, as most electronic drum kits +will send a MIDI note when the pedal hits bottom.

+

Practical Considerations

+

on_locc/on_hicc effectively replaces the default trigger=attack. +The behavior of a region which has on_locc/on_hicc and trigger=attack both explicitly +specified is not defined by the SFZ specification, and that combination should be used.

+

In ARIA if on_locc/on_hicc and trigger=release or trigger=release_key is used, the +on_locc/on_hicc opcode will be effectively disregarded, and the region will behave +like a normal release or release_key region.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
on_hiccNSFZ v1integer-10 to 127N/A
+

Category: Region Logic, Triggers

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/on_hihdccN/index.html b/opcodes/on_hihdccN/index.html new file mode 100644 index 000000000..381842025 --- /dev/null +++ b/opcodes/on_hihdccN/index.html @@ -0,0 +1,717 @@ + + + + + + + + + on_lohdccN / on_hihdccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

on_lohdccN / on_hihdccN

+

Like on_hiccN but with floating point MIDI CCs.

Example

+
on_lohdcc64=1 on_hihdcc64=1
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
on_hihdccNARIAfloat-10 to 1N/A
+

Category: Region Logic, Triggers

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/on_loccN/index.html b/opcodes/on_loccN/index.html new file mode 100644 index 000000000..4424d7e76 --- /dev/null +++ b/opcodes/on_loccN/index.html @@ -0,0 +1,732 @@ + + + + + + + + + on_loccN / on_hiccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

on_loccN / on_hiccN

+

If a MIDI control message with a value between on_loccN and on_hiccN is received, the region will play. Default value is -1, it means unassigned.

Sample trigger on MIDI continuous control N. +This does not involve playing any MIDI notes.

+

Example

+
on_locc64=127 on_hicc64=127
+
+

Region will play when a MIDI CC64 (sustain pedal) message with 127 value is +received. So, basically, when the sustain pedal is pressed down, this region will play. +This is useful with piano pedals - in the above example, on_loccN and on_hiccN +could be used to trigger a mechanical noise sample, whether any keys are being played +or not. It would not typically be used with hi-hat pedals, as most electronic drum kits +will send a MIDI note when the pedal hits bottom.

+

Practical Considerations

+

on_locc/on_hicc effectively replaces the default trigger=attack. +The behavior of a region which has on_locc/on_hicc and trigger=attack both explicitly +specified is not defined by the SFZ specification, and that combination should be used.

+

In ARIA if on_locc/on_hicc and trigger=release or trigger=release_key is used, the +on_locc/on_hicc opcode will be effectively disregarded, and the region will behave +like a normal release or release_key region.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
on_loccNSFZ v1integer-10 to 127N/A
+

Category: Region Logic, Triggers

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/on_lohdccN/index.html b/opcodes/on_lohdccN/index.html new file mode 100644 index 000000000..df06184ae --- /dev/null +++ b/opcodes/on_lohdccN/index.html @@ -0,0 +1,717 @@ + + + + + + + + + on_lohdccN / on_hihdccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

on_lohdccN / on_hihdccN

+

Like on_loccN but with floating point MIDI CCs.

Example

+
on_lohdcc64=1 on_hihdcc64=1
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
on_lohdccNARIAfloat-10 to 1N/A
+

Category: Region Logic, Triggers

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/oscillator/index.html b/opcodes/oscillator/index.html new file mode 100644 index 000000000..e9627f60a --- /dev/null +++ b/opcodes/oscillator/index.html @@ -0,0 +1,714 @@ + + + + + + + + + oscillator - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

oscillator

+

+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
oscillatorSFZ v2stringN/Aon, off
+

Category: Wavetable Oscillator

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/oscillator_detune/index.html b/opcodes/oscillator_detune/index.html new file mode 100644 index 000000000..ce683ef45 --- /dev/null +++ b/opcodes/oscillator_detune/index.html @@ -0,0 +1,730 @@ + + + + + + + + + oscillator_detune - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

oscillator_detune

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
oscillator_detuneSFZ v2N/AN/AN/A
Modulations
oscillator_detune_onccNN/AN/AN/A
+

Category: Wavetable Oscillator

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/oscillator_detune_onccN/index.html b/opcodes/oscillator_detune_onccN/index.html new file mode 100644 index 000000000..0215016ca --- /dev/null +++ b/opcodes/oscillator_detune_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + oscillator_detune_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

oscillator_detune

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
oscillator_detuneSFZ v2N/AN/AN/A
Modulations
oscillator_detune_onccNN/AN/AN/A
+

Category: Wavetable Oscillator

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/oscillator_mod_depth/index.html b/opcodes/oscillator_mod_depth/index.html new file mode 100644 index 000000000..e1e1f5090 --- /dev/null +++ b/opcodes/oscillator_mod_depth/index.html @@ -0,0 +1,738 @@ + + + + + + + + + oscillator_mod_depth - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

oscillator_mod_depth

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
oscillator_mod_depthSFZ v2N/AN/AN/A
Modulations
oscillator_mod_depth_onccNN/AN/AN/A
oscillator_mod_smoothccNN/AN/AN/A
+

Category: Wavetable Oscillator

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/oscillator_mod_depth_onccN/index.html b/opcodes/oscillator_mod_depth_onccN/index.html new file mode 100644 index 000000000..0b64b2d9b --- /dev/null +++ b/opcodes/oscillator_mod_depth_onccN/index.html @@ -0,0 +1,738 @@ + + + + + + + + + oscillator_mod_depth_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

oscillator_mod_depth

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
oscillator_mod_depthSFZ v2N/AN/AN/A
Modulations
oscillator_mod_depth_onccNN/AN/AN/A
oscillator_mod_smoothccNN/AN/AN/A
+

Category: Wavetable Oscillator

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/oscillator_mod_smoothccN/index.html b/opcodes/oscillator_mod_smoothccN/index.html new file mode 100644 index 000000000..6e5fc1775 --- /dev/null +++ b/opcodes/oscillator_mod_smoothccN/index.html @@ -0,0 +1,738 @@ + + + + + + + + + oscillator_mod_smoothccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

oscillator_mod_depth

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
oscillator_mod_depthSFZ v2N/AN/AN/A
Modulations
oscillator_mod_depth_onccNN/AN/AN/A
oscillator_mod_smoothccNN/AN/AN/A
+

Category: Wavetable Oscillator

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/oscillator_mode/index.html b/opcodes/oscillator_mode/index.html new file mode 100644 index 000000000..02a05e789 --- /dev/null +++ b/opcodes/oscillator_mode/index.html @@ -0,0 +1,719 @@ + + + + + + + + + oscillator_mode - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

oscillator_mode

+

The modulation type.

    +
  • 0: Normal or ring modulation, see also oscillator_multi
  • +
  • 1: Phase modulation
  • +
  • 2: Frequency modulation
  • +
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
oscillator_modeSFZ v2integer00 to 2N/A
+

Category: Wavetable Oscillator

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/oscillator_multi/index.html b/opcodes/oscillator_multi/index.html new file mode 100644 index 000000000..82716bd2d --- /dev/null +++ b/opcodes/oscillator_multi/index.html @@ -0,0 +1,802 @@ + + + + + + + + + oscillator_multi - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

oscillator_multi

+

Configure a region to use more than one oscillator.

Assuming oscillator_mode=0:

+
    +
  • If the value is 1, the region operates normally, in single oscillator mode.
  • +
  • If the value is 2, the region operates in ring modulation mode.
  • +
  • If between 3 and 9, this defines a unison, + with the value being the number of oscillators. + In this case, oscillator_detune must also be set + to indicate the spread between the oscillators.
  • +
+

Cakewalk unison

+

Let m be the number of oscillators defined by oscillator_multi, +and d the detune value defined by oscillator_detune.

+

The array of m oscillators is tuned by multiplying d +for each oscillator by its coefficient.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OscillatorCoefficient
10
2-1
31
4-1/4
51/4
6-1/2
71/2
8-3/4
93/4
{: .table .table-sm .table-bordered .table-striped }
+

The oscillators sum into left and right channels with declining linear gain, +opposite for each channel. +With i the number of the oscillator (starting at 1), +the left gain is (i-1)/(m-1), and the right gain is 1-((i-1)/(m-1)).

+

Example

+
/*
+# Left:
+  [4]   25 cents,        0 dB
+  [3]  -25 cents, -2.49878 dB
+  [2]  100 cents,  -6.0206 dB
+  [1] -100 cents, -12.0412 dB
+  [0]    0 cents,     -inf dB
+
+# Right:
+  [0]    0 cents,        0 dB
+  [1] -100 cents, -2.49878 dB
+  [2]  100 cents,  -6.0206 dB
+  [3]  -25 cents, -12.0412 dB
+  [4]   25 cents,     -inf dB
+*/
+<region>
+oscillator_detune=100
+oscillator_multi=5
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
oscillator_multiSFZ v2integer11 to 9N/A
+

Category: Wavetable Oscillator

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/oscillator_phase/index.html b/opcodes/oscillator_phase/index.html new file mode 100644 index 000000000..378a56f37 --- /dev/null +++ b/opcodes/oscillator_phase/index.html @@ -0,0 +1,715 @@ + + + + + + + + + oscillator_phase - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

oscillator_phase

+

Oscillator phase. Negative values for random phase.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
oscillator_phaseSFZ v2floatN/A-1 to 360°
+

Category: Wavetable Oscillator

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/oscillator_quality/index.html b/opcodes/oscillator_quality/index.html new file mode 100644 index 000000000..72b568829 --- /dev/null +++ b/opcodes/oscillator_quality/index.html @@ -0,0 +1,715 @@ + + + + + + + + + oscillator_quality - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

oscillator_quality

+

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
oscillator_qualitySFZ v2integerN/A0 to 3N/A
+

Category: Wavetable Oscillator

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/oscillator_table_size/index.html b/opcodes/oscillator_table_size/index.html new file mode 100644 index 000000000..a79eddc29 --- /dev/null +++ b/opcodes/oscillator_table_size/index.html @@ -0,0 +1,715 @@ + + + + + + + + + oscillator_table_size - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

oscillator_table_size

+

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
oscillator_table_sizeSFZ v2N/AN/AN/A
+

Category: Wavetable Oscillator

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/output/index.html b/opcodes/output/index.html new file mode 100644 index 000000000..5e92d43b4 --- /dev/null +++ b/opcodes/output/index.html @@ -0,0 +1,721 @@ + + + + + + + + + output - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

output

+

The stereo output number for this region.

If the player doesn't feature multiple outputs (which most currently do not), +this opcode is ignored.

+

Examples

+
output=0
+
+output=4
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
outputSFZ v1integer00 to 1024N/A
+

Category: Instrument Settings, Voice Lifecycle

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pan/index.html b/opcodes/pan/index.html new file mode 100644 index 000000000..4d691283d --- /dev/null +++ b/opcodes/pan/index.html @@ -0,0 +1,763 @@ + + + + + + + + + pan - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pan

+

The panoramic position for the region.

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.

+

Examples

+
pan=-30.5
+pan=0
+pan=43
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
panSFZ v1float0-100 to 100%
Modulations
pan_onccNSFZ v2N/AN/AN/A
pan_curveccNSFZ v2integer00 to 255N/A
pan_smoothccNSFZ v2N/AN/AN/A
pan_stepccNSFZ v2N/AN/AN/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pan_ccN/index.html b/opcodes/pan_ccN/index.html new file mode 100644 index 000000000..e6b131c6b --- /dev/null +++ b/opcodes/pan_ccN/index.html @@ -0,0 +1,763 @@ + + + + + + + + + pan_ccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pan

+

The panoramic position for the region.

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.

+

Examples

+
pan=-30.5
+pan=0
+pan=43
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
panSFZ v1float0-100 to 100%
Modulations
pan_onccNSFZ v2N/AN/AN/A
pan_curveccNSFZ v2integer00 to 255N/A
pan_smoothccNSFZ v2N/AN/AN/A
pan_stepccNSFZ v2N/AN/AN/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pan_curveccN/index.html b/opcodes/pan_curveccN/index.html new file mode 100644 index 000000000..200b6086b --- /dev/null +++ b/opcodes/pan_curveccN/index.html @@ -0,0 +1,763 @@ + + + + + + + + + pan_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pan

+

The panoramic position for the region.

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.

+

Examples

+
pan=-30.5
+pan=0
+pan=43
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
panSFZ v1float0-100 to 100%
Modulations
pan_onccNSFZ v2N/AN/AN/A
pan_curveccNSFZ v2integer00 to 255N/A
pan_smoothccNSFZ v2N/AN/AN/A
pan_stepccNSFZ v2N/AN/AN/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pan_keycenter/index.html b/opcodes/pan_keycenter/index.html new file mode 100644 index 000000000..e45a5a4e6 --- /dev/null +++ b/opcodes/pan_keycenter/index.html @@ -0,0 +1,719 @@ + + + + + + + + + pan_keycenter - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pan_keycenter

+

Center key for pan keyboard tracking.

In this key, pan_keytrack will have no effect.

+

Examples

+
pan_keycenter=48
+amp_keycenter=65
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pan_keycenterSFZ v2integer600 to 127N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pan_keytrack/index.html b/opcodes/pan_keytrack/index.html new file mode 100644 index 000000000..aee2876cc --- /dev/null +++ b/opcodes/pan_keytrack/index.html @@ -0,0 +1,722 @@ + + + + + + + + + pan_keytrack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pan_keytrack

+

The amount by which the panning of a note is shifted with each key.

Positive values mean higher notes are panned more to the right, negative means +higher notes are panned more to the left. +In most cases, this will be a small value. The note at which this is centered +(at which the effect of pan_keytrack is 0) is set using pan_keycenter.

+

Examples

+
pan_keytrack=8
+pan_keytrack=-1.3
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pan_keytrackSFZ v2float0-100 to 100%
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pan_law/index.html b/opcodes/pan_law/index.html new file mode 100644 index 000000000..a72bb43c4 --- /dev/null +++ b/opcodes/pan_law/index.html @@ -0,0 +1,720 @@ + + + + + + + + + pan_law - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pan_law

+

Sets the pan law to be used.

Allowed values are balance and mma. In earlier versions of ARIA, +no_law was also supported but that was later deprecated, +and if no_law is specified then balance will be used.

+

Examples

+
pan_law=balance
+pan_law=mma
+
+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
pan_lawARIAstringN/Amma, balance
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pan_onccN/index.html b/opcodes/pan_onccN/index.html new file mode 100644 index 000000000..64f956672 --- /dev/null +++ b/opcodes/pan_onccN/index.html @@ -0,0 +1,763 @@ + + + + + + + + + pan_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pan

+

The panoramic position for the region.

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.

+

Examples

+
pan=-30.5
+pan=0
+pan=43
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
panSFZ v1float0-100 to 100%
Modulations
pan_onccNSFZ v2N/AN/AN/A
pan_curveccNSFZ v2integer00 to 255N/A
pan_smoothccNSFZ v2N/AN/AN/A
pan_stepccNSFZ v2N/AN/AN/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pan_random/index.html b/opcodes/pan_random/index.html new file mode 100644 index 000000000..2efe21787 --- /dev/null +++ b/opcodes/pan_random/index.html @@ -0,0 +1,715 @@ + + + + + + + + + pan_random - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pan_random

+

Random panoramic position for the region.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pan_randomARIAfloat0-100 to 100%
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pan_smoothccN/index.html b/opcodes/pan_smoothccN/index.html new file mode 100644 index 000000000..b4eb812bb --- /dev/null +++ b/opcodes/pan_smoothccN/index.html @@ -0,0 +1,763 @@ + + + + + + + + + pan_smoothccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pan

+

The panoramic position for the region.

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.

+

Examples

+
pan=-30.5
+pan=0
+pan=43
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
panSFZ v1float0-100 to 100%
Modulations
pan_onccNSFZ v2N/AN/AN/A
pan_curveccNSFZ v2integer00 to 255N/A
pan_smoothccNSFZ v2N/AN/AN/A
pan_stepccNSFZ v2N/AN/AN/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pan_stepccN/index.html b/opcodes/pan_stepccN/index.html new file mode 100644 index 000000000..fabc71870 --- /dev/null +++ b/opcodes/pan_stepccN/index.html @@ -0,0 +1,763 @@ + + + + + + + + + pan_stepccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pan

+

The panoramic position for the region.

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.

+

Examples

+
pan=-30.5
+pan=0
+pan=43
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
panSFZ v1float0-100 to 100%
Modulations
pan_onccNSFZ v2N/AN/AN/A
pan_curveccNSFZ v2integer00 to 255N/A
pan_smoothccNSFZ v2N/AN/AN/A
pan_stepccNSFZ v2N/AN/AN/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pan_veltrack/index.html b/opcodes/pan_veltrack/index.html new file mode 100644 index 000000000..1726ca90b --- /dev/null +++ b/opcodes/pan_veltrack/index.html @@ -0,0 +1,720 @@ + + + + + + + + + pan_veltrack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pan_veltrack

+

The effect of note velocity on panning.

With positive values, higher-velocity notes will be panned more to the right, +with negative values more to the left.

+

Examples

+
pan_veltrack=100
+pan_veltrack=-40
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pan_veltrackSFZ v2float0-100 to 100%
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/param_offset/index.html b/opcodes/param_offset/index.html new file mode 100644 index 000000000..38b15025f --- /dev/null +++ b/opcodes/param_offset/index.html @@ -0,0 +1,739 @@ + + + + + + + + + param_offset - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

param_offset

+

Adds a number to the parameter numbers of built-in or vendor-specific effects.

Multiples of 100 seem most convenient, because with param_offset=300 that would +put the first parameter on 300, second on 301, third on 302 and so on, but other +integer values can also be used. These then can be used like MIDI CC, but with +numbers above 127. In practice with the Sforzando SFZ player, it appears that +values that result in all the effect parameters falling between 257 and 500 work +best. Higher numbers work, but may not be accessible to DAWs for automation etc.

+

Examples

+
param_offset=300
+param_offset=400
+param_offset=412
+
+

This is how this can actually be used with Sforzando's built in +MDA Limiter ‹effect›:

+
<control>
+label_cc400=Limiter Thresh
+label_cc401=Limiter Level
+
+set_cc400=63
+set_cc401=63
+
+
+<effect>
+param_offset=400
+type=com.mda.Limiter
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
param_offsetARIAintegerN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/phase/index.html b/opcodes/phase/index.html new file mode 100644 index 000000000..feb187e47 --- /dev/null +++ b/opcodes/phase/index.html @@ -0,0 +1,721 @@ + + + + + + + + + phase - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

phase

+

If invert is set, the region is played with inverted phase.

Example

+
phase=invert
+
+

Practical Considerations

+

Based on testing in Sforzando, this works with both samples and generated sound +such as sample=sine, except for sample=noise. Noise might still be inverted, +but as it's randomly generated separately for each region, playing a noise region +and a phase-inverted noise region at once will still result in noise, not silence.

+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
phaseSFZ v2stringnormalnormal, invert
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/phaser_depth/index.html b/opcodes/phaser_depth/index.html new file mode 100644 index 000000000..86fbe281c --- /dev/null +++ b/opcodes/phaser_depth/index.html @@ -0,0 +1,730 @@ + + + + + + + + + phaser_depth - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

phaser_depth

+

Used under the ‹effect› header, with type=phaser.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
phaser_depthSFZ v2N/A0 to 100N/A
Modulations
phaser_depth_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/phaser_depth_onccN/index.html b/opcodes/phaser_depth_onccN/index.html new file mode 100644 index 000000000..cdc363580 --- /dev/null +++ b/opcodes/phaser_depth_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + phaser_depth_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

phaser_depth

+

Used under the ‹effect› header, with type=phaser.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
phaser_depthSFZ v2N/A0 to 100N/A
Modulations
phaser_depth_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/phaser_feedback/index.html b/opcodes/phaser_feedback/index.html new file mode 100644 index 000000000..65a79c6cf --- /dev/null +++ b/opcodes/phaser_feedback/index.html @@ -0,0 +1,730 @@ + + + + + + + + + phaser_feedback - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

phaser_feedback

+

Used under the ‹effect› header, with type=phaser.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
phaser_feedbackSFZ v2N/A0 to 100N/A
Modulations
phaser_feedback_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/phaser_feedback_onccN/index.html b/opcodes/phaser_feedback_onccN/index.html new file mode 100644 index 000000000..d02ff19ec --- /dev/null +++ b/opcodes/phaser_feedback_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + phaser_feedback_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

phaser_feedback

+

Used under the ‹effect› header, with type=phaser.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
phaser_feedbackSFZ v2N/A0 to 100N/A
Modulations
phaser_feedback_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/phaser_freq/index.html b/opcodes/phaser_freq/index.html new file mode 100644 index 000000000..e1111b9b0 --- /dev/null +++ b/opcodes/phaser_freq/index.html @@ -0,0 +1,730 @@ + + + + + + + + + phaser_freq - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

phaser_freq

+

Used under the ‹effect› header, with type=phaser.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
phaser_freqSFZ v2floatN/AHz
Modulations
phaser_freq_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/phaser_freq_onccN/index.html b/opcodes/phaser_freq_onccN/index.html new file mode 100644 index 000000000..0544332af --- /dev/null +++ b/opcodes/phaser_freq_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + phaser_freq_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

phaser_freq

+

Used under the ‹effect› header, with type=phaser.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
phaser_freqSFZ v2floatN/AHz
Modulations
phaser_freq_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/phaser_phase_onccN/index.html b/opcodes/phaser_phase_onccN/index.html new file mode 100644 index 000000000..1635a998a --- /dev/null +++ b/opcodes/phaser_phase_onccN/index.html @@ -0,0 +1,715 @@ + + + + + + + + + phaser_phase_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

phaser_phase_onccN

+

Used under the ‹effect› header, with type=phaser.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
phaser_phase_onccNSFZ v2N/A0 to 100N/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/phaser_stages/index.html b/opcodes/phaser_stages/index.html new file mode 100644 index 000000000..5f21ef810 --- /dev/null +++ b/opcodes/phaser_stages/index.html @@ -0,0 +1,715 @@ + + + + + + + + + phaser_stages - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

phaser_stages

+

Used under the ‹effect› header, with type=phaser.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
phaser_stagesSFZ v2N/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/phaser_waveform/index.html b/opcodes/phaser_waveform/index.html new file mode 100644 index 000000000..9189d082d --- /dev/null +++ b/opcodes/phaser_waveform/index.html @@ -0,0 +1,715 @@ + + + + + + + + + phaser_waveform - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

phaser_waveform

+

LFO wave number.

Used under the ‹effect› header, with type=phaser.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
phaser_waveformSFZ v2N/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/phaser_wet/index.html b/opcodes/phaser_wet/index.html new file mode 100644 index 000000000..98406618d --- /dev/null +++ b/opcodes/phaser_wet/index.html @@ -0,0 +1,730 @@ + + + + + + + + + phaser_wet - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

phaser_wet

+

Used under the ‹effect› header, with type=phaser.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
phaser_wetSFZ v2N/A0 to 100N/A
Modulations
phaser_wet_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/phaser_wet_onccN/index.html b/opcodes/phaser_wet_onccN/index.html new file mode 100644 index 000000000..eda417bc6 --- /dev/null +++ b/opcodes/phaser_wet_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + phaser_wet_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

phaser_wet

+

Used under the ‹effect› header, with type=phaser.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
phaser_wetSFZ v2N/A0 to 100N/A
Modulations
phaser_wet_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch/index.html b/opcodes/pitch/index.html new file mode 100644 index 000000000..ee30b0816 --- /dev/null +++ b/opcodes/pitch/index.html @@ -0,0 +1,777 @@ + + + + + + + + + tune / pitch - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

tune / pitch

+

The fine tuning for the sample, in cents.

Range of tune in the SFZ1 spec is ±1 semitone, from -100 to 100, though at least +in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents.

+

Examples

+
tune=33
+tune=-30
+tune=94
+
+

Uses include correcting the intonation of naturally off-pitch samples, and +detuning unison voices.

+

Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the +control needs to go both up and down, there are two ways to do this. One is to move +the pitch down by the tuning range, then have modulation move it up by twice the +tuning range, so that when the control is at the midpoint, the region will play at +its orignal, unmodulated pitch. For a range of 100 cents this would look like this:

+
tune=-100
+pitch_oncc27=200
+
+

Another way is to use default ‹curve› 1 which ranges from -1 to 1, +and set the pitch control to the tuning range.

+
pitch_oncc27=100
+pitch_curvecc27=1
+
+

Practical Considerations

+

In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
tuneSFZ v1integer0-100 to 100cents
Modulations
pitch_onccNSFZ v2N/AN/A-9600 to 9600cents
pitch_curveccNSFZ v2integer00 to 255N/A
pitch_smoothccNSFZ v2float00 to ?ms
pitch_stepccNSFZ v2N/A00 to ?N/A
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_attack/index.html b/opcodes/pitch_attack/index.html new file mode 100644 index 000000000..06b368729 --- /dev/null +++ b/opcodes/pitch_attack/index.html @@ -0,0 +1,752 @@ + + + + + + + + + pitch_attack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_attackSFZ v1float00 to 100seconds
Modulations
pitcheg_attack_onccNARIAN/AN/AN/A
pitcheg_attack_curveccNARIAinteger00 to 255N/A
pitcheg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_curveccN/index.html b/opcodes/pitch_curveccN/index.html new file mode 100644 index 000000000..d6dae22f7 --- /dev/null +++ b/opcodes/pitch_curveccN/index.html @@ -0,0 +1,777 @@ + + + + + + + + + tune / pitch - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

tune / pitch

+

The fine tuning for the sample, in cents.

Range of tune in the SFZ1 spec is ±1 semitone, from -100 to 100, though at least +in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents.

+

Examples

+
tune=33
+tune=-30
+tune=94
+
+

Uses include correcting the intonation of naturally off-pitch samples, and +detuning unison voices.

+

Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the +control needs to go both up and down, there are two ways to do this. One is to move +the pitch down by the tuning range, then have modulation move it up by twice the +tuning range, so that when the control is at the midpoint, the region will play at +its orignal, unmodulated pitch. For a range of 100 cents this would look like this:

+
tune=-100
+pitch_oncc27=200
+
+

Another way is to use default ‹curve› 1 which ranges from -1 to 1, +and set the pitch control to the tuning range.

+
pitch_oncc27=100
+pitch_curvecc27=1
+
+

Practical Considerations

+

In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
tuneSFZ v1integer0-100 to 100cents
Modulations
pitch_onccNSFZ v2N/AN/A-9600 to 9600cents
pitch_curveccNSFZ v2integer00 to 255N/A
pitch_smoothccNSFZ v2float00 to ?ms
pitch_stepccNSFZ v2N/A00 to ?N/A
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_decay/index.html b/opcodes/pitch_decay/index.html new file mode 100644 index 000000000..76ddb6374 --- /dev/null +++ b/opcodes/pitch_decay/index.html @@ -0,0 +1,750 @@ + + + + + + + + + pitch_decay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_decaySFZ v1float00 to 100seconds
Modulations
pitcheg_decay_onccNARIAfloat0-100 to 100N/A
pitcheg_decay_curveccNARIAinteger00 to 255N/A
pitcheg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_delay/index.html b/opcodes/pitch_delay/index.html new file mode 100644 index 000000000..4e36ed18f --- /dev/null +++ b/opcodes/pitch_delay/index.html @@ -0,0 +1,759 @@ + + + + + + + + + pitch_delay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random +are used in the same region, the envelope delays start after delay and +delay_random have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_delaySFZ v1float00 to 100seconds
Modulations
pitcheg_delay_onccNARIAfloat0-100 to 100N/A
pitcheg_delay_curveccNARIAinteger00 to 255N/A
pitcheg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_depth/index.html b/opcodes/pitch_depth/index.html new file mode 100644 index 000000000..d8afb2f10 --- /dev/null +++ b/opcodes/pitch_depth/index.html @@ -0,0 +1,752 @@ + + + + + + + + + pitch_depth - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_depth

+

Envelope depth.

For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. +-12000 cents is 10 octaves.

+

For ampeg, this should not normally be used.

+

Examples

+
fileg_depth=1200
+pitcheg_depth=-100
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_depthSFZ v1integer0-12000 to 12000cents
Modulations
pitcheg_depth_onccNARIAinteger0-12000 to 12000cents
pitcheg_depth_curveccNARIAinteger00 to 255N/A
pitcheg_vel2depthinteger0-12000 to 12000cents
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_hold/index.html b/opcodes/pitch_hold/index.html new file mode 100644 index 000000000..b12bbc35d --- /dev/null +++ b/opcodes/pitch_hold/index.html @@ -0,0 +1,755 @@ + + + + + + + + + pitch_hold - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_holdSFZ v1float00 to 100seconds
Modulations
pitcheg_hold_onccNARIAfloat0-100 to 100N/A
pitcheg_hold_curveccNARIAinteger00 to 255N/A
pitcheg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_keycenter/index.html b/opcodes/pitch_keycenter/index.html new file mode 100644 index 000000000..2fbfde7b4 --- /dev/null +++ b/opcodes/pitch_keycenter/index.html @@ -0,0 +1,737 @@ + + + + + + + + + pitch_keycenter - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitch_keycenter

+

Root key for the sample.

For samples which only need to be played at their +natural pitch and triggered by one specific MIDI note, it's generally easier to +use key instead. Cases using both pitch_keycenter and key are described in +more detail under key.

+

sample as value

+

Starting with SFZ v2, it's possible to set pitch_keycenter to sample +(pitch_keycenter=sample). This causes the SFZ player to look in the sample file +metadata for the keycenter value. If pitch_keycenter is set to sample and the +file metadata does not contain pitch information, it defaults to MIDI note 0.

+

If samples contain good quality metadata, setting pitch_keycenter to sample +can be simpler than setting the keycenter for each individual sample.

+

If pitch_keycenter is set to sample and key is also used, the behavior depends +on the sampler. ARIA uses the value set using the key opcode, while rgc sfz and +Cakewalk products use the value from the sample metadata. ARIA also supports +setting pitch_keycenter to sample only at the <region> level, not at <group> +or higher levels.

+

Examples

+
pitch_keycenter=56
+
+pitch_keycenter=c#2
+
+pitch_keycenter=sample
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitch_keycenterSFZ v1integer600 to 127N/A
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_keytrack/index.html b/opcodes/pitch_keytrack/index.html new file mode 100644 index 000000000..a9cebfce3 --- /dev/null +++ b/opcodes/pitch_keytrack/index.html @@ -0,0 +1,725 @@ + + + + + + + + + pitch_keytrack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

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.

+

Examples

+
pitch_keytrack=20
+
+pitch_keytrack=0
+
+

Most of the time, this will either be 100 (default) or 0, but intermediate +values, values above 100 or negative values are occasionally useful.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitch_keytrackSFZ v1integer100-1200 to 1200cents
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_onccN/index.html b/opcodes/pitch_onccN/index.html new file mode 100644 index 000000000..9075fa7b7 --- /dev/null +++ b/opcodes/pitch_onccN/index.html @@ -0,0 +1,777 @@ + + + + + + + + + tune / pitch - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

tune / pitch

+

The fine tuning for the sample, in cents.

Range of tune in the SFZ1 spec is ±1 semitone, from -100 to 100, though at least +in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents.

+

Examples

+
tune=33
+tune=-30
+tune=94
+
+

Uses include correcting the intonation of naturally off-pitch samples, and +detuning unison voices.

+

Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the +control needs to go both up and down, there are two ways to do this. One is to move +the pitch down by the tuning range, then have modulation move it up by twice the +tuning range, so that when the control is at the midpoint, the region will play at +its orignal, unmodulated pitch. For a range of 100 cents this would look like this:

+
tune=-100
+pitch_oncc27=200
+
+

Another way is to use default ‹curve› 1 which ranges from -1 to 1, +and set the pitch control to the tuning range.

+
pitch_oncc27=100
+pitch_curvecc27=1
+
+

Practical Considerations

+

In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
tuneSFZ v1integer0-100 to 100cents
Modulations
pitch_onccNSFZ v2N/AN/A-9600 to 9600cents
pitch_curveccNSFZ v2integer00 to 255N/A
pitch_smoothccNSFZ v2float00 to ?ms
pitch_stepccNSFZ v2N/A00 to ?N/A
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_random/index.html b/opcodes/pitch_random/index.html new file mode 100644 index 000000000..5870e9f64 --- /dev/null +++ b/opcodes/pitch_random/index.html @@ -0,0 +1,736 @@ + + + + + + + + + pitch_random - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitch_random

+

Random tuning for the region, in cents.

Examples

+

Computed when the note is triggered, +remains the same for that region for as long as the region plays.

+
pitch_random=10
+
+pitch_random=400
+
+

Useful for humanizing the pitch of instruments with naturally imprecise +intonation, especially when playing multiple regions in unison.

+

Practical Considerations

+

In ARIA this is unipolar, and equivalent to pitch_oncc135. +So, if pitch_random is set to 20, the region will play at pitches tuned by an +amount in the range from 0 cents to +20 cents. In order to get pitch to fluctuate +between -20 and +20 cents, there would be two ways to get there, either by +applying a fixed shift of -20 cents and a random shift of up to 40 cents:

+
pitch=-20
+pitch_random=40
+
+

Or use CC136, which is bipolar random from -1 to 1:

+
pitch_oncc136=20
+
+

In rcg sfz and Cakewalk, this is bipolar.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitch_randomSFZ v1integer00 to 9600cents
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_release/index.html b/opcodes/pitch_release/index.html new file mode 100644 index 000000000..9972d9632 --- /dev/null +++ b/opcodes/pitch_release/index.html @@ -0,0 +1,754 @@ + + + + + + + + + pitch_release - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, pitch_release will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will +always play) even if amplifier envelopes are not used otherwise to shape the +sound. Also, pitch_release is used when off_mode is set to normal.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_releaseSFZ v1float00 to 100seconds
Modulations
pitcheg_release_onccNARIAfloat0-100 to 100seconds
pitcheg_release_curveccNARIAinteger00 to 255N/A
pitcheg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_smoothccN/index.html b/opcodes/pitch_smoothccN/index.html new file mode 100644 index 000000000..f46b4f816 --- /dev/null +++ b/opcodes/pitch_smoothccN/index.html @@ -0,0 +1,777 @@ + + + + + + + + + tune / pitch - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

tune / pitch

+

The fine tuning for the sample, in cents.

Range of tune in the SFZ1 spec is ±1 semitone, from -100 to 100, though at least +in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents.

+

Examples

+
tune=33
+tune=-30
+tune=94
+
+

Uses include correcting the intonation of naturally off-pitch samples, and +detuning unison voices.

+

Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the +control needs to go both up and down, there are two ways to do this. One is to move +the pitch down by the tuning range, then have modulation move it up by twice the +tuning range, so that when the control is at the midpoint, the region will play at +its orignal, unmodulated pitch. For a range of 100 cents this would look like this:

+
tune=-100
+pitch_oncc27=200
+
+

Another way is to use default ‹curve› 1 which ranges from -1 to 1, +and set the pitch control to the tuning range.

+
pitch_oncc27=100
+pitch_curvecc27=1
+
+

Practical Considerations

+

In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
tuneSFZ v1integer0-100 to 100cents
Modulations
pitch_onccNSFZ v2N/AN/A-9600 to 9600cents
pitch_curveccNSFZ v2integer00 to 255N/A
pitch_smoothccNSFZ v2float00 to ?ms
pitch_stepccNSFZ v2N/A00 to ?N/A
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_stepccN/index.html b/opcodes/pitch_stepccN/index.html new file mode 100644 index 000000000..9af7fc80b --- /dev/null +++ b/opcodes/pitch_stepccN/index.html @@ -0,0 +1,777 @@ + + + + + + + + + tune / pitch - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

tune / pitch

+

The fine tuning for the sample, in cents.

Range of tune in the SFZ1 spec is ±1 semitone, from -100 to 100, though at least +in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents.

+

Examples

+
tune=33
+tune=-30
+tune=94
+
+

Uses include correcting the intonation of naturally off-pitch samples, and +detuning unison voices.

+

Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the +control needs to go both up and down, there are two ways to do this. One is to move +the pitch down by the tuning range, then have modulation move it up by twice the +tuning range, so that when the control is at the midpoint, the region will play at +its orignal, unmodulated pitch. For a range of 100 cents this would look like this:

+
tune=-100
+pitch_oncc27=200
+
+

Another way is to use default ‹curve› 1 which ranges from -1 to 1, +and set the pitch control to the tuning range.

+
pitch_oncc27=100
+pitch_curvecc27=1
+
+

Practical Considerations

+

In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
tuneSFZ v1integer0-100 to 100cents
Modulations
pitch_onccNSFZ v2N/AN/A-9600 to 9600cents
pitch_curveccNSFZ v2integer00 to 255N/A
pitch_smoothccNSFZ v2float00 to ?ms
pitch_stepccNSFZ v2N/A00 to ?N/A
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_sustain/index.html b/opcodes/pitch_sustain/index.html new file mode 100644 index 000000000..db3d2f278 --- /dev/null +++ b/opcodes/pitch_sustain/index.html @@ -0,0 +1,749 @@ + + + + + + + + + pitch_sustain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_sustainSFZ v1float00 to 100%
Modulations
pitcheg_sustain_onccNARIAfloat0-100 to 100seconds
pitcheg_sustain_curveccNARIAinteger00 to 255N/A
pitcheg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_vel2attack/index.html b/opcodes/pitch_vel2attack/index.html new file mode 100644 index 000000000..4c1d35559 --- /dev/null +++ b/opcodes/pitch_vel2attack/index.html @@ -0,0 +1,752 @@ + + + + + + + + + pitch_vel2attack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_attackSFZ v1float00 to 100seconds
Modulations
pitcheg_attack_onccNARIAN/AN/AN/A
pitcheg_attack_curveccNARIAinteger00 to 255N/A
pitcheg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_vel2decay/index.html b/opcodes/pitch_vel2decay/index.html new file mode 100644 index 000000000..3d5d172da --- /dev/null +++ b/opcodes/pitch_vel2decay/index.html @@ -0,0 +1,750 @@ + + + + + + + + + pitch_vel2decay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_decaySFZ v1float00 to 100seconds
Modulations
pitcheg_decay_onccNARIAfloat0-100 to 100N/A
pitcheg_decay_curveccNARIAinteger00 to 255N/A
pitcheg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_vel2delay/index.html b/opcodes/pitch_vel2delay/index.html new file mode 100644 index 000000000..559d7edb0 --- /dev/null +++ b/opcodes/pitch_vel2delay/index.html @@ -0,0 +1,759 @@ + + + + + + + + + pitch_vel2delay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random +are used in the same region, the envelope delays start after delay and +delay_random have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_delaySFZ v1float00 to 100seconds
Modulations
pitcheg_delay_onccNARIAfloat0-100 to 100N/A
pitcheg_delay_curveccNARIAinteger00 to 255N/A
pitcheg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_vel2depth/index.html b/opcodes/pitch_vel2depth/index.html new file mode 100644 index 000000000..1751fc734 --- /dev/null +++ b/opcodes/pitch_vel2depth/index.html @@ -0,0 +1,752 @@ + + + + + + + + + pitch_vel2depth - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_depth

+

Envelope depth.

For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. +-12000 cents is 10 octaves.

+

For ampeg, this should not normally be used.

+

Examples

+
fileg_depth=1200
+pitcheg_depth=-100
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_depthSFZ v1integer0-12000 to 12000cents
Modulations
pitcheg_depth_onccNARIAinteger0-12000 to 12000cents
pitcheg_depth_curveccNARIAinteger00 to 255N/A
pitcheg_vel2depthinteger0-12000 to 12000cents
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_vel2hold/index.html b/opcodes/pitch_vel2hold/index.html new file mode 100644 index 000000000..74e8c43aa --- /dev/null +++ b/opcodes/pitch_vel2hold/index.html @@ -0,0 +1,755 @@ + + + + + + + + + pitch_vel2hold - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_holdSFZ v1float00 to 100seconds
Modulations
pitcheg_hold_onccNARIAfloat0-100 to 100N/A
pitcheg_hold_curveccNARIAinteger00 to 255N/A
pitcheg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_vel2release/index.html b/opcodes/pitch_vel2release/index.html new file mode 100644 index 000000000..d312691ed --- /dev/null +++ b/opcodes/pitch_vel2release/index.html @@ -0,0 +1,754 @@ + + + + + + + + + pitch_vel2release - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, pitch_vel2release will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will +always play) even if amplifier envelopes are not used otherwise to shape the +sound. Also, pitch_vel2release is used when off_mode is set to normal.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_releaseSFZ v1float00 to 100seconds
Modulations
pitcheg_release_onccNARIAfloat0-100 to 100seconds
pitcheg_release_curveccNARIAinteger00 to 255N/A
pitcheg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_vel2sustain/index.html b/opcodes/pitch_vel2sustain/index.html new file mode 100644 index 000000000..1efaece8d --- /dev/null +++ b/opcodes/pitch_vel2sustain/index.html @@ -0,0 +1,749 @@ + + + + + + + + + pitch_vel2sustain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_sustainSFZ v1float00 to 100%
Modulations
pitcheg_sustain_onccNARIAfloat0-100 to 100seconds
pitcheg_sustain_curveccNARIAinteger00 to 255N/A
pitcheg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitch_veltrack/index.html b/opcodes/pitch_veltrack/index.html new file mode 100644 index 000000000..988202a89 --- /dev/null +++ b/opcodes/pitch_veltrack/index.html @@ -0,0 +1,721 @@ + + + + + + + + + pitch_veltrack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitch_veltrack

+

Pitch velocity tracking, represents how much the pitch changes with incoming note velocity, in cents.

Examples

+
pitch_veltrack=0
+
+pitch_veltrack=1200
+
+

This can be useful when trying to emulate dynamic response on drum samples +recorded at only one velocity.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitch_veltrackSFZ v1integer0-9600 to 9600cents
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_attack/index.html b/opcodes/pitcheg_attack/index.html new file mode 100644 index 000000000..155112d2c --- /dev/null +++ b/opcodes/pitcheg_attack/index.html @@ -0,0 +1,752 @@ + + + + + + + + + pitcheg_attack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_attackSFZ v1float00 to 100seconds
Modulations
pitcheg_attack_onccNARIAN/AN/AN/A
pitcheg_attack_curveccNARIAinteger00 to 255N/A
pitcheg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_attack_curveccN/index.html b/opcodes/pitcheg_attack_curveccN/index.html new file mode 100644 index 000000000..729c099c2 --- /dev/null +++ b/opcodes/pitcheg_attack_curveccN/index.html @@ -0,0 +1,752 @@ + + + + + + + + + pitcheg_attack_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_attackSFZ v1float00 to 100seconds
Modulations
pitcheg_attack_onccNARIAN/AN/AN/A
pitcheg_attack_curveccNARIAinteger00 to 255N/A
pitcheg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_attack_onccN/index.html b/opcodes/pitcheg_attack_onccN/index.html new file mode 100644 index 000000000..892ded76e --- /dev/null +++ b/opcodes/pitcheg_attack_onccN/index.html @@ -0,0 +1,752 @@ + + + + + + + + + pitcheg_attack_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_attackSFZ v1float00 to 100seconds
Modulations
pitcheg_attack_onccNARIAN/AN/AN/A
pitcheg_attack_curveccNARIAinteger00 to 255N/A
pitcheg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_attack_shape/index.html b/opcodes/pitcheg_attack_shape/index.html new file mode 100644 index 000000000..7bb6898eb --- /dev/null +++ b/opcodes/pitcheg_attack_shape/index.html @@ -0,0 +1,725 @@ + + + + + + + + + pitcheg_attack_shape - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_attack_shape

+

Specifies the curvature of attack stage of the envelope.

0 is linear. Positive values are slower curves (that means the envelope will +initially not fade in much, and most of the fade in will happen towards the end +of the attack period) and negative values faster (quick initial fade in with the +latter part of the attack stage fading in less). Past 10 or -10, there's little +difference - at that point, the envelope is practically a horizontal line and a +vertical line (if positive) or a vertical line followed by a horizontal line +(if negative).

+

Examples

+
ampeg_attack_shape=2.1
+ampeg_attack_shape=-3.8
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_attack_shapeARIAfloat0N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_decay/index.html b/opcodes/pitcheg_decay/index.html new file mode 100644 index 000000000..3902141b3 --- /dev/null +++ b/opcodes/pitcheg_decay/index.html @@ -0,0 +1,750 @@ + + + + + + + + + pitcheg_decay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_decaySFZ v1float00 to 100seconds
Modulations
pitcheg_decay_onccNARIAfloat0-100 to 100N/A
pitcheg_decay_curveccNARIAinteger00 to 255N/A
pitcheg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_decay_curveccN/index.html b/opcodes/pitcheg_decay_curveccN/index.html new file mode 100644 index 000000000..9795da7c8 --- /dev/null +++ b/opcodes/pitcheg_decay_curveccN/index.html @@ -0,0 +1,750 @@ + + + + + + + + + pitcheg_decay_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_decaySFZ v1float00 to 100seconds
Modulations
pitcheg_decay_onccNARIAfloat0-100 to 100N/A
pitcheg_decay_curveccNARIAinteger00 to 255N/A
pitcheg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_decay_onccN/index.html b/opcodes/pitcheg_decay_onccN/index.html new file mode 100644 index 000000000..8a01049f3 --- /dev/null +++ b/opcodes/pitcheg_decay_onccN/index.html @@ -0,0 +1,750 @@ + + + + + + + + + pitcheg_decay_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_decaySFZ v1float00 to 100seconds
Modulations
pitcheg_decay_onccNARIAfloat0-100 to 100N/A
pitcheg_decay_curveccNARIAinteger00 to 255N/A
pitcheg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_decay_shape/index.html b/opcodes/pitcheg_decay_shape/index.html new file mode 100644 index 000000000..cbf2c98f2 --- /dev/null +++ b/opcodes/pitcheg_decay_shape/index.html @@ -0,0 +1,724 @@ + + + + + + + + + pitcheg_decay_shape - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_decay_shape

+

Specifies the curvature of decay stage of the envelope.

0 is linear, positive values are slower curves (that means the envelope will +initially not decay out much, and most of the decay will happen towards the end +of the decay period) and negative values faster (quick initial decay with quiet +tail decaying more slowly). Past 10 or -10, there's little difference - at that +point, the envelope is practically a horizontal line and a vertical line +(if positive) or a vertical line followed by a horizontal line (if negative).

+

Examples

+
ampeg_decay_shape=2.1
+ampeg_decay_shape=-3.8
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_decay_shapeARIAfloat0N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_decay_zero/index.html b/opcodes/pitcheg_decay_zero/index.html new file mode 100644 index 000000000..b9c9bdb4b --- /dev/null +++ b/opcodes/pitcheg_decay_zero/index.html @@ -0,0 +1,726 @@ + + + + + + + + + pitcheg_decay_zero - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_decay_zero

+

Specifies how decay time is calculated.

When set to 1, the decay slope is fixed, and the higher +the sustain level of the envelope, the less time the decay stage will actually +take. Changing pitcheg_sustain will change the actual duration of the decay stage +as well, up to a maximum of the full pitcheg_decay value at pitcheg_sustain +equal to 0.

+

Setting this to 0 will make the decay always happen during the entire +time period specified by pitcheg_decay, regardless of the current +pitcheg_sustain level.

+

Examples

+
pitcheg_decay_zero=0
+pitcheg_decay_zero=1
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_decay_zeroARIAinteger10 to 1N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_delay/index.html b/opcodes/pitcheg_delay/index.html new file mode 100644 index 000000000..d5b4f6b82 --- /dev/null +++ b/opcodes/pitcheg_delay/index.html @@ -0,0 +1,759 @@ + + + + + + + + + pitcheg_delay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random +are used in the same region, the envelope delays start after delay and +delay_random have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_delaySFZ v1float00 to 100seconds
Modulations
pitcheg_delay_onccNARIAfloat0-100 to 100N/A
pitcheg_delay_curveccNARIAinteger00 to 255N/A
pitcheg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_delay_curveccN/index.html b/opcodes/pitcheg_delay_curveccN/index.html new file mode 100644 index 000000000..457354d59 --- /dev/null +++ b/opcodes/pitcheg_delay_curveccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + pitcheg_delay_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random +are used in the same region, the envelope delays start after delay and +delay_random have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_delaySFZ v1float00 to 100seconds
Modulations
pitcheg_delay_onccNARIAfloat0-100 to 100N/A
pitcheg_delay_curveccNARIAinteger00 to 255N/A
pitcheg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_delay_onccN/index.html b/opcodes/pitcheg_delay_onccN/index.html new file mode 100644 index 000000000..74971106b --- /dev/null +++ b/opcodes/pitcheg_delay_onccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + pitcheg_delay_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random +are used in the same region, the envelope delays start after delay and +delay_random have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_delaySFZ v1float00 to 100seconds
Modulations
pitcheg_delay_onccNARIAfloat0-100 to 100N/A
pitcheg_delay_curveccNARIAinteger00 to 255N/A
pitcheg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_depth/index.html b/opcodes/pitcheg_depth/index.html new file mode 100644 index 000000000..68b2f2133 --- /dev/null +++ b/opcodes/pitcheg_depth/index.html @@ -0,0 +1,752 @@ + + + + + + + + + pitcheg_depth - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_depth

+

Envelope depth.

For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. +-12000 cents is 10 octaves.

+

For ampeg, this should not normally be used.

+

Examples

+
fileg_depth=1200
+pitcheg_depth=-100
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_depthSFZ v1integer0-12000 to 12000cents
Modulations
pitcheg_depth_onccNARIAinteger0-12000 to 12000cents
pitcheg_depth_curveccNARIAinteger00 to 255N/A
pitcheg_vel2depthinteger0-12000 to 12000cents
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_depth_curveccN/index.html b/opcodes/pitcheg_depth_curveccN/index.html new file mode 100644 index 000000000..e4e00d9e1 --- /dev/null +++ b/opcodes/pitcheg_depth_curveccN/index.html @@ -0,0 +1,752 @@ + + + + + + + + + pitcheg_depth_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_depth

+

Envelope depth.

For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. +-12000 cents is 10 octaves.

+

For ampeg, this should not normally be used.

+

Examples

+
fileg_depth=1200
+pitcheg_depth=-100
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_depthSFZ v1integer0-12000 to 12000cents
Modulations
pitcheg_depth_onccNARIAinteger0-12000 to 12000cents
pitcheg_depth_curveccNARIAinteger00 to 255N/A
pitcheg_vel2depthinteger0-12000 to 12000cents
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_depth_onccN/index.html b/opcodes/pitcheg_depth_onccN/index.html new file mode 100644 index 000000000..f89503d65 --- /dev/null +++ b/opcodes/pitcheg_depth_onccN/index.html @@ -0,0 +1,752 @@ + + + + + + + + + pitcheg_depth_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_depth

+

Envelope depth.

For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. +-12000 cents is 10 octaves.

+

For ampeg, this should not normally be used.

+

Examples

+
fileg_depth=1200
+pitcheg_depth=-100
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_depthSFZ v1integer0-12000 to 12000cents
Modulations
pitcheg_depth_onccNARIAinteger0-12000 to 12000cents
pitcheg_depth_curveccNARIAinteger00 to 255N/A
pitcheg_vel2depthinteger0-12000 to 12000cents
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_depthccN/index.html b/opcodes/pitcheg_depthccN/index.html new file mode 100644 index 000000000..49b50bc04 --- /dev/null +++ b/opcodes/pitcheg_depthccN/index.html @@ -0,0 +1,752 @@ + + + + + + + + + pitcheg_depthccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_depth

+

Envelope depth.

For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. +-12000 cents is 10 octaves.

+

For ampeg, this should not normally be used.

+

Examples

+
fileg_depth=1200
+pitcheg_depth=-100
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_depthSFZ v1integer0-12000 to 12000cents
Modulations
pitcheg_depth_onccNARIAinteger0-12000 to 12000cents
pitcheg_depth_curveccNARIAinteger00 to 255N/A
pitcheg_vel2depthinteger0-12000 to 12000cents
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_dynamic/index.html b/opcodes/pitcheg_dynamic/index.html new file mode 100644 index 000000000..4c4be9216 --- /dev/null +++ b/opcodes/pitcheg_dynamic/index.html @@ -0,0 +1,720 @@ + + + + + + + + + pitcheg_dynamic - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_dynamic

+

Specifies when envelope durations are recalculated.

When 1, causes envelope segment durations and sustain level to be recalculated when a MIDI CC message modulating those envelopes is received. +When 0, envelope segment durations and sustain level are calculated only at the start of the particular envelope segment.

+

Examples

+
pitcheg_dynamic=1
+pitcheg_dynamic=0
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_dynamicARIAinteger00 to 1N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_hold/index.html b/opcodes/pitcheg_hold/index.html new file mode 100644 index 000000000..5d79aff5a --- /dev/null +++ b/opcodes/pitcheg_hold/index.html @@ -0,0 +1,755 @@ + + + + + + + + + pitcheg_hold - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_holdSFZ v1float00 to 100seconds
Modulations
pitcheg_hold_onccNARIAfloat0-100 to 100N/A
pitcheg_hold_curveccNARIAinteger00 to 255N/A
pitcheg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_hold_curveccN/index.html b/opcodes/pitcheg_hold_curveccN/index.html new file mode 100644 index 000000000..d7e460af6 --- /dev/null +++ b/opcodes/pitcheg_hold_curveccN/index.html @@ -0,0 +1,755 @@ + + + + + + + + + pitcheg_hold_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_holdSFZ v1float00 to 100seconds
Modulations
pitcheg_hold_onccNARIAfloat0-100 to 100N/A
pitcheg_hold_curveccNARIAinteger00 to 255N/A
pitcheg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_hold_onccN/index.html b/opcodes/pitcheg_hold_onccN/index.html new file mode 100644 index 000000000..277a3c906 --- /dev/null +++ b/opcodes/pitcheg_hold_onccN/index.html @@ -0,0 +1,755 @@ + + + + + + + + + pitcheg_hold_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_holdSFZ v1float00 to 100seconds
Modulations
pitcheg_hold_onccNARIAfloat0-100 to 100N/A
pitcheg_hold_curveccNARIAinteger00 to 255N/A
pitcheg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_release/index.html b/opcodes/pitcheg_release/index.html new file mode 100644 index 000000000..fabbb5433 --- /dev/null +++ b/opcodes/pitcheg_release/index.html @@ -0,0 +1,754 @@ + + + + + + + + + pitcheg_release - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, pitcheg_release will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will +always play) even if amplifier envelopes are not used otherwise to shape the +sound. Also, pitcheg_release is used when off_mode is set to normal.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_releaseSFZ v1float00 to 100seconds
Modulations
pitcheg_release_onccNARIAfloat0-100 to 100seconds
pitcheg_release_curveccNARIAinteger00 to 255N/A
pitcheg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_release_curveccN/index.html b/opcodes/pitcheg_release_curveccN/index.html new file mode 100644 index 000000000..dae7ce910 --- /dev/null +++ b/opcodes/pitcheg_release_curveccN/index.html @@ -0,0 +1,754 @@ + + + + + + + + + pitcheg_release_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, pitcheg_release_curveccN will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will +always play) even if amplifier envelopes are not used otherwise to shape the +sound. Also, pitcheg_release_curveccN is used when off_mode is set to normal.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_releaseSFZ v1float00 to 100seconds
Modulations
pitcheg_release_onccNARIAfloat0-100 to 100seconds
pitcheg_release_curveccNARIAinteger00 to 255N/A
pitcheg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_release_onccN/index.html b/opcodes/pitcheg_release_onccN/index.html new file mode 100644 index 000000000..b82ec918c --- /dev/null +++ b/opcodes/pitcheg_release_onccN/index.html @@ -0,0 +1,754 @@ + + + + + + + + + pitcheg_release_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, pitcheg_release_onccN will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will +always play) even if amplifier envelopes are not used otherwise to shape the +sound. Also, pitcheg_release_onccN is used when off_mode is set to normal.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_releaseSFZ v1float00 to 100seconds
Modulations
pitcheg_release_onccNARIAfloat0-100 to 100seconds
pitcheg_release_curveccNARIAinteger00 to 255N/A
pitcheg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_release_shape/index.html b/opcodes/pitcheg_release_shape/index.html new file mode 100644 index 000000000..250e63321 --- /dev/null +++ b/opcodes/pitcheg_release_shape/index.html @@ -0,0 +1,724 @@ + + + + + + + + + pitcheg_release_shape - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_release_shape

+

Specifies the curvature of release stage of the envelope.

0 is linear, positive values are slower curves (that means the envelope will +initially not fade out much, and most of the fade will happen towards the end of +the release period) and negative values faster (quick initial fadeout with quiet +tail fading out more slowly). Past 10 or -10, there's little difference - at +that point, the envelope is practically a horizontal line and a vertical line +(if positive) or a vertical line followed by a horizontal line (if negative).

+

Examples

+
ampeg_release_shape=2.1
+ampeg_release_shape=-3.8
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_release_shapeARIAfloat0N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_release_zero/index.html b/opcodes/pitcheg_release_zero/index.html new file mode 100644 index 000000000..5513e0ad8 --- /dev/null +++ b/opcodes/pitcheg_release_zero/index.html @@ -0,0 +1,723 @@ + + + + + + + + + pitcheg_release_zero - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_release_zero

+

Specifies how release time is calculated.

When 1, indicates release time is the time it would take to get +from 0dBs to -oo, NOT the time to get from the current sustain to zero.

+

In other words, under default behavior, the release time is fixed, while +setting this to 1 makes the release slope fixed but time will be shorter +when sustain level is lower.

+

Examples

+
pitcheg_release_zero=1
+pitcheg_release_zero=0
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_release_zeroARIAinteger00 to 1N/A
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_start/index.html b/opcodes/pitcheg_start/index.html new file mode 100644 index 000000000..d3db52ed9 --- /dev/null +++ b/opcodes/pitcheg_start/index.html @@ -0,0 +1,751 @@ + + + + + + + + + pitcheg_start - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_start

+

Envelope start level, in percentage.

Examples

+
ampeg_start=20
+fileg_start=100
+
+

Setting this to 100 should have the same effect as setting the attack time to 0, +and adding the attack time to the hold time. +Note that in some cases (when the sample starts playing from a point which is +not near zero), setting this to a non-zero value for ampeg_start may result in +sample playback starting with an audible click.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_startSFZ v1float00 to 100%
Modulations
pitcheg_start_onccNARIAfloat0-100 to 100seconds
pitcheg_start_curveccNARIAinteger00 to 255N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_start_curveccN/index.html b/opcodes/pitcheg_start_curveccN/index.html new file mode 100644 index 000000000..ed6b57c2e --- /dev/null +++ b/opcodes/pitcheg_start_curveccN/index.html @@ -0,0 +1,751 @@ + + + + + + + + + pitcheg_start_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_start

+

Envelope start level, in percentage.

Examples

+
ampeg_start=20
+fileg_start=100
+
+

Setting this to 100 should have the same effect as setting the attack time to 0, +and adding the attack time to the hold time. +Note that in some cases (when the sample starts playing from a point which is +not near zero), setting this to a non-zero value for ampeg_start may result in +sample playback starting with an audible click.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_startSFZ v1float00 to 100%
Modulations
pitcheg_start_onccNARIAfloat0-100 to 100seconds
pitcheg_start_curveccNARIAinteger00 to 255N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_start_onccN/index.html b/opcodes/pitcheg_start_onccN/index.html new file mode 100644 index 000000000..960d0c55b --- /dev/null +++ b/opcodes/pitcheg_start_onccN/index.html @@ -0,0 +1,751 @@ + + + + + + + + + pitcheg_start_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_start

+

Envelope start level, in percentage.

Examples

+
ampeg_start=20
+fileg_start=100
+
+

Setting this to 100 should have the same effect as setting the attack time to 0, +and adding the attack time to the hold time. +Note that in some cases (when the sample starts playing from a point which is +not near zero), setting this to a non-zero value for ampeg_start may result in +sample playback starting with an audible click.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_startSFZ v1float00 to 100%
Modulations
pitcheg_start_onccNARIAfloat0-100 to 100seconds
pitcheg_start_curveccNARIAinteger00 to 255N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_sustain/index.html b/opcodes/pitcheg_sustain/index.html new file mode 100644 index 000000000..6b3a03606 --- /dev/null +++ b/opcodes/pitcheg_sustain/index.html @@ -0,0 +1,749 @@ + + + + + + + + + pitcheg_sustain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_sustainSFZ v1float00 to 100%
Modulations
pitcheg_sustain_onccNARIAfloat0-100 to 100seconds
pitcheg_sustain_curveccNARIAinteger00 to 255N/A
pitcheg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_sustain_curveccN/index.html b/opcodes/pitcheg_sustain_curveccN/index.html new file mode 100644 index 000000000..f189278fe --- /dev/null +++ b/opcodes/pitcheg_sustain_curveccN/index.html @@ -0,0 +1,749 @@ + + + + + + + + + pitcheg_sustain_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_sustainSFZ v1float00 to 100%
Modulations
pitcheg_sustain_onccNARIAfloat0-100 to 100seconds
pitcheg_sustain_curveccNARIAinteger00 to 255N/A
pitcheg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_sustain_onccN/index.html b/opcodes/pitcheg_sustain_onccN/index.html new file mode 100644 index 000000000..817850efb --- /dev/null +++ b/opcodes/pitcheg_sustain_onccN/index.html @@ -0,0 +1,749 @@ + + + + + + + + + pitcheg_sustain_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_sustainSFZ v1float00 to 100%
Modulations
pitcheg_sustain_onccNARIAfloat0-100 to 100seconds
pitcheg_sustain_curveccNARIAinteger00 to 255N/A
pitcheg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_vel2attack/index.html b/opcodes/pitcheg_vel2attack/index.html new file mode 100644 index 000000000..1b8f053ef --- /dev/null +++ b/opcodes/pitcheg_vel2attack/index.html @@ -0,0 +1,752 @@ + + + + + + + + + pitcheg_vel2attack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_attack

+

EG attack time.

Examples

+
ampeg_attack=1.2
+fileg_attack=0.1
+
+

These are very frequently used, especially with amplifier envelopes. +ampeg_attack is the standard "A" in the basic ADSR volume envelope. +fileg_attack is key to 303-style basses.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_attackSFZ v1float00 to 100seconds
Modulations
pitcheg_attack_onccNARIAN/AN/AN/A
pitcheg_attack_curveccNARIAinteger00 to 255N/A
pitcheg_vel2attackfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_vel2decay/index.html b/opcodes/pitcheg_vel2decay/index.html new file mode 100644 index 000000000..061ec043c --- /dev/null +++ b/opcodes/pitcheg_vel2decay/index.html @@ -0,0 +1,750 @@ + + + + + + + + + pitcheg_vel2decay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_decay

+

EG decay time.

Examples

+
ampeg_decay=1.5
+fileg_decay=0.5
+
+

This should normally not be shorter than the corresponding envelope's release time.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_decaySFZ v1float00 to 100seconds
Modulations
pitcheg_decay_onccNARIAfloat0-100 to 100N/A
pitcheg_decay_curveccNARIAinteger00 to 255N/A
pitcheg_vel2decayfloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_vel2delay/index.html b/opcodes/pitcheg_vel2delay/index.html new file mode 100644 index 000000000..fe6e04f72 --- /dev/null +++ b/opcodes/pitcheg_vel2delay/index.html @@ -0,0 +1,759 @@ + + + + + + + + + pitcheg_vel2delay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_delay

+

EG delay time.

This is the time elapsed from note on to the start of +the Attack stage.

+

If both envelope delay and the general delay or delay_random +are used in the same region, the envelope delays start after delay and +delay_random have both completed their duration.

+

Examples

+
fileg_delay=0.004
+ampeg_delay=0.05
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_delaySFZ v1float00 to 100seconds
Modulations
pitcheg_delay_onccNARIAfloat0-100 to 100N/A
pitcheg_delay_curveccNARIAinteger00 to 255N/A
pitcheg_vel2delayfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_vel2depth/index.html b/opcodes/pitcheg_vel2depth/index.html new file mode 100644 index 000000000..ad052c2d0 --- /dev/null +++ b/opcodes/pitcheg_vel2depth/index.html @@ -0,0 +1,752 @@ + + + + + + + + + pitcheg_vel2depth - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_depth

+

Envelope depth.

For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. +-12000 cents is 10 octaves.

+

For ampeg, this should not normally be used.

+

Examples

+
fileg_depth=1200
+pitcheg_depth=-100
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_depthSFZ v1integer0-12000 to 12000cents
Modulations
pitcheg_depth_onccNARIAinteger0-12000 to 12000cents
pitcheg_depth_curveccNARIAinteger00 to 255N/A
pitcheg_vel2depthinteger0-12000 to 12000cents
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_vel2hold/index.html b/opcodes/pitcheg_vel2hold/index.html new file mode 100644 index 000000000..50ecee6d3 --- /dev/null +++ b/opcodes/pitcheg_vel2hold/index.html @@ -0,0 +1,755 @@ + + + + + + + + + pitcheg_vel2hold - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_hold

+

EG hold time.

During the hold stage, EG output will remain at its maximum value.

+

Examples

+
ampeg_hold=1.5
+fileg_hold=0.1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_holdSFZ v1float00 to 100seconds
Modulations
pitcheg_hold_onccNARIAfloat0-100 to 100N/A
pitcheg_hold_curveccNARIAinteger00 to 255N/A
pitcheg_vel2holdfloat0-100 to 100seconds
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO:
  • +
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_vel2release/index.html b/opcodes/pitcheg_vel2release/index.html new file mode 100644 index 000000000..a69eb1d4e --- /dev/null +++ b/opcodes/pitcheg_vel2release/index.html @@ -0,0 +1,754 @@ + + + + + + + + + pitcheg_vel2release - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_release

+

EG release time (after note release).

Examples

+
ampeg_release=1.34
+fileg_release=0.2
+
+

In many instruments, pitcheg_vel2release will need to be set to avoid the sound +cutting off unrealistically quickly when a note ends (unless the instrument uses +loop_mode set to one_shot, in which case the entire sample will +always play) even if amplifier envelopes are not used otherwise to shape the +sound. Also, pitcheg_vel2release is used when off_mode is set to normal.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_releaseSFZ v1float00 to 100seconds
Modulations
pitcheg_release_onccNARIAfloat0-100 to 100seconds
pitcheg_release_curveccNARIAinteger00 to 255N/A
pitcheg_vel2releasefloat0-100 to 100seconds
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitcheg_vel2sustain/index.html b/opcodes/pitcheg_vel2sustain/index.html new file mode 100644 index 000000000..ce2f5406f --- /dev/null +++ b/opcodes/pitcheg_vel2sustain/index.html @@ -0,0 +1,749 @@ + + + + + + + + + pitcheg_vel2sustain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitcheg_sustain

+

EG sustain level, in percentage.

Examples

+
ampeg_sustain=40.34
+pitcheg_sustain=10
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitcheg_sustainSFZ v1float00 to 100%
Modulations
pitcheg_sustain_onccNARIAfloat0-100 to 100seconds
pitcheg_sustain_curveccNARIAinteger00 to 255N/A
pitcheg_vel2sustainfloat0-100 to 100%
+

Category: Modulation, Envelope Generators

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitchlfo_delay/index.html b/opcodes/pitchlfo_delay/index.html new file mode 100644 index 000000000..bdbf3d3fc --- /dev/null +++ b/opcodes/pitchlfo_delay/index.html @@ -0,0 +1,720 @@ + + + + + + + + + pitchlfo_delay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitchlfo_delay

+

The time before the LFO starts oscillating.

Examples

+
pitchlfo_delay=1
+amplfo_delay=0.4
+
+

This is very useful, as many instruments and vocals don't trigger vibrato +immediately when a note starts, but slightly later.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitchlfo_delaySFZ v1float00 to 100seconds
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitchlfo_depth/index.html b/opcodes/pitchlfo_depth/index.html new file mode 100644 index 000000000..643e38f1a --- /dev/null +++ b/opcodes/pitchlfo_depth/index.html @@ -0,0 +1,759 @@ + + + + + + + + + pitchlfo_depth - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitchlfo_depth

+

LFO depth.

Examples

+
amplfo_depth=1
+pitchlfo_depth=40
+
+

For amplifier LFO, this is measured in decibels and can range from -10 to 10. +For pitch and filter LFO, this is measured in cents and can +range from -1200 to 1200. Whether these values are negative or positive, the LFO +will oscillate both up and down around the center value of the amplitude, pitch +or filter cutoff - a negative sign for depth only inverts the phase. +For cases where an LFO needs to oscillate only in one direction from the normal +value (for example: typical guitar vibrato which only bends the pitch upwards, +or saxophone vibrato which only bends the pitch down), an offset to the center +pitch value will need to be added using the appropriate opcode such as tune. +In SFZ2 LFOs add the ability to set the starting phase, making this much easier.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitchlfo_depthSFZ v1float0-1200 to 1200cents
Modulations
pitchlfo_depthccNfloat0-1200 to 1200cents
pitchlfo_depthchanaftfloat0-1200 to 1200cents
pitchlfo_depthpolyaftfloat0-1200 to 1200cents
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitchlfo_depth_onccN/index.html b/opcodes/pitchlfo_depth_onccN/index.html new file mode 100644 index 000000000..478483fb0 --- /dev/null +++ b/opcodes/pitchlfo_depth_onccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + pitchlfo_depth_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitchlfo_depth

+

LFO depth.

Examples

+
amplfo_depth=1
+pitchlfo_depth=40
+
+

For amplifier LFO, this is measured in decibels and can range from -10 to 10. +For pitch and filter LFO, this is measured in cents and can +range from -1200 to 1200. Whether these values are negative or positive, the LFO +will oscillate both up and down around the center value of the amplitude, pitch +or filter cutoff - a negative sign for depth only inverts the phase. +For cases where an LFO needs to oscillate only in one direction from the normal +value (for example: typical guitar vibrato which only bends the pitch upwards, +or saxophone vibrato which only bends the pitch down), an offset to the center +pitch value will need to be added using the appropriate opcode such as tune. +In SFZ2 LFOs add the ability to set the starting phase, making this much easier.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitchlfo_depthSFZ v1float0-1200 to 1200cents
Modulations
pitchlfo_depthccNfloat0-1200 to 1200cents
pitchlfo_depthchanaftfloat0-1200 to 1200cents
pitchlfo_depthpolyaftfloat0-1200 to 1200cents
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitchlfo_depthccN/index.html b/opcodes/pitchlfo_depthccN/index.html new file mode 100644 index 000000000..a09cfc198 --- /dev/null +++ b/opcodes/pitchlfo_depthccN/index.html @@ -0,0 +1,759 @@ + + + + + + + + + pitchlfo_depthccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitchlfo_depth

+

LFO depth.

Examples

+
amplfo_depth=1
+pitchlfo_depth=40
+
+

For amplifier LFO, this is measured in decibels and can range from -10 to 10. +For pitch and filter LFO, this is measured in cents and can +range from -1200 to 1200. Whether these values are negative or positive, the LFO +will oscillate both up and down around the center value of the amplitude, pitch +or filter cutoff - a negative sign for depth only inverts the phase. +For cases where an LFO needs to oscillate only in one direction from the normal +value (for example: typical guitar vibrato which only bends the pitch upwards, +or saxophone vibrato which only bends the pitch down), an offset to the center +pitch value will need to be added using the appropriate opcode such as tune. +In SFZ2 LFOs add the ability to set the starting phase, making this much easier.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitchlfo_depthSFZ v1float0-1200 to 1200cents
Modulations
pitchlfo_depthccNfloat0-1200 to 1200cents
pitchlfo_depthchanaftfloat0-1200 to 1200cents
pitchlfo_depthpolyaftfloat0-1200 to 1200cents
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitchlfo_depthchanaft/index.html b/opcodes/pitchlfo_depthchanaft/index.html new file mode 100644 index 000000000..e939b2e41 --- /dev/null +++ b/opcodes/pitchlfo_depthchanaft/index.html @@ -0,0 +1,759 @@ + + + + + + + + + pitchlfo_depthchanaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitchlfo_depth

+

LFO depth.

Examples

+
amplfo_depth=1
+pitchlfo_depth=40
+
+

For amplifier LFO, this is measured in decibels and can range from -10 to 10. +For pitch and filter LFO, this is measured in cents and can +range from -1200 to 1200. Whether these values are negative or positive, the LFO +will oscillate both up and down around the center value of the amplitude, pitch +or filter cutoff - a negative sign for depth only inverts the phase. +For cases where an LFO needs to oscillate only in one direction from the normal +value (for example: typical guitar vibrato which only bends the pitch upwards, +or saxophone vibrato which only bends the pitch down), an offset to the center +pitch value will need to be added using the appropriate opcode such as tune. +In SFZ2 LFOs add the ability to set the starting phase, making this much easier.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitchlfo_depthSFZ v1float0-1200 to 1200cents
Modulations
pitchlfo_depthccNfloat0-1200 to 1200cents
pitchlfo_depthchanaftfloat0-1200 to 1200cents
pitchlfo_depthpolyaftfloat0-1200 to 1200cents
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitchlfo_depthpolyaft/index.html b/opcodes/pitchlfo_depthpolyaft/index.html new file mode 100644 index 000000000..4819cf52d --- /dev/null +++ b/opcodes/pitchlfo_depthpolyaft/index.html @@ -0,0 +1,759 @@ + + + + + + + + + pitchlfo_depthpolyaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitchlfo_depth

+

LFO depth.

Examples

+
amplfo_depth=1
+pitchlfo_depth=40
+
+

For amplifier LFO, this is measured in decibels and can range from -10 to 10. +For pitch and filter LFO, this is measured in cents and can +range from -1200 to 1200. Whether these values are negative or positive, the LFO +will oscillate both up and down around the center value of the amplitude, pitch +or filter cutoff - a negative sign for depth only inverts the phase. +For cases where an LFO needs to oscillate only in one direction from the normal +value (for example: typical guitar vibrato which only bends the pitch upwards, +or saxophone vibrato which only bends the pitch down), an offset to the center +pitch value will need to be added using the appropriate opcode such as tune. +In SFZ2 LFOs add the ability to set the starting phase, making this much easier.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitchlfo_depthSFZ v1float0-1200 to 1200cents
Modulations
pitchlfo_depthccNfloat0-1200 to 1200cents
pitchlfo_depthchanaftfloat0-1200 to 1200cents
pitchlfo_depthpolyaftfloat0-1200 to 1200cents
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitchlfo_fade/index.html b/opcodes/pitchlfo_fade/index.html new file mode 100644 index 000000000..11b423b55 --- /dev/null +++ b/opcodes/pitchlfo_fade/index.html @@ -0,0 +1,720 @@ + + + + + + + + + pitchlfo_fade - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitchlfo_fade

+

LFO fade-in effect time.

Examples

+
amplfo_fade=1
+pitchfo_fade=0.4
+
+

Useful for vibrato which grows in intensity gradually, +as commonly performed by bowed string players.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitchlfo_fadeSFZ v1float00 to 100seconds
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitchlfo_freq/index.html b/opcodes/pitchlfo_freq/index.html new file mode 100644 index 000000000..903fbd849 --- /dev/null +++ b/opcodes/pitchlfo_freq/index.html @@ -0,0 +1,753 @@ + + + + + + + + + pitchlfo_freq - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitchlfo_freq

+

LFO frequency, in hertz.

Examples

+
amplfo_freq=0.4
+amplfo_freq=10
+
+

Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, +similar to what is found in some classic hardware synthesizers, are not possible. +Some players may in fact be able to utilize higher rates, but 20 Hz is the upper +limit required by the SFZ specification.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitchlfo_freqSFZ v1float00 to 20Hz
Modulations
pitchlfo_freqccNfloat0-200 to 200Hz
pitchlfo_freqchanaftfloat0-200 to 200Hz
pitchlfo_freqpolyaftfloat0-200 to 200Hz
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitchlfo_freqccN/index.html b/opcodes/pitchlfo_freqccN/index.html new file mode 100644 index 000000000..403ed701f --- /dev/null +++ b/opcodes/pitchlfo_freqccN/index.html @@ -0,0 +1,753 @@ + + + + + + + + + pitchlfo_freqccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitchlfo_freq

+

LFO frequency, in hertz.

Examples

+
amplfo_freq=0.4
+amplfo_freq=10
+
+

Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, +similar to what is found in some classic hardware synthesizers, are not possible. +Some players may in fact be able to utilize higher rates, but 20 Hz is the upper +limit required by the SFZ specification.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitchlfo_freqSFZ v1float00 to 20Hz
Modulations
pitchlfo_freqccNfloat0-200 to 200Hz
pitchlfo_freqchanaftfloat0-200 to 200Hz
pitchlfo_freqpolyaftfloat0-200 to 200Hz
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitchlfo_freqchanaft/index.html b/opcodes/pitchlfo_freqchanaft/index.html new file mode 100644 index 000000000..a4ea5faba --- /dev/null +++ b/opcodes/pitchlfo_freqchanaft/index.html @@ -0,0 +1,753 @@ + + + + + + + + + pitchlfo_freqchanaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitchlfo_freq

+

LFO frequency, in hertz.

Examples

+
amplfo_freq=0.4
+amplfo_freq=10
+
+

Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, +similar to what is found in some classic hardware synthesizers, are not possible. +Some players may in fact be able to utilize higher rates, but 20 Hz is the upper +limit required by the SFZ specification.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitchlfo_freqSFZ v1float00 to 20Hz
Modulations
pitchlfo_freqccNfloat0-200 to 200Hz
pitchlfo_freqchanaftfloat0-200 to 200Hz
pitchlfo_freqpolyaftfloat0-200 to 200Hz
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/pitchlfo_freqpolyaft/index.html b/opcodes/pitchlfo_freqpolyaft/index.html new file mode 100644 index 000000000..dd7e3c7e2 --- /dev/null +++ b/opcodes/pitchlfo_freqpolyaft/index.html @@ -0,0 +1,753 @@ + + + + + + + + + pitchlfo_freqpolyaft - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitchlfo_freq

+

LFO frequency, in hertz.

Examples

+
amplfo_freq=0.4
+amplfo_freq=10
+
+

Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, +similar to what is found in some classic hardware synthesizers, are not possible. +Some players may in fact be able to utilize higher rates, but 20 Hz is the upper +limit required by the SFZ specification.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitchlfo_freqSFZ v1float00 to 20Hz
Modulations
pitchlfo_freqccNfloat0-200 to 200Hz
pitchlfo_freqchanaftfloat0-200 to 200Hz
pitchlfo_freqpolyaftfloat0-200 to 200Hz
+

Category: Modulation, LFO

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/polyphony/index.html b/opcodes/polyphony/index.html new file mode 100644 index 000000000..2ddf3e9b1 --- /dev/null +++ b/opcodes/polyphony/index.html @@ -0,0 +1,773 @@ + + + + + + + + + polyphony - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

polyphony

+

Polyphony voice limit.

This can be applied to all regions under a header such as +‹global› or ‹group› or to regions +which have the same group opcode value set. The +below examples all use the group opcode, not the group header, but +that is not the only way to use the polyphony opcode.

+

In addition to positive integer values, polyphony can also be set to +one of three special text values. With all of these, the polyphony limit +is set to 1, and the following behavior is also triggered:

+
    +
  • legato_high: the highest note played sounds and lower notes are muted.
  • +
  • legato_last: the most recent note played sounds (typical legato behavior).
  • +
  • legato_low: the lowest note played sounds.
  • +
+

Examples

+
polyphony=12
+polyphony=5
+polyphony=legato_low
+
+

An example limiting a crash cymbal to four polyphony voices.

+
group=1
+polyphony=4
+<region> key=49 sample=crash.wav
+
+

Here is a ride limited to a total of seven voices, with both bow and bell +articulations sharing the same polyphony group and the same seven-voice +limit.

+
group=2
+polyphony=7
+<region> key=51 sample=ride_bow.wav
+<region> key=53 sample=ride_bell.wav
+
+

This opcode is useful for controlling sound buildup, limiting resource use, +and for emulating the behavior of vintage keyboards with limited polyphony. +It's also possible to use note_polyphony instead when all the sounds we want +to mute each other are mapped to the same pitch, or use both in combination. +An alternative for controlling sound buildup is using +ampeg_release with off_mode set to normal.

+

It's also possible to have a group with limited polyphony which can be muted by +another group, such as a cymbal with edge chokes.

+
<group>
+group=2
+off_by=3
+polyphony=7
+<region> key=51 sample=ride_bow.wav
+<region> key=53 sample=ride_bell.wav
+
+<group>
+group=3
+<region> key=54 sample=ride.choke.wav
+
+

An alternative is note_polyphony. The difference between +applying polyphony across one note and using note_polyphony is that +note_polyphony also uses note_selfmask which opens up some additional options. +With the default setting, lower-velocity notes do not mute higher-velocity ones. +This is useful for long-ringing instruments such as piano with the sustain pedal +pressed down or hammered dulcimer. It can also be useful for cymbals, although +especially with hi-hats, those will often use different notes for different +articulations, and note_polyphony would be limited to working within an +articulation.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
polyphonySFZ v2integerN/AN/A
+

Category: Instrument Settings, Voice Lifecycle

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/polyphony_group/index.html b/opcodes/polyphony_group/index.html new file mode 100644 index 000000000..413fae11d --- /dev/null +++ b/opcodes/polyphony_group/index.html @@ -0,0 +1,743 @@ + + + + + + + + + polyphony_group - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

group

+

Exclusive group number for this region.

ARIA adds also the polyphony_group alias to reduce the confusion between +the group opcode and the ‹group› header.

+

Examples

+
group=3
+
+group=334
+
+

The group opcode is used together with off_by to make something monophonic.

+

For example, the flute is by nature a monophonic instrument, so if a flute were +recorded with one microphone and had one set of samples, it would make sense to +set all its samples to have one group. A guitar is polyphonic, but each string +is monophonic, so a six-string guitar would naturally be split into six groups - +one per string. In these cases, the group number will be equal to the off_by +number.

+

This is also commonly used with hi-hats - this is an example of where things can +get more sophisticated with a large number of groups involved, as it's possible +to set more closed hi-hat sounds mute more open ones, but not vice-versa, and it's +also quite possible that there are separate close mic, overhead and room samples.

+

group and off_by can also be used in other contexts where one sound +should cause another to stop but enforcing monophony is not the goal - for example, +a crash cymbal doesn't need to be monophonic, as allowing the sound to build up +is reasonably natural, but if we wanted to implement a cymbal choke, then the +crash sounds would be in one group, the choke samples in another.

+

Practical Considerations

+

The actual minimum and maximum values are not currently known. Some players +will treat numbers outside a certain range as equivalent to group=0, and +ARIA/Sforzando will also do this with text strings. The behavior of +non-integer numbers is also currently unknown. This makes it possible to use +an extremely large number for one group, but it's obviously not recommended.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
groupSFZ v1integer0-2147483648 to 2147483647N/A
+

Category: Instrument Settings, Voice Lifecycle

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/polyphony_stealing/index.html b/opcodes/polyphony_stealing/index.html new file mode 100644 index 000000000..c34f96929 --- /dev/null +++ b/opcodes/polyphony_stealing/index.html @@ -0,0 +1,716 @@ + + + + + + + + + polyphony_stealing - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

polyphony_stealing

+

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
polyphony_stealingARIAintegerN/AN/A
+

See also: SFZ test

+

Category: Instrument Settings, Voice Lifecycle

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/position/index.html b/opcodes/position/index.html new file mode 100644 index 000000000..abedc62c2 --- /dev/null +++ b/opcodes/position/index.html @@ -0,0 +1,765 @@ + + + + + + + + + position - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

position

+

Only operational for stereo samples, position defines the position in the stereo field of a stereo signal, after channel mixing as defined in the width opcode.

A value of zero means centered, negative values move the panoramic to the left, +positive to the right.

+

Examples

+
// mix both channels and play the result at left
+width=0 position=-100
+
+// make the stereo image narrower and play it
+// slightly right
+width=50 position=30
+
+// position modulated by MIDI CC 40 width=50 position_oncc40=-50
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
positionSFZ v1float0-100 to 100%
Modulations
position_onccNARIAN/AN/AN/A
position_curveccNARIAinteger00 to 255N/A
position_smoothccNARIAN/AN/AN/A
position_stepccNARIAN/AN/AN/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/position_curveccN/index.html b/opcodes/position_curveccN/index.html new file mode 100644 index 000000000..ddec2df14 --- /dev/null +++ b/opcodes/position_curveccN/index.html @@ -0,0 +1,765 @@ + + + + + + + + + position_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

position

+

Only operational for stereo samples, position defines the position in the stereo field of a stereo signal, after channel mixing as defined in the width opcode.

A value of zero means centered, negative values move the panoramic to the left, +positive to the right.

+

Examples

+
// mix both channels and play the result at left
+width=0 position=-100
+
+// make the stereo image narrower and play it
+// slightly right
+width=50 position=30
+
+// position modulated by MIDI CC 40 width=50 position_oncc40=-50
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
positionSFZ v1float0-100 to 100%
Modulations
position_onccNARIAN/AN/AN/A
position_curveccNARIAinteger00 to 255N/A
position_smoothccNARIAN/AN/AN/A
position_stepccNARIAN/AN/AN/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/position_keycenter/index.html b/opcodes/position_keycenter/index.html new file mode 100644 index 000000000..522b5399f --- /dev/null +++ b/opcodes/position_keycenter/index.html @@ -0,0 +1,715 @@ + + + + + + + + + position_keycenter - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

position_keycenter

+

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
position_keycenterARIAN/AN/AN/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/position_keytrack/index.html b/opcodes/position_keytrack/index.html new file mode 100644 index 000000000..38b185452 --- /dev/null +++ b/opcodes/position_keytrack/index.html @@ -0,0 +1,715 @@ + + + + + + + + + position_keytrack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

position_keytrack

+

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
position_keytrackARIAN/AN/AN/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/position_onccN/index.html b/opcodes/position_onccN/index.html new file mode 100644 index 000000000..336758f42 --- /dev/null +++ b/opcodes/position_onccN/index.html @@ -0,0 +1,765 @@ + + + + + + + + + position_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

position

+

Only operational for stereo samples, position defines the position in the stereo field of a stereo signal, after channel mixing as defined in the width opcode.

A value of zero means centered, negative values move the panoramic to the left, +positive to the right.

+

Examples

+
// mix both channels and play the result at left
+width=0 position=-100
+
+// make the stereo image narrower and play it
+// slightly right
+width=50 position=30
+
+// position modulated by MIDI CC 40 width=50 position_oncc40=-50
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
positionSFZ v1float0-100 to 100%
Modulations
position_onccNARIAN/AN/AN/A
position_curveccNARIAinteger00 to 255N/A
position_smoothccNARIAN/AN/AN/A
position_stepccNARIAN/AN/AN/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/position_random/index.html b/opcodes/position_random/index.html new file mode 100644 index 000000000..7d3015d26 --- /dev/null +++ b/opcodes/position_random/index.html @@ -0,0 +1,715 @@ + + + + + + + + + position_random - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

position_random

+

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
position_randomARIAfloat0-100 to 100%
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/position_smoothccN/index.html b/opcodes/position_smoothccN/index.html new file mode 100644 index 000000000..820eb6db2 --- /dev/null +++ b/opcodes/position_smoothccN/index.html @@ -0,0 +1,765 @@ + + + + + + + + + position_smoothccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

position

+

Only operational for stereo samples, position defines the position in the stereo field of a stereo signal, after channel mixing as defined in the width opcode.

A value of zero means centered, negative values move the panoramic to the left, +positive to the right.

+

Examples

+
// mix both channels and play the result at left
+width=0 position=-100
+
+// make the stereo image narrower and play it
+// slightly right
+width=50 position=30
+
+// position modulated by MIDI CC 40 width=50 position_oncc40=-50
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
positionSFZ v1float0-100 to 100%
Modulations
position_onccNARIAN/AN/AN/A
position_curveccNARIAinteger00 to 255N/A
position_smoothccNARIAN/AN/AN/A
position_stepccNARIAN/AN/AN/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/position_stepccN/index.html b/opcodes/position_stepccN/index.html new file mode 100644 index 000000000..fbf4b89f6 --- /dev/null +++ b/opcodes/position_stepccN/index.html @@ -0,0 +1,765 @@ + + + + + + + + + position_stepccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

position

+

Only operational for stereo samples, position defines the position in the stereo field of a stereo signal, after channel mixing as defined in the width opcode.

A value of zero means centered, negative values move the panoramic to the left, +positive to the right.

+

Examples

+
// mix both channels and play the result at left
+width=0 position=-100
+
+// make the stereo image narrower and play it
+// slightly right
+width=50 position=30
+
+// position modulated by MIDI CC 40 width=50 position_oncc40=-50
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
positionSFZ v1float0-100 to 100%
Modulations
position_onccNARIAN/AN/AN/A
position_curveccNARIAinteger00 to 255N/A
position_smoothccNARIAN/AN/AN/A
position_stepccNARIAN/AN/AN/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/position_veltrack/index.html b/opcodes/position_veltrack/index.html new file mode 100644 index 000000000..09f581409 --- /dev/null +++ b/opcodes/position_veltrack/index.html @@ -0,0 +1,715 @@ + + + + + + + + + position_veltrack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

position_veltrack

+

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
position_veltrackARIAinteger0-200 to 200N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/region_label/index.html b/opcodes/region_label/index.html new file mode 100644 index 000000000..a60205af9 --- /dev/null +++ b/opcodes/region_label/index.html @@ -0,0 +1,729 @@ + + + + + + + + + region_label - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

region_label

+

An ARIA extension which sets what is displayed in the default info tab of Sforzando.

Useful for debugging. In order to work properly, generally needs to be set under +a ‹region› header. +If not set, the info tab will display the file path of the most recently played sample.

+

Example

+
<region> sample=china2_30_01.flac seq_position=1 region_label=30 one
+// ...
+<region> sample=china2_30_09.flac seq_position=9 region_label=30 nine
+<region> sample=china2_30_10.flac seq_position=10 region_label=30 ten
+
+

region_label example image

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
region_labelARIAstringN/AN/A
+

See also: master_label, global_label, group_label

+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/resonance/index.html b/opcodes/resonance/index.html new file mode 100644 index 000000000..41719dc94 --- /dev/null +++ b/opcodes/resonance/index.html @@ -0,0 +1,767 @@ + + + + + + + + + resonance / resonance2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

resonance / resonance2

+

The filter cutoff resonance value, in decibels.

Example

+
resonance=4
+resonance_oncc100=3
+resonance2=3.2
+
+

There are two filters in series - the resonance of one is controlled by resonance, +that of the second by resonance2.

+

Raising this can easily result in a very large boost to frequencies around +the cutoff, which can result in extremely loud output!

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
resonanceSFZ v1float00 to 40dB
Modulations
resonance_onccNSFZ v2float0-40 to 40dB
resonance_curveccNSFZ v2integer00 to 255N/A
resonance_smoothccNSFZ v2float00 to ?ms
resonance_stepccNSFZ v2integer00 to ?N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/resonance2/index.html b/opcodes/resonance2/index.html new file mode 100644 index 000000000..f21ec92e5 --- /dev/null +++ b/opcodes/resonance2/index.html @@ -0,0 +1,767 @@ + + + + + + + + + resonance / resonance2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

resonance / resonance2

+

The filter cutoff resonance value, in decibels.

Example

+
resonance=4
+resonance_oncc100=3
+resonance2=3.2
+
+

There are two filters in series - the resonance of one is controlled by resonance, +that of the second by resonance2.

+

Raising this can easily result in a very large boost to frequencies around +the cutoff, which can result in extremely loud output!

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
resonanceSFZ v1float00 to 40dB
Modulations
resonance_onccNSFZ v2float0-40 to 40dB
resonance_curveccNSFZ v2integer00 to 255N/A
resonance_smoothccNSFZ v2float00 to ?ms
resonance_stepccNSFZ v2integer00 to ?N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/resonance2_ccN/index.html b/opcodes/resonance2_ccN/index.html new file mode 100644 index 000000000..4038ad23c --- /dev/null +++ b/opcodes/resonance2_ccN/index.html @@ -0,0 +1,767 @@ + + + + + + + + + resonance / resonance2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

resonance / resonance2

+

The filter cutoff resonance value, in decibels.

Example

+
resonance=4
+resonance_oncc100=3
+resonance2=3.2
+
+

There are two filters in series - the resonance of one is controlled by resonance, +that of the second by resonance2.

+

Raising this can easily result in a very large boost to frequencies around +the cutoff, which can result in extremely loud output!

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
resonanceSFZ v1float00 to 40dB
Modulations
resonance_onccNSFZ v2float0-40 to 40dB
resonance_curveccNSFZ v2integer00 to 255N/A
resonance_smoothccNSFZ v2float00 to ?ms
resonance_stepccNSFZ v2integer00 to ?N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/resonance2_curveccN/index.html b/opcodes/resonance2_curveccN/index.html new file mode 100644 index 000000000..afb2943ab --- /dev/null +++ b/opcodes/resonance2_curveccN/index.html @@ -0,0 +1,767 @@ + + + + + + + + + resonance / resonance2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

resonance / resonance2

+

The filter cutoff resonance value, in decibels.

Example

+
resonance=4
+resonance_oncc100=3
+resonance2=3.2
+
+

There are two filters in series - the resonance of one is controlled by resonance, +that of the second by resonance2.

+

Raising this can easily result in a very large boost to frequencies around +the cutoff, which can result in extremely loud output!

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
resonanceSFZ v1float00 to 40dB
Modulations
resonance_onccNSFZ v2float0-40 to 40dB
resonance_curveccNSFZ v2integer00 to 255N/A
resonance_smoothccNSFZ v2float00 to ?ms
resonance_stepccNSFZ v2integer00 to ?N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/resonance2_onccN/index.html b/opcodes/resonance2_onccN/index.html new file mode 100644 index 000000000..cc995aa70 --- /dev/null +++ b/opcodes/resonance2_onccN/index.html @@ -0,0 +1,767 @@ + + + + + + + + + resonance / resonance2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

resonance / resonance2

+

The filter cutoff resonance value, in decibels.

Example

+
resonance=4
+resonance_oncc100=3
+resonance2=3.2
+
+

There are two filters in series - the resonance of one is controlled by resonance, +that of the second by resonance2.

+

Raising this can easily result in a very large boost to frequencies around +the cutoff, which can result in extremely loud output!

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
resonanceSFZ v1float00 to 40dB
Modulations
resonance_onccNSFZ v2float0-40 to 40dB
resonance_curveccNSFZ v2integer00 to 255N/A
resonance_smoothccNSFZ v2float00 to ?ms
resonance_stepccNSFZ v2integer00 to ?N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/resonance2_smoothccN/index.html b/opcodes/resonance2_smoothccN/index.html new file mode 100644 index 000000000..26561546a --- /dev/null +++ b/opcodes/resonance2_smoothccN/index.html @@ -0,0 +1,767 @@ + + + + + + + + + resonance / resonance2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

resonance / resonance2

+

The filter cutoff resonance value, in decibels.

Example

+
resonance=4
+resonance_oncc100=3
+resonance2=3.2
+
+

There are two filters in series - the resonance of one is controlled by resonance, +that of the second by resonance2.

+

Raising this can easily result in a very large boost to frequencies around +the cutoff, which can result in extremely loud output!

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
resonanceSFZ v1float00 to 40dB
Modulations
resonance_onccNSFZ v2float0-40 to 40dB
resonance_curveccNSFZ v2integer00 to 255N/A
resonance_smoothccNSFZ v2float00 to ?ms
resonance_stepccNSFZ v2integer00 to ?N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/resonance2_stepccN/index.html b/opcodes/resonance2_stepccN/index.html new file mode 100644 index 000000000..258d81f3e --- /dev/null +++ b/opcodes/resonance2_stepccN/index.html @@ -0,0 +1,767 @@ + + + + + + + + + resonance / resonance2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

resonance / resonance2

+

The filter cutoff resonance value, in decibels.

Example

+
resonance=4
+resonance_oncc100=3
+resonance2=3.2
+
+

There are two filters in series - the resonance of one is controlled by resonance, +that of the second by resonance2.

+

Raising this can easily result in a very large boost to frequencies around +the cutoff, which can result in extremely loud output!

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
resonanceSFZ v1float00 to 40dB
Modulations
resonance_onccNSFZ v2float0-40 to 40dB
resonance_curveccNSFZ v2integer00 to 255N/A
resonance_smoothccNSFZ v2float00 to ?ms
resonance_stepccNSFZ v2integer00 to ?N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/resonance_ccN/index.html b/opcodes/resonance_ccN/index.html new file mode 100644 index 000000000..9cae9a521 --- /dev/null +++ b/opcodes/resonance_ccN/index.html @@ -0,0 +1,767 @@ + + + + + + + + + resonance / resonance2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

resonance / resonance2

+

The filter cutoff resonance value, in decibels.

Example

+
resonance=4
+resonance_oncc100=3
+resonance2=3.2
+
+

There are two filters in series - the resonance of one is controlled by resonance, +that of the second by resonance2.

+

Raising this can easily result in a very large boost to frequencies around +the cutoff, which can result in extremely loud output!

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
resonanceSFZ v1float00 to 40dB
Modulations
resonance_onccNSFZ v2float0-40 to 40dB
resonance_curveccNSFZ v2integer00 to 255N/A
resonance_smoothccNSFZ v2float00 to ?ms
resonance_stepccNSFZ v2integer00 to ?N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/resonance_curveccN/index.html b/opcodes/resonance_curveccN/index.html new file mode 100644 index 000000000..60191e43f --- /dev/null +++ b/opcodes/resonance_curveccN/index.html @@ -0,0 +1,767 @@ + + + + + + + + + resonance / resonance2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

resonance / resonance2

+

The filter cutoff resonance value, in decibels.

Example

+
resonance=4
+resonance_oncc100=3
+resonance2=3.2
+
+

There are two filters in series - the resonance of one is controlled by resonance, +that of the second by resonance2.

+

Raising this can easily result in a very large boost to frequencies around +the cutoff, which can result in extremely loud output!

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
resonanceSFZ v1float00 to 40dB
Modulations
resonance_onccNSFZ v2float0-40 to 40dB
resonance_curveccNSFZ v2integer00 to 255N/A
resonance_smoothccNSFZ v2float00 to ?ms
resonance_stepccNSFZ v2integer00 to ?N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/resonance_onccN/index.html b/opcodes/resonance_onccN/index.html new file mode 100644 index 000000000..66e313226 --- /dev/null +++ b/opcodes/resonance_onccN/index.html @@ -0,0 +1,767 @@ + + + + + + + + + resonance / resonance2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

resonance / resonance2

+

The filter cutoff resonance value, in decibels.

Example

+
resonance=4
+resonance_oncc100=3
+resonance2=3.2
+
+

There are two filters in series - the resonance of one is controlled by resonance, +that of the second by resonance2.

+

Raising this can easily result in a very large boost to frequencies around +the cutoff, which can result in extremely loud output!

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
resonanceSFZ v1float00 to 40dB
Modulations
resonance_onccNSFZ v2float0-40 to 40dB
resonance_curveccNSFZ v2integer00 to 255N/A
resonance_smoothccNSFZ v2float00 to ?ms
resonance_stepccNSFZ v2integer00 to ?N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/resonance_random/index.html b/opcodes/resonance_random/index.html new file mode 100644 index 000000000..bcbc68547 --- /dev/null +++ b/opcodes/resonance_random/index.html @@ -0,0 +1,715 @@ + + + + + + + + + resonance_random - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

resonance_random

+

Filter cutoff resonance random value, in decibels.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
resonance_randomARIAfloat00 to 40dB
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/resonance_smoothccN/index.html b/opcodes/resonance_smoothccN/index.html new file mode 100644 index 000000000..2820a8cb7 --- /dev/null +++ b/opcodes/resonance_smoothccN/index.html @@ -0,0 +1,767 @@ + + + + + + + + + resonance / resonance2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

resonance / resonance2

+

The filter cutoff resonance value, in decibels.

Example

+
resonance=4
+resonance_oncc100=3
+resonance2=3.2
+
+

There are two filters in series - the resonance of one is controlled by resonance, +that of the second by resonance2.

+

Raising this can easily result in a very large boost to frequencies around +the cutoff, which can result in extremely loud output!

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
resonanceSFZ v1float00 to 40dB
Modulations
resonance_onccNSFZ v2float0-40 to 40dB
resonance_curveccNSFZ v2integer00 to 255N/A
resonance_smoothccNSFZ v2float00 to ?ms
resonance_stepccNSFZ v2integer00 to ?N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/resonance_stepccN/index.html b/opcodes/resonance_stepccN/index.html new file mode 100644 index 000000000..f0ea58eea --- /dev/null +++ b/opcodes/resonance_stepccN/index.html @@ -0,0 +1,767 @@ + + + + + + + + + resonance / resonance2 - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

resonance / resonance2

+

The filter cutoff resonance value, in decibels.

Example

+
resonance=4
+resonance_oncc100=3
+resonance2=3.2
+
+

There are two filters in series - the resonance of one is controlled by resonance, +that of the second by resonance2.

+

Raising this can easily result in a very large boost to frequencies around +the cutoff, which can result in extremely loud output!

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
resonanceSFZ v1float00 to 40dB
Modulations
resonance_onccNSFZ v2float0-40 to 40dB
resonance_curveccNSFZ v2integer00 to 255N/A
resonance_smoothccNSFZ v2float00 to ?ms
resonance_stepccNSFZ v2integer00 to ?N/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Filter

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/reverb_damp/index.html b/opcodes/reverb_damp/index.html new file mode 100644 index 000000000..67c810769 --- /dev/null +++ b/opcodes/reverb_damp/index.html @@ -0,0 +1,730 @@ + + + + + + + + + reverb_damp - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

reverb_damp

+

Used under the ‹effect› header, with type=fverb.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
reverb_dampSFZ v2N/A0 to 100N/A
Modulations
reverb_damp_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/reverb_damp_onccN/index.html b/opcodes/reverb_damp_onccN/index.html new file mode 100644 index 000000000..d8301fe26 --- /dev/null +++ b/opcodes/reverb_damp_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + reverb_damp_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

reverb_damp

+

Used under the ‹effect› header, with type=fverb.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
reverb_dampSFZ v2N/A0 to 100N/A
Modulations
reverb_damp_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/reverb_dry/index.html b/opcodes/reverb_dry/index.html new file mode 100644 index 000000000..d0bf18167 --- /dev/null +++ b/opcodes/reverb_dry/index.html @@ -0,0 +1,730 @@ + + + + + + + + + reverb_dry - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

reverb_dry

+

Used under the ‹effect› header, with type=fverb.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
reverb_drySFZ v2N/A0 to 100N/A
Modulations
reverb_dry_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/reverb_dry_onccN/index.html b/opcodes/reverb_dry_onccN/index.html new file mode 100644 index 000000000..7cbb4598b --- /dev/null +++ b/opcodes/reverb_dry_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + reverb_dry_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

reverb_dry

+

Used under the ‹effect› header, with type=fverb.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
reverb_drySFZ v2N/A0 to 100N/A
Modulations
reverb_dry_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/reverb_input/index.html b/opcodes/reverb_input/index.html new file mode 100644 index 000000000..c5bea041c --- /dev/null +++ b/opcodes/reverb_input/index.html @@ -0,0 +1,730 @@ + + + + + + + + + reverb_input - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

reverb_input

+

Used under the ‹effect› header, with type=fverb.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
reverb_inputSFZ v2N/A0 to 100N/A
Modulations
reverb_input_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/reverb_input_onccN/index.html b/opcodes/reverb_input_onccN/index.html new file mode 100644 index 000000000..5511d5974 --- /dev/null +++ b/opcodes/reverb_input_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + reverb_input_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

reverb_input

+

Used under the ‹effect› header, with type=fverb.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
reverb_inputSFZ v2N/A0 to 100N/A
Modulations
reverb_input_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/reverb_predelay/index.html b/opcodes/reverb_predelay/index.html new file mode 100644 index 000000000..e280971e6 --- /dev/null +++ b/opcodes/reverb_predelay/index.html @@ -0,0 +1,730 @@ + + + + + + + + + reverb_predelay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

reverb_predelay

+

Used under the ‹effect› header, with type=fverb.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
reverb_predelaySFZ v2floatN/Aseconds
Modulations
reverb_predelay_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/reverb_predelay_onccN/index.html b/opcodes/reverb_predelay_onccN/index.html new file mode 100644 index 000000000..3f9269192 --- /dev/null +++ b/opcodes/reverb_predelay_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + reverb_predelay_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

reverb_predelay

+

Used under the ‹effect› header, with type=fverb.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
reverb_predelaySFZ v2floatN/Aseconds
Modulations
reverb_predelay_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/reverb_size/index.html b/opcodes/reverb_size/index.html new file mode 100644 index 000000000..4f9190318 --- /dev/null +++ b/opcodes/reverb_size/index.html @@ -0,0 +1,730 @@ + + + + + + + + + reverb_size - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

reverb_size

+

Used under the ‹effect› header, with type=fverb.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
reverb_sizeSFZ v2N/A0 to 100N/A
Modulations
reverb_size_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/reverb_size_onccN/index.html b/opcodes/reverb_size_onccN/index.html new file mode 100644 index 000000000..6fdb3aafd --- /dev/null +++ b/opcodes/reverb_size_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + reverb_size_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

reverb_size

+

Used under the ‹effect› header, with type=fverb.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
reverb_sizeSFZ v2N/A0 to 100N/A
Modulations
reverb_size_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/reverb_tone/index.html b/opcodes/reverb_tone/index.html new file mode 100644 index 000000000..538a5db13 --- /dev/null +++ b/opcodes/reverb_tone/index.html @@ -0,0 +1,730 @@ + + + + + + + + + reverb_tone - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

reverb_tone

+

Used under the ‹effect› header, with type=fverb.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
reverb_toneSFZ v2N/A0 to 100N/A
Modulations
reverb_tone_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/reverb_tone_onccN/index.html b/opcodes/reverb_tone_onccN/index.html new file mode 100644 index 000000000..00368acb2 --- /dev/null +++ b/opcodes/reverb_tone_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + reverb_tone_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

reverb_tone

+

Used under the ‹effect› header, with type=fverb.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
reverb_toneSFZ v2N/A0 to 100N/A
Modulations
reverb_tone_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/reverb_type/index.html b/opcodes/reverb_type/index.html new file mode 100644 index 000000000..e6fc693f2 --- /dev/null +++ b/opcodes/reverb_type/index.html @@ -0,0 +1,714 @@ + + + + + + + + + reverb_type - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

reverb_type

+

Used under the ‹effect› header, with type=fverb.

+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
reverb_typeSFZ v2stringN/Achamber, large_hall, large_room, mid_hall, mid_room, small_hall, small_room
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/reverb_wet/index.html b/opcodes/reverb_wet/index.html new file mode 100644 index 000000000..3a04eab52 --- /dev/null +++ b/opcodes/reverb_wet/index.html @@ -0,0 +1,730 @@ + + + + + + + + + reverb_wet - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

reverb_wet

+

Used under the ‹effect› header, with type=fverb.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
reverb_wetSFZ v2N/A0 to 100N/A
Modulations
reverb_wet_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/reverb_wet_onccN/index.html b/opcodes/reverb_wet_onccN/index.html new file mode 100644 index 000000000..7246d0f65 --- /dev/null +++ b/opcodes/reverb_wet_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + reverb_wet_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

reverb_wet

+

Used under the ‹effect› header, with type=fverb.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
reverb_wetSFZ v2N/A0 to 100N/A
Modulations
reverb_wet_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/reverse_hiccN/index.html b/opcodes/reverse_hiccN/index.html new file mode 100644 index 000000000..f3343c38e --- /dev/null +++ b/opcodes/reverse_hiccN/index.html @@ -0,0 +1,722 @@ + + + + + + + + + reverse_loccN / reverse_hiccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

reverse_loccN / reverse_hiccN

+

If MIDI CC N is between reverse_loccN and reverse_hiccN, the region plays reversed.

Example

+
reverse_locc1=64
+reverse_hicc1=127
+
+

Practical Considerations

+

On Cakewalk, the CC does not take effect once region playback started.

+

Not implemented in ARIA, but an alternative is to use two regions, one with +direction=reverse then switch region with loccN / hiccN.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
reverse_hiccNSFZ v2integerN/A0 to 127N/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/reverse_loccN/index.html b/opcodes/reverse_loccN/index.html new file mode 100644 index 000000000..f4a607d1e --- /dev/null +++ b/opcodes/reverse_loccN/index.html @@ -0,0 +1,722 @@ + + + + + + + + + reverse_loccN / reverse_hiccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

reverse_loccN / reverse_hiccN

+

If MIDI CC N is between reverse_loccN and reverse_hiccN, the region plays reversed.

Example

+
reverse_locc1=64
+reverse_hicc1=127
+
+

Practical Considerations

+

On Cakewalk, the CC does not take effect once region playback started.

+

Not implemented in ARIA, but an alternative is to use two regions, one with +direction=reverse then switch region with loccN / hiccN.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
reverse_loccNSFZ v2integerN/A0 to 127N/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/rt_dead/index.html b/opcodes/rt_dead/index.html new file mode 100644 index 000000000..7fced1fcd --- /dev/null +++ b/opcodes/rt_dead/index.html @@ -0,0 +1,724 @@ + + + + + + + + + rt_dead - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

rt_dead

+

Controls whether a release sample should play if its sustain sample has ended, or not.

Allowed values are on and off, default is off, so by default, release +samples do not play if their sustain samples have expired.

+

Example

+
rt_dead=on
+
+

Although the default behavior makes sense for instrument such as pianos, with +guitars there is still some noise when a finger releases a fretted note, so it +can make sense to use rt_dead=on there. Also, if using release samples to +emulate tremolo playing (so that the note plays when the key is pressed, and +again when the key is released - this can be useful for vibraphone, marimba etc.), +rt_dead=on can also be useful.

+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
rt_deadSFZ v2stringoffon, off
+

Category: Instrument Settings, Voice Lifecycle

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/rt_decay/index.html b/opcodes/rt_decay/index.html new file mode 100644 index 000000000..981a94a10 --- /dev/null +++ b/opcodes/rt_decay/index.html @@ -0,0 +1,737 @@ + + + + + + + + + rt_decay - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

rt_decay

+

Applies only to regions that triggered through trigger=release. The volume decrease (in decibels) per seconds after the corresponding attack region was triggered.

Example

+
<region> sample=pianoA4.wav trigger=attack
+
+<region> sample=keyup_noise.wav trigger=release rt_decay=3
+
+//The sample keyup_noise.wav will play 3db quieter for every second the key has been on.
+
+

Range is 0 to 200. +In general, higher values mean high decrease of the release sample volume with time, +which makes sense for release samples associated with sounds which decay quickly +when held. For example, higher piano notes decay much faster than lower ones, so +the higher notes will need higher rt_decay values. +Release samples for sounds which do not naturally decay, such as organs or +guitar feedback, do not need their volume to decrease based on note duration, +and can use the default value of 0.

+

Practical Considerations

+

In ARIA, extended MIDI CC 151 can be used alongside rt_decay to select different release +samples for different time ranges. However, CCs have one value across the entire +instrument. CC 151 is time since the last note-on message in seconds. This can give +undesired results in arpeggios.

+

The ARIA extension rt_decayN does not allow different release samples to be selected, +but it does allow different values of the volume decrease rate to be used for different +time ranges. Unlike CC 151, this is not affected by subsequently played notes.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
rt_decaySFZ v1float00 to 200dB
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/rt_decayN/index.html b/opcodes/rt_decayN/index.html new file mode 100644 index 000000000..16d2e868e --- /dev/null +++ b/opcodes/rt_decayN/index.html @@ -0,0 +1,734 @@ + + + + + + + + + rt_decayN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

rt_decayN

+

Applies only to regions that triggered through trigger=release. The volume decrease (in decibels) per seconds after the corresponding attack region was triggered, for decrease curve segment number N.

This works similarly to rt_decay, but with a multisegment volume decrease curve. The duration +of each segment and a different decrease rate for each segment can be set.

+

Example

+
<region> sample=pianoA4.wav trigger=attack
+
+<region> sample=keyup_noise.wav trigger=release
+rt_decay1=3
+rt_decay1_time=2
+rt_decay2=1.5
+
+//The sample keyup_noise.wav will play 3db quieter for every second the key has been on.
+
+

Practical Considerations

+

In ARIA, extended MIDI CC 151 can be used alongside (or instead of) rt_decay to select +different release samples for different time ranges. However, CCs have one value +across the entire instrument. CC 151 is time since the last note-on message in seconds. +This can give undesired results in arpeggios.

+

The rt_decayN opcode does have the advantage of not being affected by subsequently played +notes, but unlike CC 151, it cannot be used to select completely different release +samples for different time ranges.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
rt_decayNARIAfloat00 to 200dB
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/rt_decayN_time/index.html b/opcodes/rt_decayN_time/index.html new file mode 100644 index 000000000..ce7539a95 --- /dev/null +++ b/opcodes/rt_decayN_time/index.html @@ -0,0 +1,724 @@ + + + + + + + + + rt_decayN_time - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

rt_decayN

+

Applies only to regions that triggered through trigger=release. The volume decrease (in decibels) per seconds after the corresponding attack region was triggered, for decrease curve segment number N.

Example

+
<region> sample=pianoA4.wav trigger=attack
+
+<region> sample=keyup_noise.wav trigger=release
+rt_decay1=3
+rt_decay1_time=2
+rt_decay2=1.5
+
+//The sample keyup_noise.wav will play 3db quieter for every second the key has been on.
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
rt_decayNARIAfloat00 to 200dB
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sample/index.html b/opcodes/sample/index.html new file mode 100644 index 000000000..47dabe6f1 --- /dev/null +++ b/opcodes/sample/index.html @@ -0,0 +1,769 @@ + + + + + + + + + sample - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sample

+

Defines which sample file the region will play.

Possibly the most important opcode, this is the one that tells the sampler which +sample file to actually play. This should include a relative file path from the +folder where the SFZ file is.

+

In most cases, there will be a sample opcode in every region of an SFZ file, +though not always.

+

If the sample file is not found, the player will ignore the whole region +contents as there's nothing to play. Long names and names with blank spaces and +other special characters (excepting the = character) are allowed in the sample +definition.

+

Getting the sample to play back at the correct pitch is not automatic, and +generally can't be done with the sample opcode alone, even if the file name +includes pitch information. Assuming that the tune or transpose opcodes are not +used to change the pitch, the sample will play unchanged in pitch when a note +equal to the pitch_keycenter opcode value is played. +If pitch_keycenter is not defined for the region, sample will +play unchanged on note 60 (middle C). If pitch_keytrack +is set to 0, the sample will also play unchanged in pitch, +regardless of how pitch_keycenter is set. +If the key opcode is used to define the range of the sample (instead of lokey, +hikey and pitch_keycenter) the sample will also be unchanged in pitch.

+

Formats

+

At the SFZ1 specification level, the supported sample formats are: ++ WAV of any sample rate ++ Ogg Vorbis compressed samples

+

For SFZ2, the Cakewalk book specifies the following sample types in addition of +the above: ++ AIFF of any sample rate ++ FLAC support is not specified as mandatory, though FLAC was supported by + Cakewalk Session Drummer, and is supported by ARIA

+

See also Features section in the home page.

+

WAV is usually the first choice, or perhaps AIFF when using macOS. +FLAC is the second choice, as it is lossless compression audio is always preferable, +though it needs to be decoded which can cause slower performance compared to WAV. +Other compressed formats can be used for test cases or situations where keeping +the file size small is more important than audio quality.

+

See also the table of supported sample formats by some engines for more details.

+

Examples

+
sample=A3.wav
+sample=..\Samples\close\c4_pp_rr3.wav
+
+

Each engine can also support custom oscillators. For example, ARIA supports +using this opcode for some basic synthesized sound waves such as:

+
sample=*sine
+sample=*saw
+sample=*square
+sample=*triangle
+sample=*tri
+sample=*noise
+sample=*silence
+
+

Tri is an alias for triangle. For cases where we don't want to actually play +a sample but want a region to exist and be played +(for example, to mute other sounds when using group and +off_by, the silence value can be very convenient).

+

Note that in this case the * is a real character and not a wildcard.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sampleSFZ v1stringN/AN/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sample_dyn_paramN/index.html b/opcodes/sample_dyn_paramN/index.html new file mode 100644 index 000000000..d730b8083 --- /dev/null +++ b/opcodes/sample_dyn_paramN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + sample_dyn_paramN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sample_dyn_paramN

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sample_dyn_paramNARIAfloatN/AN/A
Modulations
sample_dyn_paramN_onccXfloatN/AN/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sample_dyn_paramN_onccX/index.html b/opcodes/sample_dyn_paramN_onccX/index.html new file mode 100644 index 000000000..781b27e54 --- /dev/null +++ b/opcodes/sample_dyn_paramN_onccX/index.html @@ -0,0 +1,730 @@ + + + + + + + + + sample_dyn_paramN_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sample_dyn_paramN

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sample_dyn_paramNARIAfloatN/AN/A
Modulations
sample_dyn_paramN_onccXfloatN/AN/A
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sample_fadeout/index.html b/opcodes/sample_fadeout/index.html new file mode 100644 index 000000000..c0554618a --- /dev/null +++ b/opcodes/sample_fadeout/index.html @@ -0,0 +1,726 @@ + + + + + + + + + sample_fadeout - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sample_fadeout

+

Number of seconds before the end of sample playback that the player should begin a realtime fadeout.

The fadeout end coincides with playback end.

+

(Source: Peter L. Jones SFZ page)

+

Example

+
<region>
+sample=4_seconds_c3.wav
+loop_mode=no_loop
+sample_fadeout=2.5
+
+

The curve used for fading out is linear.

+

Practical Considerations

+

This opcode is supported in RGC sfz and Cakewalk products, where at least in +DropZone uses sample units instead seconds.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sample_fadeoutSFZ v2floatN/Aseconds
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sample_quality/index.html b/opcodes/sample_quality/index.html new file mode 100644 index 000000000..b4a66d9fb --- /dev/null +++ b/opcodes/sample_quality/index.html @@ -0,0 +1,722 @@ + + + + + + + + + sample_quality - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sample_quality

+

Sample playback quality settings.

Defines the interpolation algorithm used for samples. +The higher the setting, the better the algorithm is in terms of sound quality, +at the expense of processing speed.

+
    +
  • 1: linear interpolation
  • +
  • 2: higher quality interpolation, for example a polynomial interpolator
  • +
  • 3-10: windowed sinc interpolation, using increasingly larger window sizes
  • +
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sample_qualitySFZ v2integerN/A1 to 10N/A
+

Category: Loading

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/script/index.html b/opcodes/script/index.html new file mode 100644 index 000000000..1427fc778 --- /dev/null +++ b/opcodes/script/index.html @@ -0,0 +1,734 @@ + + + + + + + + + script - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

script

+

Allows to load real-time instrument scripts for SFZ instruments.

This is an extension to the SFZ file format which is currently only available +with LinuxSampler v2.0.0.svn37 or higher. +Find out more about Instrument Scripts.

+

The mandatory path parameter defines the file system path to the real-time +instrument script file that shall be loaded and executed, which may either be an +absolute path or a relative path. A relative path is always interpreted relative +to the SFZ file's location.

+

May only be used in ‹global› section.

+

Example

+

Loads the WAV file "some_sound.wav" and assigns it to the entire key range of the +instrument, and loads the real-time instrument script file "my_nksp_script.txt" +from the subdirectory "myscripts". The script will be executed on the respective +events the script file provides event handlers for.

+
<global>
+script=myscripts/my_nksp_script.txt
+
+<group>
+sample=some_sound.wav
+
+

Source: LinuxSampler Documentation

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
scriptLinuxSamplerstringN/AN/A
+

Category: Real-Time Instrument Script

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/seq_length/index.html b/opcodes/seq_length/index.html new file mode 100644 index 000000000..6d2b7d6f1 --- /dev/null +++ b/opcodes/seq_length/index.html @@ -0,0 +1,746 @@ + + + + + + + + + seq_length - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

seq_length

+

Sequence length, used together with seq_position to use samples as round robins.

The player will keep an internal counter creating a consecutive note-on sequence +for each region, starting at 1 and resetting at seq_length.

+

Example

+
seq_length=3
+
+

A typical usage for a kick drum with four round robins, and a snare with three +round robins, would look like this:

+
<group>key=36 seq_length=4
+<region>seq_position=1 sample=kick_rr1.wav
+<region>seq_position=2 sample=kick_rr2.wav
+<region>seq_position=3 sample=kick_rr3.wav
+<region>seq_position=4 sample=kick_rr4.wav
+
+<group>key=38 seq_length=3
+<region>seq_position=1 sample=snare_rr1.wav
+<region>seq_position=2 sample=snare_rr2.wav
+<region>seq_position=3 sample=snare_rr3.wav
+
+

An alternative to this is using lorand / hirand for +random, instead of sequential, round robins. If there are enough samples +available, both methods can also be combined - the combination is described +on the lorand / hirand page. However, lorand/hirand might +not be a good idea to use with samples which have multiple microphone +positions, and sticking to seq_position and seq_length might be necessary.

+

Practical Considerations

+

In the ARIA implementation of SFZ, sequence position is not tracked together +for all regions, which means sequential round robins is not a practical way +to implement alternating left/right hand or up/down bowing samples.

+

Setting seq_length to 0 behaves the same as setting it to 1 in Cakewalk +players, sfizz and BassMIDI, but a setting of 0 in ARIA will cause each +round robin in the sequence to be played once, and playing more notes once +the counter exceeds the highest seq_position will result in no sound.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
seq_lengthSFZ v1integer11 to 100N/A
+

Category: Region Logic, Internal Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/seq_position/index.html b/opcodes/seq_position/index.html new file mode 100644 index 000000000..87cbf6ac5 --- /dev/null +++ b/opcodes/seq_position/index.html @@ -0,0 +1,782 @@ + + + + + + + + + seq_position - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

seq_position

+

Sequence position. The region will play if the internal sequence counter is equal to seq_position.

This is used together with seq_length to use samples as round robins. +The player will keep an internal counter creating a consecutive +note-on sequence for each region, starting at 1 and resetting at seq_length. +Maximum allowed value is 100.

+

Example

+
seq_length=4 seq_position=2
+
+

In above example, the region will play on the second note every four notes.

+

A typical usage for a kick drum with four round robins, and a snare with three +round robins, would look like this:

+
<group>key=36 seq_length=4
+<region>seq_position=1 sample=kick_rr1.wav
+<region>seq_position=2 sample=kick_rr2.wav
+<region>seq_position=3 sample=kick_rr3.wav
+<region>seq_position=4 sample=kick_rr4.wav
+
+<group>key=38 seq_length=3
+<region>seq_position=1 sample=snare_rr1.wav
+<region>seq_position=2 sample=snare_rr2.wav
+<region>seq_position=3 sample=snare_rr3.wav
+
+

An alternative to this is using lorand / hirand for +random, instead of sequential, round robins. If there are enough samples +available, both methods can also be combined - the combination is described on +the lorand / hirand page. However, lorand/hirand might not +be a good idea to use with samples which have multiple microphone positions, +and sticking to seq_position and seq_length might be necessary.

+

Practical Considerations

+

In at least some SFZ players, sequence position is not tracked together for +all regions, which means seq_position is not a practical way to implement +alternating left/right hand or up/down bowing samples.

+

Some players also match velocity ranges for each step in the sequence, which +can cause problems when the sequence steps do not have the same velocity +layer split points. For example, this can produce occasional silence, depending +on the velocity of incoming MIDI notes, the velocity of the previous MIDI note, +and the current point in the sequence:

+
<global>
+seq_length=2
+key=48
+
+<group> seq_position=1
+<region> lovel=1 hivel=31 sample=*noise
+<region> lovel=32 hivel=127 sample=*saw
+
+<group> seq_position=2
+<region> lovel=1 hivel=95 sample=*noise
+<region> lovel=96 hivel=127 sample=*saw
+
+

This will also happen in cases where, for example, one step in the +sequence has three velocity layers and the other step has four, as it's +not possible to make the layer split points match then.

+

In those players, this is a workaround:

+
<global>
+seq_length=2
+key=48
+
+<group> seq_position=1
+<region> lovel=1 hivel=31 sample=*noise
+<region> lovel=32 hivel=95 sample=*saw
+<region> lovel=96 hivel=127 sample=*saw
+
+<group> seq_position=2
+<region> lovel=1 hivel=31 sample=*noise
+<region> lovel=32 hivel=95 sample=*noise
+<region> lovel=96 hivel=127 sample=*saw
+
+

Setting seq_position to 0 will cause the region to not play in most sfz player, +except for sfizz where it will behave the same as setting seq_position to 1.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
seq_positionSFZ v1integer11 to 100N/A
+

Category: Region Logic, Internal Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/set_ccN/index.html b/opcodes/set_ccN/index.html new file mode 100644 index 000000000..88129be7d --- /dev/null +++ b/opcodes/set_ccN/index.html @@ -0,0 +1,719 @@ + + + + + + + + + set_ccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

set_ccN

+

Sets a default initial value for MIDI CC number N, when the instrument is initially loaded.

Used under the ‹control› header.

+

Examples

+
set_cc40=127
+set_cc100=30
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
set_ccNSFZ v2integerN/A0 to 127N/A
+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/set_hdccN/index.html b/opcodes/set_hdccN/index.html new file mode 100644 index 000000000..632832ed3 --- /dev/null +++ b/opcodes/set_hdccN/index.html @@ -0,0 +1,724 @@ + + + + + + + + + set_hdccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

set_hdccN

+

Like set_ccN but with floating point MIDI CCs.

Sets a default initial value for MIDI CC number N using a floating point value, +when the instrument is initially loaded.

+

Used under the ‹control› header.

+

Examples

+
<control> set_hdcc16=0.5
+<master> amplitude_oncc16=100
+<region> sample=*sine
+
+

Practical Considerations

+

set_realccN is a deprecated alias for set_hdccN.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
set_hdccNARIAfloatN/A0 to 1N/A
+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/set_realccN/index.html b/opcodes/set_realccN/index.html new file mode 100644 index 000000000..9dcf71133 --- /dev/null +++ b/opcodes/set_realccN/index.html @@ -0,0 +1,724 @@ + + + + + + + + + set_realccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

set_hdccN

+

Like set_ccN but with floating point MIDI CCs.

Sets a default initial value for MIDI CC number N using a floating point value, +when the instrument is initially loaded.

+

Used under the ‹control› header.

+

Examples

+
<control> set_hdcc16=0.5
+<master> amplitude_oncc16=100
+<region> sample=*sine
+
+

Practical Considerations

+

set_realccN is a deprecated alias for set_hdccN.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
set_hdccNARIAfloatN/A0 to 1N/A
+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sostenuto_cc/index.html b/opcodes/sostenuto_cc/index.html new file mode 100644 index 000000000..ea35aec1e --- /dev/null +++ b/opcodes/sostenuto_cc/index.html @@ -0,0 +1,719 @@ + + + + + + + + + sostenuto_cc - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sostenuto_cc

+

Reassigns the sostenuto pedal CC to a non-standard value.

The default is 66, the standard sustain pedal assignment in the MIDI specification.

+

Examples

+
sostenuto_cc=12
+sostenuto_cc=122
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sostenuto_ccARIAinteger660 to 127N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sostenuto_lo/index.html b/opcodes/sostenuto_lo/index.html new file mode 100644 index 000000000..e37ab12c5 --- /dev/null +++ b/opcodes/sostenuto_lo/index.html @@ -0,0 +1,725 @@ + + + + + + + + + sostenuto_lo - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sostenuto_lo

+

Sets the minimum point at which the sostenuto pedal (MIDI CC 66) is considered 'down'.

Default is 0.5, meaning the sustain pedal is down as long as the CC value is +anything above 0. To make the pedal only act as "down" past the halfway point, +set this to 64 - then the pedal is considered "up" from CC value 0 to 63, and +"down" from 64 to 127. Leaving this at the default value of 1, or setting it to +some other low number such as 10, is useful when the piano supports +half-pedaling. Setting it to 64 is preferred by some users who want to use the +sostenuto pedal as an on/off switch for instruments with no half-pedaling.

+

Examples

+
sostenuto_lo=64
+sostenuto_lo=20
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sostenuto_loARIAfloat0.50 to 127N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sostenuto_sw/index.html b/opcodes/sostenuto_sw/index.html new file mode 100644 index 000000000..0292622c6 --- /dev/null +++ b/opcodes/sostenuto_sw/index.html @@ -0,0 +1,716 @@ + + + + + + + + + sostenuto_sw - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sostenuto_sw

+

Turns the sostenuto switch on or off.

Example

+
sostenuto_sw=off
+
+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
sostenuto_swSFZ v2stringN/Aon, off
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/start_hiccN/index.html b/opcodes/start_hiccN/index.html new file mode 100644 index 000000000..71472ff54 --- /dev/null +++ b/opcodes/start_hiccN/index.html @@ -0,0 +1,732 @@ + + + + + + + + + on_loccN / on_hiccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

on_loccN / on_hiccN

+

Sample trigger on MIDI continuous control N. +This does not involve playing any MIDI notes.

+

Example

+
on_locc64=127 on_hicc64=127
+
+

Region will play when a MIDI CC64 (sustain pedal) message with 127 value is +received. So, basically, when the sustain pedal is pressed down, this region will play. +This is useful with piano pedals - in the above example, on_loccN and on_hiccN +could be used to trigger a mechanical noise sample, whether any keys are being played +or not. It would not typically be used with hi-hat pedals, as most electronic drum kits +will send a MIDI note when the pedal hits bottom.

+

Practical Considerations

+

on_locc/on_hicc effectively replaces the default trigger=attack. +The behavior of a region which has on_locc/on_hicc and trigger=attack both explicitly +specified is not defined by the SFZ specification, and that combination should be used.

+

In ARIA if on_locc/on_hicc and trigger=release or trigger=release_key is used, the +on_locc/on_hicc opcode will be effectively disregarded, and the region will behave +like a normal release or release_key region.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
start_hiccNSFZ v2N/AN/AN/A
+

Category: Region Logic, Triggers

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/start_hihdccN/index.html b/opcodes/start_hihdccN/index.html new file mode 100644 index 000000000..9145e7891 --- /dev/null +++ b/opcodes/start_hihdccN/index.html @@ -0,0 +1,717 @@ + + + + + + + + + on_lohdccN / on_hihdccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

on_lohdccN / on_hihdccN

+

Like start_hiccN but with floating point MIDI CCs.

Example

+
on_lohdcc64=1 on_hihdcc64=1
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
start_hihdccNN/AN/AN/A
+

Category: Region Logic, Triggers

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/start_loccN/index.html b/opcodes/start_loccN/index.html new file mode 100644 index 000000000..82ba146e0 --- /dev/null +++ b/opcodes/start_loccN/index.html @@ -0,0 +1,732 @@ + + + + + + + + + on_loccN / on_hiccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

on_loccN / on_hiccN

+

Sample trigger on MIDI continuous control N. +This does not involve playing any MIDI notes.

+

Example

+
on_locc64=127 on_hicc64=127
+
+

Region will play when a MIDI CC64 (sustain pedal) message with 127 value is +received. So, basically, when the sustain pedal is pressed down, this region will play. +This is useful with piano pedals - in the above example, on_loccN and on_hiccN +could be used to trigger a mechanical noise sample, whether any keys are being played +or not. It would not typically be used with hi-hat pedals, as most electronic drum kits +will send a MIDI note when the pedal hits bottom.

+

Practical Considerations

+

on_locc/on_hicc effectively replaces the default trigger=attack. +The behavior of a region which has on_locc/on_hicc and trigger=attack both explicitly +specified is not defined by the SFZ specification, and that combination should be used.

+

In ARIA if on_locc/on_hicc and trigger=release or trigger=release_key is used, the +on_locc/on_hicc opcode will be effectively disregarded, and the region will behave +like a normal release or release_key region.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
start_loccNSFZ v2N/AN/AN/A
+

Category: Region Logic, Triggers

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/start_lohdccN/index.html b/opcodes/start_lohdccN/index.html new file mode 100644 index 000000000..ee8a1167f --- /dev/null +++ b/opcodes/start_lohdccN/index.html @@ -0,0 +1,717 @@ + + + + + + + + + on_lohdccN / on_hihdccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

on_lohdccN / on_hihdccN

+

Like start_loccN but with floating point MIDI CCs.

Example

+
on_lohdcc64=1 on_hihdcc64=1
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
start_lohdccNN/AN/AN/A
+

Category: Region Logic, Triggers

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/static_cyclic_level/index.html b/opcodes/static_cyclic_level/index.html new file mode 100644 index 000000000..fda254be4 --- /dev/null +++ b/opcodes/static_cyclic_level/index.html @@ -0,0 +1,715 @@ + + + + + + + + + static_cyclic_level - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

static_cyclic_level

+

Used under the ‹effect› header, with type=static.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
static_cyclic_levelSFZ v2N/A0 to 100N/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/static_cyclic_time/index.html b/opcodes/static_cyclic_time/index.html new file mode 100644 index 000000000..b74a80243 --- /dev/null +++ b/opcodes/static_cyclic_time/index.html @@ -0,0 +1,715 @@ + + + + + + + + + static_cyclic_time - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

static_cyclic_time

+

Used under the ‹effect› header, with type=static.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
static_cyclic_timeSFZ v2floatN/Aseconds
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/static_filter/index.html b/opcodes/static_filter/index.html new file mode 100644 index 000000000..6751240b5 --- /dev/null +++ b/opcodes/static_filter/index.html @@ -0,0 +1,716 @@ + + + + + + + + + static_filter - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

static_filter

+

Name of filter type.

Used under the ‹effect› header, with type=static.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
static_filterSFZ v2stringN/AN/A
+

See also: fil_type

+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/static_level/index.html b/opcodes/static_level/index.html new file mode 100644 index 000000000..07e0254aa --- /dev/null +++ b/opcodes/static_level/index.html @@ -0,0 +1,730 @@ + + + + + + + + + static_level - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

static_level

+

Used under the ‹effect› header, with type=static.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
static_levelSFZ v2N/A0 to 100N/A
Modulations
static_level_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/static_level_onccN/index.html b/opcodes/static_level_onccN/index.html new file mode 100644 index 000000000..3149e7364 --- /dev/null +++ b/opcodes/static_level_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + static_level_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

static_level

+

Used under the ‹effect› header, with type=static.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
static_levelSFZ v2N/A0 to 100N/A
Modulations
static_level_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/static_random_level/index.html b/opcodes/static_random_level/index.html new file mode 100644 index 000000000..6db11a966 --- /dev/null +++ b/opcodes/static_random_level/index.html @@ -0,0 +1,715 @@ + + + + + + + + + static_random_level - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

static_random_level

+

Used under the ‹effect› header, with type=static.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
static_random_levelSFZ v2N/A0 to 100N/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/static_random_maxtime/index.html b/opcodes/static_random_maxtime/index.html new file mode 100644 index 000000000..0cf271c75 --- /dev/null +++ b/opcodes/static_random_maxtime/index.html @@ -0,0 +1,715 @@ + + + + + + + + + static_random_maxtime - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

static_random_maxtime

+

Used under the ‹effect› header, with type=static.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
static_random_maxtimeSFZ v2floatN/Aseconds
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/static_random_mintime/index.html b/opcodes/static_random_mintime/index.html new file mode 100644 index 000000000..1999344b9 --- /dev/null +++ b/opcodes/static_random_mintime/index.html @@ -0,0 +1,715 @@ + + + + + + + + + static_random_mintime - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

static_random_mintime

+

Used under the ‹effect› header, with type=static.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
static_random_mintimeSFZ v2floatN/Aseconds
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/static_stereo/index.html b/opcodes/static_stereo/index.html new file mode 100644 index 000000000..4af4b6b1c --- /dev/null +++ b/opcodes/static_stereo/index.html @@ -0,0 +1,715 @@ + + + + + + + + + static_stereo - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

static_stereo

+

Used under the ‹effect› header, with type=static.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
static_stereoSFZ v2N/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/static_tone/index.html b/opcodes/static_tone/index.html new file mode 100644 index 000000000..9bdc4e15b --- /dev/null +++ b/opcodes/static_tone/index.html @@ -0,0 +1,715 @@ + + + + + + + + + static_tone - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

static_tone

+

Used under the ‹effect› header, with type=static.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
static_toneSFZ v2N/A0 to 100N/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/stop_beats/index.html b/opcodes/stop_beats/index.html new file mode 100644 index 000000000..eb7bd8970 --- /dev/null +++ b/opcodes/stop_beats/index.html @@ -0,0 +1,723 @@ + + + + + + + + + stop_beats - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

stop_beats

+

Stops a region after a certain amount of beats have played.

Used in Cakewalk Dimension Pro and DropZone, alongside delay_beats, to play slices of loops at specific points in the bar.

+

Examples

+
delay_beats=1 stop_beats=1.5
+delay_beats=25.9922 stop_beats=26.0964  
+
+

Practical Considerations

+

Intended to be a counterpart to delay_beats and used in Cakewalk Dimension Pro and DropZone. +This opcode appears to be not implemented in ARIA - it passes the parser in ARIA but seems to +have no effect on its region.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
stop_beatsSFZ v2floatN/Abeats
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/stop_hiccN/index.html b/opcodes/stop_hiccN/index.html new file mode 100644 index 000000000..e57a316f1 --- /dev/null +++ b/opcodes/stop_hiccN/index.html @@ -0,0 +1,718 @@ + + + + + + + + + stop_loccN / stop_hiccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

stop_loccN / stop_hiccN

+

If a MIDI control message with a value between stop_loccN and stop_hiccN is received, the region will stop playing. Default value is -1, it means unassigned.

Practical Considerations

+

This was intended to be used together with start_loccN / start_hiccN, +but has not yet been implemented, which means this opcode passes the parser in +ARIA but has no effect on the region.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
stop_hiccNSFZ v2integer-10 to 127N/A
+

Category: Region Logic, Triggers

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/stop_hihdccN/index.html b/opcodes/stop_hihdccN/index.html new file mode 100644 index 000000000..310152672 --- /dev/null +++ b/opcodes/stop_hihdccN/index.html @@ -0,0 +1,715 @@ + + + + + + + + + stop_lohdccN / stop_hihdccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

stop_lohdccN / stop_hihdccN

+

Like stop_hiccN but with floating point MIDI CCs.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
stop_hihdccNARIAfloat-10 to 1N/A
+

Category: Region Logic, Triggers

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/stop_loccN/index.html b/opcodes/stop_loccN/index.html new file mode 100644 index 000000000..83daf0bab --- /dev/null +++ b/opcodes/stop_loccN/index.html @@ -0,0 +1,718 @@ + + + + + + + + + stop_loccN / stop_hiccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

stop_loccN / stop_hiccN

+

If a MIDI control message with a value between stop_loccN and stop_hiccN is received, the region will stop playing. Default value is -1, it means unassigned.

Practical Considerations

+

This was intended to be used together with start_loccN / start_hiccN, +but has not yet been implemented, which means this opcode passes the parser in +ARIA but has no effect on the region.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
stop_loccNSFZ v2integer-10 to 127N/A
+

Category: Region Logic, Triggers

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/stop_lohdccN/index.html b/opcodes/stop_lohdccN/index.html new file mode 100644 index 000000000..e82cbc76a --- /dev/null +++ b/opcodes/stop_lohdccN/index.html @@ -0,0 +1,715 @@ + + + + + + + + + stop_lohdccN / stop_hihdccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

stop_lohdccN / stop_hihdccN

+

Like stop_loccN but with floating point MIDI CCs.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
stop_lohdccNARIAfloat-10 to 1N/A
+

Category: Region Logic, Triggers

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/strings_number/index.html b/opcodes/strings_number/index.html new file mode 100644 index 000000000..7b3d07b0e --- /dev/null +++ b/opcodes/strings_number/index.html @@ -0,0 +1,715 @@ + + + + + + + + + strings_number - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

strings_number

+

Number of synthesized resonant strings.

Used under the ‹effect› header, with type=strings.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
strings_numberSFZ v2N/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/strings_wet_onccN/index.html b/opcodes/strings_wet_onccN/index.html new file mode 100644 index 000000000..9e2084a90 --- /dev/null +++ b/opcodes/strings_wet_onccN/index.html @@ -0,0 +1,715 @@ + + + + + + + + + strings_wet_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

strings_wet_onccN

+

Used under the ‹effect› header, with type=strings.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
strings_wet_onccNSFZ v2N/A0 to 100N/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sustain_cc/index.html b/opcodes/sustain_cc/index.html new file mode 100644 index 000000000..7962ea730 --- /dev/null +++ b/opcodes/sustain_cc/index.html @@ -0,0 +1,719 @@ + + + + + + + + + sustain_cc - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sustain_cc

+

Reassigns the sustain pedal CC to a non-standard value.

The default is 64, the standard sustain pedal assignment in the MIDI specification.

+

Examples

+
sustain_cc=4
+sustain_cc=120
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sustain_ccARIAinteger640 to 127N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sustain_lo/index.html b/opcodes/sustain_lo/index.html new file mode 100644 index 000000000..120000443 --- /dev/null +++ b/opcodes/sustain_lo/index.html @@ -0,0 +1,733 @@ + + + + + + + + + sustain_lo - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sustain_lo

+

Sets the minimum point at which the sustain pedal (MIDI CC 64) is considered 'down'.

This ARIA extension sets the minimum point +at which the sustain pedal (MIDI CC 64) is considered "down". +Default is 0.5, meaning the sustain pedal is down as long as the CC value is +anything above 0. To make the pedal only act as "down" past the halfway point, +set this to 64 - then the pedal is considered "up" from CC value 0 to 63, +and "down" from 64 to 127. Leaving this at the default value of 1, or setting it +to some other low number such as 10, is useful when the piano supports +half-pedaling. Setting it to 64 is preferred by some users who want to use the +sustain pedal as an on/off sustain switch for instruments with no half-pedaling.

+

Please note that the direction of the MIDI CC values is normally from 0 at the +top of the pedal to 127 when it is at the bottom, meaning that physically "down" +on the pedal is up in terms of MIDI CC value.

+

It is possible to set this to different values for different regions, so that +for example mechanical noises and notes will not be affected by the sustain pedal +in the same way.

+

Examples

+
sustain_lo=64
+sustain_lo=20
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sustain_loARIAfloat0.50 to 127N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sustain_sw/index.html b/opcodes/sustain_sw/index.html new file mode 100644 index 000000000..42183accd --- /dev/null +++ b/opcodes/sustain_sw/index.html @@ -0,0 +1,716 @@ + + + + + + + + + sustain_sw - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sustain_sw

+

Turns the sustain switch on or off.

Example

+
sustain_sw=off
+
+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
sustain_swSFZ v2stringN/Aon, off
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sw_default/index.html b/opcodes/sw_default/index.html new file mode 100644 index 000000000..408c3df49 --- /dev/null +++ b/opcodes/sw_default/index.html @@ -0,0 +1,743 @@ + + + + + + + + + sw_default / sw_label - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sw_default / sw_label

+

Define keyswitch 'power on default' so that you hear something when a patch loads.

sw_default sets a default value for sw_last. In a guitar instrument +which uses keyswitches to select articulations, this can be used to for example +make the picked articulation active by default when the instrument is first loaded. +Without sw_default, this instrument would be silent until a keyswitch is manually +used to select an articulation.

+

Example

+
// **********************************************************************
+// A Keyswitching Example
+//
+// Notes 36,38 and 40 serve as switches to trigger sine, triangle or saw oscillators.
+// you can expand on this concept to create your own KeySwitching instruments.
+// **********************************************************************
+<global>
+ sw_lokey=36 sw_hikey=40 sw_default=36
+
+<region> sw_last=36 sw_label=Sine lokey=41 sample=*sine
+<region> sw_last=38 sw_label=Triangle lokey=41 sample=*triangle
+<region> sw_last=40 sw_label=Saw lokey=41 sample=*saw
+
+

sw_label example image

+

Practical Considerations

+

sw_label causes ARIA/Sforzando to display the most recent selected keyswitch label +appear on its interface. This apparently needs to be set for all regions for which +that sw_last value is set, which can mean setting the label in multiple places in +an sfz file.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sw_defaultSFZ v2integerN/A0 to 127N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sw_down/index.html b/opcodes/sw_down/index.html new file mode 100644 index 000000000..68ab88493 --- /dev/null +++ b/opcodes/sw_down/index.html @@ -0,0 +1,735 @@ + + + + + + + + + sw_down / sw_up - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sw_down / sw_up

+

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.

Can be entered in either MIDI note numbers (0 to 127) or in MIDI note +names (C-1 to G9)

+

Example

+
sw_down=C3
+sw_down=24
+sw_up=25
+
+

The difference between sw_down and sw_last is that sw_last +is a "sticky" keyswitch - after releasing the keyswitch note, it continues to +affect notes until another keyswitch is pressed. sw_down, on the other hand, is +"non-sticky" and only affects notes played while the switch is held down. It could +also possibly be used for true legato instead of sw_previous.

+

If there is a default articulation which should sound when no sw_down keys are +pressed, sw_up should be defined for those regions. For example, +if there is a flute with a default sustain articulation which should not sound +when an ornamentation is selected using sw_down, the default sustain articulation +can use sw_up so it only sounds when no ornamentation keyswitch is held down.

+

In ARIA, either sw_down or sw_up can be a note in the playable range, regardless +of whether sw_lokey / hikey is defined or not. In rgc sfz, they +can be in the playable range if sw_lokey/hikey are not defined, but if they +are defined, then sw_down and sw_up notes must fall in the sw_lokey/hikey range.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sw_downSFZ v1integer00 to 127N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sw_hikey/index.html b/opcodes/sw_hikey/index.html new file mode 100644 index 000000000..e5968659f --- /dev/null +++ b/opcodes/sw_hikey/index.html @@ -0,0 +1,730 @@ + + + + + + + + + sw_lokey / sw_hikey - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sw_lokey / sw_hikey

+

Defines the range of the keyboard to be used as trigger selectors for the sw_last opcode.

Basically, this tells the SFZ player where the keyswitches are. +As such, it's normally going to be the same for the entire instrument, +so sw_lokey and sw_hikey will be set under the ‹global› header. +This affects sw_last keyswitches. On the other hand, sw_previous keyswitches +can be outside of this range - and indeed often must be, as sw_previous +is often used for legato instruments.

+

With sw_down / sw_up this behavior is implementation-dependent. +In ARIA, either sw_down or sw_up can be a note in the playable range, regardless +of whether sw_lokey / hikey is defined or not. In rgc sfz, they +can be in the playable range if sw_lokey/hikey are not defined, but if they +are defined, then sw_down and sw_up notes must fall in the sw_lokey/hikey range.

+

sw_lokey and sw_hikey can be entered in either MIDI note numbers (0 to 127) +or in MIDI note names (C-1 to G9)

+

Example

+
sw_lokey=48 sw_hikey=53
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sw_hikeySFZ v1integer1270 to 127N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sw_hilast/index.html b/opcodes/sw_hilast/index.html new file mode 100644 index 000000000..7596bd2a6 --- /dev/null +++ b/opcodes/sw_hilast/index.html @@ -0,0 +1,723 @@ + + + + + + + + + sw_lolast / sw_hilast - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sw_lolast / sw_hilast

+

Like sw_last, but allowing a region to be triggered across a range of keyswitches.

sw_lolast specifies the bottom of the range, and sw_hilast the high.

+

Example

+
sw_lolast=24
+sw_hilast=25
+
+

This is useful when there are multiple regions being triggered, and some of them +are common across several keyswitches - for example, fretting noises triggered +on note release on a guitar might be the same across both normal, hammer-on and +slide articulations, but should not be triggered for harmonics.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sw_hilastARIAintegerN/A0 to 127N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sw_label/index.html b/opcodes/sw_label/index.html new file mode 100644 index 000000000..594881485 --- /dev/null +++ b/opcodes/sw_label/index.html @@ -0,0 +1,743 @@ + + + + + + + + + sw_default / sw_label - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sw_default / sw_label

+

Label for activated keyswitch on GUI.

sw_default sets a default value for sw_last. In a guitar instrument +which uses keyswitches to select articulations, this can be used to for example +make the picked articulation active by default when the instrument is first loaded. +Without sw_default, this instrument would be silent until a keyswitch is manually +used to select an articulation.

+

Example

+
// **********************************************************************
+// A Keyswitching Example
+//
+// Notes 36,38 and 40 serve as switches to trigger sine, triangle or saw oscillators.
+// you can expand on this concept to create your own KeySwitching instruments.
+// **********************************************************************
+<global>
+ sw_lokey=36 sw_hikey=40 sw_default=36
+
+<region> sw_last=36 sw_label=Sine lokey=41 sample=*sine
+<region> sw_last=38 sw_label=Triangle lokey=41 sample=*triangle
+<region> sw_last=40 sw_label=Saw lokey=41 sample=*saw
+
+

sw_label example image

+

Practical Considerations

+

sw_label causes ARIA/Sforzando to display the most recent selected keyswitch label +appear on its interface. This apparently needs to be set for all regions for which +that sw_last value is set, which can mean setting the label in multiple places in +an sfz file.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sw_labelARIAstringN/AN/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sw_last/index.html b/opcodes/sw_last/index.html new file mode 100644 index 000000000..fd20fd42b --- /dev/null +++ b/opcodes/sw_last/index.html @@ -0,0 +1,748 @@ + + + + + + + + + sw_last - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

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.

sw_last can be entered in either MIDI note numbers (0 to 127) or in MIDI note +names (C-1 to G9)

+

Example

+
sw_last=49
+
+

This is commonly used to select articulations, for example to switch between +sustain, staccato, spiccato and pizzicato in a violin. With the SFZ 1 or SFZ 2 +spec, an instrument which uses sw_last to select articulations will not have a +default articulation preselected, meaning when loaded, it will play no sound +until one of the keyswitches is pressed - only after that will the instrument +respond to notes. The ARIA extensions include sw_default +as a solution to this.

+

The difference between this and sw_down is that sw_last +is a "sticky" keyswitch - after releasing the keyswitch note, it continues to +affect notes until another keyswitch is pressed. sw_down, +on the other hand, is "non-sticky" and only affects notes played while +the switch is held down. This makes sw_last a good choice for keyswitching +articulations which are often used for many notes in a row, +such as sustain or staccato. +An example of using sw_last to select oscillator waves, with sw_default +used to set the sine to default as well.

+
// **********************************************************************
+// A Keyswitching Example
+//
+// Notes 36,38 and 40 serve as switches to trigger sine, triangle or saw oscillators.
+// you can expand on this concept to create your own KeySwitching instruments.
+// **********************************************************************
+<global>
+ sw_lokey=36 sw_hikey=40 sw_default=36
+
+<region> sw_last=36 sw_label=Sine lokey=41 sample=*sine
+<region> sw_last=38 sw_label=Triangle lokey=41 sample=*triangle
+<region> sw_last=40 sw_label=Saw lokey=41 sample=*saw
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sw_lastSFZ v1integer00 to 127N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sw_lokey/index.html b/opcodes/sw_lokey/index.html new file mode 100644 index 000000000..d5fabde83 --- /dev/null +++ b/opcodes/sw_lokey/index.html @@ -0,0 +1,730 @@ + + + + + + + + + sw_lokey / sw_hikey - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sw_lokey / sw_hikey

+

Defines the range of the keyboard to be used as trigger selectors for the sw_last opcode.

Basically, this tells the SFZ player where the keyswitches are. +As such, it's normally going to be the same for the entire instrument, +so sw_lokey and sw_hikey will be set under the ‹global› header. +This affects sw_last keyswitches. On the other hand, sw_previous keyswitches +can be outside of this range - and indeed often must be, as sw_previous +is often used for legato instruments.

+

With sw_down / sw_up this behavior is implementation-dependent. +In ARIA, either sw_down or sw_up can be a note in the playable range, regardless +of whether sw_lokey / hikey is defined or not. In rgc sfz, they +can be in the playable range if sw_lokey/hikey are not defined, but if they +are defined, then sw_down and sw_up notes must fall in the sw_lokey/hikey range.

+

sw_lokey and sw_hikey can be entered in either MIDI note numbers (0 to 127) +or in MIDI note names (C-1 to G9)

+

Example

+
sw_lokey=48 sw_hikey=53
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sw_lokeySFZ v1integer00 to 127N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sw_lolast/index.html b/opcodes/sw_lolast/index.html new file mode 100644 index 000000000..44252aae3 --- /dev/null +++ b/opcodes/sw_lolast/index.html @@ -0,0 +1,723 @@ + + + + + + + + + sw_lolast / sw_hilast - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sw_lolast / sw_hilast

+

Like sw_last, but allowing a region to be triggered across a range of keyswitches.

sw_lolast specifies the bottom of the range, and sw_hilast the high.

+

Example

+
sw_lolast=24
+sw_hilast=25
+
+

This is useful when there are multiple regions being triggered, and some of them +are common across several keyswitches - for example, fretting noises triggered +on note release on a guitar might be the same across both normal, hammer-on and +slide articulations, but should not be triggered for harmonics.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sw_lolastARIAintegerN/A0 to 127N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sw_note_offset/index.html b/opcodes/sw_note_offset/index.html new file mode 100644 index 000000000..dde185438 --- /dev/null +++ b/opcodes/sw_note_offset/index.html @@ -0,0 +1,715 @@ + + + + + + + + + sw_note_offset - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sw_note_offset

+

Follows the same logic as SFZ 2.0’s note_offset but for key switches.

Used under the ‹control› header.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sw_note_offsetARIAintegerN/AN/A
+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sw_octave_offset/index.html b/opcodes/sw_octave_offset/index.html new file mode 100644 index 000000000..f3d0fbf2b --- /dev/null +++ b/opcodes/sw_octave_offset/index.html @@ -0,0 +1,715 @@ + + + + + + + + + sw_octave_offset - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sw_octave_offset

+

Follows the same logic as SFZ 2.0’s octave_offset but for key switches.

Used under the ‹control› header.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sw_octave_offsetARIAintegerN/AN/A
+

Category: Instrument Settings

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sw_previous/index.html b/opcodes/sw_previous/index.html new file mode 100644 index 000000000..f2afa27bd --- /dev/null +++ b/opcodes/sw_previous/index.html @@ -0,0 +1,722 @@ + + + + + + + + + sw_previous - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sw_previous

+

Previous note value. The region will play if last note-on message was equal to sw_previous value.

sw_previous can be entered in either MIDI note numbers (0 to 127) or +in MIDI note names (C-1 to G9)

+

Example

+
sw_previous=60
+
+

Note that unlike sw_last, the note specified by sw_previous doesn't need +to fall in the sw_lokey / sw_hikey range. +This is useful for true sampled legato.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sw_previousSFZ v1integerN/A0 to 127N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sw_up/index.html b/opcodes/sw_up/index.html new file mode 100644 index 000000000..3ee1b6749 --- /dev/null +++ b/opcodes/sw_up/index.html @@ -0,0 +1,735 @@ + + + + + + + + + sw_down / sw_up - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sw_down / sw_up

+

Enables the region to play if the key equal to sw_up value is not depressed.

Can be entered in either MIDI note numbers (0 to 127) or in MIDI note +names (C-1 to G9)

+

Example

+
sw_down=C3
+sw_down=24
+sw_up=25
+
+

The difference between sw_down and sw_last is that sw_last +is a "sticky" keyswitch - after releasing the keyswitch note, it continues to +affect notes until another keyswitch is pressed. sw_down, on the other hand, is +"non-sticky" and only affects notes played while the switch is held down. It could +also possibly be used for true legato instead of sw_previous.

+

If there is a default articulation which should sound when no sw_down keys are +pressed, sw_up should be defined for those regions. For example, +if there is a flute with a default sustain articulation which should not sound +when an ornamentation is selected using sw_down, the default sustain articulation +can use sw_up so it only sounds when no ornamentation keyswitch is held down.

+

In ARIA, either sw_down or sw_up can be a note in the playable range, regardless +of whether sw_lokey / hikey is defined or not. In rgc sfz, they +can be in the playable range if sw_lokey/hikey are not defined, but if they +are defined, then sw_down and sw_up notes must fall in the sw_lokey/hikey range.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sw_upSFZ v1integer00 to 127N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sw_vel/index.html b/opcodes/sw_vel/index.html new file mode 100644 index 000000000..d66123136 --- /dev/null +++ b/opcodes/sw_vel/index.html @@ -0,0 +1,734 @@ + + + + + + + + + sw_vel - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

sw_vel

+

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.
  • +
+

Example

+
sw_vel=previous
+
+

With sw_vel set to previous, a newly played region will be the triggered using the +previous region's velocity. For example, if the previous velocity is 100 +and the velocity of the new note-on message is 60, the new region will play as if +its velocity was 100.

+

Setting this to previous is useful for making certain legato instruments sound +smoother and more consistent.

+

Practical Considerations

+

At least in ARIA, this affects only volume, and using velocity to modulate +pitch or filter cutoff will use the current note's velocity regardless of how +sw_vel is set. Also in ARIA, sw_vel can work even if sw_previous is not defined.

+

To have sw_vel working in sfz.dll and DropZone and other Cakewalk players, +sw_previous need to be defined. Fil_veltrack, pitch_veltrack and other +velocity modulation e.g. ampeg_vel2attack, etc, also affected by sw_vel.

+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
sw_velSFZ v1stringcurrentcurrent, previous
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sync_beats/index.html b/opcodes/sync_beats/index.html new file mode 100644 index 000000000..f1f987f6d --- /dev/null +++ b/opcodes/sync_beats/index.html @@ -0,0 +1,724 @@ + + + + + + + + + sync_beats - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

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.

+

Example

+
sync_beats=4
+
+

In this example, if note is pressed in beat 2 of current track, note won't be +played until beat 4 reaches.

+

This opcode will only work in hosts featuring song position information +(vstTimeInfo ppqPos).

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sync_beatsSFZ v1float00 to 32beats
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/sync_offset/index.html b/opcodes/sync_offset/index.html new file mode 100644 index 000000000..f90e06300 --- /dev/null +++ b/opcodes/sync_offset/index.html @@ -0,0 +1,725 @@ + + + + + + + + + sync_offset - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

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.

+

Example

+
sync_beats=4
+sync_offset=1
+
+

In this example, if note is pressed in beat 2 of current track, +note won't be played until beat 5 reaches.

+

This opcode will only work in hosts featuring song position information +(vstTimeInfo ppqPos).

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
sync_offsetSFZ v1float00 to 32beats
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/tdfir_dry/index.html b/opcodes/tdfir_dry/index.html new file mode 100644 index 000000000..8fae49d2f --- /dev/null +++ b/opcodes/tdfir_dry/index.html @@ -0,0 +1,730 @@ + + + + + + + + + tdfir_dry - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

tdfir_dry

+

Used under the ‹effect› header, with type=tdfir.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
tdfir_drySFZ v2N/A0 to 100N/A
Modulations
tdfir_dry_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/tdfir_dry_onccN/index.html b/opcodes/tdfir_dry_onccN/index.html new file mode 100644 index 000000000..f958729b7 --- /dev/null +++ b/opcodes/tdfir_dry_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + tdfir_dry_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

tdfir_dry

+

Used under the ‹effect› header, with type=tdfir.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
tdfir_drySFZ v2N/A0 to 100N/A
Modulations
tdfir_dry_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/tdfir_gain/index.html b/opcodes/tdfir_gain/index.html new file mode 100644 index 000000000..49db33f29 --- /dev/null +++ b/opcodes/tdfir_gain/index.html @@ -0,0 +1,715 @@ + + + + + + + + + tdfir_gain - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

tdfir_gain

+

Used under the ‹effect› header, with type=tdfir.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
tdfir_gainSFZ v2N/A0 to 100N/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/tdfir_impulse/index.html b/opcodes/tdfir_impulse/index.html new file mode 100644 index 000000000..499282f75 --- /dev/null +++ b/opcodes/tdfir_impulse/index.html @@ -0,0 +1,715 @@ + + + + + + + + + tdfir_impulse - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

tdfir_impulse

+

Used under the ‹effect› header, with type=tdfir.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
tdfir_impulseSFZ v2N/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/tdfir_wet/index.html b/opcodes/tdfir_wet/index.html new file mode 100644 index 000000000..b6ee9af9b --- /dev/null +++ b/opcodes/tdfir_wet/index.html @@ -0,0 +1,730 @@ + + + + + + + + + tdfir_wet - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

tdfir_wet

+

Used under the ‹effect› header, with type=tdfir.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
tdfir_wetSFZ v2N/A0 to 100N/A
Modulations
tdfir_wet_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/tdfir_wet_onccN/index.html b/opcodes/tdfir_wet_onccN/index.html new file mode 100644 index 000000000..fe1865a4e --- /dev/null +++ b/opcodes/tdfir_wet_onccN/index.html @@ -0,0 +1,730 @@ + + + + + + + + + tdfir_wet_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

tdfir_wet

+

Used under the ‹effect› header, with type=tdfir.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
tdfir_wetSFZ v2N/A0 to 100N/A
Modulations
tdfir_wet_onccNN/AN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/transpose/index.html b/opcodes/transpose/index.html new file mode 100644 index 000000000..92cd08a23 --- /dev/null +++ b/opcodes/transpose/index.html @@ -0,0 +1,724 @@ + + + + + + + + + transpose - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

transpose

+

The transposition value for this region which will be applied to the sample.

Examples

+
transpose=3
+
+transpose=-4
+
+transpose=24
+
+

Uses include creating layered instruments by transposing samples at different +pitches to all play the same note, and (combined with locc and hicc) octave +selection controls in synthesizer-style instruments.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
transposeSFZ v1integer0-127 to 127N/A
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/trigger/index.html b/opcodes/trigger/index.html new file mode 100644 index 000000000..87a1be80e --- /dev/null +++ b/opcodes/trigger/index.html @@ -0,0 +1,809 @@ + + + + + + + + + trigger - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

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 or sustain pedal 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 + (commonly used for 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).
  • +
  • release_key: Region will play on note-off. Ignores sustain pedal.
  • +
+

Practical Considerations

+

This entire section is dedicated to release triggers, which can get quite complex.

+

Setting trigger to release or release_key will cause the region to play as if +loop_mode was set to one_shot.

+

Beyond that, release region behavior varies considerably between SFZ players.

+

rcg sfz:

+
    +
  • Both release or release_key regions play whether there is a previous attack region or not.
  • +
  • Release_key regions won't play when releasing the sustain pedal. Release samples only play +when sustain pedal is up (not depressed).
  • +
  • In sfz v1, there is no polyphony or note_polyphony for limiting the number of simultaneous +release regions playing, which can result in a very large number of release regions triggered +when the sustain pedal is raised.
  • +
+

DropZone and other Cakewalk players:

+
    +
  • Both release or release_key require a previous attack region.
  • +
  • Release_key regions won't play when releasing the sustain pedal. Release samples only play +when sustain pedal is up (not depressed).
  • +
  • To make release or release_key plays without any previous attack region, + set rt_dead to on.
  • +
  • note_polyphony is now available to control the accumulation of +release voices of repeated notes when Sustain pedal is down.
  • +
+

ARIA and Sforzando:

+
    +
  • release requires a previous attack region.
  • +
  • release_key doesn't require a previous attack region.
  • +
  • release responds to Sustain Pedal position.
  • +
  • release_key ignores Sustain Pedal completely.
  • +
  • rt_dead is not supported, and defaults to off.
  • +
  • note_polyphony is available to control the accumulation of release voices.
  • +
+

Release samples can require a corresponding region with trigger set to attack to be active at +the moment when the note-off message is received, or the release region will never play. +In rgc sfz, this is not required. In DropZone and other Cakewalk players, it is required +unless rt_dead is set to on. In ARIA, it is required for trigger=release +regions but not for trigger=release_key regions.

+

For cases where a corresponding attack region is required, here is more detail. +An attack region is considered corresponding if it has the same MIDI note number, +and the same velocity range, as the release region. The velocity which matters here is +the note-on velocity of the initial region - not the velocity of the note-off message +which triggers the release region. Round robins do not need to match, so it is possible +to for example have five round robins for releases and only four round robins for +attacks.

+

This corresponding attack region is then used to calculate the volume of the release +region based on the attack region's velocity and rt_decay. If there is +no corresponding attack region, or the corresponding attack region has finished playing due +to reaching sample end etc, then the release region will not play. This is designed primarily +designed for piano release samples.

+

Triggering a release sample without a corresponding attack region is is useful for release +samples which are noises not dependent on the volume of any corresponding note, such +as hurdy-gurdy key returns, which will sound the same whether the wheel is turning +or not.

+

Note that at least in ARIA and Sforzando, a note-on event which triggers multiple regions +(for example a multimic instrument, or one with simulated unison) will have multiple +corresponding regions for the release region, causing the release region to be triggered +multiple times. With seven mics and a separate release for each mic, this would mean a +key release would trigger a total of 49 samples if not controlled with note_polyphony. +However, setting note_polyphony=1 and giving each mic a different [group] number solves this.

+

When using releases with round robins and multiple voices, it can be tricky to make +the release sample round robin counter advance correctly. When there are 2 matching +regions playing, ARIA appears to advance the counter for the releases by 2, and if +there are 4 release round robins, only 2 of them will actually be used. One workaround +for that is triggering an extra region of silence to make the round robin counter +advance by 3, but this will only work if the number of regions is consistent and +predictable. With instruments that have release samples with a number of microphone +positions or organ stops, any of which could be on or off, the total number of matching +regions is very difficult to assess, and it's far easier to use lorand/hirand to +select the release samples instead.

+

on_loccN / on_hiccN effectively replace the default trigger=attack, +as it is used for regions which are to be triggered by MIDI CC messages and not MIDI +note messages. For regions which use these opcodes, trigger should be left unspecified.

+

Examples

+
trigger=release
+trigger=legato
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
triggerSFZ v1stringattackattack, release, first, legato
SFZ v2release_key
+

Category: Region Logic, Triggers

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/tune/index.html b/opcodes/tune/index.html new file mode 100644 index 000000000..195e0195c --- /dev/null +++ b/opcodes/tune/index.html @@ -0,0 +1,777 @@ + + + + + + + + + tune / pitch - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

tune / pitch

+

The fine tuning for the sample, in cents.

Range of tune in the SFZ1 spec is ±1 semitone, from -100 to 100, though at least +in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents.

+

Examples

+
tune=33
+tune=-30
+tune=94
+
+

Uses include correcting the intonation of naturally off-pitch samples, and +detuning unison voices.

+

Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the +control needs to go both up and down, there are two ways to do this. One is to move +the pitch down by the tuning range, then have modulation move it up by twice the +tuning range, so that when the control is at the midpoint, the region will play at +its orignal, unmodulated pitch. For a range of 100 cents this would look like this:

+
tune=-100
+pitch_oncc27=200
+
+

Another way is to use default ‹curve› 1 which ranges from -1 to 1, +and set the pitch control to the tuning range.

+
pitch_oncc27=100
+pitch_curvecc27=1
+
+

Practical Considerations

+

In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
tuneSFZ v1integer0-100 to 100cents
Modulations
pitch_onccNSFZ v2N/AN/A-9600 to 9600cents
pitch_curveccNSFZ v2integer00 to 255N/A
pitch_smoothccNSFZ v2float00 to ?ms
pitch_stepccNSFZ v2N/A00 to ?N/A
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/tune_ccN/index.html b/opcodes/tune_ccN/index.html new file mode 100644 index 000000000..71f70a686 --- /dev/null +++ b/opcodes/tune_ccN/index.html @@ -0,0 +1,777 @@ + + + + + + + + + tune / pitch - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

tune / pitch

+

The fine tuning for the sample, in cents.

Range of tune in the SFZ1 spec is ±1 semitone, from -100 to 100, though at least +in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents.

+

Examples

+
tune=33
+tune=-30
+tune=94
+
+

Uses include correcting the intonation of naturally off-pitch samples, and +detuning unison voices.

+

Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the +control needs to go both up and down, there are two ways to do this. One is to move +the pitch down by the tuning range, then have modulation move it up by twice the +tuning range, so that when the control is at the midpoint, the region will play at +its orignal, unmodulated pitch. For a range of 100 cents this would look like this:

+
tune=-100
+pitch_oncc27=200
+
+

Another way is to use default ‹curve› 1 which ranges from -1 to 1, +and set the pitch control to the tuning range.

+
pitch_oncc27=100
+pitch_curvecc27=1
+
+

Practical Considerations

+

In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
tuneSFZ v1integer0-100 to 100cents
Modulations
pitch_onccNSFZ v2N/AN/A-9600 to 9600cents
pitch_curveccNSFZ v2integer00 to 255N/A
pitch_smoothccNSFZ v2float00 to ?ms
pitch_stepccNSFZ v2N/A00 to ?N/A
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/tune_curveccN/index.html b/opcodes/tune_curveccN/index.html new file mode 100644 index 000000000..3fc51d3b8 --- /dev/null +++ b/opcodes/tune_curveccN/index.html @@ -0,0 +1,777 @@ + + + + + + + + + tune / pitch - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

tune / pitch

+

The fine tuning for the sample, in cents.

Range of tune in the SFZ1 spec is ±1 semitone, from -100 to 100, though at least +in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents.

+

Examples

+
tune=33
+tune=-30
+tune=94
+
+

Uses include correcting the intonation of naturally off-pitch samples, and +detuning unison voices.

+

Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the +control needs to go both up and down, there are two ways to do this. One is to move +the pitch down by the tuning range, then have modulation move it up by twice the +tuning range, so that when the control is at the midpoint, the region will play at +its orignal, unmodulated pitch. For a range of 100 cents this would look like this:

+
tune=-100
+pitch_oncc27=200
+
+

Another way is to use default ‹curve› 1 which ranges from -1 to 1, +and set the pitch control to the tuning range.

+
pitch_oncc27=100
+pitch_curvecc27=1
+
+

Practical Considerations

+

In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
tuneSFZ v1integer0-100 to 100cents
Modulations
pitch_onccNSFZ v2N/AN/A-9600 to 9600cents
pitch_curveccNSFZ v2integer00 to 255N/A
pitch_smoothccNSFZ v2float00 to ?ms
pitch_stepccNSFZ v2N/A00 to ?N/A
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/tune_keytrack/index.html b/opcodes/tune_keytrack/index.html new file mode 100644 index 000000000..d0ea81299 --- /dev/null +++ b/opcodes/tune_keytrack/index.html @@ -0,0 +1,725 @@ + + + + + + + + + tune_keytrack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

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.

+

Examples

+
pitch_keytrack=20
+
+pitch_keytrack=0
+
+

Most of the time, this will either be 100 (default) or 0, but intermediate +values, values above 100 or negative values are occasionally useful.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitch_keytrackSFZ v1integer100-1200 to 1200cents
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/tune_onccN/index.html b/opcodes/tune_onccN/index.html new file mode 100644 index 000000000..d663f2d5f --- /dev/null +++ b/opcodes/tune_onccN/index.html @@ -0,0 +1,777 @@ + + + + + + + + + tune / pitch - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

tune / pitch

+

The fine tuning for the sample, in cents.

Range of tune in the SFZ1 spec is ±1 semitone, from -100 to 100, though at least +in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents.

+

Examples

+
tune=33
+tune=-30
+tune=94
+
+

Uses include correcting the intonation of naturally off-pitch samples, and +detuning unison voices.

+

Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the +control needs to go both up and down, there are two ways to do this. One is to move +the pitch down by the tuning range, then have modulation move it up by twice the +tuning range, so that when the control is at the midpoint, the region will play at +its orignal, unmodulated pitch. For a range of 100 cents this would look like this:

+
tune=-100
+pitch_oncc27=200
+
+

Another way is to use default ‹curve› 1 which ranges from -1 to 1, +and set the pitch control to the tuning range.

+
pitch_oncc27=100
+pitch_curvecc27=1
+
+

Practical Considerations

+

In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
tuneSFZ v1integer0-100 to 100cents
Modulations
pitch_onccNSFZ v2N/AN/A-9600 to 9600cents
pitch_curveccNSFZ v2integer00 to 255N/A
pitch_smoothccNSFZ v2float00 to ?ms
pitch_stepccNSFZ v2N/A00 to ?N/A
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/tune_random/index.html b/opcodes/tune_random/index.html new file mode 100644 index 000000000..d08652652 --- /dev/null +++ b/opcodes/tune_random/index.html @@ -0,0 +1,736 @@ + + + + + + + + + tune_random - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitch_random

+

Random tuning for the region, in cents.

Examples

+

Computed when the note is triggered, +remains the same for that region for as long as the region plays.

+
pitch_random=10
+
+pitch_random=400
+
+

Useful for humanizing the pitch of instruments with naturally imprecise +intonation, especially when playing multiple regions in unison.

+

Practical Considerations

+

In ARIA this is unipolar, and equivalent to pitch_oncc135. +So, if pitch_random is set to 20, the region will play at pitches tuned by an +amount in the range from 0 cents to +20 cents. In order to get pitch to fluctuate +between -20 and +20 cents, there would be two ways to get there, either by +applying a fixed shift of -20 cents and a random shift of up to 40 cents:

+
pitch=-20
+pitch_random=40
+
+

Or use CC136, which is bipolar random from -1 to 1:

+
pitch_oncc136=20
+
+

In rcg sfz and Cakewalk, this is bipolar.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitch_randomSFZ v1integer00 to 9600cents
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/tune_smoothccN/index.html b/opcodes/tune_smoothccN/index.html new file mode 100644 index 000000000..5825149dd --- /dev/null +++ b/opcodes/tune_smoothccN/index.html @@ -0,0 +1,777 @@ + + + + + + + + + tune / pitch - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

tune / pitch

+

The fine tuning for the sample, in cents.

Range of tune in the SFZ1 spec is ±1 semitone, from -100 to 100, though at least +in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents.

+

Examples

+
tune=33
+tune=-30
+tune=94
+
+

Uses include correcting the intonation of naturally off-pitch samples, and +detuning unison voices.

+

Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the +control needs to go both up and down, there are two ways to do this. One is to move +the pitch down by the tuning range, then have modulation move it up by twice the +tuning range, so that when the control is at the midpoint, the region will play at +its orignal, unmodulated pitch. For a range of 100 cents this would look like this:

+
tune=-100
+pitch_oncc27=200
+
+

Another way is to use default ‹curve› 1 which ranges from -1 to 1, +and set the pitch control to the tuning range.

+
pitch_oncc27=100
+pitch_curvecc27=1
+
+

Practical Considerations

+

In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
tuneSFZ v1integer0-100 to 100cents
Modulations
pitch_onccNSFZ v2N/AN/A-9600 to 9600cents
pitch_curveccNSFZ v2integer00 to 255N/A
pitch_smoothccNSFZ v2float00 to ?ms
pitch_stepccNSFZ v2N/A00 to ?N/A
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/tune_stepccN/index.html b/opcodes/tune_stepccN/index.html new file mode 100644 index 000000000..9e9260163 --- /dev/null +++ b/opcodes/tune_stepccN/index.html @@ -0,0 +1,777 @@ + + + + + + + + + tune / pitch - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

tune / pitch

+

The fine tuning for the sample, in cents.

Range of tune in the SFZ1 spec is ±1 semitone, from -100 to 100, though at least +in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents.

+

Examples

+
tune=33
+tune=-30
+tune=94
+
+

Uses include correcting the intonation of naturally off-pitch samples, and +detuning unison voices.

+

Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the +control needs to go both up and down, there are two ways to do this. One is to move +the pitch down by the tuning range, then have modulation move it up by twice the +tuning range, so that when the control is at the midpoint, the region will play at +its orignal, unmodulated pitch. For a range of 100 cents this would look like this:

+
tune=-100
+pitch_oncc27=200
+
+

Another way is to use default ‹curve› 1 which ranges from -1 to 1, +and set the pitch control to the tuning range.

+
pitch_oncc27=100
+pitch_curvecc27=1
+
+

Practical Considerations

+

In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
tuneSFZ v1integer0-100 to 100cents
Modulations
pitch_onccNSFZ v2N/AN/A-9600 to 9600cents
pitch_curveccNSFZ v2integer00 to 255N/A
pitch_smoothccNSFZ v2float00 to ?ms
pitch_stepccNSFZ v2N/A00 to ?N/A
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/tune_veltrack/index.html b/opcodes/tune_veltrack/index.html new file mode 100644 index 000000000..006121671 --- /dev/null +++ b/opcodes/tune_veltrack/index.html @@ -0,0 +1,721 @@ + + + + + + + + + tune_veltrack - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

pitch_veltrack

+

Pitch velocity tracking, represents how much the pitch changes with incoming note velocity, in cents.

Examples

+
pitch_veltrack=0
+
+pitch_veltrack=1200
+
+

This can be useful when trying to emulate dynamic response on drum samples +recorded at only one velocity.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
pitch_veltrackSFZ v1integer0-9600 to 9600cents
+

Category: Performance Parameters, Pitch

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/type/index.html b/opcodes/type/index.html new file mode 100644 index 000000000..b1a2e4066 --- /dev/null +++ b/opcodes/type/index.html @@ -0,0 +1,909 @@ + + + + + + + + + type - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

type

+

Effect type or vendor-specific effect name. Varies across SFZ players.

ARIA Extensions

+

In the PC version of ARIA, the MDA effects are bundled. That means +that under the ‹effect› header, any of these effect types can be set.

+
com.mda.Limiter
+com.mda.Overdrive
+com.mda.Leslie
+com.mda.RingMod
+com.mda.Delay
+com.mda.Bandisto
+com.mda.Ambience
+com.mda.DubDelay
+com.mda.Detune
+com.mda.Dither
+com.mda.Combo
+com.mda.Degrade
+com.mda.SubSynth
+com.mda.RezFilter
+
+

Also see param_offset for how to configure the parameters for these effects in ARIA. +The order of the parameters is the same as at the plugin version of the MDA effects. +These effects are not part of the SFZ engine, so it is not possible to, for +example, have one MIDI CC parameter control two parameters in the same effect, +or use custom curves. Example usage below:

+
<control>
+set_cc300=64
+set_cc301=127
+
+<effect>
+param_offset=300
+type=com.mda.Overdrive
+
+

Cakewalk implementation

+

In Cakewalk, each of the effect types has its own set of opcodes +controlling its parameters. Here is a list of what is currently known.

+

The effect routing logic in Rapture is as follows:

+

Effect routing image

+

apan

+

Automatic panning with LFO:

+ +

comp

+

Compressor:

+ +

delay

+

Multi-purpose delay line:

+ +

disto

+

Asymmetric distorsion with tone control:

+ +

eq

+

Equalizer (Same opcode meanings as ordinary EQ):

+ +

filter

+

(Same opcode meanings as ordinary filter):

+ +

fverb

+

Algorithmic reverberation:

+ +

gate

+

Signal gate:

+ +

limiter

+

No opcodes for this type.

+

lofi

+

Bit depth reducer and decimator combined:

+ +

mverb

+

Present in some Cakewalk products only, undocumented.

+

phaser

+

Dual-notch phaser with LFO:

+ +

static

+

Static noise generator:

+ +

strings

+

Sympathetic resonance with waveguide synthesis:

+ +

tdfir

+

Impulse response convolver:

+ +

Note that the Cakewalk book has some typos in opcode names, such as EffectN +(capital letter) or ‹effects›. +On this site, non-working effect types mentioned in the book were replaced with tested +ones. For example, autopan does not appear to work in any Cakewalk product, while +apan works. Same for lofi instead bitred and decim, and disto instead of +distortion.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
typeSFZ v2stringN/Aapan, comp, delay, disto, eq, filter, fverb, gate, limiter, lofi, mverb, phaser, static, strings, tdfir
ARIAcom.mda.Limiter, com.mda.Overdrive, com.mda.Leslie, com.mda.RingMod, com.mda.Delay, com.mda.Bandisto, com.mda.Ambience, com.mda.DubDelay, com.mda.Detune, com.mda.Dither, com.mda.Combo, com.mda.Degrade, com.mda.SubSynth, com.mda.RezFilter
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/vN/index.html b/opcodes/vN/index.html new file mode 100644 index 000000000..ed7da10ce --- /dev/null +++ b/opcodes/vN/index.html @@ -0,0 +1,748 @@ + + + + + + + + + ‹curve› - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

‹curve›

One curve header is used to define each curve. +The values for various points along the curve can then be set, from v000 to v127. +The default is v000=0 and v127=1. Any points along the curve not defined explicitly +will be interpolated linearly between points which are defined.

+

There are default built-in curves in ARIA. If no curve is specified for a +modulation, curve 0 is used. The built-in ARIA curves are:

+

Default curve (number 0). linear, from 0 to 1 +1. bipolar, from -1 to 1 (useful for things such as tuning and panning, + used by CC10 panning by default) +2. linear inverted, from 1 to 0 +3. bipolar inverted, from 1 to -1 +4. concave (used for CC7 volume tracking and amp_veltrack) +5. Xfin power curve +6. Xfout power curve

+

These can be overwritten, but as they are used by the engine for their normal +functions, it's safer to use curve_index numbers of 7 and above for custom curves. +Curve_index in ARIA can be any integer from 0 to 255.

+

Examples

+
<curve>curve_index=17
+v000=0
+v095=1
+v127=1
+
+<curve>curve_index=18
+v000=0
+v095=0.5
+v127=1
+
+

Here's a scenario using one MIDI CC to control the amplitude of two samples +along two different curves.

+
<region>
+amplitude_oncc110=100
+amplitude_curvecc110=9
+sample=bigger.wav
+
+<region>
+amplitude_oncc110=100
+amplitude_curvecc110=10
+sample=smaller.wav
+
+//The curves for the room ambiences - bigger room first
+
+<curve>curve_index=9
+v000=0
+v063=0
+v127=1
+
+<curve>curve_index=10
+v000=0
+v063=1
+v127=0.1
+
+

And how to use the default curve 1 to create a tuning control which +goes down and up, with the pitch unmodulated when the control is in +the middle.

+
pitch_oncc27=100
+pitch_curvecc27=1
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/vNNN/index.html b/opcodes/vNNN/index.html new file mode 100644 index 000000000..d70caf5d5 --- /dev/null +++ b/opcodes/vNNN/index.html @@ -0,0 +1,748 @@ + + + + + + + + + ‹curve› - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

‹curve›

One curve header is used to define each curve. +The values for various points along the curve can then be set, from v000 to v127. +The default is v000=0 and v127=1. Any points along the curve not defined explicitly +will be interpolated linearly between points which are defined.

+

There are default built-in curves in ARIA. If no curve is specified for a +modulation, curve 0 is used. The built-in ARIA curves are:

+

Default curve (number 0). linear, from 0 to 1 +1. bipolar, from -1 to 1 (useful for things such as tuning and panning, + used by CC10 panning by default) +2. linear inverted, from 1 to 0 +3. bipolar inverted, from 1 to -1 +4. concave (used for CC7 volume tracking and amp_veltrack) +5. Xfin power curve +6. Xfout power curve

+

These can be overwritten, but as they are used by the engine for their normal +functions, it's safer to use curve_index numbers of 7 and above for custom curves. +Curve_index in ARIA can be any integer from 0 to 255.

+

Examples

+
<curve>curve_index=17
+v000=0
+v095=1
+v127=1
+
+<curve>curve_index=18
+v000=0
+v095=0.5
+v127=1
+
+

Here's a scenario using one MIDI CC to control the amplitude of two samples +along two different curves.

+
<region>
+amplitude_oncc110=100
+amplitude_curvecc110=9
+sample=bigger.wav
+
+<region>
+amplitude_oncc110=100
+amplitude_curvecc110=10
+sample=smaller.wav
+
+//The curves for the room ambiences - bigger room first
+
+<curve>curve_index=9
+v000=0
+v063=0
+v127=1
+
+<curve>curve_index=10
+v000=0
+v063=1
+v127=0.1
+
+

And how to use the default curve 1 to create a tuning control which +goes down and up, with the pitch unmodulated when the control is in +the middle.

+
pitch_oncc27=100
+pitch_curvecc27=1
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/varNN_/index.html b/opcodes/varNN_/index.html new file mode 100644 index 000000000..e3732aa74 --- /dev/null +++ b/opcodes/varNN_/index.html @@ -0,0 +1,739 @@ + + + + + + + + + varNN_ - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

varNN_*

+

Specifies the target for variable NN to modulate.

Example

+
var01_cutoff=4800
+var02_pitch=400
+
+

Here is how this could be used, together with varNN_mod and +varNN_onccX to control velocity tracking on a filter cutoff:

+
//Lowpass filter
+cutoff=120
+cutoff_cc102=8400
+fil_keytrack=100
+resonance=0
+resonance_cc103=24
+var01_cutoff=4800 //Velocity track
+var01_mod=mult
+var01_oncc131=1
+var01_oncc111=1
+
+

Available targets

+

The list of possible modulation targets is basically the same standard list +as for LFOs or envelopes, though variables can't modulate other modulators, +so it's not currently possible to use a variable to modulate an LFO, +or to modulate another variable.

+

This list has not been verified by testing. It was created by cutting down the +list of available targets for modulation by LFO. Decim and bitred might not +actually be implemented.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
varNN_*ARIAN/AN/AN/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/varNN_curveccX/index.html b/opcodes/varNN_curveccX/index.html new file mode 100644 index 000000000..8ca91342e --- /dev/null +++ b/opcodes/varNN_curveccX/index.html @@ -0,0 +1,761 @@ + + + + + + + + + varNN_curveccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

varNN_mod

+

Specifies the method used to calculate variable number NN from MIDI CCs.

    +
  • mult: multiplication, with 1 being full scale - 0 at a CC value of 0, + and 1 at CC value of 127. + This is how the amplitude opcode works.
  • +
  • add: addition, how volume, cutoff and all other + modulation destinations work by default when modulated.
  • +
+

Example

+
var01_mod=mult
+var02_mod=add
+
+

Here is how multiplication could be used, together with varNN_* +(in this case, var01_cutoff as 01 is the variable number and cutoff is the target) +and varNN_onccX to control velocity tracking on a filter cutoff:

+
//Lowpass filter
+cutoff=120
+cutoff_cc102=8400
+fil_keytrack=100
+resonance=0
+resonance_cc103=24
+var01_cutoff=4800 //Velocity track
+var01_mod=mult
+var01_oncc131=1
+var01_oncc111=1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
varNN_modARIAstringN/Amult, add
Modulations
varNN_onccXfloatN/A0 to 1N/A
varNN_curveccXinteger00 to 255N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/varNN_mod/index.html b/opcodes/varNN_mod/index.html new file mode 100644 index 000000000..2d25e43f0 --- /dev/null +++ b/opcodes/varNN_mod/index.html @@ -0,0 +1,761 @@ + + + + + + + + + varNN_mod - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

varNN_mod

+

Specifies the method used to calculate variable number NN from MIDI CCs.

    +
  • mult: multiplication, with 1 being full scale - 0 at a CC value of 0, + and 1 at CC value of 127. + This is how the amplitude opcode works.
  • +
  • add: addition, how volume, cutoff and all other + modulation destinations work by default when modulated.
  • +
+

Example

+
var01_mod=mult
+var02_mod=add
+
+

Here is how multiplication could be used, together with varNN_* +(in this case, var01_cutoff as 01 is the variable number and cutoff is the target) +and varNN_onccX to control velocity tracking on a filter cutoff:

+
//Lowpass filter
+cutoff=120
+cutoff_cc102=8400
+fil_keytrack=100
+resonance=0
+resonance_cc103=24
+var01_cutoff=4800 //Velocity track
+var01_mod=mult
+var01_oncc131=1
+var01_oncc111=1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
varNN_modARIAstringN/Amult, add
Modulations
varNN_onccXfloatN/A0 to 1N/A
varNN_curveccXinteger00 to 255N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/varNN_onccX/index.html b/opcodes/varNN_onccX/index.html new file mode 100644 index 000000000..f0614198a --- /dev/null +++ b/opcodes/varNN_onccX/index.html @@ -0,0 +1,761 @@ + + + + + + + + + varNN_onccX - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

varNN_mod

+

Specifies the method used to calculate variable number NN from MIDI CCs.

    +
  • mult: multiplication, with 1 being full scale - 0 at a CC value of 0, + and 1 at CC value of 127. + This is how the amplitude opcode works.
  • +
  • add: addition, how volume, cutoff and all other + modulation destinations work by default when modulated.
  • +
+

Example

+
var01_mod=mult
+var02_mod=add
+
+

Here is how multiplication could be used, together with varNN_* +(in this case, var01_cutoff as 01 is the variable number and cutoff is the target) +and varNN_onccX to control velocity tracking on a filter cutoff:

+
//Lowpass filter
+cutoff=120
+cutoff_cc102=8400
+fil_keytrack=100
+resonance=0
+resonance_cc103=24
+var01_cutoff=4800 //Velocity track
+var01_mod=mult
+var01_oncc131=1
+var01_oncc111=1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
varNN_modARIAstringN/Amult, add
Modulations
varNN_onccXfloatN/A0 to 1N/A
varNN_curveccXinteger00 to 255N/A
+

Category: Region Logic, MIDI Conditions

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/vendor_specific/index.html b/opcodes/vendor_specific/index.html new file mode 100644 index 000000000..46b3fec71 --- /dev/null +++ b/opcodes/vendor_specific/index.html @@ -0,0 +1,715 @@ + + + + + + + + + vendor_specific - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

vendor_specific

+

Defines vendor-specific effects, for example Garritan-specific stage depth effect in ARIA.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
vendor_specificARIAstringN/AN/A
+

Category: Effects

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/volume/index.html b/opcodes/volume/index.html new file mode 100644 index 000000000..97d504f5a --- /dev/null +++ b/opcodes/volume/index.html @@ -0,0 +1,776 @@ + + + + + + + + + volume - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

volume

+

The volume for the region, in decibels.

Range is -144.6 to 6 in the specification, +but many SFZ players can utilize values above 6. Sfz.dll, Rapture and Dimension +have a +24 dB maximum, and ARIA has an upper limit of at least +144, +perhaps even more.

+

Examples

+
volume=-24
+volume=0
+volume=3.5
+
+gain_cc1=12
+
+

This will play the sample at unchanged volume when CC1 is at 0, +and apply a 12 dB boost when CC1 is at maximum.

+

gain_ccN/volume_onccN is useful for creating volume controls.

+

In Aria, either gain or volume can be used in modulations; however, gain by itself +(for example gain=5) is not valid. For a fixed volume change wihtout modulation, +only volume works.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
volumeSFZ v1float0-144 to 6dB
Modulations
gain_ccNfloat0-144 to 48dB
volume_curveccNSFZ v2integer00 to 255N/A
volume_smoothccNSFZ v2N/AN/AN/A
volume_stepccNSFZ v2N/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

See also: Amplifier / Amplitude, Gain, Volume, Cross fade

+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/volume_curveccN/index.html b/opcodes/volume_curveccN/index.html new file mode 100644 index 000000000..1c916d2bd --- /dev/null +++ b/opcodes/volume_curveccN/index.html @@ -0,0 +1,776 @@ + + + + + + + + + volume_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

volume

+

The volume for the region, in decibels.

Range is -144.6 to 6 in the specification, +but many SFZ players can utilize values above 6. Sfz.dll, Rapture and Dimension +have a +24 dB maximum, and ARIA has an upper limit of at least +144, +perhaps even more.

+

Examples

+
volume=-24
+volume=0
+volume=3.5
+
+gain_cc1=12
+
+

This will play the sample at unchanged volume when CC1 is at 0, +and apply a 12 dB boost when CC1 is at maximum.

+

gain_ccN/volume_onccN is useful for creating volume controls.

+

In Aria, either gain or volume can be used in modulations; however, gain by itself +(for example gain=5) is not valid. For a fixed volume change wihtout modulation, +only volume works.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
volumeSFZ v1float0-144 to 6dB
Modulations
gain_ccNfloat0-144 to 48dB
volume_curveccNSFZ v2integer00 to 255N/A
volume_smoothccNSFZ v2N/AN/AN/A
volume_stepccNSFZ v2N/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

See also: Amplifier / Amplitude, Gain, Volume, Cross fade

+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/volume_onccN/index.html b/opcodes/volume_onccN/index.html new file mode 100644 index 000000000..fc0379b8c --- /dev/null +++ b/opcodes/volume_onccN/index.html @@ -0,0 +1,776 @@ + + + + + + + + + volume_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

volume

+

The volume for the region, in decibels.

Range is -144.6 to 6 in the specification, +but many SFZ players can utilize values above 6. Sfz.dll, Rapture and Dimension +have a +24 dB maximum, and ARIA has an upper limit of at least +144, +perhaps even more.

+

Examples

+
volume=-24
+volume=0
+volume=3.5
+
+gain_cc1=12
+
+

This will play the sample at unchanged volume when CC1 is at 0, +and apply a 12 dB boost when CC1 is at maximum.

+

gain_ccN/volume_onccN is useful for creating volume controls.

+

In Aria, either gain or volume can be used in modulations; however, gain by itself +(for example gain=5) is not valid. For a fixed volume change wihtout modulation, +only volume works.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
volumeSFZ v1float0-144 to 6dB
Modulations
gain_ccNfloat0-144 to 48dB
volume_curveccNSFZ v2integer00 to 255N/A
volume_smoothccNSFZ v2N/AN/AN/A
volume_stepccNSFZ v2N/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

See also: Amplifier / Amplitude, Gain, Volume, Cross fade

+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/volume_smoothccN/index.html b/opcodes/volume_smoothccN/index.html new file mode 100644 index 000000000..101c3fbe8 --- /dev/null +++ b/opcodes/volume_smoothccN/index.html @@ -0,0 +1,776 @@ + + + + + + + + + volume_smoothccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

volume

+

The volume for the region, in decibels.

Range is -144.6 to 6 in the specification, +but many SFZ players can utilize values above 6. Sfz.dll, Rapture and Dimension +have a +24 dB maximum, and ARIA has an upper limit of at least +144, +perhaps even more.

+

Examples

+
volume=-24
+volume=0
+volume=3.5
+
+gain_cc1=12
+
+

This will play the sample at unchanged volume when CC1 is at 0, +and apply a 12 dB boost when CC1 is at maximum.

+

gain_ccN/volume_onccN is useful for creating volume controls.

+

In Aria, either gain or volume can be used in modulations; however, gain by itself +(for example gain=5) is not valid. For a fixed volume change wihtout modulation, +only volume works.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
volumeSFZ v1float0-144 to 6dB
Modulations
gain_ccNfloat0-144 to 48dB
volume_curveccNSFZ v2integer00 to 255N/A
volume_smoothccNSFZ v2N/AN/AN/A
volume_stepccNSFZ v2N/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

See also: Amplifier / Amplitude, Gain, Volume, Cross fade

+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/volume_stepccN/index.html b/opcodes/volume_stepccN/index.html new file mode 100644 index 000000000..b8318c0f5 --- /dev/null +++ b/opcodes/volume_stepccN/index.html @@ -0,0 +1,776 @@ + + + + + + + + + volume_stepccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

volume

+

The volume for the region, in decibels.

Range is -144.6 to 6 in the specification, +but many SFZ players can utilize values above 6. Sfz.dll, Rapture and Dimension +have a +24 dB maximum, and ARIA has an upper limit of at least +144, +perhaps even more.

+

Examples

+
volume=-24
+volume=0
+volume=3.5
+
+gain_cc1=12
+
+

This will play the sample at unchanged volume when CC1 is at 0, +and apply a 12 dB boost when CC1 is at maximum.

+

gain_ccN/volume_onccN is useful for creating volume controls.

+

In Aria, either gain or volume can be used in modulations; however, gain by itself +(for example gain=5) is not valid. For a fixed volume change wihtout modulation, +only volume works.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
volumeSFZ v1float0-144 to 6dB
Modulations
gain_ccNfloat0-144 to 48dB
volume_curveccNSFZ v2integer00 to 255N/A
volume_smoothccNSFZ v2N/AN/AN/A
volume_stepccNSFZ v2N/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

See also: Amplifier / Amplitude, Gain, Volume, Cross fade

+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/waveguide/index.html b/opcodes/waveguide/index.html new file mode 100644 index 000000000..c97aaabcd --- /dev/null +++ b/opcodes/waveguide/index.html @@ -0,0 +1,718 @@ + + + + + + + + + waveguide - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

waveguide

+

Enables waveguide synthesis for the region.

Not properly documented, but apparently supported in Dimension Pro, Rapture, +and the Cakewalk sfz player at some point.

+

Example

+
waveguide=on
+
+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
waveguideSFZ v2stringN/Aon, off
+

Category: Sound Source, Sample Playback

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/width/index.html b/opcodes/width/index.html new file mode 100644 index 000000000..da7390448 --- /dev/null +++ b/opcodes/width/index.html @@ -0,0 +1,773 @@ + + + + + + + + + width - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

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.

+

Note: Range in the table is specified as -100 to 100. Some players, such as +Aria/Sforzando, do not clamp the range. Values over 100 expand the stereo +width. For example, for a mono signal panned 6dB to the left, a value of +200 produces the mono signal panned 12dB to the left.

+

Examples

+
width=100 // stereo
+width=0   // play this stereo sample as mono
+width=50  // mix 50% of one channel with the other
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
widthSFZ v1float100-100 to 100%
Modulations
width_onccNSFZ v2N/AN/AN/A
width_curveccNSFZ v2integer00 to 255N/A
width_smoothccNSFZ v2N/AN/AN/A
width_stepccNSFZ v2N/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/width_curveccN/index.html b/opcodes/width_curveccN/index.html new file mode 100644 index 000000000..c996492b2 --- /dev/null +++ b/opcodes/width_curveccN/index.html @@ -0,0 +1,773 @@ + + + + + + + + + width_curveccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

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.

+

Note: Range in the table is specified as -100 to 100. Some players, such as +Aria/Sforzando, do not clamp the range. Values over 100 expand the stereo +width. For example, for a mono signal panned 6dB to the left, a value of +200 produces the mono signal panned 12dB to the left.

+

Examples

+
width=100 // stereo
+width=0   // play this stereo sample as mono
+width=50  // mix 50% of one channel with the other
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
widthSFZ v1float100-100 to 100%
Modulations
width_onccNSFZ v2N/AN/AN/A
width_curveccNSFZ v2integer00 to 255N/A
width_smoothccNSFZ v2N/AN/AN/A
width_stepccNSFZ v2N/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/width_onccN/index.html b/opcodes/width_onccN/index.html new file mode 100644 index 000000000..7bd759c1b --- /dev/null +++ b/opcodes/width_onccN/index.html @@ -0,0 +1,773 @@ + + + + + + + + + width_onccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

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.

+

Note: Range in the table is specified as -100 to 100. Some players, such as +Aria/Sforzando, do not clamp the range. Values over 100 expand the stereo +width. For example, for a mono signal panned 6dB to the left, a value of +200 produces the mono signal panned 12dB to the left.

+

Examples

+
width=100 // stereo
+width=0   // play this stereo sample as mono
+width=50  // mix 50% of one channel with the other
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
widthSFZ v1float100-100 to 100%
Modulations
width_onccNSFZ v2N/AN/AN/A
width_curveccNSFZ v2integer00 to 255N/A
width_smoothccNSFZ v2N/AN/AN/A
width_stepccNSFZ v2N/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/width_smoothccN/index.html b/opcodes/width_smoothccN/index.html new file mode 100644 index 000000000..da58fb955 --- /dev/null +++ b/opcodes/width_smoothccN/index.html @@ -0,0 +1,773 @@ + + + + + + + + + width_smoothccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

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.

+

Note: Range in the table is specified as -100 to 100. Some players, such as +Aria/Sforzando, do not clamp the range. Values over 100 expand the stereo +width. For example, for a mono signal panned 6dB to the left, a value of +200 produces the mono signal panned 12dB to the left.

+

Examples

+
width=100 // stereo
+width=0   // play this stereo sample as mono
+width=50  // mix 50% of one channel with the other
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
widthSFZ v1float100-100 to 100%
Modulations
width_onccNSFZ v2N/AN/AN/A
width_curveccNSFZ v2integer00 to 255N/A
width_smoothccNSFZ v2N/AN/AN/A
width_stepccNSFZ v2N/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/width_stepccN/index.html b/opcodes/width_stepccN/index.html new file mode 100644 index 000000000..26850ce7a --- /dev/null +++ b/opcodes/width_stepccN/index.html @@ -0,0 +1,773 @@ + + + + + + + + + width_stepccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

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.

+

Note: Range in the table is specified as -100 to 100. Some players, such as +Aria/Sforzando, do not clamp the range. Values over 100 expand the stereo +width. For example, for a mono signal panned 6dB to the left, a value of +200 produces the mono signal panned 12dB to the left.

+

Examples

+
width=100 // stereo
+width=0   // play this stereo sample as mono
+width=50  // mix 50% of one channel with the other
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
widthSFZ v1float100-100 to 100%
Modulations
width_onccNSFZ v2N/AN/AN/A
width_curveccNSFZ v2integer00 to 255N/A
width_smoothccNSFZ v2N/AN/AN/A
width_stepccNSFZ v2N/AN/AN/A
+

Other modulations

+
    +
  • Envelope: ✓
  • +
  • LFO: ✓
  • +
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/xf_cccurve/index.html b/opcodes/xf_cccurve/index.html new file mode 100644 index 000000000..077f9a1cc --- /dev/null +++ b/opcodes/xf_cccurve/index.html @@ -0,0 +1,722 @@ + + + + + + + + + xf_cccurve - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

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.
  • +
+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
xf_cccurveSFZ v1stringpowergain, power
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/xf_keycurve/index.html b/opcodes/xf_keycurve/index.html new file mode 100644 index 000000000..98783b027 --- /dev/null +++ b/opcodes/xf_keycurve/index.html @@ -0,0 +1,722 @@ + + + + + + + + + xf_keycurve - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

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.
  • +
+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
xf_keycurveSFZ v1stringpowergain, power
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/xf_velcurve/index.html b/opcodes/xf_velcurve/index.html new file mode 100644 index 000000000..78c564648 --- /dev/null +++ b/opcodes/xf_velcurve/index.html @@ -0,0 +1,722 @@ + + + + + + + + + xf_velcurve - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

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.
  • +
+ + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultOptionsUnit
xf_velcurveSFZ v1stringpowergain, power
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/xfin_hiccN/index.html b/opcodes/xfin_hiccN/index.html new file mode 100644 index 000000000..d0d6b46c2 --- /dev/null +++ b/opcodes/xfin_hiccN/index.html @@ -0,0 +1,737 @@ + + + + + + + + + xfin_loccN / xfin_hiccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

xfin_loccN / xfin_hiccN

+

Fade in control based on MIDI CC.

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.

+

Examples

+
xfin_locc1=64
+xfin_hicc1=127
+
+

This is used alongside xfout_loccN / xfout_hiccN to create +crossfaded dynamic layers for sustained instruments, for example to use the mod +wheel to crossfade quiet tuba sustain samples to loud tuba sustain samples. +It could also be used to crossfade wavetable samples, use one control to blend +multiple microphone perspectives etc. +When there are multiple regions under the same note wtih xfin_loccN, xfin_hiccN, +xfout_loccN / xfout_hiccN used to determine which regions +are currently heard (and at what volume), +all regions will be triggered - but some of them may play at zero volume, +and therefore be inaudible. In some cases where these controls +are not used for dynamic expressive performance but rather for setting a static +mix (for example of microphone perspectives), it can make sense to use them +alongside loccN / hiccN to keep the regions which would be at zero +volume from being triggered and consuming resources.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
xfin_hiccNSFZ v1integer00 to 127N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/xfin_hikey/index.html b/opcodes/xfin_hikey/index.html new file mode 100644 index 000000000..e90aa1ac1 --- /dev/null +++ b/opcodes/xfin_hikey/index.html @@ -0,0 +1,721 @@ + + + + + + + + + xfin_lokey / xfin_hikey - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

xfin_lokey / xfin_hikey

+

Fade in control based on MIDI note (keyboard position).

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.

+

Example

+
xfin_lokey=c3 xfin_hikey=c4
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
xfin_hikeySFZ v1integer00 to 127N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/xfin_hivel/index.html b/opcodes/xfin_hivel/index.html new file mode 100644 index 000000000..f836a361a --- /dev/null +++ b/opcodes/xfin_hivel/index.html @@ -0,0 +1,724 @@ + + + + + + + + + xfin_lovel / xfin_hivel - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

xfin_lovel / xfin_hivel

+

Fade in control based on velocity.

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.

+

Example

+
xfin_lovel=0 xfin_hivel=31
+
+

This is useful for having velocity-based dynamic layers which are gradually +crossfaded based on velocity, instead of having hard +lovel / hivel cutoffs between the layers.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
xfin_hivelSFZ v1integer00 to 127N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/xfin_loccN/index.html b/opcodes/xfin_loccN/index.html new file mode 100644 index 000000000..63e8dc9ce --- /dev/null +++ b/opcodes/xfin_loccN/index.html @@ -0,0 +1,737 @@ + + + + + + + + + xfin_loccN / xfin_hiccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

xfin_loccN / xfin_hiccN

+

Fade in control based on MIDI CC.

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.

+

Examples

+
xfin_locc1=64
+xfin_hicc1=127
+
+

This is used alongside xfout_loccN / xfout_hiccN to create +crossfaded dynamic layers for sustained instruments, for example to use the mod +wheel to crossfade quiet tuba sustain samples to loud tuba sustain samples. +It could also be used to crossfade wavetable samples, use one control to blend +multiple microphone perspectives etc. +When there are multiple regions under the same note wtih xfin_loccN, xfin_hiccN, +xfout_loccN / xfout_hiccN used to determine which regions +are currently heard (and at what volume), +all regions will be triggered - but some of them may play at zero volume, +and therefore be inaudible. In some cases where these controls +are not used for dynamic expressive performance but rather for setting a static +mix (for example of microphone perspectives), it can make sense to use them +alongside loccN / hiccN to keep the regions which would be at zero +volume from being triggered and consuming resources.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
xfin_loccNSFZ v1integer00 to 127N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/xfin_lokey/index.html b/opcodes/xfin_lokey/index.html new file mode 100644 index 000000000..e85fbf808 --- /dev/null +++ b/opcodes/xfin_lokey/index.html @@ -0,0 +1,721 @@ + + + + + + + + + xfin_lokey / xfin_hikey - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

xfin_lokey / xfin_hikey

+

Fade in control based on MIDI note (keyboard position).

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.

+

Example

+
xfin_lokey=c3 xfin_hikey=c4
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
xfin_lokeySFZ v1integer00 to 127N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/xfin_lovel/index.html b/opcodes/xfin_lovel/index.html new file mode 100644 index 000000000..928d939b3 --- /dev/null +++ b/opcodes/xfin_lovel/index.html @@ -0,0 +1,724 @@ + + + + + + + + + xfin_lovel / xfin_hivel - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

xfin_lovel / xfin_hivel

+

Fade in control based on velocity.

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.

+

Example

+
xfin_lovel=0 xfin_hivel=31
+
+

This is useful for having velocity-based dynamic layers which are gradually +crossfaded based on velocity, instead of having hard +lovel / hivel cutoffs between the layers.

+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
xfin_lovelSFZ v1integer00 to 127N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/xfout_hiccN/index.html b/opcodes/xfout_hiccN/index.html new file mode 100644 index 000000000..2cdac7010 --- /dev/null +++ b/opcodes/xfout_hiccN/index.html @@ -0,0 +1,723 @@ + + + + + + + + + xfout_loccN / xfout_hiccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

xfout_loccN / xfout_hiccN

+

Fade out control based on MIDI CC.

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.

+

Examples

+
xfout_locc1=64
+xfout_hicc1=127
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
xfout_hiccNSFZ v1integer00 to 127N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/xfout_hikey/index.html b/opcodes/xfout_hikey/index.html new file mode 100644 index 000000000..9d592a22d --- /dev/null +++ b/opcodes/xfout_hikey/index.html @@ -0,0 +1,724 @@ + + + + + + + + + xfout_lokey / xfout_hikey - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

xfout_lokey / xfout_hikey

+

Fade out control based on MIDI note number (keyboard position).

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.

+

Example

+
xfout_lokey=72 xfout_hikey=84
+
+

As with the [key] opcode, the values can also be MIDI note names:

+
xfout_lokey=c5 xfout_hikey=c6
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
xfout_hikeySFZ v1integer1270 to 127N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/xfout_hivel/index.html b/opcodes/xfout_hivel/index.html new file mode 100644 index 000000000..383bd5d4d --- /dev/null +++ b/opcodes/xfout_hivel/index.html @@ -0,0 +1,721 @@ + + + + + + + + + xfout_lovel / xfout_hivel - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

xfout_lovel / xfout_hivel

+

Fade out control, based on velocity.

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.

+

Example

+
xfout_lovel=32 xfout_hivel=63
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
xfout_hivelSFZ v1integer1270 to 127N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/xfout_loccN/index.html b/opcodes/xfout_loccN/index.html new file mode 100644 index 000000000..b6d3efdbc --- /dev/null +++ b/opcodes/xfout_loccN/index.html @@ -0,0 +1,723 @@ + + + + + + + + + xfout_loccN / xfout_hiccN - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

xfout_loccN / xfout_hiccN

+

Fade out control based on MIDI CC.

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.

+

Examples

+
xfout_locc1=64
+xfout_hicc1=127
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
xfout_loccNSFZ v1integer00 to 127N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/xfout_lokey/index.html b/opcodes/xfout_lokey/index.html new file mode 100644 index 000000000..6c01b2b48 --- /dev/null +++ b/opcodes/xfout_lokey/index.html @@ -0,0 +1,724 @@ + + + + + + + + + xfout_lokey / xfout_hikey - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

xfout_lokey / xfout_hikey

+

Fade out control based on MIDI note number (keyboard position).

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.

+

Example

+
xfout_lokey=72 xfout_hikey=84
+
+

As with the [key] opcode, the values can also be MIDI note names:

+
xfout_lokey=c5 xfout_hikey=c6
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
xfout_lokeySFZ v1integer1270 to 127N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opcodes/xfout_lovel/index.html b/opcodes/xfout_lovel/index.html new file mode 100644 index 000000000..16f4ed7ab --- /dev/null +++ b/opcodes/xfout_lovel/index.html @@ -0,0 +1,721 @@ + + + + + + + + + xfout_lovel / xfout_hivel - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

xfout_lovel / xfout_hivel

+

Fade out control, based on velocity.

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.

+

Example

+
xfout_lovel=32 xfout_hivel=63
+
+ + + + + + + + + + + + + + + + + + + + + + +
NameVersionTypeDefaultRangeUnit
xfout_lovelSFZ v1integer1270 to 127N/A
+

Category: Performance Parameters, Amplifier

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/robots.txt b/robots.txt new file mode 100644 index 000000000..87a97c07a --- /dev/null +++ b/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: /search diff --git a/search/lunr.js b/search/lunr.js new file mode 100644 index 000000000..aca0a167f --- /dev/null +++ b/search/lunr.js @@ -0,0 +1,3475 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + */ + +;(function(){ + +/** + * A convenience function for configuring and constructing + * a new lunr Index. + * + * A lunr.Builder instance is created and the pipeline setup + * with a trimmer, stop word filter and stemmer. + * + * This builder object is yielded to the configuration function + * that is passed as a parameter, allowing the list of fields + * and other builder parameters to be customised. + * + * All documents _must_ be added within the passed config function. + * + * @example + * var idx = lunr(function () { + * this.field('title') + * this.field('body') + * this.ref('id') + * + * documents.forEach(function (doc) { + * this.add(doc) + * }, this) + * }) + * + * @see {@link lunr.Builder} + * @see {@link lunr.Pipeline} + * @see {@link lunr.trimmer} + * @see {@link lunr.stopWordFilter} + * @see {@link lunr.stemmer} + * @namespace {function} lunr + */ +var lunr = function (config) { + var builder = new lunr.Builder + + builder.pipeline.add( + lunr.trimmer, + lunr.stopWordFilter, + lunr.stemmer + ) + + builder.searchPipeline.add( + lunr.stemmer + ) + + config.call(builder, builder) + return builder.build() +} + +lunr.version = "2.3.9" +/*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A namespace containing utils for the rest of the lunr library + * @namespace lunr.utils + */ +lunr.utils = {} + +/** + * Print a warning message to the console. + * + * @param {String} message The message to be printed. + * @memberOf lunr.utils + * @function + */ +lunr.utils.warn = (function (global) { + /* eslint-disable no-console */ + return function (message) { + if (global.console && console.warn) { + console.warn(message) + } + } + /* eslint-enable no-console */ +})(this) + +/** + * Convert an object to a string. + * + * In the case of `null` and `undefined` the function returns + * the empty string, in all other cases the result of calling + * `toString` on the passed object is returned. + * + * @param {Any} obj The object to convert to a string. + * @return {String} string representation of the passed object. + * @memberOf lunr.utils + */ +lunr.utils.asString = function (obj) { + if (obj === void 0 || obj === null) { + return "" + } else { + return obj.toString() + } +} + +/** + * Clones an object. + * + * Will create a copy of an existing object such that any mutations + * on the copy cannot affect the original. + * + * Only shallow objects are supported, passing a nested object to this + * function will cause a TypeError. + * + * Objects with primitives, and arrays of primitives are supported. + * + * @param {Object} obj The object to clone. + * @return {Object} a clone of the passed object. + * @throws {TypeError} when a nested object is passed. + * @memberOf Utils + */ +lunr.utils.clone = function (obj) { + if (obj === null || obj === undefined) { + return obj + } + + var clone = Object.create(null), + keys = Object.keys(obj) + + for (var i = 0; i < keys.length; i++) { + var key = keys[i], + val = obj[key] + + if (Array.isArray(val)) { + clone[key] = val.slice() + continue + } + + if (typeof val === 'string' || + typeof val === 'number' || + typeof val === 'boolean') { + clone[key] = val + continue + } + + throw new TypeError("clone is not deep and does not support nested objects") + } + + return clone +} +lunr.FieldRef = function (docRef, fieldName, stringValue) { + this.docRef = docRef + this.fieldName = fieldName + this._stringValue = stringValue +} + +lunr.FieldRef.joiner = "/" + +lunr.FieldRef.fromString = function (s) { + var n = s.indexOf(lunr.FieldRef.joiner) + + if (n === -1) { + throw "malformed field ref string" + } + + var fieldRef = s.slice(0, n), + docRef = s.slice(n + 1) + + return new lunr.FieldRef (docRef, fieldRef, s) +} + +lunr.FieldRef.prototype.toString = function () { + if (this._stringValue == undefined) { + this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef + } + + return this._stringValue +} +/*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A lunr set. + * + * @constructor + */ +lunr.Set = function (elements) { + this.elements = Object.create(null) + + if (elements) { + this.length = elements.length + + for (var i = 0; i < this.length; i++) { + this.elements[elements[i]] = true + } + } else { + this.length = 0 + } +} + +/** + * A complete set that contains all elements. + * + * @static + * @readonly + * @type {lunr.Set} + */ +lunr.Set.complete = { + intersect: function (other) { + return other + }, + + union: function () { + return this + }, + + contains: function () { + return true + } +} + +/** + * An empty set that contains no elements. + * + * @static + * @readonly + * @type {lunr.Set} + */ +lunr.Set.empty = { + intersect: function () { + return this + }, + + union: function (other) { + return other + }, + + contains: function () { + return false + } +} + +/** + * Returns true if this set contains the specified object. + * + * @param {object} object - Object whose presence in this set is to be tested. + * @returns {boolean} - True if this set contains the specified object. + */ +lunr.Set.prototype.contains = function (object) { + return !!this.elements[object] +} + +/** + * Returns a new set containing only the elements that are present in both + * this set and the specified set. + * + * @param {lunr.Set} other - set to intersect with this set. + * @returns {lunr.Set} a new set that is the intersection of this and the specified set. + */ + +lunr.Set.prototype.intersect = function (other) { + var a, b, elements, intersection = [] + + if (other === lunr.Set.complete) { + return this + } + + if (other === lunr.Set.empty) { + return other + } + + if (this.length < other.length) { + a = this + b = other + } else { + a = other + b = this + } + + elements = Object.keys(a.elements) + + for (var i = 0; i < elements.length; i++) { + var element = elements[i] + if (element in b.elements) { + intersection.push(element) + } + } + + return new lunr.Set (intersection) +} + +/** + * Returns a new set combining the elements of this and the specified set. + * + * @param {lunr.Set} other - set to union with this set. + * @return {lunr.Set} a new set that is the union of this and the specified set. + */ + +lunr.Set.prototype.union = function (other) { + if (other === lunr.Set.complete) { + return lunr.Set.complete + } + + if (other === lunr.Set.empty) { + return this + } + + return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements))) +} +/** + * A function to calculate the inverse document frequency for + * a posting. This is shared between the builder and the index + * + * @private + * @param {object} posting - The posting for a given term + * @param {number} documentCount - The total number of documents. + */ +lunr.idf = function (posting, documentCount) { + var documentsWithTerm = 0 + + for (var fieldName in posting) { + if (fieldName == '_index') continue // Ignore the term index, its not a field + documentsWithTerm += Object.keys(posting[fieldName]).length + } + + var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5) + + return Math.log(1 + Math.abs(x)) +} + +/** + * A token wraps a string representation of a token + * as it is passed through the text processing pipeline. + * + * @constructor + * @param {string} [str=''] - The string token being wrapped. + * @param {object} [metadata={}] - Metadata associated with this token. + */ +lunr.Token = function (str, metadata) { + this.str = str || "" + this.metadata = metadata || {} +} + +/** + * Returns the token string that is being wrapped by this object. + * + * @returns {string} + */ +lunr.Token.prototype.toString = function () { + return this.str +} + +/** + * A token update function is used when updating or optionally + * when cloning a token. + * + * @callback lunr.Token~updateFunction + * @param {string} str - The string representation of the token. + * @param {Object} metadata - All metadata associated with this token. + */ + +/** + * Applies the given function to the wrapped string token. + * + * @example + * token.update(function (str, metadata) { + * return str.toUpperCase() + * }) + * + * @param {lunr.Token~updateFunction} fn - A function to apply to the token string. + * @returns {lunr.Token} + */ +lunr.Token.prototype.update = function (fn) { + this.str = fn(this.str, this.metadata) + return this +} + +/** + * Creates a clone of this token. Optionally a function can be + * applied to the cloned token. + * + * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token. + * @returns {lunr.Token} + */ +lunr.Token.prototype.clone = function (fn) { + fn = fn || function (s) { return s } + return new lunr.Token (fn(this.str, this.metadata), this.metadata) +} +/*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A function for splitting a string into tokens ready to be inserted into + * the search index. Uses `lunr.tokenizer.separator` to split strings, change + * the value of this property to change how strings are split into tokens. + * + * This tokenizer will convert its parameter to a string by calling `toString` and + * then will split this string on the character in `lunr.tokenizer.separator`. + * Arrays will have their elements converted to strings and wrapped in a lunr.Token. + * + * Optional metadata can be passed to the tokenizer, this metadata will be cloned and + * added as metadata to every token that is created from the object to be tokenized. + * + * @static + * @param {?(string|object|object[])} obj - The object to convert into tokens + * @param {?object} metadata - Optional metadata to associate with every token + * @returns {lunr.Token[]} + * @see {@link lunr.Pipeline} + */ +lunr.tokenizer = function (obj, metadata) { + if (obj == null || obj == undefined) { + return [] + } + + if (Array.isArray(obj)) { + return obj.map(function (t) { + return new lunr.Token( + lunr.utils.asString(t).toLowerCase(), + lunr.utils.clone(metadata) + ) + }) + } + + var str = obj.toString().toLowerCase(), + len = str.length, + tokens = [] + + for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) { + var char = str.charAt(sliceEnd), + sliceLength = sliceEnd - sliceStart + + if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) { + + if (sliceLength > 0) { + var tokenMetadata = lunr.utils.clone(metadata) || {} + tokenMetadata["position"] = [sliceStart, sliceLength] + tokenMetadata["index"] = tokens.length + + tokens.push( + new lunr.Token ( + str.slice(sliceStart, sliceEnd), + tokenMetadata + ) + ) + } + + sliceStart = sliceEnd + 1 + } + + } + + return tokens +} + +/** + * The separator used to split a string into tokens. Override this property to change the behaviour of + * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens. + * + * @static + * @see lunr.tokenizer + */ +lunr.tokenizer.separator = /[\s\-]+/ +/*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * lunr.Pipelines maintain an ordered list of functions to be applied to all + * tokens in documents entering the search index and queries being ran against + * the index. + * + * An instance of lunr.Index created with the lunr shortcut will contain a + * pipeline with a stop word filter and an English language stemmer. Extra + * functions can be added before or after either of these functions or these + * default functions can be removed. + * + * When run the pipeline will call each function in turn, passing a token, the + * index of that token in the original list of all tokens and finally a list of + * all the original tokens. + * + * The output of functions in the pipeline will be passed to the next function + * in the pipeline. To exclude a token from entering the index the function + * should return undefined, the rest of the pipeline will not be called with + * this token. + * + * For serialisation of pipelines to work, all functions used in an instance of + * a pipeline should be registered with lunr.Pipeline. Registered functions can + * then be loaded. If trying to load a serialised pipeline that uses functions + * that are not registered an error will be thrown. + * + * If not planning on serialising the pipeline then registering pipeline functions + * is not necessary. + * + * @constructor + */ +lunr.Pipeline = function () { + this._stack = [] +} + +lunr.Pipeline.registeredFunctions = Object.create(null) + +/** + * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token + * string as well as all known metadata. A pipeline function can mutate the token string + * or mutate (or add) metadata for a given token. + * + * A pipeline function can indicate that the passed token should be discarded by returning + * null, undefined or an empty string. This token will not be passed to any downstream pipeline + * functions and will not be added to the index. + * + * Multiple tokens can be returned by returning an array of tokens. Each token will be passed + * to any downstream pipeline functions and all will returned tokens will be added to the index. + * + * Any number of pipeline functions may be chained together using a lunr.Pipeline. + * + * @interface lunr.PipelineFunction + * @param {lunr.Token} token - A token from the document being processed. + * @param {number} i - The index of this token in the complete list of tokens for this document/field. + * @param {lunr.Token[]} tokens - All tokens for this document/field. + * @returns {(?lunr.Token|lunr.Token[])} + */ + +/** + * Register a function with the pipeline. + * + * Functions that are used in the pipeline should be registered if the pipeline + * needs to be serialised, or a serialised pipeline needs to be loaded. + * + * Registering a function does not add it to a pipeline, functions must still be + * added to instances of the pipeline for them to be used when running a pipeline. + * + * @param {lunr.PipelineFunction} fn - The function to check for. + * @param {String} label - The label to register this function with + */ +lunr.Pipeline.registerFunction = function (fn, label) { + if (label in this.registeredFunctions) { + lunr.utils.warn('Overwriting existing registered function: ' + label) + } + + fn.label = label + lunr.Pipeline.registeredFunctions[fn.label] = fn +} + +/** + * Warns if the function is not registered as a Pipeline function. + * + * @param {lunr.PipelineFunction} fn - The function to check for. + * @private + */ +lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) { + var isRegistered = fn.label && (fn.label in this.registeredFunctions) + + if (!isRegistered) { + lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn) + } +} + +/** + * Loads a previously serialised pipeline. + * + * All functions to be loaded must already be registered with lunr.Pipeline. + * If any function from the serialised data has not been registered then an + * error will be thrown. + * + * @param {Object} serialised - The serialised pipeline to load. + * @returns {lunr.Pipeline} + */ +lunr.Pipeline.load = function (serialised) { + var pipeline = new lunr.Pipeline + + serialised.forEach(function (fnName) { + var fn = lunr.Pipeline.registeredFunctions[fnName] + + if (fn) { + pipeline.add(fn) + } else { + throw new Error('Cannot load unregistered function: ' + fnName) + } + }) + + return pipeline +} + +/** + * Adds new functions to the end of the pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline. + */ +lunr.Pipeline.prototype.add = function () { + var fns = Array.prototype.slice.call(arguments) + + fns.forEach(function (fn) { + lunr.Pipeline.warnIfFunctionNotRegistered(fn) + this._stack.push(fn) + }, this) +} + +/** + * Adds a single function after a function that already exists in the + * pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. + * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. + */ +lunr.Pipeline.prototype.after = function (existingFn, newFn) { + lunr.Pipeline.warnIfFunctionNotRegistered(newFn) + + var pos = this._stack.indexOf(existingFn) + if (pos == -1) { + throw new Error('Cannot find existingFn') + } + + pos = pos + 1 + this._stack.splice(pos, 0, newFn) +} + +/** + * Adds a single function before a function that already exists in the + * pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. + * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. + */ +lunr.Pipeline.prototype.before = function (existingFn, newFn) { + lunr.Pipeline.warnIfFunctionNotRegistered(newFn) + + var pos = this._stack.indexOf(existingFn) + if (pos == -1) { + throw new Error('Cannot find existingFn') + } + + this._stack.splice(pos, 0, newFn) +} + +/** + * Removes a function from the pipeline. + * + * @param {lunr.PipelineFunction} fn The function to remove from the pipeline. + */ +lunr.Pipeline.prototype.remove = function (fn) { + var pos = this._stack.indexOf(fn) + if (pos == -1) { + return + } + + this._stack.splice(pos, 1) +} + +/** + * Runs the current list of functions that make up the pipeline against the + * passed tokens. + * + * @param {Array} tokens The tokens to run through the pipeline. + * @returns {Array} + */ +lunr.Pipeline.prototype.run = function (tokens) { + var stackLength = this._stack.length + + for (var i = 0; i < stackLength; i++) { + var fn = this._stack[i] + var memo = [] + + for (var j = 0; j < tokens.length; j++) { + var result = fn(tokens[j], j, tokens) + + if (result === null || result === void 0 || result === '') continue + + if (Array.isArray(result)) { + for (var k = 0; k < result.length; k++) { + memo.push(result[k]) + } + } else { + memo.push(result) + } + } + + tokens = memo + } + + return tokens +} + +/** + * Convenience method for passing a string through a pipeline and getting + * strings out. This method takes care of wrapping the passed string in a + * token and mapping the resulting tokens back to strings. + * + * @param {string} str - The string to pass through the pipeline. + * @param {?object} metadata - Optional metadata to associate with the token + * passed to the pipeline. + * @returns {string[]} + */ +lunr.Pipeline.prototype.runString = function (str, metadata) { + var token = new lunr.Token (str, metadata) + + return this.run([token]).map(function (t) { + return t.toString() + }) +} + +/** + * Resets the pipeline by removing any existing processors. + * + */ +lunr.Pipeline.prototype.reset = function () { + this._stack = [] +} + +/** + * Returns a representation of the pipeline ready for serialisation. + * + * Logs a warning if the function has not been registered. + * + * @returns {Array} + */ +lunr.Pipeline.prototype.toJSON = function () { + return this._stack.map(function (fn) { + lunr.Pipeline.warnIfFunctionNotRegistered(fn) + + return fn.label + }) +} +/*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A vector is used to construct the vector space of documents and queries. These + * vectors support operations to determine the similarity between two documents or + * a document and a query. + * + * Normally no parameters are required for initializing a vector, but in the case of + * loading a previously dumped vector the raw elements can be provided to the constructor. + * + * For performance reasons vectors are implemented with a flat array, where an elements + * index is immediately followed by its value. E.g. [index, value, index, value]. This + * allows the underlying array to be as sparse as possible and still offer decent + * performance when being used for vector calculations. + * + * @constructor + * @param {Number[]} [elements] - The flat list of element index and element value pairs. + */ +lunr.Vector = function (elements) { + this._magnitude = 0 + this.elements = elements || [] +} + + +/** + * Calculates the position within the vector to insert a given index. + * + * This is used internally by insert and upsert. If there are duplicate indexes then + * the position is returned as if the value for that index were to be updated, but it + * is the callers responsibility to check whether there is a duplicate at that index + * + * @param {Number} insertIdx - The index at which the element should be inserted. + * @returns {Number} + */ +lunr.Vector.prototype.positionForIndex = function (index) { + // For an empty vector the tuple can be inserted at the beginning + if (this.elements.length == 0) { + return 0 + } + + var start = 0, + end = this.elements.length / 2, + sliceLength = end - start, + pivotPoint = Math.floor(sliceLength / 2), + pivotIndex = this.elements[pivotPoint * 2] + + while (sliceLength > 1) { + if (pivotIndex < index) { + start = pivotPoint + } + + if (pivotIndex > index) { + end = pivotPoint + } + + if (pivotIndex == index) { + break + } + + sliceLength = end - start + pivotPoint = start + Math.floor(sliceLength / 2) + pivotIndex = this.elements[pivotPoint * 2] + } + + if (pivotIndex == index) { + return pivotPoint * 2 + } + + if (pivotIndex > index) { + return pivotPoint * 2 + } + + if (pivotIndex < index) { + return (pivotPoint + 1) * 2 + } +} + +/** + * Inserts an element at an index within the vector. + * + * Does not allow duplicates, will throw an error if there is already an entry + * for this index. + * + * @param {Number} insertIdx - The index at which the element should be inserted. + * @param {Number} val - The value to be inserted into the vector. + */ +lunr.Vector.prototype.insert = function (insertIdx, val) { + this.upsert(insertIdx, val, function () { + throw "duplicate index" + }) +} + +/** + * Inserts or updates an existing index within the vector. + * + * @param {Number} insertIdx - The index at which the element should be inserted. + * @param {Number} val - The value to be inserted into the vector. + * @param {function} fn - A function that is called for updates, the existing value and the + * requested value are passed as arguments + */ +lunr.Vector.prototype.upsert = function (insertIdx, val, fn) { + this._magnitude = 0 + var position = this.positionForIndex(insertIdx) + + if (this.elements[position] == insertIdx) { + this.elements[position + 1] = fn(this.elements[position + 1], val) + } else { + this.elements.splice(position, 0, insertIdx, val) + } +} + +/** + * Calculates the magnitude of this vector. + * + * @returns {Number} + */ +lunr.Vector.prototype.magnitude = function () { + if (this._magnitude) return this._magnitude + + var sumOfSquares = 0, + elementsLength = this.elements.length + + for (var i = 1; i < elementsLength; i += 2) { + var val = this.elements[i] + sumOfSquares += val * val + } + + return this._magnitude = Math.sqrt(sumOfSquares) +} + +/** + * Calculates the dot product of this vector and another vector. + * + * @param {lunr.Vector} otherVector - The vector to compute the dot product with. + * @returns {Number} + */ +lunr.Vector.prototype.dot = function (otherVector) { + var dotProduct = 0, + a = this.elements, b = otherVector.elements, + aLen = a.length, bLen = b.length, + aVal = 0, bVal = 0, + i = 0, j = 0 + + while (i < aLen && j < bLen) { + aVal = a[i], bVal = b[j] + if (aVal < bVal) { + i += 2 + } else if (aVal > bVal) { + j += 2 + } else if (aVal == bVal) { + dotProduct += a[i + 1] * b[j + 1] + i += 2 + j += 2 + } + } + + return dotProduct +} + +/** + * Calculates the similarity between this vector and another vector. + * + * @param {lunr.Vector} otherVector - The other vector to calculate the + * similarity with. + * @returns {Number} + */ +lunr.Vector.prototype.similarity = function (otherVector) { + return this.dot(otherVector) / this.magnitude() || 0 +} + +/** + * Converts the vector to an array of the elements within the vector. + * + * @returns {Number[]} + */ +lunr.Vector.prototype.toArray = function () { + var output = new Array (this.elements.length / 2) + + for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) { + output[j] = this.elements[i] + } + + return output +} + +/** + * A JSON serializable representation of the vector. + * + * @returns {Number[]} + */ +lunr.Vector.prototype.toJSON = function () { + return this.elements +} +/* eslint-disable */ +/*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + */ + +/** + * lunr.stemmer is an english language stemmer, this is a JavaScript + * implementation of the PorterStemmer taken from http://tartarus.org/~martin + * + * @static + * @implements {lunr.PipelineFunction} + * @param {lunr.Token} token - The string to stem + * @returns {lunr.Token} + * @see {@link lunr.Pipeline} + * @function + */ +lunr.stemmer = (function(){ + var step2list = { + "ational" : "ate", + "tional" : "tion", + "enci" : "ence", + "anci" : "ance", + "izer" : "ize", + "bli" : "ble", + "alli" : "al", + "entli" : "ent", + "eli" : "e", + "ousli" : "ous", + "ization" : "ize", + "ation" : "ate", + "ator" : "ate", + "alism" : "al", + "iveness" : "ive", + "fulness" : "ful", + "ousness" : "ous", + "aliti" : "al", + "iviti" : "ive", + "biliti" : "ble", + "logi" : "log" + }, + + step3list = { + "icate" : "ic", + "ative" : "", + "alize" : "al", + "iciti" : "ic", + "ical" : "ic", + "ful" : "", + "ness" : "" + }, + + c = "[^aeiou]", // consonant + v = "[aeiouy]", // vowel + C = c + "[^aeiouy]*", // consonant sequence + V = v + "[aeiou]*", // vowel sequence + + mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0 + meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1 + mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1 + s_v = "^(" + C + ")?" + v; // vowel in stem + + var re_mgr0 = new RegExp(mgr0); + var re_mgr1 = new RegExp(mgr1); + var re_meq1 = new RegExp(meq1); + var re_s_v = new RegExp(s_v); + + var re_1a = /^(.+?)(ss|i)es$/; + var re2_1a = /^(.+?)([^s])s$/; + var re_1b = /^(.+?)eed$/; + var re2_1b = /^(.+?)(ed|ing)$/; + var re_1b_2 = /.$/; + var re2_1b_2 = /(at|bl|iz)$/; + var re3_1b_2 = new RegExp("([^aeiouylsz])\\1$"); + var re4_1b_2 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + + var re_1c = /^(.+?[^aeiou])y$/; + var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + + var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + + var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + var re2_4 = /^(.+?)(s|t)(ion)$/; + + var re_5 = /^(.+?)e$/; + var re_5_1 = /ll$/; + var re3_5 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + + var porterStemmer = function porterStemmer(w) { + var stem, + suffix, + firstch, + re, + re2, + re3, + re4; + + if (w.length < 3) { return w; } + + firstch = w.substr(0,1); + if (firstch == "y") { + w = firstch.toUpperCase() + w.substr(1); + } + + // Step 1a + re = re_1a + re2 = re2_1a; + + if (re.test(w)) { w = w.replace(re,"$1$2"); } + else if (re2.test(w)) { w = w.replace(re2,"$1$2"); } + + // Step 1b + re = re_1b; + re2 = re2_1b; + if (re.test(w)) { + var fp = re.exec(w); + re = re_mgr0; + if (re.test(fp[1])) { + re = re_1b_2; + w = w.replace(re,""); + } + } else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = re_s_v; + if (re2.test(stem)) { + w = stem; + re2 = re2_1b_2; + re3 = re3_1b_2; + re4 = re4_1b_2; + if (re2.test(w)) { w = w + "e"; } + else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,""); } + else if (re4.test(w)) { w = w + "e"; } + } + } + + // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say) + re = re_1c; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem + "i"; + } + + // Step 2 + re = re_2; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = re_mgr0; + if (re.test(stem)) { + w = stem + step2list[suffix]; + } + } + + // Step 3 + re = re_3; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = re_mgr0; + if (re.test(stem)) { + w = stem + step3list[suffix]; + } + } + + // Step 4 + re = re_4; + re2 = re2_4; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = re_mgr1; + if (re.test(stem)) { + w = stem; + } + } else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = re_mgr1; + if (re2.test(stem)) { + w = stem; + } + } + + // Step 5 + re = re_5; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = re_mgr1; + re2 = re_meq1; + re3 = re3_5; + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) { + w = stem; + } + } + + re = re_5_1; + re2 = re_mgr1; + if (re.test(w) && re2.test(w)) { + re = re_1b_2; + w = w.replace(re,""); + } + + // and turn initial Y back to y + + if (firstch == "y") { + w = firstch.toLowerCase() + w.substr(1); + } + + return w; + }; + + return function (token) { + return token.update(porterStemmer); + } +})(); + +lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer') +/*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * lunr.generateStopWordFilter builds a stopWordFilter function from the provided + * list of stop words. + * + * The built in lunr.stopWordFilter is built using this generator and can be used + * to generate custom stopWordFilters for applications or non English languages. + * + * @function + * @param {Array} token The token to pass through the filter + * @returns {lunr.PipelineFunction} + * @see lunr.Pipeline + * @see lunr.stopWordFilter + */ +lunr.generateStopWordFilter = function (stopWords) { + var words = stopWords.reduce(function (memo, stopWord) { + memo[stopWord] = stopWord + return memo + }, {}) + + return function (token) { + if (token && words[token.toString()] !== token.toString()) return token + } +} + +/** + * lunr.stopWordFilter is an English language stop word list filter, any words + * contained in the list will not be passed through the filter. + * + * This is intended to be used in the Pipeline. If the token does not pass the + * filter then undefined will be returned. + * + * @function + * @implements {lunr.PipelineFunction} + * @params {lunr.Token} token - A token to check for being a stop word. + * @returns {lunr.Token} + * @see {@link lunr.Pipeline} + */ +lunr.stopWordFilter = lunr.generateStopWordFilter([ + 'a', + 'able', + 'about', + 'across', + 'after', + 'all', + 'almost', + 'also', + 'am', + 'among', + 'an', + 'and', + 'any', + 'are', + 'as', + 'at', + 'be', + 'because', + 'been', + 'but', + 'by', + 'can', + 'cannot', + 'could', + 'dear', + 'did', + 'do', + 'does', + 'either', + 'else', + 'ever', + 'every', + 'for', + 'from', + 'get', + 'got', + 'had', + 'has', + 'have', + 'he', + 'her', + 'hers', + 'him', + 'his', + 'how', + 'however', + 'i', + 'if', + 'in', + 'into', + 'is', + 'it', + 'its', + 'just', + 'least', + 'let', + 'like', + 'likely', + 'may', + 'me', + 'might', + 'most', + 'must', + 'my', + 'neither', + 'no', + 'nor', + 'not', + 'of', + 'off', + 'often', + 'on', + 'only', + 'or', + 'other', + 'our', + 'own', + 'rather', + 'said', + 'say', + 'says', + 'she', + 'should', + 'since', + 'so', + 'some', + 'than', + 'that', + 'the', + 'their', + 'them', + 'then', + 'there', + 'these', + 'they', + 'this', + 'tis', + 'to', + 'too', + 'twas', + 'us', + 'wants', + 'was', + 'we', + 'were', + 'what', + 'when', + 'where', + 'which', + 'while', + 'who', + 'whom', + 'why', + 'will', + 'with', + 'would', + 'yet', + 'you', + 'your' +]) + +lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter') +/*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * lunr.trimmer is a pipeline function for trimming non word + * characters from the beginning and end of tokens before they + * enter the index. + * + * This implementation may not work correctly for non latin + * characters and should either be removed or adapted for use + * with languages with non-latin characters. + * + * @static + * @implements {lunr.PipelineFunction} + * @param {lunr.Token} token The token to pass through the filter + * @returns {lunr.Token} + * @see lunr.Pipeline + */ +lunr.trimmer = function (token) { + return token.update(function (s) { + return s.replace(/^\W+/, '').replace(/\W+$/, '') + }) +} + +lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer') +/*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A token set is used to store the unique list of all tokens + * within an index. Token sets are also used to represent an + * incoming query to the index, this query token set and index + * token set are then intersected to find which tokens to look + * up in the inverted index. + * + * A token set can hold multiple tokens, as in the case of the + * index token set, or it can hold a single token as in the + * case of a simple query token set. + * + * Additionally token sets are used to perform wildcard matching. + * Leading, contained and trailing wildcards are supported, and + * from this edit distance matching can also be provided. + * + * Token sets are implemented as a minimal finite state automata, + * where both common prefixes and suffixes are shared between tokens. + * This helps to reduce the space used for storing the token set. + * + * @constructor + */ +lunr.TokenSet = function () { + this.final = false + this.edges = {} + this.id = lunr.TokenSet._nextId + lunr.TokenSet._nextId += 1 +} + +/** + * Keeps track of the next, auto increment, identifier to assign + * to a new tokenSet. + * + * TokenSets require a unique identifier to be correctly minimised. + * + * @private + */ +lunr.TokenSet._nextId = 1 + +/** + * Creates a TokenSet instance from the given sorted array of words. + * + * @param {String[]} arr - A sorted array of strings to create the set from. + * @returns {lunr.TokenSet} + * @throws Will throw an error if the input array is not sorted. + */ +lunr.TokenSet.fromArray = function (arr) { + var builder = new lunr.TokenSet.Builder + + for (var i = 0, len = arr.length; i < len; i++) { + builder.insert(arr[i]) + } + + builder.finish() + return builder.root +} + +/** + * Creates a token set from a query clause. + * + * @private + * @param {Object} clause - A single clause from lunr.Query. + * @param {string} clause.term - The query clause term. + * @param {number} [clause.editDistance] - The optional edit distance for the term. + * @returns {lunr.TokenSet} + */ +lunr.TokenSet.fromClause = function (clause) { + if ('editDistance' in clause) { + return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance) + } else { + return lunr.TokenSet.fromString(clause.term) + } +} + +/** + * Creates a token set representing a single string with a specified + * edit distance. + * + * Insertions, deletions, substitutions and transpositions are each + * treated as an edit distance of 1. + * + * Increasing the allowed edit distance will have a dramatic impact + * on the performance of both creating and intersecting these TokenSets. + * It is advised to keep the edit distance less than 3. + * + * @param {string} str - The string to create the token set from. + * @param {number} editDistance - The allowed edit distance to match. + * @returns {lunr.Vector} + */ +lunr.TokenSet.fromFuzzyString = function (str, editDistance) { + var root = new lunr.TokenSet + + var stack = [{ + node: root, + editsRemaining: editDistance, + str: str + }] + + while (stack.length) { + var frame = stack.pop() + + // no edit + if (frame.str.length > 0) { + var char = frame.str.charAt(0), + noEditNode + + if (char in frame.node.edges) { + noEditNode = frame.node.edges[char] + } else { + noEditNode = new lunr.TokenSet + frame.node.edges[char] = noEditNode + } + + if (frame.str.length == 1) { + noEditNode.final = true + } + + stack.push({ + node: noEditNode, + editsRemaining: frame.editsRemaining, + str: frame.str.slice(1) + }) + } + + if (frame.editsRemaining == 0) { + continue + } + + // insertion + if ("*" in frame.node.edges) { + var insertionNode = frame.node.edges["*"] + } else { + var insertionNode = new lunr.TokenSet + frame.node.edges["*"] = insertionNode + } + + if (frame.str.length == 0) { + insertionNode.final = true + } + + stack.push({ + node: insertionNode, + editsRemaining: frame.editsRemaining - 1, + str: frame.str + }) + + // deletion + // can only do a deletion if we have enough edits remaining + // and if there are characters left to delete in the string + if (frame.str.length > 1) { + stack.push({ + node: frame.node, + editsRemaining: frame.editsRemaining - 1, + str: frame.str.slice(1) + }) + } + + // deletion + // just removing the last character from the str + if (frame.str.length == 1) { + frame.node.final = true + } + + // substitution + // can only do a substitution if we have enough edits remaining + // and if there are characters left to substitute + if (frame.str.length >= 1) { + if ("*" in frame.node.edges) { + var substitutionNode = frame.node.edges["*"] + } else { + var substitutionNode = new lunr.TokenSet + frame.node.edges["*"] = substitutionNode + } + + if (frame.str.length == 1) { + substitutionNode.final = true + } + + stack.push({ + node: substitutionNode, + editsRemaining: frame.editsRemaining - 1, + str: frame.str.slice(1) + }) + } + + // transposition + // can only do a transposition if there are edits remaining + // and there are enough characters to transpose + if (frame.str.length > 1) { + var charA = frame.str.charAt(0), + charB = frame.str.charAt(1), + transposeNode + + if (charB in frame.node.edges) { + transposeNode = frame.node.edges[charB] + } else { + transposeNode = new lunr.TokenSet + frame.node.edges[charB] = transposeNode + } + + if (frame.str.length == 1) { + transposeNode.final = true + } + + stack.push({ + node: transposeNode, + editsRemaining: frame.editsRemaining - 1, + str: charA + frame.str.slice(2) + }) + } + } + + return root +} + +/** + * Creates a TokenSet from a string. + * + * The string may contain one or more wildcard characters (*) + * that will allow wildcard matching when intersecting with + * another TokenSet. + * + * @param {string} str - The string to create a TokenSet from. + * @returns {lunr.TokenSet} + */ +lunr.TokenSet.fromString = function (str) { + var node = new lunr.TokenSet, + root = node + + /* + * Iterates through all characters within the passed string + * appending a node for each character. + * + * When a wildcard character is found then a self + * referencing edge is introduced to continually match + * any number of any characters. + */ + for (var i = 0, len = str.length; i < len; i++) { + var char = str[i], + final = (i == len - 1) + + if (char == "*") { + node.edges[char] = node + node.final = final + + } else { + var next = new lunr.TokenSet + next.final = final + + node.edges[char] = next + node = next + } + } + + return root +} + +/** + * Converts this TokenSet into an array of strings + * contained within the TokenSet. + * + * This is not intended to be used on a TokenSet that + * contains wildcards, in these cases the results are + * undefined and are likely to cause an infinite loop. + * + * @returns {string[]} + */ +lunr.TokenSet.prototype.toArray = function () { + var words = [] + + var stack = [{ + prefix: "", + node: this + }] + + while (stack.length) { + var frame = stack.pop(), + edges = Object.keys(frame.node.edges), + len = edges.length + + if (frame.node.final) { + /* In Safari, at this point the prefix is sometimes corrupted, see: + * https://github.com/olivernn/lunr.js/issues/279 Calling any + * String.prototype method forces Safari to "cast" this string to what + * it's supposed to be, fixing the bug. */ + frame.prefix.charAt(0) + words.push(frame.prefix) + } + + for (var i = 0; i < len; i++) { + var edge = edges[i] + + stack.push({ + prefix: frame.prefix.concat(edge), + node: frame.node.edges[edge] + }) + } + } + + return words +} + +/** + * Generates a string representation of a TokenSet. + * + * This is intended to allow TokenSets to be used as keys + * in objects, largely to aid the construction and minimisation + * of a TokenSet. As such it is not designed to be a human + * friendly representation of the TokenSet. + * + * @returns {string} + */ +lunr.TokenSet.prototype.toString = function () { + // NOTE: Using Object.keys here as this.edges is very likely + // to enter 'hash-mode' with many keys being added + // + // avoiding a for-in loop here as it leads to the function + // being de-optimised (at least in V8). From some simple + // benchmarks the performance is comparable, but allowing + // V8 to optimize may mean easy performance wins in the future. + + if (this._str) { + return this._str + } + + var str = this.final ? '1' : '0', + labels = Object.keys(this.edges).sort(), + len = labels.length + + for (var i = 0; i < len; i++) { + var label = labels[i], + node = this.edges[label] + + str = str + label + node.id + } + + return str +} + +/** + * Returns a new TokenSet that is the intersection of + * this TokenSet and the passed TokenSet. + * + * This intersection will take into account any wildcards + * contained within the TokenSet. + * + * @param {lunr.TokenSet} b - An other TokenSet to intersect with. + * @returns {lunr.TokenSet} + */ +lunr.TokenSet.prototype.intersect = function (b) { + var output = new lunr.TokenSet, + frame = undefined + + var stack = [{ + qNode: b, + output: output, + node: this + }] + + while (stack.length) { + frame = stack.pop() + + // NOTE: As with the #toString method, we are using + // Object.keys and a for loop instead of a for-in loop + // as both of these objects enter 'hash' mode, causing + // the function to be de-optimised in V8 + var qEdges = Object.keys(frame.qNode.edges), + qLen = qEdges.length, + nEdges = Object.keys(frame.node.edges), + nLen = nEdges.length + + for (var q = 0; q < qLen; q++) { + var qEdge = qEdges[q] + + for (var n = 0; n < nLen; n++) { + var nEdge = nEdges[n] + + if (nEdge == qEdge || qEdge == '*') { + var node = frame.node.edges[nEdge], + qNode = frame.qNode.edges[qEdge], + final = node.final && qNode.final, + next = undefined + + if (nEdge in frame.output.edges) { + // an edge already exists for this character + // no need to create a new node, just set the finality + // bit unless this node is already final + next = frame.output.edges[nEdge] + next.final = next.final || final + + } else { + // no edge exists yet, must create one + // set the finality bit and insert it + // into the output + next = new lunr.TokenSet + next.final = final + frame.output.edges[nEdge] = next + } + + stack.push({ + qNode: qNode, + output: next, + node: node + }) + } + } + } + } + + return output +} +lunr.TokenSet.Builder = function () { + this.previousWord = "" + this.root = new lunr.TokenSet + this.uncheckedNodes = [] + this.minimizedNodes = {} +} + +lunr.TokenSet.Builder.prototype.insert = function (word) { + var node, + commonPrefix = 0 + + if (word < this.previousWord) { + throw new Error ("Out of order word insertion") + } + + for (var i = 0; i < word.length && i < this.previousWord.length; i++) { + if (word[i] != this.previousWord[i]) break + commonPrefix++ + } + + this.minimize(commonPrefix) + + if (this.uncheckedNodes.length == 0) { + node = this.root + } else { + node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child + } + + for (var i = commonPrefix; i < word.length; i++) { + var nextNode = new lunr.TokenSet, + char = word[i] + + node.edges[char] = nextNode + + this.uncheckedNodes.push({ + parent: node, + char: char, + child: nextNode + }) + + node = nextNode + } + + node.final = true + this.previousWord = word +} + +lunr.TokenSet.Builder.prototype.finish = function () { + this.minimize(0) +} + +lunr.TokenSet.Builder.prototype.minimize = function (downTo) { + for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) { + var node = this.uncheckedNodes[i], + childKey = node.child.toString() + + if (childKey in this.minimizedNodes) { + node.parent.edges[node.char] = this.minimizedNodes[childKey] + } else { + // Cache the key for this node since + // we know it can't change anymore + node.child._str = childKey + + this.minimizedNodes[childKey] = node.child + } + + this.uncheckedNodes.pop() + } +} +/*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * An index contains the built index of all documents and provides a query interface + * to the index. + * + * Usually instances of lunr.Index will not be created using this constructor, instead + * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be + * used to load previously built and serialized indexes. + * + * @constructor + * @param {Object} attrs - The attributes of the built search index. + * @param {Object} attrs.invertedIndex - An index of term/field to document reference. + * @param {Object} attrs.fieldVectors - Field vectors + * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens. + * @param {string[]} attrs.fields - The names of indexed document fields. + * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms. + */ +lunr.Index = function (attrs) { + this.invertedIndex = attrs.invertedIndex + this.fieldVectors = attrs.fieldVectors + this.tokenSet = attrs.tokenSet + this.fields = attrs.fields + this.pipeline = attrs.pipeline +} + +/** + * A result contains details of a document matching a search query. + * @typedef {Object} lunr.Index~Result + * @property {string} ref - The reference of the document this result represents. + * @property {number} score - A number between 0 and 1 representing how similar this document is to the query. + * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match. + */ + +/** + * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple + * query language which itself is parsed into an instance of lunr.Query. + * + * For programmatically building queries it is advised to directly use lunr.Query, the query language + * is best used for human entered text rather than program generated text. + * + * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported + * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello' + * or 'world', though those that contain both will rank higher in the results. + * + * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can + * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding + * wildcards will increase the number of documents that will be found but can also have a negative + * impact on query performance, especially with wildcards at the beginning of a term. + * + * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term + * hello in the title field will match this query. Using a field not present in the index will lead + * to an error being thrown. + * + * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term + * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported + * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2. + * Avoid large values for edit distance to improve query performance. + * + * Each term also supports a presence modifier. By default a term's presence in document is optional, however + * this can be changed to either required or prohibited. For a term's presence to be required in a document the + * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and + * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not + * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'. + * + * To escape special characters the backslash character '\' can be used, this allows searches to include + * characters that would normally be considered modifiers, e.g. `foo\~2` will search for a term "foo~2" instead + * of attempting to apply a boost of 2 to the search term "foo". + * + * @typedef {string} lunr.Index~QueryString + * @example Simple single term query + * hello + * @example Multiple term query + * hello world + * @example term scoped to a field + * title:hello + * @example term with a boost of 10 + * hello^10 + * @example term with an edit distance of 2 + * hello~2 + * @example terms with presence modifiers + * -foo +bar baz + */ + +/** + * Performs a search against the index using lunr query syntax. + * + * Results will be returned sorted by their score, the most relevant results + * will be returned first. For details on how the score is calculated, please see + * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}. + * + * For more programmatic querying use lunr.Index#query. + * + * @param {lunr.Index~QueryString} queryString - A string containing a lunr query. + * @throws {lunr.QueryParseError} If the passed query string cannot be parsed. + * @returns {lunr.Index~Result[]} + */ +lunr.Index.prototype.search = function (queryString) { + return this.query(function (query) { + var parser = new lunr.QueryParser(queryString, query) + parser.parse() + }) +} + +/** + * A query builder callback provides a query object to be used to express + * the query to perform on the index. + * + * @callback lunr.Index~queryBuilder + * @param {lunr.Query} query - The query object to build up. + * @this lunr.Query + */ + +/** + * Performs a query against the index using the yielded lunr.Query object. + * + * If performing programmatic queries against the index, this method is preferred + * over lunr.Index#search so as to avoid the additional query parsing overhead. + * + * A query object is yielded to the supplied function which should be used to + * express the query to be run against the index. + * + * Note that although this function takes a callback parameter it is _not_ an + * asynchronous operation, the callback is just yielded a query object to be + * customized. + * + * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query. + * @returns {lunr.Index~Result[]} + */ +lunr.Index.prototype.query = function (fn) { + // for each query clause + // * process terms + // * expand terms from token set + // * find matching documents and metadata + // * get document vectors + // * score documents + + var query = new lunr.Query(this.fields), + matchingFields = Object.create(null), + queryVectors = Object.create(null), + termFieldCache = Object.create(null), + requiredMatches = Object.create(null), + prohibitedMatches = Object.create(null) + + /* + * To support field level boosts a query vector is created per + * field. An empty vector is eagerly created to support negated + * queries. + */ + for (var i = 0; i < this.fields.length; i++) { + queryVectors[this.fields[i]] = new lunr.Vector + } + + fn.call(query, query) + + for (var i = 0; i < query.clauses.length; i++) { + /* + * Unless the pipeline has been disabled for this term, which is + * the case for terms with wildcards, we need to pass the clause + * term through the search pipeline. A pipeline returns an array + * of processed terms. Pipeline functions may expand the passed + * term, which means we may end up performing multiple index lookups + * for a single query term. + */ + var clause = query.clauses[i], + terms = null, + clauseMatches = lunr.Set.empty + + if (clause.usePipeline) { + terms = this.pipeline.runString(clause.term, { + fields: clause.fields + }) + } else { + terms = [clause.term] + } + + for (var m = 0; m < terms.length; m++) { + var term = terms[m] + + /* + * Each term returned from the pipeline needs to use the same query + * clause object, e.g. the same boost and or edit distance. The + * simplest way to do this is to re-use the clause object but mutate + * its term property. + */ + clause.term = term + + /* + * From the term in the clause we create a token set which will then + * be used to intersect the indexes token set to get a list of terms + * to lookup in the inverted index + */ + var termTokenSet = lunr.TokenSet.fromClause(clause), + expandedTerms = this.tokenSet.intersect(termTokenSet).toArray() + + /* + * If a term marked as required does not exist in the tokenSet it is + * impossible for the search to return any matches. We set all the field + * scoped required matches set to empty and stop examining any further + * clauses. + */ + if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) { + for (var k = 0; k < clause.fields.length; k++) { + var field = clause.fields[k] + requiredMatches[field] = lunr.Set.empty + } + + break + } + + for (var j = 0; j < expandedTerms.length; j++) { + /* + * For each term get the posting and termIndex, this is required for + * building the query vector. + */ + var expandedTerm = expandedTerms[j], + posting = this.invertedIndex[expandedTerm], + termIndex = posting._index + + for (var k = 0; k < clause.fields.length; k++) { + /* + * For each field that this query term is scoped by (by default + * all fields are in scope) we need to get all the document refs + * that have this term in that field. + * + * The posting is the entry in the invertedIndex for the matching + * term from above. + */ + var field = clause.fields[k], + fieldPosting = posting[field], + matchingDocumentRefs = Object.keys(fieldPosting), + termField = expandedTerm + "/" + field, + matchingDocumentsSet = new lunr.Set(matchingDocumentRefs) + + /* + * if the presence of this term is required ensure that the matching + * documents are added to the set of required matches for this clause. + * + */ + if (clause.presence == lunr.Query.presence.REQUIRED) { + clauseMatches = clauseMatches.union(matchingDocumentsSet) + + if (requiredMatches[field] === undefined) { + requiredMatches[field] = lunr.Set.complete + } + } + + /* + * if the presence of this term is prohibited ensure that the matching + * documents are added to the set of prohibited matches for this field, + * creating that set if it does not yet exist. + */ + if (clause.presence == lunr.Query.presence.PROHIBITED) { + if (prohibitedMatches[field] === undefined) { + prohibitedMatches[field] = lunr.Set.empty + } + + prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet) + + /* + * Prohibited matches should not be part of the query vector used for + * similarity scoring and no metadata should be extracted so we continue + * to the next field + */ + continue + } + + /* + * The query field vector is populated using the termIndex found for + * the term and a unit value with the appropriate boost applied. + * Using upsert because there could already be an entry in the vector + * for the term we are working with. In that case we just add the scores + * together. + */ + queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b }) + + /** + * If we've already seen this term, field combo then we've already collected + * the matching documents and metadata, no need to go through all that again + */ + if (termFieldCache[termField]) { + continue + } + + for (var l = 0; l < matchingDocumentRefs.length; l++) { + /* + * All metadata for this term/field/document triple + * are then extracted and collected into an instance + * of lunr.MatchData ready to be returned in the query + * results + */ + var matchingDocumentRef = matchingDocumentRefs[l], + matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field), + metadata = fieldPosting[matchingDocumentRef], + fieldMatch + + if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) { + matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata) + } else { + fieldMatch.add(expandedTerm, field, metadata) + } + + } + + termFieldCache[termField] = true + } + } + } + + /** + * If the presence was required we need to update the requiredMatches field sets. + * We do this after all fields for the term have collected their matches because + * the clause terms presence is required in _any_ of the fields not _all_ of the + * fields. + */ + if (clause.presence === lunr.Query.presence.REQUIRED) { + for (var k = 0; k < clause.fields.length; k++) { + var field = clause.fields[k] + requiredMatches[field] = requiredMatches[field].intersect(clauseMatches) + } + } + } + + /** + * Need to combine the field scoped required and prohibited + * matching documents into a global set of required and prohibited + * matches + */ + var allRequiredMatches = lunr.Set.complete, + allProhibitedMatches = lunr.Set.empty + + for (var i = 0; i < this.fields.length; i++) { + var field = this.fields[i] + + if (requiredMatches[field]) { + allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field]) + } + + if (prohibitedMatches[field]) { + allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field]) + } + } + + var matchingFieldRefs = Object.keys(matchingFields), + results = [], + matches = Object.create(null) + + /* + * If the query is negated (contains only prohibited terms) + * we need to get _all_ fieldRefs currently existing in the + * index. This is only done when we know that the query is + * entirely prohibited terms to avoid any cost of getting all + * fieldRefs unnecessarily. + * + * Additionally, blank MatchData must be created to correctly + * populate the results. + */ + if (query.isNegated()) { + matchingFieldRefs = Object.keys(this.fieldVectors) + + for (var i = 0; i < matchingFieldRefs.length; i++) { + var matchingFieldRef = matchingFieldRefs[i] + var fieldRef = lunr.FieldRef.fromString(matchingFieldRef) + matchingFields[matchingFieldRef] = new lunr.MatchData + } + } + + for (var i = 0; i < matchingFieldRefs.length; i++) { + /* + * Currently we have document fields that match the query, but we + * need to return documents. The matchData and scores are combined + * from multiple fields belonging to the same document. + * + * Scores are calculated by field, using the query vectors created + * above, and combined into a final document score using addition. + */ + var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]), + docRef = fieldRef.docRef + + if (!allRequiredMatches.contains(docRef)) { + continue + } + + if (allProhibitedMatches.contains(docRef)) { + continue + } + + var fieldVector = this.fieldVectors[fieldRef], + score = queryVectors[fieldRef.fieldName].similarity(fieldVector), + docMatch + + if ((docMatch = matches[docRef]) !== undefined) { + docMatch.score += score + docMatch.matchData.combine(matchingFields[fieldRef]) + } else { + var match = { + ref: docRef, + score: score, + matchData: matchingFields[fieldRef] + } + matches[docRef] = match + results.push(match) + } + } + + /* + * Sort the results objects by score, highest first. + */ + return results.sort(function (a, b) { + return b.score - a.score + }) +} + +/** + * Prepares the index for JSON serialization. + * + * The schema for this JSON blob will be described in a + * separate JSON schema file. + * + * @returns {Object} + */ +lunr.Index.prototype.toJSON = function () { + var invertedIndex = Object.keys(this.invertedIndex) + .sort() + .map(function (term) { + return [term, this.invertedIndex[term]] + }, this) + + var fieldVectors = Object.keys(this.fieldVectors) + .map(function (ref) { + return [ref, this.fieldVectors[ref].toJSON()] + }, this) + + return { + version: lunr.version, + fields: this.fields, + fieldVectors: fieldVectors, + invertedIndex: invertedIndex, + pipeline: this.pipeline.toJSON() + } +} + +/** + * Loads a previously serialized lunr.Index + * + * @param {Object} serializedIndex - A previously serialized lunr.Index + * @returns {lunr.Index} + */ +lunr.Index.load = function (serializedIndex) { + var attrs = {}, + fieldVectors = {}, + serializedVectors = serializedIndex.fieldVectors, + invertedIndex = Object.create(null), + serializedInvertedIndex = serializedIndex.invertedIndex, + tokenSetBuilder = new lunr.TokenSet.Builder, + pipeline = lunr.Pipeline.load(serializedIndex.pipeline) + + if (serializedIndex.version != lunr.version) { + lunr.utils.warn("Version mismatch when loading serialised index. Current version of lunr '" + lunr.version + "' does not match serialized index '" + serializedIndex.version + "'") + } + + for (var i = 0; i < serializedVectors.length; i++) { + var tuple = serializedVectors[i], + ref = tuple[0], + elements = tuple[1] + + fieldVectors[ref] = new lunr.Vector(elements) + } + + for (var i = 0; i < serializedInvertedIndex.length; i++) { + var tuple = serializedInvertedIndex[i], + term = tuple[0], + posting = tuple[1] + + tokenSetBuilder.insert(term) + invertedIndex[term] = posting + } + + tokenSetBuilder.finish() + + attrs.fields = serializedIndex.fields + + attrs.fieldVectors = fieldVectors + attrs.invertedIndex = invertedIndex + attrs.tokenSet = tokenSetBuilder.root + attrs.pipeline = pipeline + + return new lunr.Index(attrs) +} +/*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * lunr.Builder performs indexing on a set of documents and + * returns instances of lunr.Index ready for querying. + * + * All configuration of the index is done via the builder, the + * fields to index, the document reference, the text processing + * pipeline and document scoring parameters are all set on the + * builder before indexing. + * + * @constructor + * @property {string} _ref - Internal reference to the document reference field. + * @property {string[]} _fields - Internal reference to the document fields to index. + * @property {object} invertedIndex - The inverted index maps terms to document fields. + * @property {object} documentTermFrequencies - Keeps track of document term frequencies. + * @property {object} documentLengths - Keeps track of the length of documents added to the index. + * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing. + * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing. + * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index. + * @property {number} documentCount - Keeps track of the total number of documents indexed. + * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75. + * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2. + * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space. + * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index. + */ +lunr.Builder = function () { + this._ref = "id" + this._fields = Object.create(null) + this._documents = Object.create(null) + this.invertedIndex = Object.create(null) + this.fieldTermFrequencies = {} + this.fieldLengths = {} + this.tokenizer = lunr.tokenizer + this.pipeline = new lunr.Pipeline + this.searchPipeline = new lunr.Pipeline + this.documentCount = 0 + this._b = 0.75 + this._k1 = 1.2 + this.termIndex = 0 + this.metadataWhitelist = [] +} + +/** + * Sets the document field used as the document reference. Every document must have this field. + * The type of this field in the document should be a string, if it is not a string it will be + * coerced into a string by calling toString. + * + * The default ref is 'id'. + * + * The ref should _not_ be changed during indexing, it should be set before any documents are + * added to the index. Changing it during indexing can lead to inconsistent results. + * + * @param {string} ref - The name of the reference field in the document. + */ +lunr.Builder.prototype.ref = function (ref) { + this._ref = ref +} + +/** + * A function that is used to extract a field from a document. + * + * Lunr expects a field to be at the top level of a document, if however the field + * is deeply nested within a document an extractor function can be used to extract + * the right field for indexing. + * + * @callback fieldExtractor + * @param {object} doc - The document being added to the index. + * @returns {?(string|object|object[])} obj - The object that will be indexed for this field. + * @example Extracting a nested field + * function (doc) { return doc.nested.field } + */ + +/** + * Adds a field to the list of document fields that will be indexed. Every document being + * indexed should have this field. Null values for this field in indexed documents will + * not cause errors but will limit the chance of that document being retrieved by searches. + * + * All fields should be added before adding documents to the index. Adding fields after + * a document has been indexed will have no effect on already indexed documents. + * + * Fields can be boosted at build time. This allows terms within that field to have more + * importance when ranking search results. Use a field boost to specify that matches within + * one field are more important than other fields. + * + * @param {string} fieldName - The name of a field to index in all documents. + * @param {object} attributes - Optional attributes associated with this field. + * @param {number} [attributes.boost=1] - Boost applied to all terms within this field. + * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document. + * @throws {RangeError} fieldName cannot contain unsupported characters '/' + */ +lunr.Builder.prototype.field = function (fieldName, attributes) { + if (/\//.test(fieldName)) { + throw new RangeError ("Field '" + fieldName + "' contains illegal character '/'") + } + + this._fields[fieldName] = attributes || {} +} + +/** + * A parameter to tune the amount of field length normalisation that is applied when + * calculating relevance scores. A value of 0 will completely disable any normalisation + * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b + * will be clamped to the range 0 - 1. + * + * @param {number} number - The value to set for this tuning parameter. + */ +lunr.Builder.prototype.b = function (number) { + if (number < 0) { + this._b = 0 + } else if (number > 1) { + this._b = 1 + } else { + this._b = number + } +} + +/** + * A parameter that controls the speed at which a rise in term frequency results in term + * frequency saturation. The default value is 1.2. Setting this to a higher value will give + * slower saturation levels, a lower value will result in quicker saturation. + * + * @param {number} number - The value to set for this tuning parameter. + */ +lunr.Builder.prototype.k1 = function (number) { + this._k1 = number +} + +/** + * Adds a document to the index. + * + * Before adding fields to the index the index should have been fully setup, with the document + * ref and all fields to index already having been specified. + * + * The document must have a field name as specified by the ref (by default this is 'id') and + * it should have all fields defined for indexing, though null or undefined values will not + * cause errors. + * + * Entire documents can be boosted at build time. Applying a boost to a document indicates that + * this document should rank higher in search results than other documents. + * + * @param {object} doc - The document to add to the index. + * @param {object} attributes - Optional attributes associated with this document. + * @param {number} [attributes.boost=1] - Boost applied to all terms within this document. + */ +lunr.Builder.prototype.add = function (doc, attributes) { + var docRef = doc[this._ref], + fields = Object.keys(this._fields) + + this._documents[docRef] = attributes || {} + this.documentCount += 1 + + for (var i = 0; i < fields.length; i++) { + var fieldName = fields[i], + extractor = this._fields[fieldName].extractor, + field = extractor ? extractor(doc) : doc[fieldName], + tokens = this.tokenizer(field, { + fields: [fieldName] + }), + terms = this.pipeline.run(tokens), + fieldRef = new lunr.FieldRef (docRef, fieldName), + fieldTerms = Object.create(null) + + this.fieldTermFrequencies[fieldRef] = fieldTerms + this.fieldLengths[fieldRef] = 0 + + // store the length of this field for this document + this.fieldLengths[fieldRef] += terms.length + + // calculate term frequencies for this field + for (var j = 0; j < terms.length; j++) { + var term = terms[j] + + if (fieldTerms[term] == undefined) { + fieldTerms[term] = 0 + } + + fieldTerms[term] += 1 + + // add to inverted index + // create an initial posting if one doesn't exist + if (this.invertedIndex[term] == undefined) { + var posting = Object.create(null) + posting["_index"] = this.termIndex + this.termIndex += 1 + + for (var k = 0; k < fields.length; k++) { + posting[fields[k]] = Object.create(null) + } + + this.invertedIndex[term] = posting + } + + // add an entry for this term/fieldName/docRef to the invertedIndex + if (this.invertedIndex[term][fieldName][docRef] == undefined) { + this.invertedIndex[term][fieldName][docRef] = Object.create(null) + } + + // store all whitelisted metadata about this token in the + // inverted index + for (var l = 0; l < this.metadataWhitelist.length; l++) { + var metadataKey = this.metadataWhitelist[l], + metadata = term.metadata[metadataKey] + + if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) { + this.invertedIndex[term][fieldName][docRef][metadataKey] = [] + } + + this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata) + } + } + + } +} + +/** + * Calculates the average document length for this index + * + * @private + */ +lunr.Builder.prototype.calculateAverageFieldLengths = function () { + + var fieldRefs = Object.keys(this.fieldLengths), + numberOfFields = fieldRefs.length, + accumulator = {}, + documentsWithField = {} + + for (var i = 0; i < numberOfFields; i++) { + var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), + field = fieldRef.fieldName + + documentsWithField[field] || (documentsWithField[field] = 0) + documentsWithField[field] += 1 + + accumulator[field] || (accumulator[field] = 0) + accumulator[field] += this.fieldLengths[fieldRef] + } + + var fields = Object.keys(this._fields) + + for (var i = 0; i < fields.length; i++) { + var fieldName = fields[i] + accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName] + } + + this.averageFieldLength = accumulator +} + +/** + * Builds a vector space model of every document using lunr.Vector + * + * @private + */ +lunr.Builder.prototype.createFieldVectors = function () { + var fieldVectors = {}, + fieldRefs = Object.keys(this.fieldTermFrequencies), + fieldRefsLength = fieldRefs.length, + termIdfCache = Object.create(null) + + for (var i = 0; i < fieldRefsLength; i++) { + var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), + fieldName = fieldRef.fieldName, + fieldLength = this.fieldLengths[fieldRef], + fieldVector = new lunr.Vector, + termFrequencies = this.fieldTermFrequencies[fieldRef], + terms = Object.keys(termFrequencies), + termsLength = terms.length + + + var fieldBoost = this._fields[fieldName].boost || 1, + docBoost = this._documents[fieldRef.docRef].boost || 1 + + for (var j = 0; j < termsLength; j++) { + var term = terms[j], + tf = termFrequencies[term], + termIndex = this.invertedIndex[term]._index, + idf, score, scoreWithPrecision + + if (termIdfCache[term] === undefined) { + idf = lunr.idf(this.invertedIndex[term], this.documentCount) + termIdfCache[term] = idf + } else { + idf = termIdfCache[term] + } + + score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf) + score *= fieldBoost + score *= docBoost + scoreWithPrecision = Math.round(score * 1000) / 1000 + // Converts 1.23456789 to 1.234. + // Reducing the precision so that the vectors take up less + // space when serialised. Doing it now so that they behave + // the same before and after serialisation. Also, this is + // the fastest approach to reducing a number's precision in + // JavaScript. + + fieldVector.insert(termIndex, scoreWithPrecision) + } + + fieldVectors[fieldRef] = fieldVector + } + + this.fieldVectors = fieldVectors +} + +/** + * Creates a token set of all tokens in the index using lunr.TokenSet + * + * @private + */ +lunr.Builder.prototype.createTokenSet = function () { + this.tokenSet = lunr.TokenSet.fromArray( + Object.keys(this.invertedIndex).sort() + ) +} + +/** + * Builds the index, creating an instance of lunr.Index. + * + * This completes the indexing process and should only be called + * once all documents have been added to the index. + * + * @returns {lunr.Index} + */ +lunr.Builder.prototype.build = function () { + this.calculateAverageFieldLengths() + this.createFieldVectors() + this.createTokenSet() + + return new lunr.Index({ + invertedIndex: this.invertedIndex, + fieldVectors: this.fieldVectors, + tokenSet: this.tokenSet, + fields: Object.keys(this._fields), + pipeline: this.searchPipeline + }) +} + +/** + * Applies a plugin to the index builder. + * + * A plugin is a function that is called with the index builder as its context. + * Plugins can be used to customise or extend the behaviour of the index + * in some way. A plugin is just a function, that encapsulated the custom + * behaviour that should be applied when building the index. + * + * The plugin function will be called with the index builder as its argument, additional + * arguments can also be passed when calling use. The function will be called + * with the index builder as its context. + * + * @param {Function} plugin The plugin to apply. + */ +lunr.Builder.prototype.use = function (fn) { + var args = Array.prototype.slice.call(arguments, 1) + args.unshift(this) + fn.apply(this, args) +} +/** + * Contains and collects metadata about a matching document. + * A single instance of lunr.MatchData is returned as part of every + * lunr.Index~Result. + * + * @constructor + * @param {string} term - The term this match data is associated with + * @param {string} field - The field in which the term was found + * @param {object} metadata - The metadata recorded about this term in this field + * @property {object} metadata - A cloned collection of metadata associated with this document. + * @see {@link lunr.Index~Result} + */ +lunr.MatchData = function (term, field, metadata) { + var clonedMetadata = Object.create(null), + metadataKeys = Object.keys(metadata || {}) + + // Cloning the metadata to prevent the original + // being mutated during match data combination. + // Metadata is kept in an array within the inverted + // index so cloning the data can be done with + // Array#slice + for (var i = 0; i < metadataKeys.length; i++) { + var key = metadataKeys[i] + clonedMetadata[key] = metadata[key].slice() + } + + this.metadata = Object.create(null) + + if (term !== undefined) { + this.metadata[term] = Object.create(null) + this.metadata[term][field] = clonedMetadata + } +} + +/** + * An instance of lunr.MatchData will be created for every term that matches a + * document. However only one instance is required in a lunr.Index~Result. This + * method combines metadata from another instance of lunr.MatchData with this + * objects metadata. + * + * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one. + * @see {@link lunr.Index~Result} + */ +lunr.MatchData.prototype.combine = function (otherMatchData) { + var terms = Object.keys(otherMatchData.metadata) + + for (var i = 0; i < terms.length; i++) { + var term = terms[i], + fields = Object.keys(otherMatchData.metadata[term]) + + if (this.metadata[term] == undefined) { + this.metadata[term] = Object.create(null) + } + + for (var j = 0; j < fields.length; j++) { + var field = fields[j], + keys = Object.keys(otherMatchData.metadata[term][field]) + + if (this.metadata[term][field] == undefined) { + this.metadata[term][field] = Object.create(null) + } + + for (var k = 0; k < keys.length; k++) { + var key = keys[k] + + if (this.metadata[term][field][key] == undefined) { + this.metadata[term][field][key] = otherMatchData.metadata[term][field][key] + } else { + this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key]) + } + + } + } + } +} + +/** + * Add metadata for a term/field pair to this instance of match data. + * + * @param {string} term - The term this match data is associated with + * @param {string} field - The field in which the term was found + * @param {object} metadata - The metadata recorded about this term in this field + */ +lunr.MatchData.prototype.add = function (term, field, metadata) { + if (!(term in this.metadata)) { + this.metadata[term] = Object.create(null) + this.metadata[term][field] = metadata + return + } + + if (!(field in this.metadata[term])) { + this.metadata[term][field] = metadata + return + } + + var metadataKeys = Object.keys(metadata) + + for (var i = 0; i < metadataKeys.length; i++) { + var key = metadataKeys[i] + + if (key in this.metadata[term][field]) { + this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key]) + } else { + this.metadata[term][field][key] = metadata[key] + } + } +} +/** + * A lunr.Query provides a programmatic way of defining queries to be performed + * against a {@link lunr.Index}. + * + * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method + * so the query object is pre-initialized with the right index fields. + * + * @constructor + * @property {lunr.Query~Clause[]} clauses - An array of query clauses. + * @property {string[]} allFields - An array of all available fields in a lunr.Index. + */ +lunr.Query = function (allFields) { + this.clauses = [] + this.allFields = allFields +} + +/** + * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause. + * + * This allows wildcards to be added to the beginning and end of a term without having to manually do any string + * concatenation. + * + * The wildcard constants can be bitwise combined to select both leading and trailing wildcards. + * + * @constant + * @default + * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour + * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists + * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists + * @see lunr.Query~Clause + * @see lunr.Query#clause + * @see lunr.Query#term + * @example query term with trailing wildcard + * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING }) + * @example query term with leading and trailing wildcard + * query.term('foo', { + * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING + * }) + */ + +lunr.Query.wildcard = new String ("*") +lunr.Query.wildcard.NONE = 0 +lunr.Query.wildcard.LEADING = 1 +lunr.Query.wildcard.TRAILING = 2 + +/** + * Constants for indicating what kind of presence a term must have in matching documents. + * + * @constant + * @enum {number} + * @see lunr.Query~Clause + * @see lunr.Query#clause + * @see lunr.Query#term + * @example query term with required presence + * query.term('foo', { presence: lunr.Query.presence.REQUIRED }) + */ +lunr.Query.presence = { + /** + * Term's presence in a document is optional, this is the default value. + */ + OPTIONAL: 1, + + /** + * Term's presence in a document is required, documents that do not contain + * this term will not be returned. + */ + REQUIRED: 2, + + /** + * Term's presence in a document is prohibited, documents that do contain + * this term will not be returned. + */ + PROHIBITED: 3 +} + +/** + * A single clause in a {@link lunr.Query} contains a term and details on how to + * match that term against a {@link lunr.Index}. + * + * @typedef {Object} lunr.Query~Clause + * @property {string[]} fields - The fields in an index this clause should be matched against. + * @property {number} [boost=1] - Any boost that should be applied when matching this clause. + * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be. + * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline. + * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended. + * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents. + */ + +/** + * Adds a {@link lunr.Query~Clause} to this query. + * + * Unless the clause contains the fields to be matched all fields will be matched. In addition + * a default boost of 1 is applied to the clause. + * + * @param {lunr.Query~Clause} clause - The clause to add to this query. + * @see lunr.Query~Clause + * @returns {lunr.Query} + */ +lunr.Query.prototype.clause = function (clause) { + if (!('fields' in clause)) { + clause.fields = this.allFields + } + + if (!('boost' in clause)) { + clause.boost = 1 + } + + if (!('usePipeline' in clause)) { + clause.usePipeline = true + } + + if (!('wildcard' in clause)) { + clause.wildcard = lunr.Query.wildcard.NONE + } + + if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) { + clause.term = "*" + clause.term + } + + if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) { + clause.term = "" + clause.term + "*" + } + + if (!('presence' in clause)) { + clause.presence = lunr.Query.presence.OPTIONAL + } + + this.clauses.push(clause) + + return this +} + +/** + * A negated query is one in which every clause has a presence of + * prohibited. These queries require some special processing to return + * the expected results. + * + * @returns boolean + */ +lunr.Query.prototype.isNegated = function () { + for (var i = 0; i < this.clauses.length; i++) { + if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) { + return false + } + } + + return true +} + +/** + * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause} + * to the list of clauses that make up this query. + * + * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion + * to a token or token-like string should be done before calling this method. + * + * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an + * array, each term in the array will share the same options. + * + * @param {object|object[]} term - The term(s) to add to the query. + * @param {object} [options] - Any additional properties to add to the query clause. + * @returns {lunr.Query} + * @see lunr.Query#clause + * @see lunr.Query~Clause + * @example adding a single term to a query + * query.term("foo") + * @example adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard + * query.term("foo", { + * fields: ["title"], + * boost: 10, + * wildcard: lunr.Query.wildcard.TRAILING + * }) + * @example using lunr.tokenizer to convert a string to tokens before using them as terms + * query.term(lunr.tokenizer("foo bar")) + */ +lunr.Query.prototype.term = function (term, options) { + if (Array.isArray(term)) { + term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this) + return this + } + + var clause = options || {} + clause.term = term.toString() + + this.clause(clause) + + return this +} +lunr.QueryParseError = function (message, start, end) { + this.name = "QueryParseError" + this.message = message + this.start = start + this.end = end +} + +lunr.QueryParseError.prototype = new Error +lunr.QueryLexer = function (str) { + this.lexemes = [] + this.str = str + this.length = str.length + this.pos = 0 + this.start = 0 + this.escapeCharPositions = [] +} + +lunr.QueryLexer.prototype.run = function () { + var state = lunr.QueryLexer.lexText + + while (state) { + state = state(this) + } +} + +lunr.QueryLexer.prototype.sliceString = function () { + var subSlices = [], + sliceStart = this.start, + sliceEnd = this.pos + + for (var i = 0; i < this.escapeCharPositions.length; i++) { + sliceEnd = this.escapeCharPositions[i] + subSlices.push(this.str.slice(sliceStart, sliceEnd)) + sliceStart = sliceEnd + 1 + } + + subSlices.push(this.str.slice(sliceStart, this.pos)) + this.escapeCharPositions.length = 0 + + return subSlices.join('') +} + +lunr.QueryLexer.prototype.emit = function (type) { + this.lexemes.push({ + type: type, + str: this.sliceString(), + start: this.start, + end: this.pos + }) + + this.start = this.pos +} + +lunr.QueryLexer.prototype.escapeCharacter = function () { + this.escapeCharPositions.push(this.pos - 1) + this.pos += 1 +} + +lunr.QueryLexer.prototype.next = function () { + if (this.pos >= this.length) { + return lunr.QueryLexer.EOS + } + + var char = this.str.charAt(this.pos) + this.pos += 1 + return char +} + +lunr.QueryLexer.prototype.width = function () { + return this.pos - this.start +} + +lunr.QueryLexer.prototype.ignore = function () { + if (this.start == this.pos) { + this.pos += 1 + } + + this.start = this.pos +} + +lunr.QueryLexer.prototype.backup = function () { + this.pos -= 1 +} + +lunr.QueryLexer.prototype.acceptDigitRun = function () { + var char, charCode + + do { + char = this.next() + charCode = char.charCodeAt(0) + } while (charCode > 47 && charCode < 58) + + if (char != lunr.QueryLexer.EOS) { + this.backup() + } +} + +lunr.QueryLexer.prototype.more = function () { + return this.pos < this.length +} + +lunr.QueryLexer.EOS = 'EOS' +lunr.QueryLexer.FIELD = 'FIELD' +lunr.QueryLexer.TERM = 'TERM' +lunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE' +lunr.QueryLexer.BOOST = 'BOOST' +lunr.QueryLexer.PRESENCE = 'PRESENCE' + +lunr.QueryLexer.lexField = function (lexer) { + lexer.backup() + lexer.emit(lunr.QueryLexer.FIELD) + lexer.ignore() + return lunr.QueryLexer.lexText +} + +lunr.QueryLexer.lexTerm = function (lexer) { + if (lexer.width() > 1) { + lexer.backup() + lexer.emit(lunr.QueryLexer.TERM) + } + + lexer.ignore() + + if (lexer.more()) { + return lunr.QueryLexer.lexText + } +} + +lunr.QueryLexer.lexEditDistance = function (lexer) { + lexer.ignore() + lexer.acceptDigitRun() + lexer.emit(lunr.QueryLexer.EDIT_DISTANCE) + return lunr.QueryLexer.lexText +} + +lunr.QueryLexer.lexBoost = function (lexer) { + lexer.ignore() + lexer.acceptDigitRun() + lexer.emit(lunr.QueryLexer.BOOST) + return lunr.QueryLexer.lexText +} + +lunr.QueryLexer.lexEOS = function (lexer) { + if (lexer.width() > 0) { + lexer.emit(lunr.QueryLexer.TERM) + } +} + +// This matches the separator used when tokenising fields +// within a document. These should match otherwise it is +// not possible to search for some tokens within a document. +// +// It is possible for the user to change the separator on the +// tokenizer so it _might_ clash with any other of the special +// characters already used within the search string, e.g. :. +// +// This means that it is possible to change the separator in +// such a way that makes some words unsearchable using a search +// string. +lunr.QueryLexer.termSeparator = lunr.tokenizer.separator + +lunr.QueryLexer.lexText = function (lexer) { + while (true) { + var char = lexer.next() + + if (char == lunr.QueryLexer.EOS) { + return lunr.QueryLexer.lexEOS + } + + // Escape character is '\' + if (char.charCodeAt(0) == 92) { + lexer.escapeCharacter() + continue + } + + if (char == ":") { + return lunr.QueryLexer.lexField + } + + if (char == "~") { + lexer.backup() + if (lexer.width() > 0) { + lexer.emit(lunr.QueryLexer.TERM) + } + return lunr.QueryLexer.lexEditDistance + } + + if (char == "^") { + lexer.backup() + if (lexer.width() > 0) { + lexer.emit(lunr.QueryLexer.TERM) + } + return lunr.QueryLexer.lexBoost + } + + // "+" indicates term presence is required + // checking for length to ensure that only + // leading "+" are considered + if (char == "+" && lexer.width() === 1) { + lexer.emit(lunr.QueryLexer.PRESENCE) + return lunr.QueryLexer.lexText + } + + // "-" indicates term presence is prohibited + // checking for length to ensure that only + // leading "-" are considered + if (char == "-" && lexer.width() === 1) { + lexer.emit(lunr.QueryLexer.PRESENCE) + return lunr.QueryLexer.lexText + } + + if (char.match(lunr.QueryLexer.termSeparator)) { + return lunr.QueryLexer.lexTerm + } + } +} + +lunr.QueryParser = function (str, query) { + this.lexer = new lunr.QueryLexer (str) + this.query = query + this.currentClause = {} + this.lexemeIdx = 0 +} + +lunr.QueryParser.prototype.parse = function () { + this.lexer.run() + this.lexemes = this.lexer.lexemes + + var state = lunr.QueryParser.parseClause + + while (state) { + state = state(this) + } + + return this.query +} + +lunr.QueryParser.prototype.peekLexeme = function () { + return this.lexemes[this.lexemeIdx] +} + +lunr.QueryParser.prototype.consumeLexeme = function () { + var lexeme = this.peekLexeme() + this.lexemeIdx += 1 + return lexeme +} + +lunr.QueryParser.prototype.nextClause = function () { + var completedClause = this.currentClause + this.query.clause(completedClause) + this.currentClause = {} +} + +lunr.QueryParser.parseClause = function (parser) { + var lexeme = parser.peekLexeme() + + if (lexeme == undefined) { + return + } + + switch (lexeme.type) { + case lunr.QueryLexer.PRESENCE: + return lunr.QueryParser.parsePresence + case lunr.QueryLexer.FIELD: + return lunr.QueryParser.parseField + case lunr.QueryLexer.TERM: + return lunr.QueryParser.parseTerm + default: + var errorMessage = "expected either a field or a term, found " + lexeme.type + + if (lexeme.str.length >= 1) { + errorMessage += " with value '" + lexeme.str + "'" + } + + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } +} + +lunr.QueryParser.parsePresence = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + switch (lexeme.str) { + case "-": + parser.currentClause.presence = lunr.Query.presence.PROHIBITED + break + case "+": + parser.currentClause.presence = lunr.Query.presence.REQUIRED + break + default: + var errorMessage = "unrecognised presence operator'" + lexeme.str + "'" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + var errorMessage = "expecting term or field, found nothing" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.FIELD: + return lunr.QueryParser.parseField + case lunr.QueryLexer.TERM: + return lunr.QueryParser.parseTerm + default: + var errorMessage = "expecting term or field, found '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseField = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + if (parser.query.allFields.indexOf(lexeme.str) == -1) { + var possibleFields = parser.query.allFields.map(function (f) { return "'" + f + "'" }).join(', '), + errorMessage = "unrecognised field '" + lexeme.str + "', possible fields: " + possibleFields + + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + parser.currentClause.fields = [lexeme.str] + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + var errorMessage = "expecting term, found nothing" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + return lunr.QueryParser.parseTerm + default: + var errorMessage = "expecting term, found '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseTerm = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + parser.currentClause.term = lexeme.str.toLowerCase() + + if (lexeme.str.indexOf("*") != -1) { + parser.currentClause.usePipeline = false + } + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + parser.nextClause() + return + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + parser.nextClause() + return lunr.QueryParser.parseTerm + case lunr.QueryLexer.FIELD: + parser.nextClause() + return lunr.QueryParser.parseField + case lunr.QueryLexer.EDIT_DISTANCE: + return lunr.QueryParser.parseEditDistance + case lunr.QueryLexer.BOOST: + return lunr.QueryParser.parseBoost + case lunr.QueryLexer.PRESENCE: + parser.nextClause() + return lunr.QueryParser.parsePresence + default: + var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseEditDistance = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + var editDistance = parseInt(lexeme.str, 10) + + if (isNaN(editDistance)) { + var errorMessage = "edit distance must be numeric" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + parser.currentClause.editDistance = editDistance + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + parser.nextClause() + return + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + parser.nextClause() + return lunr.QueryParser.parseTerm + case lunr.QueryLexer.FIELD: + parser.nextClause() + return lunr.QueryParser.parseField + case lunr.QueryLexer.EDIT_DISTANCE: + return lunr.QueryParser.parseEditDistance + case lunr.QueryLexer.BOOST: + return lunr.QueryParser.parseBoost + case lunr.QueryLexer.PRESENCE: + parser.nextClause() + return lunr.QueryParser.parsePresence + default: + var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseBoost = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + var boost = parseInt(lexeme.str, 10) + + if (isNaN(boost)) { + var errorMessage = "boost must be numeric" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + parser.currentClause.boost = boost + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + parser.nextClause() + return + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + parser.nextClause() + return lunr.QueryParser.parseTerm + case lunr.QueryLexer.FIELD: + parser.nextClause() + return lunr.QueryParser.parseField + case lunr.QueryLexer.EDIT_DISTANCE: + return lunr.QueryParser.parseEditDistance + case lunr.QueryLexer.BOOST: + return lunr.QueryParser.parseBoost + case lunr.QueryLexer.PRESENCE: + parser.nextClause() + return lunr.QueryParser.parsePresence + default: + var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + + /** + * export the module via AMD, CommonJS or as a browser global + * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js + */ + ;(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(factory) + } else if (typeof exports === 'object') { + /** + * Node. Does not work with strict CommonJS, but + * only CommonJS-like environments that support module.exports, + * like Node. + */ + module.exports = factory() + } else { + // Browser globals (root is window) + root.lunr = factory() + } + }(this, function () { + /** + * Just return a value to define the module export. + * This example returns an object, but the module + * can return a function as the exported value. + */ + return lunr + })) +})(); diff --git a/search/main.js b/search/main.js new file mode 100644 index 000000000..a5e469d7c --- /dev/null +++ b/search/main.js @@ -0,0 +1,109 @@ +function getSearchTermFromLocation() { + var sPageURL = window.location.search.substring(1); + var sURLVariables = sPageURL.split('&'); + for (var i = 0; i < sURLVariables.length; i++) { + var sParameterName = sURLVariables[i].split('='); + if (sParameterName[0] == 'q') { + return decodeURIComponent(sParameterName[1].replace(/\+/g, '%20')); + } + } +} + +function joinUrl (base, path) { + if (path.substring(0, 1) === "/") { + // path starts with `/`. Thus it is absolute. + return path; + } + if (base.substring(base.length-1) === "/") { + // base ends with `/` + return base + path; + } + return base + "/" + path; +} + +function escapeHtml (value) { + return value.replace(/&/g, '&') + .replace(/"/g, '"') + .replace(//g, '>'); +} + +function formatResult (location, title, summary) { + return ''; +} + +function displayResults (results) { + var search_results = document.getElementById("mkdocs-search-results"); + while (search_results.firstChild) { + search_results.removeChild(search_results.firstChild); + } + if (results.length > 0){ + for (var i=0; i < results.length; i++){ + var result = results[i]; + var html = formatResult(result.location, result.title, result.summary); + search_results.insertAdjacentHTML('beforeend', html); + } + } else { + var noResultsText = search_results.getAttribute('data-no-results-text'); + if (!noResultsText) { + noResultsText = "No results found"; + } + search_results.insertAdjacentHTML('beforeend', '

' + noResultsText + '

'); + } +} + +function doSearch () { + var query = document.getElementById('mkdocs-search-query').value; + if (query.length > min_search_length) { + if (!window.Worker) { + displayResults(search(query)); + } else { + searchWorker.postMessage({query: query}); + } + } else { + // Clear results for short queries + displayResults([]); + } +} + +function initSearch () { + var search_input = document.getElementById('mkdocs-search-query'); + if (search_input) { + search_input.addEventListener("keyup", doSearch); + } + var term = getSearchTermFromLocation(); + if (term) { + search_input.value = term; + doSearch(); + } +} + +function onWorkerMessage (e) { + if (e.data.allowSearch) { + initSearch(); + } else if (e.data.results) { + var results = e.data.results; + displayResults(results); + } else if (e.data.config) { + min_search_length = e.data.config.min_search_length-1; + } +} + +if (!window.Worker) { + console.log('Web Worker API not supported'); + // load index in main thread + $.getScript(joinUrl(base_url, "search/worker.js")).done(function () { + console.log('Loaded worker'); + init(); + window.postMessage = function (msg) { + onWorkerMessage({data: msg}); + }; + }).fail(function (jqxhr, settings, exception) { + console.error('Could not load worker.js'); + }); +} else { + // Wrap search in a web worker + var searchWorker = new Worker(joinUrl(base_url, "search/worker.js")); + searchWorker.postMessage({init: true}); + searchWorker.onmessage = onWorkerMessage; +} diff --git a/search/search_index.json b/search/search_index.json new file mode 100644 index 000000000..251d21410 --- /dev/null +++ b/search/search_index.json @@ -0,0 +1 @@ +{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Welcome to SFZFormat.com! This is the main reference point for anyone who wants to create virtual musical instruments using the SFZ format. The SFZ format is a file format to define how a collection of samples 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. What SFZ is not To clarify, the term SFZ as used on this site does not mean a sforzando dynamic marking, and it also is not the same thing as a soundfont. Soundfonts are a completely different file format which includes both the samples and the definitions of sample behavior in the same binary file, while SFZ is a file format which only defines the behavior of musical instruments and does not include the sample content. SF2 may look a bit like SFZ visually, but that's a coincidence. Features A .sfz definition file is just a text file. Consequently, it can be created by using any text editor. Samples of any bit depth (8/16/24/32-bit) and sample rate (44.1 kHz, 48 kHz, 384 kHz etc.), mono or stereo. Compressed and uncompressed sample formats can both be used within the same instrument. Loops embedded in sample files or configured in the SFZ. Velocity layers, round robins, keyboard splits and layers. Sample playback based on MIDI controllers (note on, note off, continuous controllers, pitch bend, channel - and polyphonic aftertouch, keyboard switches) and internal generators (random, sequence counters). Unidirectional and bidirectional exclusive regions (mute groups). Release trigger regions with release trigger attenuation control. Crossfade layer controls. Ability to distinguish legato notes from first notes. Envelope and LFO modulation sources with possible targets including volume, pitch, filter cutoff and more. Requirements To make use of the SFZ format requires three things: Samples SFZ player SFZ file which tells the player how to use the samples. The SFZ file itself can be created using any text editor, though for more complex cases with hundreds or thousands of samples, additional tools can make this easier - some people use spreadsheets, and there are also dedicated SFZ creation tools . Here's a basic SFZ file you can copy to start your own. Making Instruments Text guides on how to make a simple instrument, covering the essential opcodes Drum basics - covers global , group and region headers, sample , key , lovel / hivel , amp_velcurve_N , seq_length , seq_position and lorand / hirand . Sustained note basics - using a flute as an example. Adds lokey / hikey , pitch_keycenter , xfin / xfout , locc / hicc , keyswitching , group , off_by and off_mode . Some more advanced topics Vibrato - typical string vibrato, humanized vibrato, asymmetrical vibrato, and even filter wobble. Legato - simulated legato and portamento as well as true sampled legato. Cymbal muting - using group , off_by , off_mode and polyphony to make hi-hat and cymbal notes mute previous notes in a musically useful way. Brush stirs - two different approaches to brushed drum techniques which produce a continuous sound rather than a hit.","title":"Home"},{"location":"#welcome-to-sfzformatcom","text":"This is the main reference point for anyone who wants to create virtual musical instruments using the SFZ format. The SFZ format is a file format to define how a collection of samples 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.","title":"Welcome to SFZFormat.com!"},{"location":"#what-sfz-is-not","text":"To clarify, the term SFZ as used on this site does not mean a sforzando dynamic marking, and it also is not the same thing as a soundfont. Soundfonts are a completely different file format which includes both the samples and the definitions of sample behavior in the same binary file, while SFZ is a file format which only defines the behavior of musical instruments and does not include the sample content. SF2 may look a bit like SFZ visually, but that's a coincidence.","title":"What SFZ is not"},{"location":"#features","text":"A .sfz definition file is just a text file. Consequently, it can be created by using any text editor. Samples of any bit depth (8/16/24/32-bit) and sample rate (44.1 kHz, 48 kHz, 384 kHz etc.), mono or stereo. Compressed and uncompressed sample formats can both be used within the same instrument. Loops embedded in sample files or configured in the SFZ. Velocity layers, round robins, keyboard splits and layers. Sample playback based on MIDI controllers (note on, note off, continuous controllers, pitch bend, channel - and polyphonic aftertouch, keyboard switches) and internal generators (random, sequence counters). Unidirectional and bidirectional exclusive regions (mute groups). Release trigger regions with release trigger attenuation control. Crossfade layer controls. Ability to distinguish legato notes from first notes. Envelope and LFO modulation sources with possible targets including volume, pitch, filter cutoff and more.","title":"Features"},{"location":"#requirements","text":"To make use of the SFZ format requires three things: Samples SFZ player SFZ file which tells the player how to use the samples. The SFZ file itself can be created using any text editor, though for more complex cases with hundreds or thousands of samples, additional tools can make this easier - some people use spreadsheets, and there are also dedicated SFZ creation tools . Here's a basic SFZ file you can copy to start your own.","title":"Requirements"},{"location":"#making-instruments","text":"Text guides on how to make a simple instrument, covering the essential opcodes Drum basics - covers global , group and region headers, sample , key , lovel / hivel , amp_velcurve_N , seq_length , seq_position and lorand / hirand . Sustained note basics - using a flute as an example. Adds lokey / hikey , pitch_keycenter , xfin / xfout , locc / hicc , keyswitching , group , off_by and off_mode . Some more advanced topics Vibrato - typical string vibrato, humanized vibrato, asymmetrical vibrato, and even filter wobble. Legato - simulated legato and portamento as well as true sampled legato. Cymbal muting - using group , off_by , off_mode and polyphony to make hi-hat and cymbal notes mute previous notes in a musically useful way. Brush stirs - two different approaches to brushed drum techniques which produce a continuous sound rather than a hit.","title":"Making Instruments"},{"location":"versions/","text":"SFZ v1 The first version of the format was originally published on the rgc:audio website , which is the most supported by sfz related software. SFZ v2 The SFZ v2 standard has never been clearly set down anywhere. For the purpose of this website, anything included in the Simon Cann's Cakewalk Synthesizers is considered SFZ v2, regardless of which SFZ players it might or might not be actually implemented in. If something works in ARIA but not in any Cakewalk products, that's considered an ARIA extension. Cakewalk Synthesizers is not a recent book, and was not intended to be a standards document, but rather a manual for users of Cakewalk products. So, if you are developing a new SFZ player, do not feel obligated to support all opcodes , headers etc. listed on this website - instead, use your judgment. Extensions ARIA ARIA also adds some extended MIDI CCs in addition to those already added by SFZ 2, and XML instrument banks as a way of organizing multiple SFZ instruments and configuring graphical user interfaces. See also the Plogue forum's ARIA's Custom opcodes post.","title":"Versions"},{"location":"versions/#sfz-v1","text":"The first version of the format was originally published on the rgc:audio website , which is the most supported by sfz related software.","title":"SFZ v1"},{"location":"versions/#sfz-v2","text":"The SFZ v2 standard has never been clearly set down anywhere. For the purpose of this website, anything included in the Simon Cann's Cakewalk Synthesizers is considered SFZ v2, regardless of which SFZ players it might or might not be actually implemented in. If something works in ARIA but not in any Cakewalk products, that's considered an ARIA extension. Cakewalk Synthesizers is not a recent book, and was not intended to be a standards document, but rather a manual for users of Cakewalk products. So, if you are developing a new SFZ player, do not feel obligated to support all opcodes , headers etc. listed on this website - instead, use your judgment.","title":"SFZ v2"},{"location":"versions/#extensions","text":"","title":"Extensions"},{"location":"versions/#aria","text":"ARIA also adds some extended MIDI CCs in addition to those already added by SFZ 2, and XML instrument banks as a way of organizing multiple SFZ instruments and configuring graphical user interfaces. See also the Plogue forum's ARIA's Custom opcodes post.","title":"ARIA"},{"location":"extensions/midi_ccs/","text":"In the MIDI specification, MIDI Control Change Messages can have numbers from 0 to 127. SFZ 2 and ARIA add some special CCs numbered 128 and above. The additions in SFZ 2 are: pitch bend: 128 channel aftertouch: 129 polyphonic aftertouch: 130 note on velocity: 131 note off velocity: 132 keyboard note number: 133 keyboard note gate: 134 unipolar random: 135 bipolar random: 136 alternate: 137 Values such as note on velocity and MIDI note number, when used as CCs, do not behave exactly the same as note number or velocity of the note itself, in some contexts. This is because once a note is played, its MIDI note number and note on velocity remain the same for that note. MIDI CC, however, is shared across the entire instrument, and this means another note on or note off event will change CC 131, 132 and 133. This can give unexpected results when using these CCs to adjust keytracking or velocity tracking of various parameters, especially in polyphonic instruments with long-sustaining sounds. Note gate is an on/off - it's 0 when no MIDI notes are pressed, and 1 when at least one note is currently pressed. Unipolar random is from 0 to 1. Bipolar random is from -1 to 1. Alternate changes between 0 and 1 every time a note on message is received. Some of the parameters, such as aftertouch and note off velocity, are rarely supported by modern MIDI hardware controllers, though they are part of the MIDI specification and can be edited in DAWs. Many MIDI keyboards will send a default note off velocity, such as 64, with every note off event regardless of how fast the key was actually moving at the time. Anything above 137 is not specified in the SFZ 2 standard and strictly engine-dependent. ARIA adds more. Some of these might not work properly in all DAWs. keydelta: 140 keydelta absolute: 141 host tempo (bpm): 142 host transport status (0 is off, 1 on in non-loop mode, 2 is playing in loop mode): 143 host sample rate: 144 time since the engine has been up: 145 current time signature numerator: 146 current time signature denominator: 147 position since song start in PPQ (pulses per quarter note): 148 position since bar start in PPQ: 149 time since the instrument has been up: 150 time since last key on (in seconds): 151 time since last key off (in seconds): 152 number of keys currently down: 153 number of currently active voices: 154 last playahead (offset) of any sample in the instrument: 155 Practical Considerations While all the \"regular\" CCs have the same range of 0 to 127, and some of these extended CCs behave the same way (for example CC 131 or note on velocity), others do not. CC136 or bipolar random can have a negative value, for example. Many will often have non-integer values. These CCs will not always behave the same as others and have not been thoroughly documented. Some of the additional CCs are shared across all instances of the ARIA engine currently running, for example the host tempo. Others can have concurrently have a different value for different instances or different instruments concurrently, for example keydelta. CC 140 and 141 are measured in half-steps. So, the below will result in an envelope with a depth of 100 cents per half-step. This is typically what would be used for portamento glides. eg07_pitch_oncc140=100 Using locc and hicc with CC 140 and 141 does not work the same as for other CCs. However, they can be used with lohdcc and hihdcc. For example, the below will restrict a region to play only when the interval between the current note and the previous one is an octave, ascending. Whether the decimal is necessary needs to be tested, but the below is confirmed to work. lohdcc140=12 hihdcc140=12.1 Using lohdcc alone does not work and will result in the region not triggering, but adding hihdcc with a high value will. The below example was tested in an instrument with a range of less than two octaves, and there works as a way to trigger some regions only when the interval is more than one octave in either direction. lohdcc141=12.1 hihdcc141=24 CC 151 is reset as soon as a new note is hit, so it cannot be used to measure the time between the previous note and the current one, for adaptive legato speed purposes. It can, however, be used to control the triggering of release samples. Like CC140 and CC141, it also requires using hdcc to function properly - which makes sense, as time since note-on as measured in seconds usually involves fractions of a second in real scenarios. In Cakewalk Dimension Pro, 140 is bitred and 141 is decim.","title":"Extended MIDI CCs"},{"location":"extensions/midi_ccs/#practical-considerations","text":"While all the \"regular\" CCs have the same range of 0 to 127, and some of these extended CCs behave the same way (for example CC 131 or note on velocity), others do not. CC136 or bipolar random can have a negative value, for example. Many will often have non-integer values. These CCs will not always behave the same as others and have not been thoroughly documented. Some of the additional CCs are shared across all instances of the ARIA engine currently running, for example the host tempo. Others can have concurrently have a different value for different instances or different instruments concurrently, for example keydelta. CC 140 and 141 are measured in half-steps. So, the below will result in an envelope with a depth of 100 cents per half-step. This is typically what would be used for portamento glides. eg07_pitch_oncc140=100 Using locc and hicc with CC 140 and 141 does not work the same as for other CCs. However, they can be used with lohdcc and hihdcc. For example, the below will restrict a region to play only when the interval between the current note and the previous one is an octave, ascending. Whether the decimal is necessary needs to be tested, but the below is confirmed to work. lohdcc140=12 hihdcc140=12.1 Using lohdcc alone does not work and will result in the region not triggering, but adding hihdcc with a high value will. The below example was tested in an instrument with a range of less than two octaves, and there works as a way to trigger some regions only when the interval is more than one octave in either direction. lohdcc141=12.1 hihdcc141=24 CC 151 is reset as soon as a new note is hit, so it cannot be used to measure the time between the previous note and the current one, for adaptive legato speed purposes. It can, however, be used to control the triggering of release samples. Like CC140 and CC141, it also requires using hdcc to function properly - which makes sense, as time since note-on as measured in seconds usually involves fractions of a second in real scenarios. In Cakewalk Dimension Pro, 140 is bitred and 141 is decim.","title":"Practical Considerations"},{"location":"extensions/aria/xml_instrument_bank/","text":"An ARIA-specific element, an XML bank is a collection of several SFZ instruments in one instrument bank. Though technically not part of the SFZ format, it is relevant to instrument creation for ARIA. The #define directive can also be used at the bank level, but otherwise there is no SFZ there. XML banks for ARIA must be digitally signed by Plogue - contact them if interested in creating instruments with banks and graphical user interfaces.","title":"XML instrument bank"},{"location":"headers/","text":"SFZ files are subdivided into sections by headers. The region header is the most essential, and is the basic unit from which instruments are constructed. A group is an optional organizational level containing one or more regions. The global header (one per file) contains opcodes which apply to all regions in the file. The master header is an extra level added inbetween group and global for the ARIA player. So, the global/group/region or global/master/group/region hierarchy contains the opcodes which define which samples are played, when they are to be played, and how. The control header would be found at the beginning of the file and includes special opcodes for setting up MIDI CC controls. The curve headers, when used, are normally found at the end of the file, and define the curves used for shaping envelopes, parameter response etc. Header Version < region > SFZ v1 < group > SFZ v1 < control > SFZ v2 < global > SFZ v2 < curve > SFZ v2 < effect > SFZ v2 < master > ARIA < midi > ARIA < sample > SFZ v2","title":"Headers"},{"location":"headers/control/","text":"SFZ 2 header which should come before \u2039global\u203a in the file, and can contain the following special directives, which should not be used under other headers: #define default_path note_offset octave_offset label_ccN set_ccN Multiple \u2039control\u203a headers can be used in one file, and this can be very useful when specifying default_path. This path will then be used for all regions until another \u2039control\u203a header is encountered. Whether settings other than default_path should also be reset by a new control header is not entirely clear. As implemented in ARIA, a new control header resets default_path only and not other control settings, and this does not seem unreasonable. See also ARIA Extensions .","title":"\u2039control\u203a"},{"location":"headers/curve/","text":"One curve header is used to define each curve. The values for various points along the curve can then be set, from v000 to v127 . The default is v000=0 and v127=1 . Any points along the curve not defined explicitly will be interpolated linearly between points which are defined. There are default built-in curves in ARIA. If no curve is specified for a modulation, curve 0 is used. The built-in ARIA curves are: Default curve (number 0). linear, from 0 to 1 1. bipolar, from -1 to 1 (useful for things such as tuning and panning, used by CC10 panning by default) 2. linear inverted, from 1 to 0 3. bipolar inverted, from 1 to -1 4. concave (used for CC7 volume tracking and amp_veltrack) 5. Xfin power curve 6. Xfout power curve These can be overwritten, but as they are used by the engine for their normal functions, it's safer to use curve_index numbers of 7 and above for custom curves. Curve_index in ARIA can be any integer from 0 to 255. Examples curve_index=17 v000=0 v095=1 v127=1 curve_index=18 v000=0 v095=0.5 v127=1 Here's a scenario using one MIDI CC to control the amplitude of two samples along two different curves. amplitude_oncc110=100 amplitude_curvecc110=9 sample=bigger.wav amplitude_oncc110=100 amplitude_curvecc110=10 sample=smaller.wav //The curves for the room ambiences - bigger room first curve_index=9 v000=0 v063=0 v127=1 curve_index=10 v000=0 v063=1 v127=0.1 And how to use the default curve 1 to create a tuning control which goes down and up, with the pitch unmodulated when the control is in the middle. pitch_oncc27=100 pitch_curvecc27=1","title":"\u2039curve\u203a"},{"location":"headers/curve/#examples","text":"curve_index=17 v000=0 v095=1 v127=1 curve_index=18 v000=0 v095=0.5 v127=1 Here's a scenario using one MIDI CC to control the amplitude of two samples along two different curves. amplitude_oncc110=100 amplitude_curvecc110=9 sample=bigger.wav amplitude_oncc110=100 amplitude_curvecc110=10 sample=smaller.wav //The curves for the room ambiences - bigger room first curve_index=9 v000=0 v063=0 v127=1 curve_index=10 v000=0 v063=1 v127=0.1 And how to use the default curve 1 to create a tuning control which goes down and up, with the pitch unmodulated when the control is in the middle. pitch_oncc27=100 pitch_curvecc27=1","title":"Examples"},{"location":"headers/effect/","text":"In SFZ v1 only effect1 and effect2 opcodes was available and only at \u2039region\u203a level. From SFZ v2 this header was added together with the addition of effect3 and effect4 opcodes also to modulate the related bus. Other opcodes listed in the book are bus , type and dsp_order . The specifics of what can be used under this header differ widely between SFZ players. The information on available effects and how to control them in ARIA and Cakewalk products can be found on the type page.","title":"\u2039effect\u203a"},{"location":"headers/global/","text":"If the same opcode defined in global is also defined in group or region, the group or region setting is used. This means global can be used to set values which are common for most regions in the SFZ file, but if a few regions need something different, they can override the global setting at a lower level. Here is a typical example with two opcodes set at the global header level, some at the group level, and others at the region level. The seq_length (number of round robins) is set to 4 in global, but as the fourth dynamic layer only contains three samples, seq_length is set to for that layer at the group header level. It is possible to have multiple global headers in one file, at least under ARIA. As with any other header, anything specified under a global header is active until another global header is encountered in the SFZ file. loop_mode=one_shot seq_length=4 key=36 hivel=31 amp_velcurve_31=1 seq_position=1 sample=kick_vl1_rr1.wav seq_position=2 sample=kick_vl1_rr2.wav seq_position=3 sample=kick_vl1_rr3.wav seq_position=4 sample=kick_vl1_rr4.wav key=36 lovel=32 hivel=63 amp_velcurve_63=1 seq_position=1 sample=kick_vl2_rr1.wav seq_position=2 sample=kick_vl2_rr2.wav seq_position=3 sample=kick_vl2_rr3.wav seq_position=4 sample=kick_vl2_rr4.wav key=36 lovel=64 hivel=95 amp_velcurve_95=1 seq_position=1 sample=kick_vl3_rr1.wav seq_position=2 sample=kick_vl3_rr2.wav seq_position=3 sample=kick_vl3_rr3.wav seq_position=4 sample=kick_vl3_rr4.wav key=36 lovel=96 seq_length=3 seq_position=1 sample=kick_vl4_rr1.wav seq_position=2 sample=kick_vl4_rr2.wav seq_position=3 sample=kick_vl4_rr3.wav","title":"\u2039global\u203a"},{"location":"headers/group/","text":"The group header is different than the group opcode, and it's important to avoid confusing the two. ARIA adds the polyphony_group opcode as an alias for group, to reduce this confusion. Groups allow entering common parameters for multiple regions. A group is defined with the \u2039group\u203a opcode, and the parameters enumerated on it last till the next group opcode, or till the end of the file. ampeg_attack=0.04 ampeg_release=0.45 sample=trumpet_pp_c4.wav key=c4 sample=trumpet_pp_c#4.wav key=c#4 sample=trumpet_pp_d4.wav key=d4 sample=trumpet_pp_d#4.wav key=d#4 ampeg_attack=0.03 ampeg_release=0.42 sample=trumpet_pp_e4.wav key=e4 sample=trumpet_pp_f4.wav key=f4 If the same opcode is defined at both the group and region levels, the region setting overrides the group setting and is used. If an opcode is defined under the global level and group level but not region, the group setting overrides the global setting. For example: ampeg_attack=0.04 ampeg_release=0.45 sample=trumpet_pp_c4.wav key=c4 ampeg_attack=0.05 sample=trumpet_pp_c#4.wav key=c#4 sample=trumpet_pp_d4.wav key=d4 sample=trumpet_pp_d#4.wav key=d#4 With the above code, C#4 would use an attack time of 0.05 seconds, while C4, D4 and D#4 would use the 0.04 seconds set at the group level.","title":"\u2039group\u203a"},{"location":"headers/master/","text":"Example loop_mode=one_shot ampeg_attack=0.001 ampeg_decay=0.7 ampeg_sustain=100 amplitude_cc30=100 offset_cc33=3000 ampeg_sustain_oncc33=-100 key=36 sample=../Samples/bobobo/bobobo_bass_vl1_rr1.wav hirand=0.250 sample=../Samples/bobobo/bobobo_bass_vl1_rr2.wav lorand=0.250 hirand=0.500 sample=../Samples/bobobo/bobobo_bass_vl1_rr3.wav lorand=0.500 hirand=0.750 sample=../Samples/bobobo/bobobo_bass_vl1_rr4.wav lorand=0.750 amplitude_cc35=100 offset_cc38=1500 ampeg_sustain_oncc38=-100 key=38 sample=../Samples/bobobo/bobobo_tenor_l_vl1_rr1.wav hirand=0.250 sample=../Samples/bobobo/bobobo_tenor_l_vl1_rr2.wav lorand=0.250 hirand=0.500 sample=../Samples/bobobo/bobobo_tenor_l_vl1_rr3.wav lorand=0.500 hirand=0.750 sample=../Samples/bobobo/bobobo_tenor_l_vl1_rr4.wav lorand=0.750","title":"\u2039master\u203a"},{"location":"headers/master/#example","text":" loop_mode=one_shot ampeg_attack=0.001 ampeg_decay=0.7 ampeg_sustain=100 amplitude_cc30=100 offset_cc33=3000 ampeg_sustain_oncc33=-100 key=36 sample=../Samples/bobobo/bobobo_bass_vl1_rr1.wav hirand=0.250 sample=../Samples/bobobo/bobobo_bass_vl1_rr2.wav lorand=0.250 hirand=0.500 sample=../Samples/bobobo/bobobo_bass_vl1_rr3.wav lorand=0.500 hirand=0.750 sample=../Samples/bobobo/bobobo_bass_vl1_rr4.wav lorand=0.750 amplitude_cc35=100 offset_cc38=1500 ampeg_sustain_oncc38=-100 key=38 sample=../Samples/bobobo/bobobo_tenor_l_vl1_rr1.wav hirand=0.250 sample=../Samples/bobobo/bobobo_tenor_l_vl1_rr2.wav lorand=0.250 hirand=0.500 sample=../Samples/bobobo/bobobo_tenor_l_vl1_rr3.wav lorand=0.500 hirand=0.750 sample=../Samples/bobobo/bobobo_tenor_l_vl1_rr4.wav lorand=0.750","title":"Example"},{"location":"headers/midi/","text":"","title":"\u2039midi\u203a"},{"location":"headers/region/","text":"Inside the definition file, a region starts with the \u2039region\u203a header. A region is defined between two \u2039region\u203a headers, or between a \u2039region\u203a header and a \u2039group\u203a header, or between a \u2039region\u203a header and the end of the file. Following the \u2039region\u203a header one or more opcodes can be defined. The opcodes are special keywords which instruct the player on what, when and how to play a sample. Opcodes within a region can appear in any order, and they have to be separated by one or more spaces or tabulation controls. Opcodes can appear in separated lines within a region. Opcodes and assigned opcode values are separated by the equal to sign (=), without spaces between the opcode and the sign. For instance: sample=trombone_a4_ff.wav sample=cello_a5_pp_first_take.wav are valid examples, while: sample = cello_a4_pp.wav Is not (note the spaces at the sides of the = sign). Input Controls and Performance Parameters opcodes are optional, so they might not be present in the definition file. An 'expectable' default value for each parameter is pre-defined, and will be used if there's no definition. Example region definitions: sample=440.wav This region definition instructs the player to play the sample file '440.wav' for the whole keyboard range. lokey=64 hikey=67 sample=440.wav This region features a very basic set of input parameters (lokey and hikey, which represent the low and high MIDI notes in the keyboard), and the sample definition. This instructs the player to play the sample '440.wav', if a key in the 64-67 range is played. It is very important to note that all Input Controls defined in a region act using the AND boolean operator. Consequently, all conditions must be matched for the region to play. For instance: lokey=64 hikey=67 lovel=0 hivel=34 locc1=0 hicc1=40 sample=440.wav This region definition instructs the player to play the sample '440.wav' if there is an incoming note event in the 64-67 range AND the note has a velocity in the 0~34 range AND last modulation wheel (cc1) message was in the 0-40 range.","title":"\u2039region\u203a"},{"location":"headers/sample/","text":"Example sample=mysample.wav name=mysample.wav data=[encoded-content-of-mysample.wav] The content encoding is an alphabet mapping of 256 entries that map to each byte. (in the encoding, a WAV file is immediately recognizable by having its four byte \"RIFF\" header encoded to \"|spp\") This C source file can be compiled to convert a wav file to an embedded sample. Decoding The decoding algorithm is as follows: Loop while there is an input byte b1 if b1 is the end marker $24, stop reading if b1 is '\\r' ( \\(0D) or '\\n' (\\) 0A), discard it if b1 is the escape character '=' ($3D), extract the next byte b2 , and compute the next output byte as (b2+$C0)%256 otherwise, compute the next output byte as (b2+$D6)%256 Encoding Loop while there is an input byte b1 if (b1+$2A)%256 is one of the \"forbidden characters\" ($3D, $00, $09, $0A, $0D, $24) output the escape character $3D, and then output the byte (b1+$40)%256 otherwise, output (b1+$2A)%256 Output the end marker $24 Alphabet The alphabet used for the coding is as following: $00 $10 $20 $30 $40 $50 $60 $70 $80 $90 $A0 $B0 $C0 $D0 $E0 $F0 $00 $2A $3A $4A $5A $6A $7A $8A $9A $AA $BA $CA $DA $EA $FA $3D20 $1A $01 $2B $3B $4B $5B $6B $7B $8B $9B $AB $BB $CB $DB $EB $FB $0B $1B $02 $2C $3C $4C $5C $6C $7C $8C $9C $AC $BC $CC $DC $EC $FC $0C $1C $03 $2D $3D53 $4D $5D $6D $7D $8D $9D $AD $BD $CD $DD $ED $FD $3D23 $1D $04 $2E $3E $4E $5E $6E $7E $8E $9E $AE $BE $CE $DE $EE $FE $0E $1E $05 $2F $3F $4F $5F $6F $7F $8F $9F $AF $BF $CF $DF $EF $FF $0F $1F $06 $30 $40 $50 $60 $70 $80 $90 $A0 $B0 $C0 $D0 $E0 $F0 $3D16 $10 $20 $07 $31 $41 $51 $61 $71 $81 $91 $A1 $B1 $C1 $D1 $E1 $F1 $01 $11 $21 $08 $32 $42 $52 $62 $72 $82 $92 $A2 $B2 $C2 $D2 $E2 $F2 $02 $12 $22 $09 $33 $43 $53 $63 $73 $83 $93 $A3 $B3 $C3 $D3 $E3 $F3 $03 $13 $23 $0A $34 $44 $54 $64 $74 $84 $94 $A4 $B4 $C4 $D4 $E4 $F4 $04 $14 $3D3A $0B $35 $45 $55 $65 $75 $85 $95 $A5 $B5 $C5 $D5 $E5 $F5 $05 $15 $25 $0C $36 $46 $56 $66 $76 $86 $96 $A6 $B6 $C6 $D6 $E6 $F6 $06 $16 $26 $0D $37 $47 $57 $67 $77 $87 $97 $A7 $B7 $C7 $D7 $E7 $F7 $07 $17 $27 $0E $38 $48 $58 $68 $78 $88 $98 $A8 $B8 $C8 $D8 $E8 $F8 $08 $18 $28 $0F $39 $49 $59 $69 $79 $89 $99 $A9 $B9 $C9 $D9 $E9 $F9 $3D1F $19 $29 {: .table .table-sm .table-bordered .table-striped }","title":"\u2039sample\u203a"},{"location":"headers/sample/#example","text":" sample=mysample.wav name=mysample.wav data=[encoded-content-of-mysample.wav] The content encoding is an alphabet mapping of 256 entries that map to each byte. (in the encoding, a WAV file is immediately recognizable by having its four byte \"RIFF\" header encoded to \"|spp\") This C source file can be compiled to convert a wav file to an embedded sample.","title":"Example"},{"location":"headers/sample/#decoding","text":"The decoding algorithm is as follows: Loop while there is an input byte b1 if b1 is the end marker $24, stop reading if b1 is '\\r' ( \\(0D) or '\\n' (\\) 0A), discard it if b1 is the escape character '=' ($3D), extract the next byte b2 , and compute the next output byte as (b2+$C0)%256 otherwise, compute the next output byte as (b2+$D6)%256","title":"Decoding"},{"location":"headers/sample/#encoding","text":"Loop while there is an input byte b1 if (b1+$2A)%256 is one of the \"forbidden characters\" ($3D, $00, $09, $0A, $0D, $24) output the escape character $3D, and then output the byte (b1+$40)%256 otherwise, output (b1+$2A)%256 Output the end marker $24","title":"Encoding"},{"location":"headers/sample/#alphabet","text":"The alphabet used for the coding is as following: $00 $10 $20 $30 $40 $50 $60 $70 $80 $90 $A0 $B0 $C0 $D0 $E0 $F0 $00 $2A $3A $4A $5A $6A $7A $8A $9A $AA $BA $CA $DA $EA $FA $3D20 $1A $01 $2B $3B $4B $5B $6B $7B $8B $9B $AB $BB $CB $DB $EB $FB $0B $1B $02 $2C $3C $4C $5C $6C $7C $8C $9C $AC $BC $CC $DC $EC $FC $0C $1C $03 $2D $3D53 $4D $5D $6D $7D $8D $9D $AD $BD $CD $DD $ED $FD $3D23 $1D $04 $2E $3E $4E $5E $6E $7E $8E $9E $AE $BE $CE $DE $EE $FE $0E $1E $05 $2F $3F $4F $5F $6F $7F $8F $9F $AF $BF $CF $DF $EF $FF $0F $1F $06 $30 $40 $50 $60 $70 $80 $90 $A0 $B0 $C0 $D0 $E0 $F0 $3D16 $10 $20 $07 $31 $41 $51 $61 $71 $81 $91 $A1 $B1 $C1 $D1 $E1 $F1 $01 $11 $21 $08 $32 $42 $52 $62 $72 $82 $92 $A2 $B2 $C2 $D2 $E2 $F2 $02 $12 $22 $09 $33 $43 $53 $63 $73 $83 $93 $A3 $B3 $C3 $D3 $E3 $F3 $03 $13 $23 $0A $34 $44 $54 $64 $74 $84 $94 $A4 $B4 $C4 $D4 $E4 $F4 $04 $14 $3D3A $0B $35 $45 $55 $65 $75 $85 $95 $A5 $B5 $C5 $D5 $E5 $F5 $05 $15 $25 $0C $36 $46 $56 $66 $76 $86 $96 $A6 $B6 $C6 $D6 $E6 $F6 $06 $16 $26 $0D $37 $47 $57 $67 $77 $87 $97 $A7 $B7 $C7 $D7 $E7 $F7 $07 $17 $27 $0E $38 $48 $58 $68 $78 $88 $98 $A8 $B8 $C8 $D8 $E8 $F8 $08 $18 $28 $0F $39 $49 $59 $69 $79 $89 $99 $A9 $B9 $C9 $D9 $E9 $F9 $3D1F $19 $29 {: .table .table-sm .table-bordered .table-striped }","title":"Alphabet"},{"location":"misc/all_opcodes/","text":"All opcode versions , including extensions, starting in alphabetical order. Note that modulations such as (on)ccN and vel2* are included in the pages describing the parameters they modulate. Opcode links in red color represent obsolete opcodes which should not be used in new instruments.","title":"Opcodes"},{"location":"misc/amp_velcurve_N_gen/","text":"#gfx_insert1 { padding-top: 15px; } #output { width: 440px; text-align: right; font-size: 14px; border: none; padding: 20px 20px 20px; -webkit-columns: 180px 2; /* Chrome, Safari, Opera */ -moz-columns: 180px 2; /* Firefox */ columns: 180px 2; } .barcontainer { width: 508px; margin-left: 20px; } .bar { width: 3px; background: #2196F3; margin: 0 1px 0 0; float: left; display: block; } Min Amplitude: Hint: exact 0 holds a surprise Max Amplitude: Usually 1.0 Growth Factor: 1.x = Concave | 0.x = Convex cc5 cc4 cc3 cc2 cc1 c cv1 cv2 cv3 cv4 cv5 inv","title":"Curve Generator"},{"location":"misc/aria/","text":"All opcode versions , including extensions, starting in alphabetical order. Note that modulations such as (on)ccN and vel2* are included in the pages describing the parameters they modulate. Opcode links in red color represent obsolete opcodes which should not be used in new instruments.","title":"Opcodes"},{"location":"misc/categories/","text":"Instruments Settings Instruments Settings are opcodes used under the \u2039control\u203a header. Other Instruments settings opcodes are of the Voice Lifecycle type. Modulation Modulation opcodes comprise of all the LFO and EG controls Envelope Generators LFO Performance Parameters Performance Parameters are all sound modifiers including: Pitch : influence the pitch of the region played Amplifier : influence the amplitude (volume), pan (width, position) and crossfades. Filter : influence the timbre of the layer played. Two filters can be used at the same time. Further frequency shaping can be added via EQ opcodes. EQ : simple frequency sound shaping tools independent from the filters. As many as three EQs can be set for each SFZ file. Each names eq1, eq2 and eq3. Most Performance parameters are targets for the Modulation opcodes. Region Logic Region Logic opcodes define the conditions under which a voice plays or stops: Key Mapping MIDI Conditions Internal Conditions Triggers Sound Source Sound Source defines the nature of the voice generated. It could be samples or oscillators: Sample Playback : defines the parameters of the sound generation.","title":"Categories"},{"location":"misc/categories/#instruments-settings","text":"Instruments Settings are opcodes used under the \u2039control\u203a header. Other Instruments settings opcodes are of the Voice Lifecycle type.","title":"Instruments Settings"},{"location":"misc/categories/#modulation","text":"Modulation opcodes comprise of all the LFO and EG controls Envelope Generators LFO","title":"Modulation"},{"location":"misc/categories/#performance-parameters","text":"Performance Parameters are all sound modifiers including: Pitch : influence the pitch of the region played Amplifier : influence the amplitude (volume), pan (width, position) and crossfades. Filter : influence the timbre of the layer played. Two filters can be used at the same time. Further frequency shaping can be added via EQ opcodes. EQ : simple frequency sound shaping tools independent from the filters. As many as three EQs can be set for each SFZ file. Each names eq1, eq2 and eq3. Most Performance parameters are targets for the Modulation opcodes.","title":"Performance Parameters"},{"location":"misc/categories/#region-logic","text":"Region Logic opcodes define the conditions under which a voice plays or stops: Key Mapping MIDI Conditions Internal Conditions Triggers","title":"Region Logic"},{"location":"misc/categories/#sound-source","text":"Sound Source defines the nature of the voice generated. It could be samples or oscillators: Sample Playback : defines the parameters of the sound generation.","title":"Sound Source"},{"location":"misc/sfz1/","text":"All opcode versions , including extensions, starting in alphabetical order. Note that modulations such as (on)ccN and vel2* are included in the pages describing the parameters they modulate. Opcode links in red color represent obsolete opcodes which should not be used in new instruments.","title":"Opcodes"},{"location":"misc/sfz2/","text":"All opcode versions , including extensions, starting in alphabetical order. Note that modulations such as (on)ccN and vel2* are included in the pages describing the parameters they modulate. Opcode links in red color represent obsolete opcodes which should not be used in new instruments.","title":"Opcodes"},{"location":"modulations/","text":"Modulations which are part of the SFZ1 specification generally uses both the _ccN and ccN suffixes, for example cutoff_ccN or ampeg_releaseccN . Modulations added in the SFZ2 specification generally use _onccN instead, for example delay_samples_onccN . This is a source of possible confusion. As a solution, ARIA and possibly other SFZ2 players allow either _ccN , _onccN or ccN (with no underscore) to be used for many modulations, and interpret all of those the same. However, these aliases are not part of either the SFZ1 and SFZ2 standard, and for maximum compatibility, it is best to use the standard syntax. In this section they will be described in a generic way, to be applied to the various opcode targets. See also the related tutorials for SFZ1 and SFZ2 . curveccN smoothccN stepccN","title":"Modulations"},{"location":"modulations/curveccN/","text":"The curvecc modifier, when it's present, designates a \u2039curve\u203a which shapes the controller input. If absent, the default curve is used, a straight line which runs from 0 to 1. The value of curvecc is a positive integer. It is the index of a curve, either built in or user-defined, which corresponds to the \u2039curve\u203a opcode curve_index .","title":"curveccN"},{"location":"modulations/envelope_generators/","text":"Envelope Generator opcodes are part of the Modulation category of opcodes: Traditional (SFZ 1.0) Traditional envelope generators using ADSR phases can be set using the SFZ 1.0 ampeg (amplitude), pitcheg (pitch) and fileg (filter) opcodes. These opcodes also support additional delay and hold phases. The phases in order are: Delay-Attack-Hold-Decay-Sustain-Release . See below for the full list of relevant opcodes. Flex (SFZ 2.0) With SFZ 2.0, you can create one or more \"flex\" envelope generators. Each flex EG is mapped to a destination (amplitude, pitch, etc.) and contains two or more points with a duration and level determined at each point. The duration indicates the amount of time it takes from the previous envelope point to the current. In this way, you can use flex EGs to essentially draw any envelope shape you desire. Here is an example flex EG: eg01_pitch=1200 eg01_time1=0 eg01_level1=0 eg01_time2=1 eg01_level2=1 eg01_time3=2 eg01_level3=0.5 eg01_sustain=3 eg01_time4=1 eg01_level4=0 How to interpret the opcodes in the example above: All of these opcodes begin with \"eg01_\", indicating the first flex EG for the current region. A second flex EG would begin with \"eg02_\", and so on. The first opcode determines that the envelope will affect note pitch to a maximum of 1200 cents (one octave). Each envelope point is numbered, and these numbers appear at the end of the opcode name (this opcode has four envelope points). There should be both a \"time\" and and a \"level\" opcode specified for each envelope point. The \"time\" opcodes indicate time duration in seconds from the previous envelope point. The \"level\" opcodes indicate the level percentage at each envelope point (0-1, with \"1\" meaning \"100%\"). The optional \"sustain\" opcode determines which envelope point will function as \"sustain\" in the traditional ADSR model. So here is what happens in the four envelope points in the example: Note starts at original pitch. Pitch takes one second to rise 1200 cents (one octave). Pitch takes two seconds to lower to 50% of 1200 cents. The pitch will remain at this level as long as the note is held. After releasing the note, the note will take one second to lower to the original pitch. Envelope Curves SFZ\u2014at least the ARIA Engine and sfizz implementations\u2014uses the following curves for SFZ 1.0 envelopes ( ampeg , pitcheg , fileg , probably others but not tested): Attack: linear (convex in dB) Decay: convex (linear in dB) Release: convex (linear in dB) ARIA supports changing the shape of each phase curve via opcodes such as ampeg_attack_shape , fileg_decay_shape , etc. Setting the value for any of these to 0 will result in a linear curve shape, with positive and negative values resulting in concave and convex curves, respectively. Flex EGs (SFZ 2.0) phases all use a linear curve shape by default, but this can be bent into a logarithmic curve using positive/negative values as described in the above paragraph. For example, the following opcode will set the shape of the first eg01 phase to match the convex curve used in the SFZ 1.0 ampeg decay/release: eg01_shape2=-10.36 Note that the shape opcode should be placed on the second point affected by the curve. In other words, eg01_shape2=-10.36 will affect the curve between envelope points 1 and 2. It is also important to know that ampeg/pitcheg/fileg decay (both SFZ & SF2) behaves differently than flex EG in relation to the sustain level: ampeg decay: The level in the decay phase descends at the rate determined by ampeg_decay but stops once it hits the sustain level. If your decay phase length is 1 second and sustain is 50%, the sustain level is reached after only half a second in the decay phase (assuming linear phase curve). flex EG phase: The level always scales from starting to ending value over the full duration of the phase. When emulating an ADSR envelope using a flex EG, if your decay phase length is 1 second and sustain is 50%, the volume level won't reach 50% until the end of that one second. If trying to match a SoundFont instrument's logarithmic curves, set the phase's shape to 6 (concave) or -6 (convex). This is only an approximation, as the curve is not identical. If you wish to use a flex EG to replace the SFZ 1.0 ampeg, set the destination as eg01_ampeg=100 rather than eg01_amplitude=100 . This will disable the SFZ 1.0 ampeg and allow the flex EG to provide a release phase. SFZ 1 EG Opcodes The 3 EG destinations in the SFZ 1 standard are: ampeg (amplitude), fileg (filter) and pitcheg (pitch). The EG destinations are represented by (eg type) in the below list - so ampeg_attack would be the amplitude envelope attack, pitcheg_sustain would be the pitch envelope sustain level etc. These are 6-points Delay-Attack-Hold-Decay-Sustain-Release. (eg type)_attack (eg type)_attack_oncc (eg type)_decay (eg type)_decay_oncc (eg type)_delay (eg type)_delay_oncc (eg type)_depth (eg type)_dynamic (eg type)_hold (eg type)_hold_oncc (eg type)_release (eg type)_release_oncc (eg type)_start (eg type)_start_oncc (eg type)_sustain (eg type)_sustain_oncc (eg type)_vel2attack (eg type)_vel2decay (eg type)_vel2delay (eg type)_vel2hold (eg type)_vel2release (eg type)_vel2sustain Flex EGs (SFZ 2) Opcodes Flexible EG can have as many points as needed. level and time for each point is set accordingly. egN_curveX egN_dynamic egN_levelX egN_levelX_onccY egN_loop egN_points egN_shapeX egN_sustain egN_timeX egN_timeX_onccY Flex EGs Destinations These destinations are added as a suffix to 'egN_' - for example, eg01_pitch=2400 would have envelope 01 modulate pitch, with an envelope depth of 2400 cents. amplitude amplitude_oncc depth depth_lfoX depth_oncc depthadd_lfoX freq_lfoX pitch pitch_oncc cutoff cutoff_oncc cutoff2 cutoff2_oncc eqNbw eqNbw_oncc eqNfreq eqNfreq_oncc eqNgain eqNgain_oncc pan pan_oncc resonance resonance_oncc resonance2 resonance2_oncc volume volume_oncc width width_oncc","title":"Envelope Generators"},{"location":"modulations/envelope_generators/#traditional-sfz-10","text":"Traditional envelope generators using ADSR phases can be set using the SFZ 1.0 ampeg (amplitude), pitcheg (pitch) and fileg (filter) opcodes. These opcodes also support additional delay and hold phases. The phases in order are: Delay-Attack-Hold-Decay-Sustain-Release . See below for the full list of relevant opcodes.","title":"Traditional (SFZ 1.0)"},{"location":"modulations/envelope_generators/#flex-sfz-20","text":"With SFZ 2.0, you can create one or more \"flex\" envelope generators. Each flex EG is mapped to a destination (amplitude, pitch, etc.) and contains two or more points with a duration and level determined at each point. The duration indicates the amount of time it takes from the previous envelope point to the current. In this way, you can use flex EGs to essentially draw any envelope shape you desire. Here is an example flex EG: eg01_pitch=1200 eg01_time1=0 eg01_level1=0 eg01_time2=1 eg01_level2=1 eg01_time3=2 eg01_level3=0.5 eg01_sustain=3 eg01_time4=1 eg01_level4=0 How to interpret the opcodes in the example above: All of these opcodes begin with \"eg01_\", indicating the first flex EG for the current region. A second flex EG would begin with \"eg02_\", and so on. The first opcode determines that the envelope will affect note pitch to a maximum of 1200 cents (one octave). Each envelope point is numbered, and these numbers appear at the end of the opcode name (this opcode has four envelope points). There should be both a \"time\" and and a \"level\" opcode specified for each envelope point. The \"time\" opcodes indicate time duration in seconds from the previous envelope point. The \"level\" opcodes indicate the level percentage at each envelope point (0-1, with \"1\" meaning \"100%\"). The optional \"sustain\" opcode determines which envelope point will function as \"sustain\" in the traditional ADSR model. So here is what happens in the four envelope points in the example: Note starts at original pitch. Pitch takes one second to rise 1200 cents (one octave). Pitch takes two seconds to lower to 50% of 1200 cents. The pitch will remain at this level as long as the note is held. After releasing the note, the note will take one second to lower to the original pitch.","title":"Flex (SFZ 2.0)"},{"location":"modulations/envelope_generators/#envelope-curves","text":"SFZ\u2014at least the ARIA Engine and sfizz implementations\u2014uses the following curves for SFZ 1.0 envelopes ( ampeg , pitcheg , fileg , probably others but not tested): Attack: linear (convex in dB) Decay: convex (linear in dB) Release: convex (linear in dB) ARIA supports changing the shape of each phase curve via opcodes such as ampeg_attack_shape , fileg_decay_shape , etc. Setting the value for any of these to 0 will result in a linear curve shape, with positive and negative values resulting in concave and convex curves, respectively. Flex EGs (SFZ 2.0) phases all use a linear curve shape by default, but this can be bent into a logarithmic curve using positive/negative values as described in the above paragraph. For example, the following opcode will set the shape of the first eg01 phase to match the convex curve used in the SFZ 1.0 ampeg decay/release: eg01_shape2=-10.36 Note that the shape opcode should be placed on the second point affected by the curve. In other words, eg01_shape2=-10.36 will affect the curve between envelope points 1 and 2. It is also important to know that ampeg/pitcheg/fileg decay (both SFZ & SF2) behaves differently than flex EG in relation to the sustain level: ampeg decay: The level in the decay phase descends at the rate determined by ampeg_decay but stops once it hits the sustain level. If your decay phase length is 1 second and sustain is 50%, the sustain level is reached after only half a second in the decay phase (assuming linear phase curve). flex EG phase: The level always scales from starting to ending value over the full duration of the phase. When emulating an ADSR envelope using a flex EG, if your decay phase length is 1 second and sustain is 50%, the volume level won't reach 50% until the end of that one second. If trying to match a SoundFont instrument's logarithmic curves, set the phase's shape to 6 (concave) or -6 (convex). This is only an approximation, as the curve is not identical. If you wish to use a flex EG to replace the SFZ 1.0 ampeg, set the destination as eg01_ampeg=100 rather than eg01_amplitude=100 . This will disable the SFZ 1.0 ampeg and allow the flex EG to provide a release phase.","title":"Envelope Curves"},{"location":"modulations/envelope_generators/#sfz-1-eg-opcodes","text":"The 3 EG destinations in the SFZ 1 standard are: ampeg (amplitude), fileg (filter) and pitcheg (pitch). The EG destinations are represented by (eg type) in the below list - so ampeg_attack would be the amplitude envelope attack, pitcheg_sustain would be the pitch envelope sustain level etc. These are 6-points Delay-Attack-Hold-Decay-Sustain-Release. (eg type)_attack (eg type)_attack_oncc (eg type)_decay (eg type)_decay_oncc (eg type)_delay (eg type)_delay_oncc (eg type)_depth (eg type)_dynamic (eg type)_hold (eg type)_hold_oncc (eg type)_release (eg type)_release_oncc (eg type)_start (eg type)_start_oncc (eg type)_sustain (eg type)_sustain_oncc (eg type)_vel2attack (eg type)_vel2decay (eg type)_vel2delay (eg type)_vel2hold (eg type)_vel2release (eg type)_vel2sustain","title":"SFZ 1 EG Opcodes"},{"location":"modulations/envelope_generators/#flex-egs-sfz-2-opcodes","text":"Flexible EG can have as many points as needed. level and time for each point is set accordingly. egN_curveX egN_dynamic egN_levelX egN_levelX_onccY egN_loop egN_points egN_shapeX egN_sustain egN_timeX egN_timeX_onccY","title":"Flex EGs (SFZ 2) Opcodes"},{"location":"modulations/envelope_generators/#flex-egs-destinations","text":"These destinations are added as a suffix to 'egN_' - for example, eg01_pitch=2400 would have envelope 01 modulate pitch, with an envelope depth of 2400 cents. amplitude amplitude_oncc depth depth_lfoX depth_oncc depthadd_lfoX freq_lfoX pitch pitch_oncc cutoff cutoff_oncc cutoff2 cutoff2_oncc eqNbw eqNbw_oncc eqNfreq eqNfreq_oncc eqNgain eqNgain_oncc pan pan_oncc resonance resonance_oncc resonance2 resonance2_oncc volume volume_oncc width width_oncc","title":"Flex EGs Destinations"},{"location":"modulations/icurveccN/","text":"(target)_icurvecc is a deprecated ARIA extension. It acted as a companion to (target)_curvecc and determined whether the curve for the specified target and CC should be calculated allowing fractional values, or whether the calculations should be rounded off to allow whole numbers only. With interpolation, it would be possible, for example, for CC2 to be effectively equal to 63.5, but with interpolation off it would jump from 63 directly to 64. In later versions of ARIA, fractional values are always used.","title":"icurveccN"},{"location":"modulations/lfo/","text":"LFO (Low Frequency Oscillator) opcodes are part of the Modulation category of opcodes. They are used to create effects such as pitch vibrato (when modulating pitch), tremolo (when modulating volume) and filter wobble (when modulating filter cutoff) LFOs are triggered by note-on events for the specified region, which means there are no free-running LFOs in the SFZ spec. If a free-running LFO is needed, for example to apply one slow pitch vibrato wave to a series of rapidly plucked oud notes, that will need to use an external modulation source outside the SFZ player - in other words, perhaps in a DAW that the SFZ player is being used in as a plugin. SFZ 1 LFOs 3 LFO destinations in SFZ 1 standard: amplfo (amplitude) fillfo (filter) pitchlfo (pitch) Here's a very simple example of a pitch LFO integration (lfo type)_delay (lfo type)_fade (lfo type)_freq (lfo type)_freqccX (lfo type)_depth (lfo type)_depthccX (lfo type)_depthchanaft (lfo type)_depthpolyaft (lfo type)_freqchanaft (lfo type)_freqpolyaft Assignable LFOs (SFZ 2) Much like the Flex EG, these newer LFO can target almost any tone-defining parameter: Here's a very simple example of an sfz 2 lfo integration, targeted to pitch lfoN_wave lfoN_freq lfoN_freq_onccX lfoN_freq_smoothccX lfoN_freq_stepccX lfoN_delay lfoN_delay_onccX lfoN_fade lfoN_fade_onccX lfoN_phase lfoN_phase_onccX lfoN_count Assignable LFO Destinations These destinations are added as a suffix to 'lfoN_'. For example, lfo01_pitch=100 makes LFO 01 affect pitch with a max depth of 100 cents, and lfo03_freq_lfo01=1.3 would make LFO 03 add up to 1.3 Hertz to the frequency of LFO 01. Note that it's possible to create modulation feedback loops this way, for example LFO 01 modulating LFO 02 while LFO 02 modulates LFO 01. In addition to the below, in ARIA it's possible to control the amount of freq_lfo with MIDI CC, so lfo03_freq_lfo01_oncc117=1.3 would make LFO 03 add up to 1.3 Hertz to the frequency of LFO 01, with the amount modulated by MIDI CC 117. So, freq_lfo_oncc would be added to the below list for ARIA, though depth_lfo_oncc and depthadd_lfo_oncc do not appear to be available. freq_lfoX depth_lfoX depthadd_lfoX pitch pitch_oncc pitch_smoothcc pitch_stepcc decim decim_oncc decim_smoothcc decim_stepcc bitred bitred_oncc bitred_smoothcc bitred_stepcc cutoff cutoff_oncc cutoff_smoothcc cutoff_stepcc resonance resonance_oncc resonance_smoothcc resonance_stepcc cutoff2 cutoff2_oncc cutoff2_smoothcc cutoff2_stepcc resonance2 resonance2_oncc resonance2_smoothcc resonance2_stepcc eqNfreq eqNfreq_oncc eqNfreq_smoothcc eqNfreq_stepcc eqNbw eqNbw_oncc eqNbw_smoothcc eqNbw_stepcc eqNgain eqNgain_oncc eqNgain_smoothcc eqNgain_stepcc volume volume_oncc volume_smoothcc volume_stepcc amplitude amplitude_oncc amplitude_smoothcc amplitude_stepcc pan pan_oncc pan_smoothcc pan_stepcc width width_oncc width_smoothcc width_stepcc Practical Considerations SFZ allows LFOs to modulate the frequency of other LFOs, including feedback (LFO number M modulating LFO number N, and vice versa). Mathematically, this can cause very chaotic results. However, in the Cakewalk products (and possibly also in ARIA, though this is not checked) this is simplified. If the number of the modulating LFO is lower than the LFO being modulated (for example, LFO1 modulates LFO2), the modulation is applied when it is calculated. However, if the number of the modulating LFO is higher than the LFO being modulated (for example, LFO4 modulating LFO2), the modulation is not applied until the next LFO frequency update cycle. This both keeps LFO feedback controlled, and reduces the CPU needed to calculate LFO modulations.","title":"LFO"},{"location":"modulations/lfo/#sfz-1-lfos","text":"3 LFO destinations in SFZ 1 standard: amplfo (amplitude) fillfo (filter) pitchlfo (pitch) Here's a very simple example of a pitch LFO integration (lfo type)_delay (lfo type)_fade (lfo type)_freq (lfo type)_freqccX (lfo type)_depth (lfo type)_depthccX (lfo type)_depthchanaft (lfo type)_depthpolyaft (lfo type)_freqchanaft (lfo type)_freqpolyaft","title":"SFZ 1 LFOs"},{"location":"modulations/lfo/#assignable-lfos-sfz-2","text":"Much like the Flex EG, these newer LFO can target almost any tone-defining parameter: Here's a very simple example of an sfz 2 lfo integration, targeted to pitch lfoN_wave lfoN_freq lfoN_freq_onccX lfoN_freq_smoothccX lfoN_freq_stepccX lfoN_delay lfoN_delay_onccX lfoN_fade lfoN_fade_onccX lfoN_phase lfoN_phase_onccX lfoN_count","title":"Assignable LFOs (SFZ 2)"},{"location":"modulations/lfo/#assignable-lfo-destinations","text":"These destinations are added as a suffix to 'lfoN_'. For example, lfo01_pitch=100 makes LFO 01 affect pitch with a max depth of 100 cents, and lfo03_freq_lfo01=1.3 would make LFO 03 add up to 1.3 Hertz to the frequency of LFO 01. Note that it's possible to create modulation feedback loops this way, for example LFO 01 modulating LFO 02 while LFO 02 modulates LFO 01. In addition to the below, in ARIA it's possible to control the amount of freq_lfo with MIDI CC, so lfo03_freq_lfo01_oncc117=1.3 would make LFO 03 add up to 1.3 Hertz to the frequency of LFO 01, with the amount modulated by MIDI CC 117. So, freq_lfo_oncc would be added to the below list for ARIA, though depth_lfo_oncc and depthadd_lfo_oncc do not appear to be available. freq_lfoX depth_lfoX depthadd_lfoX pitch pitch_oncc pitch_smoothcc pitch_stepcc decim decim_oncc decim_smoothcc decim_stepcc bitred bitred_oncc bitred_smoothcc bitred_stepcc cutoff cutoff_oncc cutoff_smoothcc cutoff_stepcc resonance resonance_oncc resonance_smoothcc resonance_stepcc cutoff2 cutoff2_oncc cutoff2_smoothcc cutoff2_stepcc resonance2 resonance2_oncc resonance2_smoothcc resonance2_stepcc eqNfreq eqNfreq_oncc eqNfreq_smoothcc eqNfreq_stepcc eqNbw eqNbw_oncc eqNbw_smoothcc eqNbw_stepcc eqNgain eqNgain_oncc eqNgain_smoothcc eqNgain_stepcc volume volume_oncc volume_smoothcc volume_stepcc amplitude amplitude_oncc amplitude_smoothcc amplitude_stepcc pan pan_oncc pan_smoothcc pan_stepcc width width_oncc width_smoothcc width_stepcc","title":"Assignable LFO Destinations"},{"location":"modulations/lfo/#practical-considerations","text":"SFZ allows LFOs to modulate the frequency of other LFOs, including feedback (LFO number M modulating LFO number N, and vice versa). Mathematically, this can cause very chaotic results. However, in the Cakewalk products (and possibly also in ARIA, though this is not checked) this is simplified. If the number of the modulating LFO is lower than the LFO being modulated (for example, LFO1 modulates LFO2), the modulation is applied when it is calculated. However, if the number of the modulating LFO is higher than the LFO being modulated (for example, LFO4 modulating LFO2), the modulation is not applied until the next LFO frequency update cycle. This both keeps LFO feedback controlled, and reduces the CPU needed to calculate LFO modulations.","title":"Practical Considerations"},{"location":"modulations/smoothccN/","text":"Sets the smoothness for the target modulation in milliseconds. Adds inertia to the modulation, so fast movements of the controller will have a delayed, smoothed effect, similar to bend_smooth . While SFZv2 does not limit the targets for smoothing in the spec, currently ARIA only implements smoothing for pitch-related and volume-related (including amplitude, pan and position) modulation targets. Examples sample=*sine pitch_oncc27=1200 pitch_smoothcc27=100 Notes Increasing the smoothing past 100 ms allows the SFZ instrument creator to create a noticeable lag in the control response, which is useful when modeling guitar feedback, for example. Default value is 0ms (no smoothing). However be aware some DAWs smooth the drawn CC automation before it reaches the SFZ player, which means some smoothing will occur regardless of what smoothcc is set to, and any smoothcc smoothing will be applied to those already smoothed control values. For a detailed overview of how DAWs handle instananeous jumps in automation, see https://www.admiralbumblebee.com/music/2019/06/22/Daw-V-Daw-Automation-Part-4.html .","title":"smoothccN"},{"location":"modulations/smoothccN/#examples","text":" sample=*sine pitch_oncc27=1200 pitch_smoothcc27=100","title":"Examples"},{"location":"modulations/smoothccN/#notes","text":"Increasing the smoothing past 100 ms allows the SFZ instrument creator to create a noticeable lag in the control response, which is useful when modeling guitar feedback, for example. Default value is 0ms (no smoothing). However be aware some DAWs smooth the drawn CC automation before it reaches the SFZ player, which means some smoothing will occur regardless of what smoothcc is set to, and any smoothcc smoothing will be applied to those already smoothed control values. For a detailed overview of how DAWs handle instananeous jumps in automation, see https://www.admiralbumblebee.com/music/2019/06/22/Daw-V-Daw-Automation-Part-4.html .","title":"Notes"},{"location":"modulations/stepccN/","text":"Sets the interval between consecutive steps. If this is not used, there are 127 modulation steps. Example This describes a pitch controller which has 5 positions: 0, 300, 600, 900, 1200 cents. sample=*sine pitch_oncc16=1200 pitch_stepcc16=300","title":"stepccN"},{"location":"modulations/stepccN/#example","text":"This describes a pitch controller which has 5 positions: 0, 300, 600, 900, 1200 cents. sample=*sine pitch_oncc16=1200 pitch_stepcc16=300","title":"Example"},{"location":"modulations/vel2/","text":"The velocity_to modulations time, in seconds, can be calculated as: (target) time = (eg type)_(target) + (eg type)_vel2(target) * velocity / 127 and the sustain level, in percentage, as: sustain level = (eg type)_sustain + (eg type)_vel2sustain Range is -100 seconds to 100 seconds, but in most typical cases, the effect of velocity on envelope delay and attack times will be negative, and the effect of velocity on other envelope parameters positive. This would make a sound have a faster attack and a slower decay when a note has higher velocity, with attack of 0.5 seconds at 0 velocity and 0.1 seconds at 127 velocity: ampeg_attack=0.5 ampeg_vel2attack=-0.4 ampeg_decay=0.5 ampeg_vel2decay=1 ampeg_sustain=50 ampeg_release=0.25 EQ TODO","title":"(eg type)_vel2(target)"},{"location":"modulations/vel2/#eq","text":"TODO","title":"EQ"},{"location":"modulations/moved/ampeg_vel2attack/","text":"--- Examples pitcheg_vel2delay=-1.2 ampeg_vel2delay=0.1 Attack time will be calculated as attack time = (eg type)_delay + (eg type)_vel2delay * velocity / 127 Range is -100 seconds to 100 seconds, but in most typical cases, the effect of velocity on envelope delay and attack times will be negative, and the effect of velocity on other envelope parameters positive. This would make a sound have a faster attack and a slower decay when a note has higher velocity, with attack of 0.5 seconds at 0 velocity and 0.1 seconds at 127 velocity: ampeg_attack=0.5 ampeg_vel2attack=-0.4 ampeg_decay=0.5 ampeg_vel2decay=1 ampeg_sustain=50 ampeg_release=0.25","title":"Ampeg vel2attack"},{"location":"modulations/moved/ampeg_vel2attack/#-","text":"","title":"---"},{"location":"modulations/moved/ampeg_vel2attack/#examples","text":"pitcheg_vel2delay=-1.2 ampeg_vel2delay=0.1 Attack time will be calculated as attack time = (eg type)_delay + (eg type)_vel2delay * velocity / 127 Range is -100 seconds to 100 seconds, but in most typical cases, the effect of velocity on envelope delay and attack times will be negative, and the effect of velocity on other envelope parameters positive. This would make a sound have a faster attack and a slower decay when a note has higher velocity, with attack of 0.5 seconds at 0 velocity and 0.1 seconds at 127 velocity: ampeg_attack=0.5 ampeg_vel2attack=-0.4 ampeg_decay=0.5 ampeg_vel2decay=1 ampeg_sustain=50 ampeg_release=0.25","title":"Examples"},{"location":"modulations/moved/ampeg_vel2decay/","text":"--- Examples fileg_vel2decay=1.2 ampeg_vel2decay=0.1 Decay time will be calculated as decay time = (eg type)_decay + (eg type)_vel2decay * velocity / 127","title":"Ampeg vel2decay"},{"location":"modulations/moved/ampeg_vel2decay/#-","text":"","title":"---"},{"location":"modulations/moved/ampeg_vel2decay/#examples","text":"fileg_vel2decay=1.2 ampeg_vel2decay=0.1 Decay time will be calculated as decay time = (eg type)_decay + (eg type)_vel2decay * velocity / 127","title":"Examples"},{"location":"modulations/moved/ampeg_vel2delay/","text":"--- Examples pitcheg_vel2delay=-0.2 ampeg_vel2delay=0.1 Delay time will be calculated as delay time = (eg type)_delay + (eg type)_vel2delay * velocity / 127 Range is -100 seconds to 100 seconds, but in most typical cases, the effect of velocity on envelope delay and attack times will be negative, and the effect of velocity on other envelope parameters positive.","title":"Ampeg vel2delay"},{"location":"modulations/moved/ampeg_vel2delay/#-","text":"","title":"---"},{"location":"modulations/moved/ampeg_vel2delay/#examples","text":"pitcheg_vel2delay=-0.2 ampeg_vel2delay=0.1 Delay time will be calculated as delay time = (eg type)_delay + (eg type)_vel2delay * velocity / 127 Range is -100 seconds to 100 seconds, but in most typical cases, the effect of velocity on envelope delay and attack times will be negative, and the effect of velocity on other envelope parameters positive.","title":"Examples"},{"location":"modulations/moved/ampeg_vel2hold/","text":"--- Examples pitcheg_vel2hold=1.2 pitcheg_vel2hold=0.1 Hold time will be calculated as hold time = (eg type)_hold + (eg type)_vel2hold * velocity / 127","title":"Ampeg vel2hold"},{"location":"modulations/moved/ampeg_vel2hold/#-","text":"","title":"---"},{"location":"modulations/moved/ampeg_vel2hold/#examples","text":"pitcheg_vel2hold=1.2 pitcheg_vel2hold=0.1 Hold time will be calculated as hold time = (eg type)_hold + (eg type)_vel2hold * velocity / 127","title":"Examples"},{"location":"modulations/moved/ampeg_vel2release/","text":"--- Examples ampeg_vel2release=1.2 fileg_vel2release=0.1 Release time will be calculated as release time = (eg type)_release + (eg type)_vel2release * velocity / 127","title":"Ampeg vel2release"},{"location":"modulations/moved/ampeg_vel2release/#-","text":"","title":"---"},{"location":"modulations/moved/ampeg_vel2release/#examples","text":"ampeg_vel2release=1.2 fileg_vel2release=0.1 Release time will be calculated as release time = (eg type)_release + (eg type)_vel2release * velocity / 127","title":"Examples"},{"location":"modulations/moved/ampeg_vel2sustain/","text":"--- Examples ampeg_vel2sustain=30 pitcheg_vel2sustain=10 Sustain level will be calculated as sustain level = (eg type)_sustain + (eg type)_vel2sustain","title":"Ampeg vel2sustain"},{"location":"modulations/moved/ampeg_vel2sustain/#-","text":"","title":"---"},{"location":"modulations/moved/ampeg_vel2sustain/#examples","text":"ampeg_vel2sustain=30 pitcheg_vel2sustain=10 Sustain level will be calculated as sustain level = (eg type)_sustain + (eg type)_vel2sustain","title":"Examples"},{"location":"modulations/moved/amplfo_depthchanaft/","text":"--- In decibels for amplitude, in cents for pitch and filter cutoff. Examples amplfo_depthchanaft=1 fillfo_depthchanaft=400","title":"Amplfo depthchanaft"},{"location":"modulations/moved/amplfo_depthchanaft/#-","text":"In decibels for amplitude, in cents for pitch and filter cutoff.","title":"---"},{"location":"modulations/moved/amplfo_depthchanaft/#examples","text":"amplfo_depthchanaft=1 fillfo_depthchanaft=400","title":"Examples"},{"location":"modulations/moved/amplfo_depthpolyaft/","text":"--- In decibels for amplitude, in cents for pitch and filter cutoff. Examples amplfo_depthpolyaft=1 fillfo_depthpolyaft=400","title":"Amplfo depthpolyaft"},{"location":"modulations/moved/amplfo_depthpolyaft/#-","text":"In decibels for amplitude, in cents for pitch and filter cutoff.","title":"---"},{"location":"modulations/moved/amplfo_depthpolyaft/#examples","text":"amplfo_depthpolyaft=1 fillfo_depthpolyaft=400","title":"Examples"},{"location":"modulations/moved/amplfo_freqchanaft/","text":"--- Can be negative, and according to the SFZ spec the allowed range is -200 to 200, which could be used to push LFO frequencies into audio frequency range, allowing AM, FM and filter growl. Perhaps that was a typo and it should be -20 to 20, as 20 Hz is the maximum LFO frequency in the SFZ 1 spec. Examples fillfo_freqchanaft=10 fillfo_freqchanaft=-20","title":"Amplfo freqchanaft"},{"location":"modulations/moved/amplfo_freqchanaft/#-","text":"Can be negative, and according to the SFZ spec the allowed range is -200 to 200, which could be used to push LFO frequencies into audio frequency range, allowing AM, FM and filter growl. Perhaps that was a typo and it should be -20 to 20, as 20 Hz is the maximum LFO frequency in the SFZ 1 spec.","title":"---"},{"location":"modulations/moved/amplfo_freqchanaft/#examples","text":"fillfo_freqchanaft=10 fillfo_freqchanaft=-20","title":"Examples"},{"location":"modulations/moved/amplfo_freqpolyaft/","text":"--- Can be negative, and according to the SFZ spec the allowed range is -200 to 200, which could be used to push LFO frequencies into audio frequency range, allowing AM, FM and filter growl. Perhaps that was a typo and it should be -20 to 20, as 20 Hz is the maximum LFO frequency in the SFZ 1 spec. Examples fillfo_freqpolyaft=10 fillfo_freqpolyaft=-20","title":"Amplfo freqpolyaft"},{"location":"modulations/moved/amplfo_freqpolyaft/#-","text":"Can be negative, and according to the SFZ spec the allowed range is -200 to 200, which could be used to push LFO frequencies into audio frequency range, allowing AM, FM and filter growl. Perhaps that was a typo and it should be -20 to 20, as 20 Hz is the maximum LFO frequency in the SFZ 1 spec.","title":"---"},{"location":"modulations/moved/amplfo_freqpolyaft/#examples","text":"fillfo_freqpolyaft=10 fillfo_freqpolyaft=-20","title":"Examples"},{"location":"modulations/moved/eqN_vel2freq/","text":"--- Examples eq1_vel2freq=1000 eq1_vel2gain=-6 eq2_vel2gain=9 Notes When emulating timbral changes when there are not enough dynamic levels sampled, this will often be a negative value for the lowest band, and a positive value for the two higher bands.","title":"eqN vel2freq"},{"location":"modulations/moved/eqN_vel2freq/#-","text":"","title":"---"},{"location":"modulations/moved/eqN_vel2freq/#examples","text":"eq1_vel2freq=1000 eq1_vel2gain=-6 eq2_vel2gain=9","title":"Examples"},{"location":"modulations/moved/eqN_vel2freq/#notes","text":"When emulating timbral changes when there are not enough dynamic levels sampled, this will often be a negative value for the lowest band, and a positive value for the two higher bands.","title":"Notes"},{"location":"news/","text":"{{ blog_content }}","title":"Latest News"},{"location":"news/posts/2019-04-23-new-website-launched/","text":"We're proud to announce a new website! Built on Jekyll . Most content is authored in Markdown format. Utilizes Bootstrap and SASS for easy skinning and responsive design, making the website available to mobile devices. Utilizes FontAwesome and Favicon Generator for content and website icons.","title":"New Website Launched"},{"location":"news/posts/2019-07-25-new-tutorial/","text":"We've published a new tutorial explaining how to use samples to model brushed drum techniques which produce a continuous sound rather than a discrete hit. Admittedly, this is a rather niche technique not only in the samples world but also in real-world music, mainly used in jazz and some indie music. Next we plan to expand the vibrato tutorial , which is currently only a simple code example. Minor updates: + global_label, master_label, group_label and region_label opcodes added. + Added Carla and Bliss Sampler to SFZ players, updated TAL Sampler info.","title":"New Tutorial"},{"location":"news/posts/2019-08-01-modulation_explained/","text":"We have two new articles explaining the modulations possible in SFZ1 and SFZ2 . Hopefully it will now be much easier to understand what's possible under each spec level, and just what those complex SFZ2 LFOs and envelopes can and can't do.","title":"Modulations Explained"},{"location":"news/posts/2019-09-16-sfz-page-on-italian-wikipedia/","text":"A new page about the SFZ format has been added to the Italian Wikipedia . Let's grow!","title":"SFZ page on Italian Wikipedia"},{"location":"news/posts/2019-11-16-new-players-and-tutorial/","text":"New applications were added to the players list recently: - HISE - sfizz - liquidsfz and a new tutorial from Sonoj 2019 Convention on how to recording samples using Ardour and LinuxSampler by Christoph Kuhr to our Video tutorials section. Thanks to Stefan Westerfeld for our first GitHub pull request! And to Sonoj organization for the video tutorial contribuition. Last but not least, for those like me who prefer IRC we have now also an IRC channel on freenode server. /join us!","title":"New players and tutorial"},{"location":"news/posts/2019-11-21-legato-tutorial/","text":"The legato tutorial has been expanded from one simple example to include simulated legato, simulated portamento, and true sampled legato.","title":"Legato tutorial"},{"location":"news/posts/2019-12-29-happy-new-year/","text":"Here we are with the latest relevant updates, the last ones for this year: Added *_mod and *_dynamic opcodes Added Cakewalk SFZv2 opcodes (work in progress) page Added the SFZ test suite for sample instruments developers in homepage Improved SFZ syntax highlighting in Google Prettify for all pages Search now works correctly, though it is slow and needs some more improvements Happy new year!","title":"Happy new year!"},{"location":"news/posts/2020-01-31-new-year-new-work-in-progress/","text":"The most relevant additions on the website for this month were Instruments and Modulations sections, adding slowly one by one some sample instruments libraries created and freely distribuited over the net, and documenting in a generic way the various modulations used in SFZ. Some new opcodes were also added in our database, starting from some modulation aliases like amplitude_ccN, pan_ccN and tune_ccN to the recent fil_gain. I would like to thank some people who contributed to the site, like falkTX for adding our news feed on Linuxaudio Planet , jpcima, MatFluor, PaulFd and sfw. This website is an opensource non profit project, I hope to see more people involved in the future to help make it grow.","title":"New year, new work in progress"},{"location":"news/posts/2020-03-17-new-tutorial-and-opcode-additions/","text":"A new tutorial about subtractive synthesizers was shared by DSmolken's sample instruments experience applied in the Caveman Cosmonaut sample library. Some fixes and additions were made in our opcode database and in software as well, like the Windows OpenMPT music tracker by sagamusix. New contributions was provided by other users like jisaacstone, and a big contribution from jpcima for the effects section. Now we have also a new page for convenience that lists all opcodes present in our database.","title":"New tutorial and opcode additions"},{"location":"news/posts/2020-10-16-opcodes-page-update/","text":"For those who missed it we have some updates on the website, mainly regarding the opcodes page. Recently I've added a javascript library that permits tables column sorting, and now with an awesome contribution from @jpcima also a script to filter opcode names, versions and categories. Hope you'll find them handy!","title":"Opcodes page update"},{"location":"news/posts/2023-06-03-bootstrap-530-with-color-modes/","text":"Bootstrap updated to v5.3.0 which supports color modes , which means that if your system uses a dark color theme, it will adapt to your visual preferences on browsers that supports it. Highlight.js will adapt to the chosen theme, so the sfz examples will be shown with it.","title":"Bootstrap 5.3.0 with color modes"},{"location":"opcodes/","text":"All opcode versions , including extensions, starting in alphabetical order. Note that modulations such as (on)ccN and vel2* are included in the pages describing the parameters they modulate. Opcode links in red color represent obsolete opcodes which should not be used in new instruments.","title":"Opcodes"},{"location":"opcodes/_mod/","text":"ARIA extension specifying whether modulation of the target parameter should be additive or multiplicative. The default is add for all modulation targets except amplitude, which has mult as the default. Valid targets: delay, delay_beats, stop_beats, offset, pitch, tune, volume, amplitude, cutoff, resonance, fil_gain, cutoff2, resonance2, fil2_gain, pan, position, width. In addition, bitred and decim are also valid targets, though decim and bitred themselves are not implemented in ARIA. Examples cutoff_mod=mult amplitude_mod=add pitch_mod=add","title":" mod"},{"location":"opcodes/_mod/#examples","text":"cutoff_mod=mult amplitude_mod=add pitch_mod=add","title":"Examples"},{"location":"opcodes/amp_attack/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 Practical Considerations These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses. In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg , probably linear in cents, which won't translate into linear in Hertz). Decay and release stages have a curve which is faster than linear, and it seems to match \"well enough\" with a multiplicatively decreasing curve. The step size should be close to \\(\\mu = \\exp \\left( - \\frac{8.0}{t \\times s} \\right)\\) where \\(t\\) is the decay duration in seconds, and \\(s\\) is the sample rate in Hertz. The envelope \\(x_{n+1}\\) at index \\(n+1\\) is thus computed as \\(x_{n+1} = \\mu \\times x_{n}\\) . Here is a screenshot of a file output using Sforzando, showing the ampeg_envelope shape and its stages.","title":"Amp attack"},{"location":"opcodes/amp_attack/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1","title":"Examples"},{"location":"opcodes/amp_attack/#practical-considerations","text":"These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses. In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg , probably linear in cents, which won't translate into linear in Hertz). Decay and release stages have a curve which is faster than linear, and it seems to match \"well enough\" with a multiplicatively decreasing curve. The step size should be close to \\(\\mu = \\exp \\left( - \\frac{8.0}{t \\times s} \\right)\\) where \\(t\\) is the decay duration in seconds, and \\(s\\) is the sample rate in Hertz. The envelope \\(x_{n+1}\\) at index \\(n+1\\) is thus computed as \\(x_{n+1} = \\mu \\times x_{n}\\) . Here is a screenshot of a file output using Sforzando, showing the ampeg_envelope shape and its stages.","title":"Practical Considerations"},{"location":"opcodes/amp_decay/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Amp decay"},{"location":"opcodes/amp_decay/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/amp_delay/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"Amp delay"},{"location":"opcodes/amp_delay/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/amp_hold/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"Amp hold"},{"location":"opcodes/amp_hold/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/amp_keycenter/","text":"Examples amp_keycenter=60 amp_keycenter=48","title":"Amp keycenter"},{"location":"opcodes/amp_keycenter/#examples","text":"amp_keycenter=60 amp_keycenter=48","title":"Examples"},{"location":"opcodes/amp_keytrack/","text":"Examples amp_keytrack=-1.4 amp_keytrack=3","title":"Amp keytrack"},{"location":"opcodes/amp_keytrack/#examples","text":"amp_keytrack=-1.4 amp_keytrack=3","title":"Examples"},{"location":"opcodes/amp_random/","text":"Computed when the note is triggered, remains the same for that region for as long as the region plays. Examples amp_random=10 amp_random=3 volume=-3 amp_random=6 Practical Considerations In ARIA and Cakewalk, amp_random is unipolar. To create variation which can be either negative or positive, this needs to be combined with a fixed volume offset for half the negative value that amp_random is set to. In the rgc sfz player, amp_random is bipolar.","title":"Amp random"},{"location":"opcodes/amp_random/#examples","text":"amp_random=10 amp_random=3 volume=-3 amp_random=6","title":"Examples"},{"location":"opcodes/amp_random/#practical-considerations","text":"In ARIA and Cakewalk, amp_random is unipolar. To create variation which can be either negative or positive, this needs to be combined with a fixed volume offset for half the negative value that amp_random is set to. In the rgc sfz player, amp_random is bipolar.","title":"Practical Considerations"},{"location":"opcodes/amp_release/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal. Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother default cutoffs. Cakewalk products use 0.001.","title":"Amp release"},{"location":"opcodes/amp_release/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal. Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother default cutoffs. Cakewalk products use 0.001.","title":"Examples"},{"location":"opcodes/amp_sustain/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Amp sustain"},{"location":"opcodes/amp_sustain/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Examples"},{"location":"opcodes/amp_vel2attack/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 Practical Considerations These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses. In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg , probably linear in cents, which won't translate into linear in Hertz). Decay and release stages have a curve which is faster than linear, and it seems to match \"well enough\" with a multiplicatively decreasing curve. The step size should be close to \\(\\mu = \\exp \\left( - \\frac{8.0}{t \\times s} \\right)\\) where \\(t\\) is the decay duration in seconds, and \\(s\\) is the sample rate in Hertz. The envelope \\(x_{n+1}\\) at index \\(n+1\\) is thus computed as \\(x_{n+1} = \\mu \\times x_{n}\\) . Here is a screenshot of a file output using Sforzando, showing the ampeg_envelope shape and its stages.","title":"Amp vel2attack"},{"location":"opcodes/amp_vel2attack/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1","title":"Examples"},{"location":"opcodes/amp_vel2attack/#practical-considerations","text":"These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses. In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg , probably linear in cents, which won't translate into linear in Hertz). Decay and release stages have a curve which is faster than linear, and it seems to match \"well enough\" with a multiplicatively decreasing curve. The step size should be close to \\(\\mu = \\exp \\left( - \\frac{8.0}{t \\times s} \\right)\\) where \\(t\\) is the decay duration in seconds, and \\(s\\) is the sample rate in Hertz. The envelope \\(x_{n+1}\\) at index \\(n+1\\) is thus computed as \\(x_{n+1} = \\mu \\times x_{n}\\) . Here is a screenshot of a file output using Sforzando, showing the ampeg_envelope shape and its stages.","title":"Practical Considerations"},{"location":"opcodes/amp_vel2decay/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Amp vel2decay"},{"location":"opcodes/amp_vel2decay/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/amp_vel2delay/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"Amp vel2delay"},{"location":"opcodes/amp_vel2delay/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/amp_vel2hold/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"Amp vel2hold"},{"location":"opcodes/amp_vel2hold/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/amp_vel2release/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal. Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother default cutoffs. Cakewalk products use 0.001.","title":"Amp vel2release"},{"location":"opcodes/amp_vel2release/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal. Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother default cutoffs. Cakewalk products use 0.001.","title":"Examples"},{"location":"opcodes/amp_vel2sustain/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Amp vel2sustain"},{"location":"opcodes/amp_vel2sustain/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Examples"},{"location":"opcodes/amp_velcurve_N/","text":"This opcode range allows defining a specific point along the amplifier velocity curve. The value of the opcode indicates the normalized amplitude (0 to 1) for the specified velocity. N can be from 0 to 127. The player will interpolate lineraly between specified opcodes for unspecified ones: amp_velcurve_1=0.2 amp_velcurve_3=0.3 // amp_velcurve_2 is calculated to 0.25 If amp_velcurve_127 is not specified, the player will assign it the value of 1. Examples There are several common ways to use this opcode. One is to reduce the dynamic range so that low-velocity notes will still produce a fairly loud sound. This is similar (but probably not quite identical mathematically) to setting amp_veltrack to less than 100. // linear, compressed dynamic range // amplitude changes from 0.5 to 1 amp_velcurve_1=0.5 It can also be used to set up a specific velocity response. amp_velcurve_1=0.1 amp_velcurve_63=0.25 amp_velcurve_95=0.5 This opcode is also often used with dynamic layers to make each sample play at its full amplitude at the top of its velocity layer, as shown below for a kick drum with four dynamic layers. Note that there's no reason to set amp_velcurve_N values for N below the lovel or above the hivel for a particular region. So, in practice, this often ends up meaning just setting amp_velcurve_N=1 with N being equal to the hivel value for each layer. hivel=31 amp_velcurve_31=1 sample=kick_vl1.wav lovel=32 hivel=63 amp_velcurve_63=1 sample=kick_vl2.wav lovel=64 hivel=95 amp_velcurve_95=1 sample=kick_vl3.wav lovel=96 sample=kick_vl4.wav This could also be combined with the first example so that velocity 1 hits will still be reasonably audible. hivel=31 amp_velcurve_1=0.3 amp_velcurve_31=1 sample=kick_vl1.wav lovel=32 hivel=63 amp_velcurve_63=1 sample=kick_vl2.wav lovel=64 hivel=95 amp_velcurve_95=1 sample=kick_vl3.wav lovel=96 sample=kick_vl4.wav Practical Considerations As a MIDI velocity 0 note is a note-off message, amp_velcurve_0 never actually needs to be set. It just creates a slightly different starting point for one side of the interpolation, compared to setting amp_velcurve_1. By default, amp_velcurve_0 is effectively 0. If amp_velcurve is not set for any N, then amp_velcurve_0 is 0 and amp_velcurve_127 is 1, and the volume for notes with velocity is the same as if amp_velcurve_1=0.007874016. Both amp_velcurve_n and amp_veltrack can be used together, though there's probably more risk of confusion than benefit to doing this. External Links Online curve generator Online curve generator v2 (supports negative values)","title":"amp velcurve N"},{"location":"opcodes/amp_velcurve_N/#examples","text":"There are several common ways to use this opcode. One is to reduce the dynamic range so that low-velocity notes will still produce a fairly loud sound. This is similar (but probably not quite identical mathematically) to setting amp_veltrack to less than 100. // linear, compressed dynamic range // amplitude changes from 0.5 to 1 amp_velcurve_1=0.5 It can also be used to set up a specific velocity response. amp_velcurve_1=0.1 amp_velcurve_63=0.25 amp_velcurve_95=0.5 This opcode is also often used with dynamic layers to make each sample play at its full amplitude at the top of its velocity layer, as shown below for a kick drum with four dynamic layers. Note that there's no reason to set amp_velcurve_N values for N below the lovel or above the hivel for a particular region. So, in practice, this often ends up meaning just setting amp_velcurve_N=1 with N being equal to the hivel value for each layer. hivel=31 amp_velcurve_31=1 sample=kick_vl1.wav lovel=32 hivel=63 amp_velcurve_63=1 sample=kick_vl2.wav lovel=64 hivel=95 amp_velcurve_95=1 sample=kick_vl3.wav lovel=96 sample=kick_vl4.wav This could also be combined with the first example so that velocity 1 hits will still be reasonably audible. hivel=31 amp_velcurve_1=0.3 amp_velcurve_31=1 sample=kick_vl1.wav lovel=32 hivel=63 amp_velcurve_63=1 sample=kick_vl2.wav lovel=64 hivel=95 amp_velcurve_95=1 sample=kick_vl3.wav lovel=96 sample=kick_vl4.wav","title":"Examples"},{"location":"opcodes/amp_velcurve_N/#practical-considerations","text":"As a MIDI velocity 0 note is a note-off message, amp_velcurve_0 never actually needs to be set. It just creates a slightly different starting point for one side of the interpolation, compared to setting amp_velcurve_1. By default, amp_velcurve_0 is effectively 0. If amp_velcurve is not set for any N, then amp_velcurve_0 is 0 and amp_velcurve_127 is 1, and the volume for notes with velocity is the same as if amp_velcurve_1=0.007874016. Both amp_velcurve_n and amp_veltrack can be used together, though there's probably more risk of confusion than benefit to doing this.","title":"Practical Considerations"},{"location":"opcodes/amp_velcurve_N/#external-links","text":"Online curve generator Online curve generator v2 (supports negative values)","title":"External Links"},{"location":"opcodes/amp_veltrack/","text":"With amp_veltrack at the default value of 100, volume is modified by the amount calculated by the following expression, based on incoming velocity. \\[ Gain(v) = 20 * log_{10}[(\\frac{v}{127})^2] dB \\] The amp_velcurve_N opcodes allow overriding the default velocity curve, and are useful for making more complex curves than amp_veltrack allows. Examples amp_veltrack=0 amp_veltrack=100 Allowed values are from -100 (which would make velocity 127 notes silent, and low-velocity notes loud) to 100, but for most practical purposes this paramter is generally set to either 0 or 100.","title":"Amp veltrack"},{"location":"opcodes/amp_veltrack/#examples","text":"amp_veltrack=0 amp_veltrack=100 Allowed values are from -100 (which would make velocity 127 notes silent, and low-velocity notes loud) to 100, but for most practical purposes this paramter is generally set to either 0 or 100.","title":"Examples"},{"location":"opcodes/amp_veltrack_ccN/","text":"With amp_veltrack at the default value of 100, volume is modified by the amount calculated by the following expression, based on incoming velocity. \\[ Gain(v) = 20 * log_{10}[(\\frac{v}{127})^2] dB \\] The amp_velcurve_N opcodes allow overriding the default velocity curve, and are useful for making more complex curves than amp_veltrack allows. Examples amp_veltrack=0 amp_veltrack=100 Allowed values are from -100 (which would make velocity 127 notes silent, and low-velocity notes loud) to 100, but for most practical purposes this paramter is generally set to either 0 or 100.","title":"amp veltrack ccN"},{"location":"opcodes/amp_veltrack_ccN/#examples","text":"amp_veltrack=0 amp_veltrack=100 Allowed values are from -100 (which would make velocity 127 notes silent, and low-velocity notes loud) to 100, but for most practical purposes this paramter is generally set to either 0 or 100.","title":"Examples"},{"location":"opcodes/amp_veltrack_curveccN/","text":"With amp_veltrack at the default value of 100, volume is modified by the amount calculated by the following expression, based on incoming velocity. \\[ Gain(v) = 20 * log_{10}[(\\frac{v}{127})^2] dB \\] The amp_velcurve_N opcodes allow overriding the default velocity curve, and are useful for making more complex curves than amp_veltrack allows. Examples amp_veltrack=0 amp_veltrack=100 Allowed values are from -100 (which would make velocity 127 notes silent, and low-velocity notes loud) to 100, but for most practical purposes this paramter is generally set to either 0 or 100.","title":"amp veltrack curveccN"},{"location":"opcodes/amp_veltrack_curveccN/#examples","text":"amp_veltrack=0 amp_veltrack=100 Allowed values are from -100 (which would make velocity 127 notes silent, and low-velocity notes loud) to 100, but for most practical purposes this paramter is generally set to either 0 or 100.","title":"Examples"},{"location":"opcodes/amp_veltrack_onccN/","text":"With amp_veltrack at the default value of 100, volume is modified by the amount calculated by the following expression, based on incoming velocity. \\[ Gain(v) = 20 * log_{10}[(\\frac{v}{127})^2] dB \\] The amp_velcurve_N opcodes allow overriding the default velocity curve, and are useful for making more complex curves than amp_veltrack allows. Examples amp_veltrack=0 amp_veltrack=100 Allowed values are from -100 (which would make velocity 127 notes silent, and low-velocity notes loud) to 100, but for most practical purposes this paramter is generally set to either 0 or 100.","title":"amp veltrack onccN"},{"location":"opcodes/amp_veltrack_onccN/#examples","text":"amp_veltrack=0 amp_veltrack=100 Allowed values are from -100 (which would make velocity 127 notes silent, and low-velocity notes loud) to 100, but for most practical purposes this paramter is generally set to either 0 or 100.","title":"Examples"},{"location":"opcodes/amp_veltrack_random/","text":"","title":"Amp veltrack random"},{"location":"opcodes/ampeg_attack/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 Practical Considerations These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses. In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg , probably linear in cents, which won't translate into linear in Hertz). Decay and release stages have a curve which is faster than linear, and it seems to match \"well enough\" with a multiplicatively decreasing curve. The step size should be close to \\(\\mu = \\exp \\left( - \\frac{8.0}{t \\times s} \\right)\\) where \\(t\\) is the decay duration in seconds, and \\(s\\) is the sample rate in Hertz. The envelope \\(x_{n+1}\\) at index \\(n+1\\) is thus computed as \\(x_{n+1} = \\mu \\times x_{n}\\) . Here is a screenshot of a file output using Sforzando, showing the ampeg_envelope shape and its stages.","title":"Ampeg attack"},{"location":"opcodes/ampeg_attack/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1","title":"Examples"},{"location":"opcodes/ampeg_attack/#practical-considerations","text":"These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses. In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg , probably linear in cents, which won't translate into linear in Hertz). Decay and release stages have a curve which is faster than linear, and it seems to match \"well enough\" with a multiplicatively decreasing curve. The step size should be close to \\(\\mu = \\exp \\left( - \\frac{8.0}{t \\times s} \\right)\\) where \\(t\\) is the decay duration in seconds, and \\(s\\) is the sample rate in Hertz. The envelope \\(x_{n+1}\\) at index \\(n+1\\) is thus computed as \\(x_{n+1} = \\mu \\times x_{n}\\) . Here is a screenshot of a file output using Sforzando, showing the ampeg_envelope shape and its stages.","title":"Practical Considerations"},{"location":"opcodes/ampeg_attack_curveccN/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 Practical Considerations These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses. In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg , probably linear in cents, which won't translate into linear in Hertz). Decay and release stages have a curve which is faster than linear, and it seems to match \"well enough\" with a multiplicatively decreasing curve. The step size should be close to \\(\\mu = \\exp \\left( - \\frac{8.0}{t \\times s} \\right)\\) where \\(t\\) is the decay duration in seconds, and \\(s\\) is the sample rate in Hertz. The envelope \\(x_{n+1}\\) at index \\(n+1\\) is thus computed as \\(x_{n+1} = \\mu \\times x_{n}\\) . Here is a screenshot of a file output using Sforzando, showing the ampeg_envelope shape and its stages.","title":"ampeg attack curveccN"},{"location":"opcodes/ampeg_attack_curveccN/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1","title":"Examples"},{"location":"opcodes/ampeg_attack_curveccN/#practical-considerations","text":"These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses. In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg , probably linear in cents, which won't translate into linear in Hertz). Decay and release stages have a curve which is faster than linear, and it seems to match \"well enough\" with a multiplicatively decreasing curve. The step size should be close to \\(\\mu = \\exp \\left( - \\frac{8.0}{t \\times s} \\right)\\) where \\(t\\) is the decay duration in seconds, and \\(s\\) is the sample rate in Hertz. The envelope \\(x_{n+1}\\) at index \\(n+1\\) is thus computed as \\(x_{n+1} = \\mu \\times x_{n}\\) . Here is a screenshot of a file output using Sforzando, showing the ampeg_envelope shape and its stages.","title":"Practical Considerations"},{"location":"opcodes/ampeg_attack_onccN/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 Practical Considerations These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses. In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg , probably linear in cents, which won't translate into linear in Hertz). Decay and release stages have a curve which is faster than linear, and it seems to match \"well enough\" with a multiplicatively decreasing curve. The step size should be close to \\(\\mu = \\exp \\left( - \\frac{8.0}{t \\times s} \\right)\\) where \\(t\\) is the decay duration in seconds, and \\(s\\) is the sample rate in Hertz. The envelope \\(x_{n+1}\\) at index \\(n+1\\) is thus computed as \\(x_{n+1} = \\mu \\times x_{n}\\) . Here is a screenshot of a file output using Sforzando, showing the ampeg_envelope shape and its stages.","title":"ampeg attack onccN"},{"location":"opcodes/ampeg_attack_onccN/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1","title":"Examples"},{"location":"opcodes/ampeg_attack_onccN/#practical-considerations","text":"These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses. In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg , probably linear in cents, which won't translate into linear in Hertz). Decay and release stages have a curve which is faster than linear, and it seems to match \"well enough\" with a multiplicatively decreasing curve. The step size should be close to \\(\\mu = \\exp \\left( - \\frac{8.0}{t \\times s} \\right)\\) where \\(t\\) is the decay duration in seconds, and \\(s\\) is the sample rate in Hertz. The envelope \\(x_{n+1}\\) at index \\(n+1\\) is thus computed as \\(x_{n+1} = \\mu \\times x_{n}\\) . Here is a screenshot of a file output using Sforzando, showing the ampeg_envelope shape and its stages.","title":"Practical Considerations"},{"location":"opcodes/ampeg_attack_shape/","text":"0 is linear. Positive values are slower curves (that means the envelope will initially not fade in much, and most of the fade in will happen towards the end of the attack period) and negative values faster (quick initial fade in with the latter part of the attack stage fading in less). Past 10 or -10, there's little difference - at that point, the envelope is practically a horizontal line and a vertical line (if positive) or a vertical line followed by a horizontal line (if negative). Examples ampeg_attack_shape=2.1 ampeg_attack_shape=-3.8 Graphical representations As aid to estimate what the values will do, here some examples. All curves were made at 120bpm with ampeg_attack=1 , note held for 2 seconds. Each vertical line represents 0.5 seconds.","title":"Ampeg attack shape"},{"location":"opcodes/ampeg_attack_shape/#examples","text":"ampeg_attack_shape=2.1 ampeg_attack_shape=-3.8","title":"Examples"},{"location":"opcodes/ampeg_attack_shape/#graphical-representations","text":"As aid to estimate what the values will do, here some examples. All curves were made at 120bpm with ampeg_attack=1 , note held for 2 seconds. Each vertical line represents 0.5 seconds.","title":"Graphical representations"},{"location":"opcodes/ampeg_attackccN/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 Practical Considerations These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses. In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg , probably linear in cents, which won't translate into linear in Hertz). Decay and release stages have a curve which is faster than linear, and it seems to match \"well enough\" with a multiplicatively decreasing curve. The step size should be close to \\(\\mu = \\exp \\left( - \\frac{8.0}{t \\times s} \\right)\\) where \\(t\\) is the decay duration in seconds, and \\(s\\) is the sample rate in Hertz. The envelope \\(x_{n+1}\\) at index \\(n+1\\) is thus computed as \\(x_{n+1} = \\mu \\times x_{n}\\) . Here is a screenshot of a file output using Sforzando, showing the ampeg_envelope shape and its stages.","title":"ampeg attackccN"},{"location":"opcodes/ampeg_attackccN/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1","title":"Examples"},{"location":"opcodes/ampeg_attackccN/#practical-considerations","text":"These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses. In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg , probably linear in cents, which won't translate into linear in Hertz). Decay and release stages have a curve which is faster than linear, and it seems to match \"well enough\" with a multiplicatively decreasing curve. The step size should be close to \\(\\mu = \\exp \\left( - \\frac{8.0}{t \\times s} \\right)\\) where \\(t\\) is the decay duration in seconds, and \\(s\\) is the sample rate in Hertz. The envelope \\(x_{n+1}\\) at index \\(n+1\\) is thus computed as \\(x_{n+1} = \\mu \\times x_{n}\\) . Here is a screenshot of a file output using Sforzando, showing the ampeg_envelope shape and its stages.","title":"Practical Considerations"},{"location":"opcodes/ampeg_decay/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Ampeg decay"},{"location":"opcodes/ampeg_decay/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/ampeg_decay_curveccN/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"ampeg decay curveccN"},{"location":"opcodes/ampeg_decay_curveccN/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/ampeg_decay_onccN/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"ampeg decay onccN"},{"location":"opcodes/ampeg_decay_onccN/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/ampeg_decay_shape/","text":"0 is linear, positive values are slower curves (that means the envelope will initially not decay out much, and most of the decay will happen towards the end of the decay period) and negative values faster (quick initial decay with quiet tail decaying more slowly). Examples ampeg_decay_shape=2.1 ampeg_decay_shape=-3.8 Graphical representations As aid to estimate what the values will do, here some examples. All curves were made at 120bpm with ampeg_decay=1 and ampeg_sustain=1 , note held for 2 seconds. Each vertical line represents 0.5 seconds.","title":"Ampeg decay shape"},{"location":"opcodes/ampeg_decay_shape/#examples","text":"ampeg_decay_shape=2.1 ampeg_decay_shape=-3.8","title":"Examples"},{"location":"opcodes/ampeg_decay_shape/#graphical-representations","text":"As aid to estimate what the values will do, here some examples. All curves were made at 120bpm with ampeg_decay=1 and ampeg_sustain=1 , note held for 2 seconds. Each vertical line represents 0.5 seconds.","title":"Graphical representations"},{"location":"opcodes/ampeg_decay_zero/","text":"When 1, indicates decay time is the time it would take to get from 0dBs to -oo, NOT the time to reach current sustain (as when 0). 1 and 0 must be used, true/false or on/off don't appear to be supported. In other words, under default behavior, the decay slope is fixed, and the higher the sustain level of the envelope, the less time the decay stage will actually take. Changing ampeg_sustain will change the actual duration of the decay stage as well, up to a maximum of the full ampeg_decay value at ampeg_sustain equal to 0. Setting this to 0 will make the decay always happen during the entire time period specified by ampeg_decay , regardless of the current ampeg_sustain level. Examples ampeg_decay_zero=0 ampeg_decay_zero=1","title":"Ampeg decay zero"},{"location":"opcodes/ampeg_decay_zero/#examples","text":"ampeg_decay_zero=0 ampeg_decay_zero=1","title":"Examples"},{"location":"opcodes/ampeg_decayccN/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"ampeg decayccN"},{"location":"opcodes/ampeg_decayccN/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/ampeg_delay/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"Ampeg delay"},{"location":"opcodes/ampeg_delay/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/ampeg_delay_curveccN/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"ampeg delay curveccN"},{"location":"opcodes/ampeg_delay_curveccN/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/ampeg_delay_onccN/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"ampeg delay onccN"},{"location":"opcodes/ampeg_delay_onccN/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/ampeg_delayccN/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"ampeg delayccN"},{"location":"opcodes/ampeg_delayccN/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/ampeg_dynamic/","text":"When 1, causes envelope segment durations and sustain level to be recalculated when a MIDI CC message modulating those envelopes is received. When 0, envelope segment durations and sustain level are calculated only at the start of the particular envelope segment. Examples ampeg_dynamic=1 ampeg_dynamic=0","title":"Ampeg dynamic"},{"location":"opcodes/ampeg_dynamic/#examples","text":"ampeg_dynamic=1 ampeg_dynamic=0","title":"Examples"},{"location":"opcodes/ampeg_hold/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"Ampeg hold"},{"location":"opcodes/ampeg_hold/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/ampeg_hold_curveccN/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"ampeg hold curveccN"},{"location":"opcodes/ampeg_hold_curveccN/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/ampeg_hold_onccN/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"ampeg hold onccN"},{"location":"opcodes/ampeg_hold_onccN/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/ampeg_holdccN/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"ampeg holdccN"},{"location":"opcodes/ampeg_holdccN/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/ampeg_release/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal. Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother default cutoffs. Cakewalk products use 0.001.","title":"Ampeg release"},{"location":"opcodes/ampeg_release/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal. Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother default cutoffs. Cakewalk products use 0.001.","title":"Examples"},{"location":"opcodes/ampeg_release_curveccN/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal. Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother default cutoffs. Cakewalk products use 0.001.","title":"ampeg release curveccN"},{"location":"opcodes/ampeg_release_curveccN/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal. Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother default cutoffs. Cakewalk products use 0.001.","title":"Examples"},{"location":"opcodes/ampeg_release_onccN/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal. Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother default cutoffs. Cakewalk products use 0.001.","title":"ampeg release onccN"},{"location":"opcodes/ampeg_release_onccN/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal. Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother default cutoffs. Cakewalk products use 0.001.","title":"Examples"},{"location":"opcodes/ampeg_release_shape/","text":"0 is linear, positive values are slower curves (that means the envelope will initially not fade out much, and most of the fade will happen towards the end of the release period) and negative values faster (quick initial fadeout with quiet tail fading out more slowly). Examples ampeg_release_shape=2.1 ampeg_release_shape=-3.8","title":"Ampeg release shape"},{"location":"opcodes/ampeg_release_shape/#examples","text":"ampeg_release_shape=2.1 ampeg_release_shape=-3.8","title":"Examples"},{"location":"opcodes/ampeg_release_zero/","text":"When 1, indicates release time is the time it would take to get from 0dBs to -oo (actually -90 dB as implemented in ARIA), NOT the time to get from the current sustain to zero. In other words, under default behavior, the release time is fixed, while setting this to 1 makes the release slope fixed but time will be shorter when sustain level is lower. Examples ampeg_release_zero=1 ampeg_release_zero=0","title":"Ampeg release zero"},{"location":"opcodes/ampeg_release_zero/#examples","text":"ampeg_release_zero=1 ampeg_release_zero=0","title":"Examples"},{"location":"opcodes/ampeg_releaseccN/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal. Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother default cutoffs. Cakewalk products use 0.001.","title":"ampeg releaseccN"},{"location":"opcodes/ampeg_releaseccN/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal. Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother default cutoffs. Cakewalk products use 0.001.","title":"Examples"},{"location":"opcodes/ampeg_start/","text":"Examples ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"Ampeg start"},{"location":"opcodes/ampeg_start/#examples","text":"ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"Examples"},{"location":"opcodes/ampeg_start_curveccN/","text":"Examples ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"ampeg start curveccN"},{"location":"opcodes/ampeg_start_curveccN/#examples","text":"ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"Examples"},{"location":"opcodes/ampeg_start_onccN/","text":"Examples ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"ampeg start onccN"},{"location":"opcodes/ampeg_start_onccN/#examples","text":"ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"Examples"},{"location":"opcodes/ampeg_startccN/","text":"Examples ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"ampeg startccN"},{"location":"opcodes/ampeg_startccN/#examples","text":"ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"Examples"},{"location":"opcodes/ampeg_sustain/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Ampeg sustain"},{"location":"opcodes/ampeg_sustain/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Examples"},{"location":"opcodes/ampeg_sustain_curveccN/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"ampeg sustain curveccN"},{"location":"opcodes/ampeg_sustain_curveccN/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Examples"},{"location":"opcodes/ampeg_sustain_onccN/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"ampeg sustain onccN"},{"location":"opcodes/ampeg_sustain_onccN/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Examples"},{"location":"opcodes/ampeg_sustainccN/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"ampeg sustainccN"},{"location":"opcodes/ampeg_sustainccN/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Examples"},{"location":"opcodes/ampeg_vel2attack/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 Practical Considerations These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses. In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg , probably linear in cents, which won't translate into linear in Hertz). Decay and release stages have a curve which is faster than linear, and it seems to match \"well enough\" with a multiplicatively decreasing curve. The step size should be close to \\(\\mu = \\exp \\left( - \\frac{8.0}{t \\times s} \\right)\\) where \\(t\\) is the decay duration in seconds, and \\(s\\) is the sample rate in Hertz. The envelope \\(x_{n+1}\\) at index \\(n+1\\) is thus computed as \\(x_{n+1} = \\mu \\times x_{n}\\) . Here is a screenshot of a file output using Sforzando, showing the ampeg_envelope shape and its stages.","title":"Ampeg vel2attack"},{"location":"opcodes/ampeg_vel2attack/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1","title":"Examples"},{"location":"opcodes/ampeg_vel2attack/#practical-considerations","text":"These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses. In ARIA, the SFZ1 envelopes have linear attack (for pitcheg and fileg , probably linear in cents, which won't translate into linear in Hertz). Decay and release stages have a curve which is faster than linear, and it seems to match \"well enough\" with a multiplicatively decreasing curve. The step size should be close to \\(\\mu = \\exp \\left( - \\frac{8.0}{t \\times s} \\right)\\) where \\(t\\) is the decay duration in seconds, and \\(s\\) is the sample rate in Hertz. The envelope \\(x_{n+1}\\) at index \\(n+1\\) is thus computed as \\(x_{n+1} = \\mu \\times x_{n}\\) . Here is a screenshot of a file output using Sforzando, showing the ampeg_envelope shape and its stages.","title":"Practical Considerations"},{"location":"opcodes/ampeg_vel2decay/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Ampeg vel2decay"},{"location":"opcodes/ampeg_vel2decay/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/ampeg_vel2delay/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"Ampeg vel2delay"},{"location":"opcodes/ampeg_vel2delay/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/ampeg_vel2hold/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"Ampeg vel2hold"},{"location":"opcodes/ampeg_vel2hold/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/ampeg_vel2release/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal. Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother default cutoffs. Cakewalk products use 0.001.","title":"Ampeg vel2release"},{"location":"opcodes/ampeg_vel2release/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal. Although the spec default is 0.001, ARIA uses a default of 0.03 for smoother default cutoffs. Cakewalk products use 0.001.","title":"Examples"},{"location":"opcodes/ampeg_vel2sustain/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Ampeg vel2sustain"},{"location":"opcodes/ampeg_vel2sustain/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Examples"},{"location":"opcodes/amplfo_delay/","text":"Examples pitchlfo_delay=1 amplfo_delay=0.4 This is very useful, as many instruments and vocals don't trigger vibrato immediately when a note starts, but slightly later.","title":"Amplfo delay"},{"location":"opcodes/amplfo_delay/#examples","text":"pitchlfo_delay=1 amplfo_delay=0.4 This is very useful, as many instruments and vocals don't trigger vibrato immediately when a note starts, but slightly later.","title":"Examples"},{"location":"opcodes/amplfo_depth/","text":"Examples amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Amplfo depth"},{"location":"opcodes/amplfo_depth/#examples","text":"amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Examples"},{"location":"opcodes/amplfo_depth_onccN/","text":"Examples amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"amplfo depth onccN"},{"location":"opcodes/amplfo_depth_onccN/#examples","text":"amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Examples"},{"location":"opcodes/amplfo_depthccN/","text":"Examples amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"amplfo depthccN"},{"location":"opcodes/amplfo_depthccN/#examples","text":"amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Examples"},{"location":"opcodes/amplfo_depthchanaft/","text":"Examples amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Amplfo depthchanaft"},{"location":"opcodes/amplfo_depthchanaft/#examples","text":"amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Examples"},{"location":"opcodes/amplfo_depthpolyaft/","text":"Examples amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Amplfo depthpolyaft"},{"location":"opcodes/amplfo_depthpolyaft/#examples","text":"amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Examples"},{"location":"opcodes/amplfo_fade/","text":"Examples amplfo_fade=1 pitchlfo_fade=0.4 Useful for vibrato which grows in intensity gradually, as commonly performed by bowed string players.","title":"Amplfo fade"},{"location":"opcodes/amplfo_fade/#examples","text":"amplfo_fade=1 pitchlfo_fade=0.4 Useful for vibrato which grows in intensity gradually, as commonly performed by bowed string players.","title":"Examples"},{"location":"opcodes/amplfo_freq/","text":"Examples amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Amplfo freq"},{"location":"opcodes/amplfo_freq/#examples","text":"amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Examples"},{"location":"opcodes/amplfo_freqccN/","text":"Examples amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"amplfo freqccN"},{"location":"opcodes/amplfo_freqccN/#examples","text":"amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Examples"},{"location":"opcodes/amplfo_freqchanaft/","text":"Examples amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Amplfo freqchanaft"},{"location":"opcodes/amplfo_freqchanaft/#examples","text":"amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Examples"},{"location":"opcodes/amplfo_freqpolyaft/","text":"Examples amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Amplfo freqpolyaft"},{"location":"opcodes/amplfo_freqpolyaft/#examples","text":"amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Examples"},{"location":"opcodes/amplitude/","text":"100% amplitude meaning no volume change is applied to the sample when played. Can be modulated with MIDI CC. Note: Range in the table below is 0 to 100, but some players such as Aria/Sforazando do not clamp the range. Negative values invert the signal. Examples amplitude=12 amplitude=40 amplitude_oncc108=100 amplitude_oncc50=35 When modulated by MIDI CC, this is a very convenient way to set up a volume control which goes from silence to full volume. See also the \u2039curve\u203a header example.","title":"Amplitude"},{"location":"opcodes/amplitude/#examples","text":"amplitude=12 amplitude=40 amplitude_oncc108=100 amplitude_oncc50=35 When modulated by MIDI CC, this is a very convenient way to set up a volume control which goes from silence to full volume. See also the \u2039curve\u203a header example.","title":"Examples"},{"location":"opcodes/amplitude_ccN/","text":"100% amplitude meaning no volume change is applied to the sample when played. Can be modulated with MIDI CC. Note: Range in the table below is 0 to 100, but some players such as Aria/Sforazando do not clamp the range. Negative values invert the signal. Examples amplitude=12 amplitude=40 amplitude_oncc108=100 amplitude_oncc50=35 When modulated by MIDI CC, this is a very convenient way to set up a volume control which goes from silence to full volume. See also the \u2039curve\u203a header example.","title":"amplitude ccN"},{"location":"opcodes/amplitude_ccN/#examples","text":"amplitude=12 amplitude=40 amplitude_oncc108=100 amplitude_oncc50=35 When modulated by MIDI CC, this is a very convenient way to set up a volume control which goes from silence to full volume. See also the \u2039curve\u203a header example.","title":"Examples"},{"location":"opcodes/amplitude_curveccN/","text":"100% amplitude meaning no volume change is applied to the sample when played. Can be modulated with MIDI CC. Note: Range in the table below is 0 to 100, but some players such as Aria/Sforazando do not clamp the range. Negative values invert the signal. Examples amplitude=12 amplitude=40 amplitude_oncc108=100 amplitude_oncc50=35 When modulated by MIDI CC, this is a very convenient way to set up a volume control which goes from silence to full volume. See also the \u2039curve\u203a header example.","title":"amplitude curveccN"},{"location":"opcodes/amplitude_curveccN/#examples","text":"amplitude=12 amplitude=40 amplitude_oncc108=100 amplitude_oncc50=35 When modulated by MIDI CC, this is a very convenient way to set up a volume control which goes from silence to full volume. See also the \u2039curve\u203a header example.","title":"Examples"},{"location":"opcodes/amplitude_onccN/","text":"100% amplitude meaning no volume change is applied to the sample when played. Can be modulated with MIDI CC. Note: Range in the table below is 0 to 100, but some players such as Aria/Sforazando do not clamp the range. Negative values invert the signal. Examples amplitude=12 amplitude=40 amplitude_oncc108=100 amplitude_oncc50=35 When modulated by MIDI CC, this is a very convenient way to set up a volume control which goes from silence to full volume. See also the \u2039curve\u203a header example.","title":"amplitude onccN"},{"location":"opcodes/amplitude_onccN/#examples","text":"amplitude=12 amplitude=40 amplitude_oncc108=100 amplitude_oncc50=35 When modulated by MIDI CC, this is a very convenient way to set up a volume control which goes from silence to full volume. See also the \u2039curve\u203a header example.","title":"Examples"},{"location":"opcodes/amplitude_smoothccN/","text":"100% amplitude meaning no volume change is applied to the sample when played. Can be modulated with MIDI CC. Note: Range in the table below is 0 to 100, but some players such as Aria/Sforazando do not clamp the range. Negative values invert the signal. Examples amplitude=12 amplitude=40 amplitude_oncc108=100 amplitude_oncc50=35 When modulated by MIDI CC, this is a very convenient way to set up a volume control which goes from silence to full volume. See also the \u2039curve\u203a header example.","title":"amplitude smoothccN"},{"location":"opcodes/amplitude_smoothccN/#examples","text":"amplitude=12 amplitude=40 amplitude_oncc108=100 amplitude_oncc50=35 When modulated by MIDI CC, this is a very convenient way to set up a volume control which goes from silence to full volume. See also the \u2039curve\u203a header example.","title":"Examples"},{"location":"opcodes/apan_depth/","text":"Used under the \u2039effect\u203a header, with type = apan .","title":"Apan depth"},{"location":"opcodes/apan_depth_onccN/","text":"Used under the \u2039effect\u203a header, with type = apan .","title":"apan depth onccN"},{"location":"opcodes/apan_dry/","text":"Used under the \u2039effect\u203a header, with type = apan .","title":"Apan dry"},{"location":"opcodes/apan_dry_onccN/","text":"Used under the \u2039effect\u203a header, with type = apan .","title":"apan dry onccN"},{"location":"opcodes/apan_freq/","text":"Used under the \u2039effect\u203a header, with type = apan .","title":"Apan freq"},{"location":"opcodes/apan_freq_onccN/","text":"Used under the \u2039effect\u203a header, with type = apan .","title":"apan freq onccN"},{"location":"opcodes/apan_phase/","text":"Used under the \u2039effect\u203a header, with type = apan .","title":"Apan phase"},{"location":"opcodes/apan_phase_onccN/","text":"Used under the \u2039effect\u203a header, with type = apan .","title":"apan phase onccN"},{"location":"opcodes/apan_waveform/","text":"Used under the \u2039effect\u203a header, with type = apan .","title":"Apan waveform"},{"location":"opcodes/apan_wet/","text":"Used under the \u2039effect\u203a header, with type = apan .","title":"Apan wet"},{"location":"opcodes/apan_wet_onccN/","text":"Used under the \u2039effect\u203a header, with type = apan .","title":"apan wet onccN"},{"location":"opcodes/bend_down/","text":"If bend_up is set to a positive value, then moving the pitch wheel down will cause the pitch to move up. Examples bend_down=1200 bend_down=100 Positive values of bend_down can be useful with instruments such as zithers or guitars, whose construction makes it practical to bend the pitch of notes up, but not down - this way, moving the pitch wheel in either direction will result in a realistic-sounding upwards bend.","title":"Bend down"},{"location":"opcodes/bend_down/#examples","text":"bend_down=1200 bend_down=100 Positive values of bend_down can be useful with instruments such as zithers or guitars, whose construction makes it practical to bend the pitch of notes up, but not down - this way, moving the pitch wheel in either direction will result in a realistic-sounding upwards bend.","title":"Examples"},{"location":"opcodes/bend_smooth/","text":"Sets the smoothness for pitch bend in milliseconds. Adds inertia to the bends, so fast movements of the controller will have a delayed, smoothed effect, similar to smoothccN . Examples bend_smooth=50 bend_smooth=10","title":"Bend smooth"},{"location":"opcodes/bend_smooth/#examples","text":"bend_smooth=50 bend_smooth=10","title":"Examples"},{"location":"opcodes/bend_step/","text":"Examples bend_step=100 // glissando in semitones bend_step=200 // glissando in whole tones bend_step=1200 // leap an entire octave at a time","title":"Bend step"},{"location":"opcodes/bend_step/#examples","text":"bend_step=100 // glissando in semitones bend_step=200 // glissando in whole tones bend_step=1200 // leap an entire octave at a time","title":"Examples"},{"location":"opcodes/bend_stepdown/","text":"Examples bend_stepdown=100 // glissando in semitones bend_stepdown=200 // glissando in whole tones bend_stepdown=1200 //leap an entire octave at a time","title":"Bend stepdown"},{"location":"opcodes/bend_stepdown/#examples","text":"bend_stepdown=100 // glissando in semitones bend_stepdown=200 // glissando in whole tones bend_stepdown=1200 //leap an entire octave at a time","title":"Examples"},{"location":"opcodes/bend_stepup/","text":"If this is set to the same value as bend_stepdown , the result is the same as using bend_step . Examples bend_stepup=100 // glissando in semitones bend_stepup=200 // glissando in whole tones bend_stepup=1200 //leap an entire octave at a time","title":"Bend stepup"},{"location":"opcodes/bend_stepup/#examples","text":"bend_stepup=100 // glissando in semitones bend_stepup=200 // glissando in whole tones bend_stepup=1200 //leap an entire octave at a time","title":"Examples"},{"location":"opcodes/bend_up/","text":"If bend_up is negative, then moving the pitch wheel up will cause the pitch to move down. Examples bend_up=1200 bend_up=100","title":"Bend up"},{"location":"opcodes/bend_up/#examples","text":"bend_up=1200 bend_up=100","title":"Examples"},{"location":"opcodes/benddown/","text":"If bend_up is set to a positive value, then moving the pitch wheel down will cause the pitch to move up. Examples bend_down=1200 bend_down=100 Positive values of bend_down can be useful with instruments such as zithers or guitars, whose construction makes it practical to bend the pitch of notes up, but not down - this way, moving the pitch wheel in either direction will result in a realistic-sounding upwards bend.","title":"Benddown"},{"location":"opcodes/benddown/#examples","text":"bend_down=1200 bend_down=100 Positive values of bend_down can be useful with instruments such as zithers or guitars, whose construction makes it practical to bend the pitch of notes up, but not down - this way, moving the pitch wheel in either direction will result in a realistic-sounding upwards bend.","title":"Examples"},{"location":"opcodes/bendstep/","text":"Examples bend_step=100 // glissando in semitones bend_step=200 // glissando in whole tones bend_step=1200 // leap an entire octave at a time","title":"Bendstep"},{"location":"opcodes/bendstep/#examples","text":"bend_step=100 // glissando in semitones bend_step=200 // glissando in whole tones bend_step=1200 // leap an entire octave at a time","title":"Examples"},{"location":"opcodes/bendup/","text":"If bend_up is negative, then moving the pitch wheel up will cause the pitch to move down. Examples bend_up=1200 bend_up=100","title":"Bendup"},{"location":"opcodes/bendup/#examples","text":"bend_up=1200 bend_up=100","title":"Examples"},{"location":"opcodes/bitred/","text":"Used under the \u2039effect\u203a header, with type = lofi .","title":"Bitred"},{"location":"opcodes/bitred_curveccN/","text":"Used under the \u2039effect\u203a header, with type = lofi .","title":"bitred curveccN"},{"location":"opcodes/bitred_onccN/","text":"Used under the \u2039effect\u203a header, with type = lofi .","title":"bitred onccN"},{"location":"opcodes/bitred_smoothccN/","text":"Used under the \u2039effect\u203a header, with type = lofi .","title":"bitred smoothccN"},{"location":"opcodes/bitred_stepccN/","text":"Used under the \u2039effect\u203a header, with type = lofi .","title":"bitred stepccN"},{"location":"opcodes/bus/","text":"If not set, or any other value is set, this goes to the main output. Possibly main is the default value. See also: midi ARIA extension header","title":"Bus"},{"location":"opcodes/bypass_onccN/","text":"When the MIDI CC value (0-127) is >= a threshold, the effect plays, otherwise it's disabled. The threshold is determined according to this expression: 64.0 / BypassValue where BypassValue is the opcode's value, strictly positive, interpreted as real number. At BypassValue=1, without doubt the most useful, the effect is off at CC<64 and on at CC>=64.","title":"bypass onccN"},{"location":"opcodes/comp_attack/","text":"Used under the \u2039effect\u203a header, with type = comp .","title":"Comp attack"},{"location":"opcodes/comp_gain/","text":"Used under the \u2039effect\u203a header, with type = comp .","title":"Comp gain"},{"location":"opcodes/comp_ratio/","text":"Used under the \u2039effect\u203a header, with type = comp .","title":"Comp ratio"},{"location":"opcodes/comp_release/","text":"Used under the \u2039effect\u203a header, with type = comp .","title":"Comp release"},{"location":"opcodes/comp_stlink/","text":"Used under the \u2039effect\u203a header, with type = comp .","title":"Comp stlink"},{"location":"opcodes/comp_threshold/","text":"Used under the \u2039effect\u203a header, with type = comp .","title":"Comp threshold"},{"location":"opcodes/count/","text":"If this opcode is specified, the sample will play as many times as defined. Envelope generators will not be retriggered on sample restart. When this opcode is defined, loop_mode is automatically set to one_shot . count=1 will play the sample once, so it's effectively the same as setting loop_mode=one_shot. Examples count=3 count=2 Practical Considerations count=0 behaves differently in different SFZ players. ARIA and sfz.dll treat this the same as if count was not set, and respect loop_mode settings. However, in Rapture and DropZone and possibly other Cakewalk products, count=0 will have the same effect as count=1 - essentially set loop_mode to one_shot and cause the sample to be played once.","title":"Count"},{"location":"opcodes/count/#examples","text":"count=3 count=2","title":"Examples"},{"location":"opcodes/count/#practical-considerations","text":"count=0 behaves differently in different SFZ players. ARIA and sfz.dll treat this the same as if count was not set, and respect loop_mode settings. However, in Rapture and DropZone and possibly other Cakewalk products, count=0 will have the same effect as count=1 - essentially set loop_mode to one_shot and cause the sample to be played once.","title":"Practical Considerations"},{"location":"opcodes/curve_index/","text":"One curve header is used to define each curve. The values for various points along the curve can then be set, from v000 to v127 . The default is v000=0 and v127=1 . Any points along the curve not defined explicitly will be interpolated linearly between points which are defined. There are default built-in curves in ARIA. If no curve is specified for a modulation, curve 0 is used. The built-in ARIA curves are: Default curve (number 0). linear, from 0 to 1 1. bipolar, from -1 to 1 (useful for things such as tuning and panning, used by CC10 panning by default) 2. linear inverted, from 1 to 0 3. bipolar inverted, from 1 to -1 4. concave (used for CC7 volume tracking and amp_veltrack) 5. Xfin power curve 6. Xfout power curve These can be overwritten, but as they are used by the engine for their normal functions, it's safer to use curve_index numbers of 7 and above for custom curves. Curve_index in ARIA can be any integer from 0 to 255. Examples curve_index=17 v000=0 v095=1 v127=1 curve_index=18 v000=0 v095=0.5 v127=1 Here's a scenario using one MIDI CC to control the amplitude of two samples along two different curves. amplitude_oncc110=100 amplitude_curvecc110=9 sample=bigger.wav amplitude_oncc110=100 amplitude_curvecc110=10 sample=smaller.wav //The curves for the room ambiences - bigger room first curve_index=9 v000=0 v063=0 v127=1 curve_index=10 v000=0 v063=1 v127=0.1 And how to use the default curve 1 to create a tuning control which goes down and up, with the pitch unmodulated when the control is in the middle. pitch_oncc27=100 pitch_curvecc27=1","title":"\u2039curve\u203a"},{"location":"opcodes/curve_index/#examples","text":"curve_index=17 v000=0 v095=1 v127=1 curve_index=18 v000=0 v095=0.5 v127=1 Here's a scenario using one MIDI CC to control the amplitude of two samples along two different curves. amplitude_oncc110=100 amplitude_curvecc110=9 sample=bigger.wav amplitude_oncc110=100 amplitude_curvecc110=10 sample=smaller.wav //The curves for the room ambiences - bigger room first curve_index=9 v000=0 v063=0 v127=1 curve_index=10 v000=0 v063=1 v127=0.1 And how to use the default curve 1 to create a tuning control which goes down and up, with the pitch unmodulated when the control is in the middle. pitch_oncc27=100 pitch_curvecc27=1","title":"Examples"},{"location":"opcodes/cutoff/","text":"Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. There are two filters in series - the cutoff frequency of one is controlled by cutoff, that of the second by cutoff2. Examples cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"cutoff / cutoff2"},{"location":"opcodes/cutoff/#examples","text":"cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/cutoff/#practical-considerations","text":"Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"Practical Considerations"},{"location":"opcodes/cutoff2/","text":"Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. There are two filters in series - the cutoff frequency of one is controlled by cutoff, that of the second by cutoff2. Examples cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"cutoff / cutoff2"},{"location":"opcodes/cutoff2/#examples","text":"cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/cutoff2/#practical-considerations","text":"Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"Practical Considerations"},{"location":"opcodes/cutoff2_ccN/","text":"Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. There are two filters in series - the cutoff frequency of one is controlled by cutoff, that of the second by cutoff2. Examples cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"cutoff / cutoff2"},{"location":"opcodes/cutoff2_ccN/#examples","text":"cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/cutoff2_ccN/#practical-considerations","text":"Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"Practical Considerations"},{"location":"opcodes/cutoff2_chanaft/","text":"Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. There are two filters in series - the cutoff frequency of one is controlled by cutoff, that of the second by cutoff2. Examples cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"cutoff / cutoff2"},{"location":"opcodes/cutoff2_chanaft/#examples","text":"cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/cutoff2_chanaft/#practical-considerations","text":"Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"Practical Considerations"},{"location":"opcodes/cutoff2_curveccN/","text":"Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. There are two filters in series - the cutoff frequency of one is controlled by cutoff, that of the second by cutoff2. Examples cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"cutoff / cutoff2"},{"location":"opcodes/cutoff2_curveccN/#examples","text":"cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/cutoff2_curveccN/#practical-considerations","text":"Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"Practical Considerations"},{"location":"opcodes/cutoff2_onccN/","text":"Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. There are two filters in series - the cutoff frequency of one is controlled by cutoff, that of the second by cutoff2. Examples cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"cutoff / cutoff2"},{"location":"opcodes/cutoff2_onccN/#examples","text":"cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/cutoff2_onccN/#practical-considerations","text":"Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"Practical Considerations"},{"location":"opcodes/cutoff2_polyaft/","text":"Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. There are two filters in series - the cutoff frequency of one is controlled by cutoff, that of the second by cutoff2. Examples cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"cutoff / cutoff2"},{"location":"opcodes/cutoff2_polyaft/#examples","text":"cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/cutoff2_polyaft/#practical-considerations","text":"Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"Practical Considerations"},{"location":"opcodes/cutoff2_random/","text":"Computed when the note is triggered, remains the same for that region for as long as the region plays. Examples fil_random=100 fil_random=400 Practical Considerations In ARIA, this is unipolar. In rcg sfz and Cakewalk, this is bipolar.","title":"Cutoff2 random"},{"location":"opcodes/cutoff2_random/#examples","text":"fil_random=100 fil_random=400","title":"Examples"},{"location":"opcodes/cutoff2_random/#practical-considerations","text":"In ARIA, this is unipolar. In rcg sfz and Cakewalk, this is bipolar.","title":"Practical Considerations"},{"location":"opcodes/cutoff2_smoothccN/","text":"Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. There are two filters in series - the cutoff frequency of one is controlled by cutoff, that of the second by cutoff2. Examples cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"cutoff / cutoff2"},{"location":"opcodes/cutoff2_smoothccN/#examples","text":"cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/cutoff2_smoothccN/#practical-considerations","text":"Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"Practical Considerations"},{"location":"opcodes/cutoff2_stepccN/","text":"Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. There are two filters in series - the cutoff frequency of one is controlled by cutoff, that of the second by cutoff2. Examples cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"cutoff / cutoff2"},{"location":"opcodes/cutoff2_stepccN/#examples","text":"cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/cutoff2_stepccN/#practical-considerations","text":"Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"Practical Considerations"},{"location":"opcodes/cutoff_ccN/","text":"Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. There are two filters in series - the cutoff frequency of one is controlled by cutoff, that of the second by cutoff2. Examples cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"cutoff / cutoff2"},{"location":"opcodes/cutoff_ccN/#examples","text":"cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/cutoff_ccN/#practical-considerations","text":"Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"Practical Considerations"},{"location":"opcodes/cutoff_chanaft/","text":"Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. There are two filters in series - the cutoff frequency of one is controlled by cutoff, that of the second by cutoff2. Examples cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"cutoff / cutoff2"},{"location":"opcodes/cutoff_chanaft/#examples","text":"cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/cutoff_chanaft/#practical-considerations","text":"Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"Practical Considerations"},{"location":"opcodes/cutoff_curveccN/","text":"Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. There are two filters in series - the cutoff frequency of one is controlled by cutoff, that of the second by cutoff2. Examples cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"cutoff / cutoff2"},{"location":"opcodes/cutoff_curveccN/#examples","text":"cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/cutoff_curveccN/#practical-considerations","text":"Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"Practical Considerations"},{"location":"opcodes/cutoff_onccN/","text":"Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. There are two filters in series - the cutoff frequency of one is controlled by cutoff, that of the second by cutoff2. Examples cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"cutoff / cutoff2"},{"location":"opcodes/cutoff_onccN/#examples","text":"cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/cutoff_onccN/#practical-considerations","text":"Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"Practical Considerations"},{"location":"opcodes/cutoff_polyaft/","text":"Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. There are two filters in series - the cutoff frequency of one is controlled by cutoff, that of the second by cutoff2. Examples cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"cutoff / cutoff2"},{"location":"opcodes/cutoff_polyaft/#examples","text":"cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/cutoff_polyaft/#practical-considerations","text":"Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"Practical Considerations"},{"location":"opcodes/cutoff_random/","text":"Computed when the note is triggered, remains the same for that region for as long as the region plays. Examples fil_random=100 fil_random=400 Practical Considerations In ARIA, this is unipolar. In rcg sfz and Cakewalk, this is bipolar.","title":"Cutoff random"},{"location":"opcodes/cutoff_random/#examples","text":"fil_random=100 fil_random=400","title":"Examples"},{"location":"opcodes/cutoff_random/#practical-considerations","text":"In ARIA, this is unipolar. In rcg sfz and Cakewalk, this is bipolar.","title":"Practical Considerations"},{"location":"opcodes/cutoff_smoothccN/","text":"Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. There are two filters in series - the cutoff frequency of one is controlled by cutoff, that of the second by cutoff2. Examples cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"cutoff / cutoff2"},{"location":"opcodes/cutoff_smoothccN/#examples","text":"cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/cutoff_smoothccN/#practical-considerations","text":"Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"Practical Considerations"},{"location":"opcodes/cutoff_stepccN/","text":"Note that while this is specified in Hertz, filter LFO depths in the SFZ 1 spec are in cents. There are two filters in series - the cutoff frequency of one is controlled by cutoff, that of the second by cutoff2. Examples cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"cutoff / cutoff2"},{"location":"opcodes/cutoff_stepccN/#examples","text":"cutoff=343 cutoff2=1200 cutoff_cc1=1200 cutoff2_chanaft=1200 cutoff2_polyaft=1200 Both filters can be used be used to have both a high-pass and a low-pass filter, like this: cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/cutoff_stepccN/#practical-considerations","text":"Setting cutoff to 0 behaves differently in diffrent players. ARIA/sforzando : filter disabled, oncc disabled rgc sfz : filter off, oncc working Dimension Pro and Rapture : lowest cutoff value, oncc working sfizz : no sound BassMidi : filter off, no oncc support yet","title":"Practical Considerations"},{"location":"opcodes/decim/","text":"Used under the \u2039effect\u203a header, with type = lofi .","title":"Decim"},{"location":"opcodes/decim_curveccN/","text":"Used under the \u2039effect\u203a header, with type = lofi .","title":"decim curveccN"},{"location":"opcodes/decim_onccN/","text":"Used under the \u2039effect\u203a header, with type = lofi .","title":"decim onccN"},{"location":"opcodes/decim_smoothccN/","text":"Used under the \u2039effect\u203a header, with type = lofi .","title":"decim smoothccN"},{"location":"opcodes/decim_stepccN/","text":"Used under the \u2039effect\u203a header, with type = lofi .","title":"decim stepccN"},{"location":"opcodes/default_path/","text":"Default path under which the samples should be found. Can also be used as a general prefix for samples, not just a path prefix. At least in ARIA this is combined with the path given in the sample opcode, so either default_path should have a trailing slash, or sample should have a leading slash so when concatenated they will become a valid file path. Cakewalk products only allow relative path. ARIA, Bassmidi and sfizz allow either absolute or relative paths. Used under the \u2039 control \u203a header. In Cakewalk products, a new control header does not reset the path. In ARIA default_path gets reset by a new control header. Whether settings other than default_path should also be reset by a new control header is not entirely clear. As implemented in ARIA, a new control header resets default_path only and not other control settings, and this does not seem unreasonable. Examples default_path=../Samples/ default_path=D:/TEST/Count_0_10/","title":"Default path"},{"location":"opcodes/default_path/#examples","text":"default_path=../Samples/ default_path=D:/TEST/Count_0_10/","title":"Examples"},{"location":"opcodes/define/","text":"Variable names start with the $ character. Example #define $KICKKEY 36 #define $LOWEBENDT 507 The defined variables can then be used like this: #define $KICKKEY 36 #define $SNAREKEY 38 #define $HATKEY 42 key=$KICKKEY sample=kick.wav key=$SNAREKEY sample=snare.wav key=$HATKEY sample=closedhat.wav This can be used to make an instrument easier to configure - for example, to change key maps, MIDI CC assignments, pitch bend ranges etc. which can then be used repeatedly in the SFZ file, but can be easily changed just by editing their #define value in one place. Using #define as a constant with a single value thorughout an instrument works easily. Defining the same variable to have multiple values at different points in the same instrument, however, requires care. The following does not work well in ARIA/Sforzando, assuming that B.sfz uses MYVAR : #define $MYVAR cc12 #include B.sfz #define $MYVAR cc13 #include B.sfz However, a workaround there is to use #include to put each set of #define statement with different values in a separate file. In simple tests, that has been successful.","title":"Define"},{"location":"opcodes/define/#example","text":"#define $KICKKEY 36 #define $LOWEBENDT 507 The defined variables can then be used like this: #define $KICKKEY 36 #define $SNAREKEY 38 #define $HATKEY 42 key=$KICKKEY sample=kick.wav key=$SNAREKEY sample=snare.wav key=$HATKEY sample=closedhat.wav This can be used to make an instrument easier to configure - for example, to change key maps, MIDI CC assignments, pitch bend ranges etc. which can then be used repeatedly in the SFZ file, but can be easily changed just by editing their #define value in one place. Using #define as a constant with a single value thorughout an instrument works easily. Defining the same variable to have multiple values at different points in the same instrument, however, requires care. The following does not work well in ARIA/Sforzando, assuming that B.sfz uses MYVAR : #define $MYVAR cc12 #include B.sfz #define $MYVAR cc13 #include B.sfz However, a workaround there is to use #include to put each set of #define statement with different values in a separate file. In simple tests, that has been successful.","title":"Example"},{"location":"opcodes/delay/","text":"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. Sample playback and all envelope generators' delay stage will start counting after region delay time - this is the core difference between this and ampeg_delay . Examples delay=1 delay=0.2 Example uses: delaying some regions in a strum or a flam; delaying regions to emulate more distant microphone positions. Practical Considerations In ARIA, if loop_mode is set to one_shot , the region will play regardless of whether a note-off message is received or not.","title":"Delay"},{"location":"opcodes/delay/#examples","text":"delay=1 delay=0.2 Example uses: delaying some regions in a strum or a flam; delaying regions to emulate more distant microphone positions.","title":"Examples"},{"location":"opcodes/delay/#practical-considerations","text":"In ARIA, if loop_mode is set to one_shot , the region will play regardless of whether a note-off message is received or not.","title":"Practical Considerations"},{"location":"opcodes/delay_beats/","text":"Used in Cakewalk Dimension Pro and DropZone, alongside stop_beats , to play slices of loops at specific points in the bar. Examples delay_beats=1 delay_beats=2.25 stop_beats=3 delay_beats=25.9922 stop_beats=26.0964 Practical Considerations In ARIA this opcode can be used, but every region uses up a polyphony voice, and therefore raising polyphony to MAX is recommended for sequences beyond a very short length.","title":"Delay beats"},{"location":"opcodes/delay_beats/#examples","text":"delay_beats=1 delay_beats=2.25 stop_beats=3 delay_beats=25.9922 stop_beats=26.0964","title":"Examples"},{"location":"opcodes/delay_beats/#practical-considerations","text":"In ARIA this opcode can be used, but every region uses up a polyphony voice, and therefore raising polyphony to MAX is recommended for sequences beyond a very short length.","title":"Practical Considerations"},{"location":"opcodes/delay_beats_curveccN/","text":"Used in Cakewalk Dimension Pro and DropZone, alongside stop_beats , to play slices of loops at specific points in the bar. Examples delay_beats=1 delay_beats=2.25 stop_beats=3 delay_beats=25.9922 stop_beats=26.0964 Practical Considerations In ARIA this opcode can be used, but every region uses up a polyphony voice, and therefore raising polyphony to MAX is recommended for sequences beyond a very short length.","title":"delay beats curveccN"},{"location":"opcodes/delay_beats_curveccN/#examples","text":"delay_beats=1 delay_beats=2.25 stop_beats=3 delay_beats=25.9922 stop_beats=26.0964","title":"Examples"},{"location":"opcodes/delay_beats_curveccN/#practical-considerations","text":"In ARIA this opcode can be used, but every region uses up a polyphony voice, and therefore raising polyphony to MAX is recommended for sequences beyond a very short length.","title":"Practical Considerations"},{"location":"opcodes/delay_beats_onccN/","text":"Used in Cakewalk Dimension Pro and DropZone, alongside stop_beats , to play slices of loops at specific points in the bar. Examples delay_beats=1 delay_beats=2.25 stop_beats=3 delay_beats=25.9922 stop_beats=26.0964 Practical Considerations In ARIA this opcode can be used, but every region uses up a polyphony voice, and therefore raising polyphony to MAX is recommended for sequences beyond a very short length.","title":"delay beats onccN"},{"location":"opcodes/delay_beats_onccN/#examples","text":"delay_beats=1 delay_beats=2.25 stop_beats=3 delay_beats=25.9922 stop_beats=26.0964","title":"Examples"},{"location":"opcodes/delay_beats_onccN/#practical-considerations","text":"In ARIA this opcode can be used, but every region uses up a polyphony voice, and therefore raising polyphony to MAX is recommended for sequences beyond a very short length.","title":"Practical Considerations"},{"location":"opcodes/delay_beats_random/","text":"","title":"Delay beats random"},{"location":"opcodes/delay_ccN/","text":"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. Sample playback and all envelope generators' delay stage will start counting after region delay time - this is the core difference between this and ampeg_delay . Examples delay=1 delay=0.2 Example uses: delaying some regions in a strum or a flam; delaying regions to emulate more distant microphone positions. Practical Considerations In ARIA, if loop_mode is set to one_shot , the region will play regardless of whether a note-off message is received or not.","title":"delay ccN"},{"location":"opcodes/delay_ccN/#examples","text":"delay=1 delay=0.2 Example uses: delaying some regions in a strum or a flam; delaying regions to emulate more distant microphone positions.","title":"Examples"},{"location":"opcodes/delay_ccN/#practical-considerations","text":"In ARIA, if loop_mode is set to one_shot , the region will play regardless of whether a note-off message is received or not.","title":"Practical Considerations"},{"location":"opcodes/delay_curveccN/","text":"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. Sample playback and all envelope generators' delay stage will start counting after region delay time - this is the core difference between this and ampeg_delay . Examples delay=1 delay=0.2 Example uses: delaying some regions in a strum or a flam; delaying regions to emulate more distant microphone positions. Practical Considerations In ARIA, if loop_mode is set to one_shot , the region will play regardless of whether a note-off message is received or not.","title":"delay curveccN"},{"location":"opcodes/delay_curveccN/#examples","text":"delay=1 delay=0.2 Example uses: delaying some regions in a strum or a flam; delaying regions to emulate more distant microphone positions.","title":"Examples"},{"location":"opcodes/delay_curveccN/#practical-considerations","text":"In ARIA, if loop_mode is set to one_shot , the region will play regardless of whether a note-off message is received or not.","title":"Practical Considerations"},{"location":"opcodes/delay_cutoff/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay cutoff"},{"location":"opcodes/delay_cutoff_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay cutoff onccN"},{"location":"opcodes/delay_damphi/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay_damplo / delay_damphi"},{"location":"opcodes/delay_damphi_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay_damplo / delay_damphi"},{"location":"opcodes/delay_damplo/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay_damplo / delay_damphi"},{"location":"opcodes/delay_damplo_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay_damplo / delay_damphi"},{"location":"opcodes/delay_dry/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay dry"},{"location":"opcodes/delay_dry_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay dry onccN"},{"location":"opcodes/delay_feedback/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay feedback"},{"location":"opcodes/delay_feedback_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay feedback onccN"},{"location":"opcodes/delay_filter/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay filter"},{"location":"opcodes/delay_input/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay input"},{"location":"opcodes/delay_input_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay input onccN"},{"location":"opcodes/delay_levelc/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay levelc"},{"location":"opcodes/delay_levell/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay levell"},{"location":"opcodes/delay_levelr/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay levelr"},{"location":"opcodes/delay_lfofreq/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay lfofreq"},{"location":"opcodes/delay_lfofreq_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay lfofreq onccN"},{"location":"opcodes/delay_moddepth/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay moddepth"},{"location":"opcodes/delay_moddepth_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay moddepth onccN"},{"location":"opcodes/delay_mode/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay mode"},{"location":"opcodes/delay_onccN/","text":"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. Sample playback and all envelope generators' delay stage will start counting after region delay time - this is the core difference between this and ampeg_delay . Examples delay=1 delay=0.2 Example uses: delaying some regions in a strum or a flam; delaying regions to emulate more distant microphone positions. Practical Considerations In ARIA, if loop_mode is set to one_shot , the region will play regardless of whether a note-off message is received or not.","title":"delay onccN"},{"location":"opcodes/delay_onccN/#examples","text":"delay=1 delay=0.2 Example uses: delaying some regions in a strum or a flam; delaying regions to emulate more distant microphone positions.","title":"Examples"},{"location":"opcodes/delay_onccN/#practical-considerations","text":"In ARIA, if loop_mode is set to one_shot , the region will play regardless of whether a note-off message is received or not.","title":"Practical Considerations"},{"location":"opcodes/delay_panc/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay panc"},{"location":"opcodes/delay_panc_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay panc onccN"},{"location":"opcodes/delay_panl/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay panl"},{"location":"opcodes/delay_panl_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay panl onccN"},{"location":"opcodes/delay_panr/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay panr"},{"location":"opcodes/delay_panr_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay panr onccN"},{"location":"opcodes/delay_random/","text":"If the region receives a note-off message before delay time, the region won't play, unless loop_mode is set to one_shot , which will play the region in ARIA. Similar to delay in general. Computed when the note is triggered. Examples delay_random=1 delay_random=0.2 Practical Considerations In ARIA, Cakewalk and rcg sfz, this is unipolar.","title":"Delay random"},{"location":"opcodes/delay_random/#examples","text":"delay_random=1 delay_random=0.2","title":"Examples"},{"location":"opcodes/delay_random/#practical-considerations","text":"In ARIA, Cakewalk and rcg sfz, this is unipolar.","title":"Practical Considerations"},{"location":"opcodes/delay_resonance/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay resonance"},{"location":"opcodes/delay_resonance_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay resonance onccN"},{"location":"opcodes/delay_samples/","text":"If the region receives a note-off message before delay time, the region won\u2019t play. Similar to delay , but measured in samples rather than seconds.","title":"Delay samples"},{"location":"opcodes/delay_samples_onccN/","text":"If the region receives a note-off message before delay time, the region won\u2019t play. Similar to delay , but measured in samples rather than seconds.","title":"delay samples onccN"},{"location":"opcodes/delay_spread/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay spread"},{"location":"opcodes/delay_spread_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay spread onccN"},{"location":"opcodes/delay_syncc_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay syncc onccN"},{"location":"opcodes/delay_syncl_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay syncl onccN"},{"location":"opcodes/delay_syncr_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay syncr onccN"},{"location":"opcodes/delay_time_tap/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay time tap"},{"location":"opcodes/delay_timec/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay timec"},{"location":"opcodes/delay_timec_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay timec onccN"},{"location":"opcodes/delay_timel/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay timel"},{"location":"opcodes/delay_timel_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay timel onccN"},{"location":"opcodes/delay_timer/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay timer"},{"location":"opcodes/delay_timer_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay timer onccN"},{"location":"opcodes/delay_wet/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"Delay wet"},{"location":"opcodes/delay_wet_onccN/","text":"Used under the \u2039effect\u203a header, with type = delay .","title":"delay wet onccN"},{"location":"opcodes/direction/","text":"This is similar to loop_type but affects the entire sample, not just the defined loop regions. Example direction=reverse Practical Considerations At least in ARIA, direction=reverse doesn't always work as expected. However, it seems to work if the sample= opcode is specified for every region. Specifying the sample at the group header level and then specifying direction under the region doesn't seem to work at least in cases where one region has the sample playing forward, and another region has the same sample playing backwards.","title":"Direction"},{"location":"opcodes/direction/#example","text":"direction=reverse","title":"Example"},{"location":"opcodes/direction/#practical-considerations","text":"At least in ARIA, direction=reverse doesn't always work as expected. However, it seems to work if the sample= opcode is specified for every region. Specifying the sample at the group header level and then specifying direction under the region doesn't seem to work at least in cases where one region has the sample playing forward, and another region has the same sample playing backwards.","title":"Practical Considerations"},{"location":"opcodes/directtomain/","text":"Global, can be set under any \u2039effect\u203a header for identical result, see routing graph. Translates from % into a linear gain 0-1.","title":"Directtomain"},{"location":"opcodes/disto_depth/","text":"Used under the \u2039effect\u203a header, with type = disto .","title":"Disto depth"},{"location":"opcodes/disto_depth_onccN/","text":"Used under the \u2039effect\u203a header, with type = disto .","title":"disto depth onccN"},{"location":"opcodes/disto_dry/","text":"Used under the \u2039effect\u203a header, with type = disto .","title":"Disto dry"},{"location":"opcodes/disto_dry_onccN/","text":"Used under the \u2039effect\u203a header, with type = disto .","title":"disto dry onccN"},{"location":"opcodes/disto_stages/","text":"Used under the \u2039effect\u203a header, with type = disto .","title":"Disto stages"},{"location":"opcodes/disto_tone/","text":"Used under the \u2039effect\u203a header, with type = disto .","title":"Disto tone"},{"location":"opcodes/disto_tone_onccN/","text":"Used under the \u2039effect\u203a header, with type = disto .","title":"disto tone onccN"},{"location":"opcodes/disto_wet/","text":"Used under the \u2039effect\u203a header, with type = disto .","title":"Disto wet"},{"location":"opcodes/disto_wet_onccN/","text":"Used under the \u2039effect\u203a header, with type = disto .","title":"disto wet onccN"},{"location":"opcodes/dsp_order/","text":"","title":"Dsp order"},{"location":"opcodes/effect1/","text":"Effects handling varies across SFZ versions. In SFZ v1 only effect1 and effect2 opcodes were available and only at \u2039region\u203a level. In SFZ v2 the \u2039effect\u203a header was added, and effect3 and effect4 . ARIA uses the effect header as well, with the MDA effects built in and the possibility to support vendor-specific effects as well. Example effect1=100","title":"Effect1"},{"location":"opcodes/effect1/#example","text":"effect1=100","title":"Example"},{"location":"opcodes/effect2/","text":"Effects handling varies across SFZ versions. In SFZ v1 only effect1 and effect2 opcodes were available and only at \u2039region\u203a level. In SFZ v2 the \u2039effect\u203a header was added, and effect3 and effect4 . ARIA uses the effect header as well, with the MDA effects built in and the possibility to support vendor-specific effects as well. Example effect2=40","title":"Effect2"},{"location":"opcodes/effect2/#example","text":"effect2=40","title":"Example"},{"location":"opcodes/effect3/","text":"Effects handling varies across SFZ versions. In SFZ v1 only effect1 and effect2 opcodes were available and only at \u2039region\u203a level. In SFZ v2 the \u2039effect\u203a header was added, and effect3 and effect4 . ARIA uses the effect header as well, with the MDA effects built in and the possibility to support vendor-specific effects as well. The below example should work in Cakewalk Rapture. Example sample=../samples/soundfx.wav ... ... effect3=75 type=delay bus=fx3 ...","title":"Effect3"},{"location":"opcodes/effect3/#example","text":" sample=../samples/soundfx.wav ... ... effect3=75 type=delay bus=fx3 ...","title":"Example"},{"location":"opcodes/effect4/","text":"Effects handling varies across SFZ versions. In SFZ v1 only effect1 and effect2 opcodes were available and only at \u2039region\u203a level. In SFZ v2 the \u2039effect\u203a header was added, and effect3 and effect4 . ARIA uses the effect header as well, with the MDA effects built in and the possibility to support vendor-specific effects as well. The below example should work in Cakewalk Rapture. Example sample=../samples/soundfx.wav ... ... effect4=50 type=filter bus=fx4 ...","title":"Effect4"},{"location":"opcodes/effect4/#example","text":" sample=../samples/soundfx.wav ... ... effect4=50 type=filter bus=fx4 ...","title":"Example"},{"location":"opcodes/egN_ampeg/","text":"Examples Generate a standard ADSR shape FlexEG envelope sample=*sine eg1_time1=1 eg1_level1=1 eg1_time2=1 eg1_level2=.5 eg1_sustain=2 eg1_time3=1 eg1_level3=0 eg1_ampeg=1 //ARIA boolean value, 1=true, 0=false Practical Considerations egN_ampeg allows the regions envelope to be controlled by the FlexEG: egN completely. This is only needed for the amplitude envelope, and is a special case. There is no egN_pitcheg or egN_fileg , using egN_pitch & egN_cutoffX is enough. The FlexEG can also work with the standard ampeg envelope, to achieve this add: egN_amplitude= The total envelope will be calculated as: egN * ampeg It is also possible to use CC modulation: egN_amplitude_onccX= In order to allow MIDI Note-On velocity to modulate the envelope level, use cc 131: eg1_amplitude_oncc131=100","title":"egN ampeg"},{"location":"opcodes/egN_ampeg/#examples","text":"Generate a standard ADSR shape FlexEG envelope sample=*sine eg1_time1=1 eg1_level1=1 eg1_time2=1 eg1_level2=.5 eg1_sustain=2 eg1_time3=1 eg1_level3=0 eg1_ampeg=1 //ARIA boolean value, 1=true, 0=false","title":"Examples"},{"location":"opcodes/egN_ampeg/#practical-considerations","text":"egN_ampeg allows the regions envelope to be controlled by the FlexEG: egN completely. This is only needed for the amplitude envelope, and is a special case. There is no egN_pitcheg or egN_fileg , using egN_pitch & egN_cutoffX is enough. The FlexEG can also work with the standard ampeg envelope, to achieve this add: egN_amplitude= The total envelope will be calculated as: egN * ampeg It is also possible to use CC modulation: egN_amplitude_onccX= In order to allow MIDI Note-On velocity to modulate the envelope level, use cc 131: eg1_amplitude_oncc131=100","title":"Practical Considerations"},{"location":"opcodes/egN_amplitude/","text":"","title":"egN amplitude"},{"location":"opcodes/egN_amplitude_onccX/","text":"","title":"egN amplitude onccX"},{"location":"opcodes/egN_bitred/","text":"","title":"egN bitred"},{"location":"opcodes/egN_bitred_onccX/","text":"","title":"egN bitred onccX"},{"location":"opcodes/egN_curveX/","text":"Example eg01_curve1=10 eg01_curve2=11","title":"egN curveX"},{"location":"opcodes/egN_curveX/#example","text":"eg01_curve1=10 eg01_curve2=11","title":"Example"},{"location":"opcodes/egN_cutoff/","text":"","title":"egN cutoff"},{"location":"opcodes/egN_cutoff2/","text":"","title":"egN cutoff2"},{"location":"opcodes/egN_cutoff2_onccX/","text":"","title":"egN cutoff2 onccX"},{"location":"opcodes/egN_cutoff_onccX/","text":"","title":"egN cutoff onccX"},{"location":"opcodes/egN_decim/","text":"","title":"egN decim"},{"location":"opcodes/egN_decim_onccX/","text":"","title":"egN decim onccX"},{"location":"opcodes/egN_depth_lfoX/","text":"Examples Modulate the scale of lfo1's effect on cutoff and pan, from 0% to 200%, over the course of 4 seconds: sample=*saw cutoff=800 lfo1_freq=2 lfo1_cutoff=1200 // will be modulated from 0 to 2400 (200%) lfo1_pan=50 // will be modulated from 0 to 100 (200%) eg1_level0=0 eg1_time1=4 eg1_level1=1 eg1_sustain=1 eg1_depth_lfo1=200 //..as eg1's move from 0 to 1 scales lfo1's effect from 0 to 200% NB. Tested with Aria/Sforzando","title":"egN depth lfoX"},{"location":"opcodes/egN_depth_lfoX/#examples","text":"Modulate the scale of lfo1's effect on cutoff and pan, from 0% to 200%, over the course of 4 seconds: sample=*saw cutoff=800 lfo1_freq=2 lfo1_cutoff=1200 // will be modulated from 0 to 2400 (200%) lfo1_pan=50 // will be modulated from 0 to 100 (200%) eg1_level0=0 eg1_time1=4 eg1_level1=1 eg1_sustain=1 eg1_depth_lfo1=200 //..as eg1's move from 0 to 1 scales lfo1's effect from 0 to 200% NB. Tested with Aria/Sforzando","title":"Examples"},{"location":"opcodes/egN_depthadd_lfoX/","text":"","title":"egN depthadd lfoX"},{"location":"opcodes/egN_driveshape/","text":"","title":"egN driveshape"},{"location":"opcodes/egN_driveshape_onccX/","text":"","title":"egN driveshape onccX"},{"location":"opcodes/egN_dynamic/","text":"When 1, causes envelope segment durations and levels to be recalculated when a MIDI CC message modulating those envelopes is received. When 0, envelope segment durations and levels are calculated only at the start of the particular envelope segment. Examples sample=*saw eg1_ampeg=1 // Create envelope to control amplitude.. eg1_sustain=1 eg1_level1=1 eg1_level2=0 eg1_time2=4 // ..with a release time of 4 seconds eg1_time2_oncc1=-8 // assign modwheel to modulate release time eg1_dynamic=1 // 1 = modulation will affect all notes immediately, or 0 (default) = new segments only","title":"egN dynamic"},{"location":"opcodes/egN_dynamic/#examples","text":" sample=*saw eg1_ampeg=1 // Create envelope to control amplitude.. eg1_sustain=1 eg1_level1=1 eg1_level2=0 eg1_time2=4 // ..with a release time of 4 seconds eg1_time2_oncc1=-8 // assign modwheel to modulate release time eg1_dynamic=1 // 1 = modulation will affect all notes immediately, or 0 (default) = new segments only","title":"Examples"},{"location":"opcodes/egN_eqXbw/","text":"","title":"egN eqXbw"},{"location":"opcodes/egN_eqXbw_onccY/","text":"","title":"egN eqXbw onccY"},{"location":"opcodes/egN_eqXfreq/","text":"","title":"egN eqXfreq"},{"location":"opcodes/egN_eqXfreq_onccY/","text":"","title":"egN eqXfreq onccY"},{"location":"opcodes/egN_eqXgain/","text":"","title":"egN eqXgain"},{"location":"opcodes/egN_eqXgain_onccY/","text":"","title":"egN eqXgain onccY"},{"location":"opcodes/egN_freq_lfoX/","text":"","title":"egN freq lfoX"},{"location":"opcodes/egN_levelX/","text":"Examples eg01_level0=-1 eg02_level1=0.3 eg03_level2=0.5 eg03_level2_oncc51=0.5","title":"egN levelX"},{"location":"opcodes/egN_levelX/#examples","text":"eg01_level0=-1 eg02_level1=0.3 eg03_level2=0.5 eg03_level2_oncc51=0.5","title":"Examples"},{"location":"opcodes/egN_levelX_onccY/","text":"Examples eg01_level0=-1 eg02_level1=0.3 eg03_level2=0.5 eg03_level2_oncc51=0.5","title":"egN levelX onccY"},{"location":"opcodes/egN_levelX_onccY/#examples","text":"eg01_level0=-1 eg02_level1=0.3 eg03_level2=0.5 eg03_level2_oncc51=0.5","title":"Examples"},{"location":"opcodes/egN_loop/","text":"Specifies which envelope node is the loop node. Example eg01_loop=2 eg01_loop_shape=1 eg01_loop_count=8 Practical Considerations This is either not implemented in ARIA or sfizz, or our testing was not able to discover how it works. The relevant opcodes are egN_loop , egN_loop_count and possibly egN_loop_shape . In the existing test examples, egN_loop_shape is always set to 1.","title":"egN loop"},{"location":"opcodes/egN_loop/#example","text":"eg01_loop=2 eg01_loop_shape=1 eg01_loop_count=8","title":"Example"},{"location":"opcodes/egN_loop/#practical-considerations","text":"This is either not implemented in ARIA or sfizz, or our testing was not able to discover how it works. The relevant opcodes are egN_loop , egN_loop_count and possibly egN_loop_shape . In the existing test examples, egN_loop_shape is always set to 1.","title":"Practical Considerations"},{"location":"opcodes/egN_loop_count/","text":"Specifies how many times the loop for envelope N is to repeat. Example eg01_loop=2 eg01_loop_shape=1 eg01_loop_count=8 Practical Considerations This is either not implemented in ARIA or sfizz, or our testing was not able to discover how it works. The relevant opcodes are egN_loop , egN_loop_count and possibly egN_loop_shape . In the existing test examples, egN_loop_shape is always set to 1.","title":"egN loop count"},{"location":"opcodes/egN_loop_count/#example","text":"eg01_loop=2 eg01_loop_shape=1 eg01_loop_count=8","title":"Example"},{"location":"opcodes/egN_loop_count/#practical-considerations","text":"This is either not implemented in ARIA or sfizz, or our testing was not able to discover how it works. The relevant opcodes are egN_loop , egN_loop_count and possibly egN_loop_shape . In the existing test examples, egN_loop_shape is always set to 1.","title":"Practical Considerations"},{"location":"opcodes/egN_noiselevel/","text":"","title":"egN noiselevel"},{"location":"opcodes/egN_noiselevel_onccX/","text":"","title":"egN noiselevel onccX"},{"location":"opcodes/egN_noisestep/","text":"","title":"egN noisestep"},{"location":"opcodes/egN_noisestep_onccX/","text":"","title":"egN noisestep onccX"},{"location":"opcodes/egN_noisetone/","text":"","title":"egN noisetone"},{"location":"opcodes/egN_noisetone_onccX/","text":"","title":"egN noisetone onccX"},{"location":"opcodes/egN_pan/","text":"","title":"egN pan"},{"location":"opcodes/egN_pan_curve/","text":"","title":"egN pan curve"},{"location":"opcodes/egN_pan_curveccX/","text":"","title":"egN pan curveccX"},{"location":"opcodes/egN_pan_onccX/","text":"","title":"egN pan onccX"},{"location":"opcodes/egN_pitch/","text":"","title":"egN pitch"},{"location":"opcodes/egN_pitch_onccX/","text":"","title":"egN pitch onccX"},{"location":"opcodes/egN_points/","text":"Sets the number of points in envelope number N. The level of the envelope at those points can then be set with egN_levelX . When a region begins playing, the envelope starts at point number 0, and therefore an envelope with 4 points will have points numbered 0 through 3, not 1 through 4. Examples eg01_points=3 eg01_sustain=2 eg01_level0=0 eg01_time0=0 eg01_level1=1 eg01_time1=1 eg01_level2=1 eg01_time2=1 eg01_points=7 eg01_sustain=5 eg01_level0=0 eg01_time0=0 eg01_level1=1 eg01_time1=0.5 eg01_level2=0.7 eg01_time2=0.5 eg01_level3=1 eg01_time3=0.5 eg01_level4=0.7 eg01_time4=0.5 eg01_level5=0.1 eg01_time5=0.5 eg01_level6=0 eg01_time6=1 Practical Considerations At least in ARIA, it's not necessary to define egN_points as the parser will calculate how many points the envelope has from the number of points defined using egN_level and egN_time for the specific number N. If egN_points is set to a lower value than the number of points defined for the envelope, the entire envelope will be used, and it will not be truncated at the number set usign egN_points - so in effect, in ARIA this opcode appears to do nothing. It may be necessary to specify this in Cakewalk players, however.","title":"egN points"},{"location":"opcodes/egN_points/#examples","text":"eg01_points=3 eg01_sustain=2 eg01_level0=0 eg01_time0=0 eg01_level1=1 eg01_time1=1 eg01_level2=1 eg01_time2=1 eg01_points=7 eg01_sustain=5 eg01_level0=0 eg01_time0=0 eg01_level1=1 eg01_time1=0.5 eg01_level2=0.7 eg01_time2=0.5 eg01_level3=1 eg01_time3=0.5 eg01_level4=0.7 eg01_time4=0.5 eg01_level5=0.1 eg01_time5=0.5 eg01_level6=0 eg01_time6=1","title":"Examples"},{"location":"opcodes/egN_points/#practical-considerations","text":"At least in ARIA, it's not necessary to define egN_points as the parser will calculate how many points the envelope has from the number of points defined using egN_level and egN_time for the specific number N. If egN_points is set to a lower value than the number of points defined for the envelope, the entire envelope will be used, and it will not be truncated at the number set usign egN_points - so in effect, in ARIA this opcode appears to do nothing. It may be necessary to specify this in Cakewalk players, however.","title":"Practical Considerations"},{"location":"opcodes/egN_rectify/","text":"","title":"egN rectify"},{"location":"opcodes/egN_rectify_onccX/","text":"","title":"egN rectify onccX"},{"location":"opcodes/egN_resonance/","text":"","title":"egN resonance"},{"location":"opcodes/egN_resonance2/","text":"","title":"egN resonance2"},{"location":"opcodes/egN_resonance2_onccX/","text":"","title":"egN resonance2 onccX"},{"location":"opcodes/egN_resonance_onccX/","text":"","title":"egN resonance onccX"},{"location":"opcodes/egN_ringmod/","text":"","title":"egN ringmod"},{"location":"opcodes/egN_ringmod_onccX/","text":"","title":"egN ringmod onccX"},{"location":"opcodes/egN_shapeX/","text":"Curve shape before the specified envelope point in envelope N. 0 is linear, positive values are slower and negative values faster. Past 10 or -10, there's little difference - at that point, the envelope is practically a horizontal line and a vertical line (if positive) or a vertical line followed by a horizontal line (if negative). Shapes values can also be applied to \"regular\" ampeg, pitch and cutoff envelopes. Examples eg01_shape1=5.2 eg02_shape2=-3.5 ampeg_attack_shape=3.8 ampeg_decay_shape=-1.4","title":"egN shapeX"},{"location":"opcodes/egN_shapeX/#examples","text":"eg01_shape1=5.2 eg02_shape2=-3.5 ampeg_attack_shape=3.8 ampeg_decay_shape=-1.4","title":"Examples"},{"location":"opcodes/egN_sustain/","text":"Defines which envelope point is used for the sustain level. The part of the specified envelope before that point will be triggered on note attack, and the part after that point will be triggered on note release. While the note sustains, the envelope will be at the level set by the same numbered egN_level opcode. Example eg01_sustain=5","title":"egN sustain"},{"location":"opcodes/egN_sustain/#example","text":"eg01_sustain=5","title":"Example"},{"location":"opcodes/egN_timeX/","text":"The time duration from an envelope point to another, in seconds. Can also be modulated with MIDI CC. Examples eg01_time1=0.5 eg01_time2_oncc50=1 eg02_time1=1","title":"egN timeX"},{"location":"opcodes/egN_timeX/#examples","text":"eg01_time1=0.5 eg01_time2_oncc50=1 eg02_time1=1","title":"Examples"},{"location":"opcodes/egN_timeX_onccY/","text":"The time duration from an envelope point to another, in seconds. Can also be modulated with MIDI CC. Examples eg01_time1=0.5 eg01_time2_oncc50=1 eg02_time1=1","title":"egN timeX onccY"},{"location":"opcodes/egN_timeX_onccY/#examples","text":"eg01_time1=0.5 eg01_time2_oncc50=1 eg02_time1=1","title":"Examples"},{"location":"opcodes/egN_volume/","text":"","title":"egN volume"},{"location":"opcodes/egN_volume_onccX/","text":"","title":"egN volume onccX"},{"location":"opcodes/egN_width/","text":"","title":"egN width"},{"location":"opcodes/egN_width_onccX/","text":"","title":"egN width onccX"},{"location":"opcodes/end/","text":"end is inclusive, so if set to 133000, the sample will play all samples up to and including 133000. The player will reproduce the whole sample if end is not specified. In other words, in most cases, this does not need to be set. 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. In certain cases, possibly due to ill-formed WAV files, setting end to -1 can cause errors, but setting loop_mode to no_loop or one_shot seems to be a workaround. A region which does not play is still triggered, however, which means it can mute other regions. When using sample =*silence it is very useful to set end =-1 (or a zero-duration volume envelope with zero sutain) so the silence region does not continue to play and does not use up a polyphony voice. Another way to accomplish the same thing is to use an ampeg envelope wiht zero ampeg_attack , ampeg_decay and ampeg_sustain . Examples end=133000 end=4432425 end=-1","title":"End"},{"location":"opcodes/end/#examples","text":"end=133000 end=4432425 end=-1","title":"Examples"},{"location":"opcodes/eqN_bw/","text":"Examples eq1_bw=1 eq2_bw=0.4 eq3_bw=1.4 Note While 0.001 is the minimum value in the SFZ specification, many SFZ players use CPU-efficient EQ algorithms and any values below 1 may yield unexpected results.","title":"eqN bw"},{"location":"opcodes/eqN_bw/#examples","text":"eq1_bw=1 eq2_bw=0.4 eq3_bw=1.4","title":"Examples"},{"location":"opcodes/eqN_bw/#note","text":"While 0.001 is the minimum value in the SFZ specification, many SFZ players use CPU-efficient EQ algorithms and any values below 1 may yield unexpected results.","title":"Note"},{"location":"opcodes/eqN_bw_onccX/","text":"Examples eq1_bw=1 eq2_bw=0.4 eq3_bw=1.4 Note While 0.001 is the minimum value in the SFZ specification, many SFZ players use CPU-efficient EQ algorithms and any values below 1 may yield unexpected results.","title":"eqN bw onccX"},{"location":"opcodes/eqN_bw_onccX/#examples","text":"eq1_bw=1 eq2_bw=0.4 eq3_bw=1.4","title":"Examples"},{"location":"opcodes/eqN_bw_onccX/#note","text":"While 0.001 is the minimum value in the SFZ specification, many SFZ players use CPU-efficient EQ algorithms and any values below 1 may yield unexpected results.","title":"Note"},{"location":"opcodes/eqN_bwccX/","text":"Examples eq1_bw=1 eq2_bw=0.4 eq3_bw=1.4 Note While 0.001 is the minimum value in the SFZ specification, many SFZ players use CPU-efficient EQ algorithms and any values below 1 may yield unexpected results.","title":"eqN bwccX"},{"location":"opcodes/eqN_bwccX/#examples","text":"eq1_bw=1 eq2_bw=0.4 eq3_bw=1.4","title":"Examples"},{"location":"opcodes/eqN_bwccX/#note","text":"While 0.001 is the minimum value in the SFZ specification, many SFZ players use CPU-efficient EQ algorithms and any values below 1 may yield unexpected results.","title":"Note"},{"location":"opcodes/eqN_freq/","text":"The SFZ specification has three EQ bands, with this opcode setting the center frequency of band N. There are three parametric bands: eq1, eq2 and eq3. If more than three bands are needed, ARIA allows fil_type to be set to lsh, hsh or peq to use one or both filters as additional EQ bands, including low shelf and high shelf. Examples eq1_freq=80 eq2_freq=1000 eq3_freq=4500 eq2_freq_oncc30=2500","title":"eqN freq"},{"location":"opcodes/eqN_freq/#examples","text":"eq1_freq=80 eq2_freq=1000 eq3_freq=4500 eq2_freq_oncc30=2500","title":"Examples"},{"location":"opcodes/eqN_freq_onccX/","text":"The SFZ specification has three EQ bands, with this opcode setting the center frequency of band N. There are three parametric bands: eq1, eq2 and eq3. If more than three bands are needed, ARIA allows fil_type to be set to lsh, hsh or peq to use one or both filters as additional EQ bands, including low shelf and high shelf. Examples eq1_freq=80 eq2_freq=1000 eq3_freq=4500 eq2_freq_oncc30=2500","title":"eqN freq onccX"},{"location":"opcodes/eqN_freq_onccX/#examples","text":"eq1_freq=80 eq2_freq=1000 eq3_freq=4500 eq2_freq_oncc30=2500","title":"Examples"},{"location":"opcodes/eqN_freqccX/","text":"The SFZ specification has three EQ bands, with this opcode setting the center frequency of band N. There are three parametric bands: eq1, eq2 and eq3. If more than three bands are needed, ARIA allows fil_type to be set to lsh, hsh or peq to use one or both filters as additional EQ bands, including low shelf and high shelf. Examples eq1_freq=80 eq2_freq=1000 eq3_freq=4500 eq2_freq_oncc30=2500","title":"eqN freqccX"},{"location":"opcodes/eqN_freqccX/#examples","text":"eq1_freq=80 eq2_freq=1000 eq3_freq=4500 eq2_freq_oncc30=2500","title":"Examples"},{"location":"opcodes/eqN_gain/","text":"Examples eq1_gain=-3 eq2_gain=6 eq3_gain=-6 eq1_gain_oncc23=-12 Notes When emulating timbral changes when there are not enough dynamic level samples available, and modulating EQ bands with MIDI CC, this will often be a negative value for the lowest band, and a positive value for the two higher bands.","title":"eqN gain"},{"location":"opcodes/eqN_gain/#examples","text":"eq1_gain=-3 eq2_gain=6 eq3_gain=-6 eq1_gain_oncc23=-12","title":"Examples"},{"location":"opcodes/eqN_gain/#notes","text":"When emulating timbral changes when there are not enough dynamic level samples available, and modulating EQ bands with MIDI CC, this will often be a negative value for the lowest band, and a positive value for the two higher bands.","title":"Notes"},{"location":"opcodes/eqN_gain_onccX/","text":"Examples eq1_gain=-3 eq2_gain=6 eq3_gain=-6 eq1_gain_oncc23=-12 Notes When emulating timbral changes when there are not enough dynamic level samples available, and modulating EQ bands with MIDI CC, this will often be a negative value for the lowest band, and a positive value for the two higher bands.","title":"eqN gain onccX"},{"location":"opcodes/eqN_gain_onccX/#examples","text":"eq1_gain=-3 eq2_gain=6 eq3_gain=-6 eq1_gain_oncc23=-12","title":"Examples"},{"location":"opcodes/eqN_gain_onccX/#notes","text":"When emulating timbral changes when there are not enough dynamic level samples available, and modulating EQ bands with MIDI CC, this will often be a negative value for the lowest band, and a positive value for the two higher bands.","title":"Notes"},{"location":"opcodes/eqN_gainccX/","text":"Examples eq1_gain=-3 eq2_gain=6 eq3_gain=-6 eq1_gain_oncc23=-12 Notes When emulating timbral changes when there are not enough dynamic level samples available, and modulating EQ bands with MIDI CC, this will often be a negative value for the lowest band, and a positive value for the two higher bands.","title":"eqN gainccX"},{"location":"opcodes/eqN_gainccX/#examples","text":"eq1_gain=-3 eq2_gain=6 eq3_gain=-6 eq1_gain_oncc23=-12","title":"Examples"},{"location":"opcodes/eqN_gainccX/#notes","text":"When emulating timbral changes when there are not enough dynamic level samples available, and modulating EQ bands with MIDI CC, this will often be a negative value for the lowest band, and a positive value for the two higher bands.","title":"Notes"},{"location":"opcodes/eqN_type/","text":"Example In some Cakewalk plugins it's possible to have shelving EQ by \"borrows\" from the three EQ bands. Allowed values are lshelf (low shelf), hshelf (high shelf) and peak (the default EQ band behavior). In ARIA, low-shelf or high-shelf EQ \"borrows\" one of the filters instead, as documented under the fil_gain opcode. eq1_gain=20 eq1_freq=10000 eq1_bw=1 eq1_type=lshelf","title":"eqN type"},{"location":"opcodes/eqN_type/#example","text":"In some Cakewalk plugins it's possible to have shelving EQ by \"borrows\" from the three EQ bands. Allowed values are lshelf (low shelf), hshelf (high shelf) and peak (the default EQ band behavior). In ARIA, low-shelf or high-shelf EQ \"borrows\" one of the filters instead, as documented under the fil_gain opcode. eq1_gain=20 eq1_freq=10000 eq1_bw=1 eq1_type=lshelf","title":"Example"},{"location":"opcodes/eqN_vel2freq/","text":"The SFZ specification has three EQ bands, with this opcode setting the center frequency of band N. There are three parametric bands: eq1, eq2 and eq3. If more than three bands are needed, ARIA allows fil_type to be set to lsh, hsh or peq to use one or both filters as additional EQ bands, including low shelf and high shelf. Examples eq1_freq=80 eq2_freq=1000 eq3_freq=4500 eq2_freq_oncc30=2500","title":"eqN vel2freq"},{"location":"opcodes/eqN_vel2freq/#examples","text":"eq1_freq=80 eq2_freq=1000 eq3_freq=4500 eq2_freq_oncc30=2500","title":"Examples"},{"location":"opcodes/eqN_vel2gain/","text":"Examples eq1_gain=-3 eq2_gain=6 eq3_gain=-6 eq1_gain_oncc23=-12 Notes When emulating timbral changes when there are not enough dynamic level samples available, and modulating EQ bands with MIDI CC, this will often be a negative value for the lowest band, and a positive value for the two higher bands.","title":"eqN vel2gain"},{"location":"opcodes/eqN_vel2gain/#examples","text":"eq1_gain=-3 eq2_gain=6 eq3_gain=-6 eq1_gain_oncc23=-12","title":"Examples"},{"location":"opcodes/eqN_vel2gain/#notes","text":"When emulating timbral changes when there are not enough dynamic level samples available, and modulating EQ bands with MIDI CC, this will often be a negative value for the lowest band, and a positive value for the two higher bands.","title":"Notes"},{"location":"opcodes/eq_bw/","text":"Used under the \u2039effect\u203a header, with type = eq .","title":"Eq bw"},{"location":"opcodes/eq_bw_onccN/","text":"Used under the \u2039effect\u203a header, with type = eq .","title":"eq bw onccN"},{"location":"opcodes/eq_freq/","text":"Used under the \u2039effect\u203a header, with type = eq .","title":"Eq freq"},{"location":"opcodes/eq_freq_onccN/","text":"Used under the \u2039effect\u203a header, with type = eq .","title":"eq freq onccN"},{"location":"opcodes/eq_gain/","text":"Used under the \u2039effect\u203a header, with type = eq .","title":"Eq gain"},{"location":"opcodes/eq_gain_onccN/","text":"Used under the \u2039effect\u203a header, with type = eq .","title":"eq gain onccN"},{"location":"opcodes/eq_type/","text":"Used under the \u2039effect\u203a header, with type = eq .","title":"Eq type"},{"location":"opcodes/fil2_gain/","text":"fil_gain and fil2_gain are used by the additional ARIA extension filter types lsh (low shelf), hsh (high shelf) and peq (parametric EQ). This allows the two filters to instead be used as additional EQ bands, on top of SFZ's regular three bands. It also allows shelving EQ. In ARIA, low-shelf or high-shelf EQ \"borrows\" one of the filters, while in some Cakewalk plugins it's also possible to have shelf EQ but it \"borrows\" from the three EQ bands rather than the two filters, and uses the eqN_type opcode. Examples fil_type=lsh cutoff=150 fil_gain=-6 fil2_type=hsh cutoff2=80000 fil2_gain=3","title":"fil_gain / fil2_gain"},{"location":"opcodes/fil2_gain/#examples","text":"fil_type=lsh cutoff=150 fil_gain=-6 fil2_type=hsh cutoff2=80000 fil2_gain=3","title":"Examples"},{"location":"opcodes/fil2_gain_onccN/","text":"fil_gain and fil2_gain are used by the additional ARIA extension filter types lsh (low shelf), hsh (high shelf) and peq (parametric EQ). This allows the two filters to instead be used as additional EQ bands, on top of SFZ's regular three bands. It also allows shelving EQ. In ARIA, low-shelf or high-shelf EQ \"borrows\" one of the filters, while in some Cakewalk plugins it's also possible to have shelf EQ but it \"borrows\" from the three EQ bands rather than the two filters, and uses the eqN_type opcode. Examples fil_type=lsh cutoff=150 fil_gain=-6 fil2_type=hsh cutoff2=80000 fil2_gain=3","title":"fil_gain / fil2_gain"},{"location":"opcodes/fil2_gain_onccN/#examples","text":"fil_type=lsh cutoff=150 fil_gain=-6 fil2_type=hsh cutoff2=80000 fil2_gain=3","title":"Examples"},{"location":"opcodes/fil2_keycenter/","text":"In this key, the filter keyboard tracking will have no effect. Examples fil_keycenter=60 fil_keycenter=E3","title":"fil_keycenter / fil2_keycenter"},{"location":"opcodes/fil2_keycenter/#examples","text":"fil_keycenter=60 fil_keycenter=E3","title":"Examples"},{"location":"opcodes/fil2_keytrack/","text":"A value of 100 means 100 cents per half-step. Examples fil_keytrack=100 fil_keytrack=0 The center key for this is specified by fil_keycenter - for keys below this key, the change in filter cutoff will be negative, and above this key, it will be positive. Sforzando accepts and honours negative values.","title":"fil_keytrack / fil2_keytrack"},{"location":"opcodes/fil2_keytrack/#examples","text":"fil_keytrack=100 fil_keytrack=0 The center key for this is specified by fil_keycenter - for keys below this key, the change in filter cutoff will be negative, and above this key, it will be positive. Sforzando accepts and honours negative values.","title":"Examples"},{"location":"opcodes/fil2_type/","text":"Allows you to choose which type of filter you use if not specified (ie.: only cutoff and resonance in the SFZ). fil_type was created in SFZ v1, so under that specification level only the v1 filters listed below are supported. fil2_type was added later in SFZ v2 as a second filter to be used in series, so under the v2 specification level both opcodes include both v1 and v2 filters. ARIA adds three more possible values for both opcodes. Examples fil_type=lpf_2p fil_type=hpf_1p Passive tone controls in guitars are one-pole low pass filters. Typical subtractive synthesizer filters are two-pole filters. fil2_type=hpf_2p The combination of fil and fil2 can be used to have, for example, both a high-pass and a low-pass filter, like this. In the below example, the first filter does not have a type set explicitly, so fil_type defaults to lpf_2p, making it a lowpass filter. The second filter is set to be a highpass filter. cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations lsh , hsh and peq are ARIA extensions, allowing filters to be used as low-shelf, high-shelf or up to two additional parametric EQ bands, in addition to the default three eqN bands. Filters of these three types use fil_gain or fil2_gain to set the gain of the shelf or band.","title":"fil_type / fil2_type"},{"location":"opcodes/fil2_type/#examples","text":"fil_type=lpf_2p fil_type=hpf_1p Passive tone controls in guitars are one-pole low pass filters. Typical subtractive synthesizer filters are two-pole filters. fil2_type=hpf_2p The combination of fil and fil2 can be used to have, for example, both a high-pass and a low-pass filter, like this. In the below example, the first filter does not have a type set explicitly, so fil_type defaults to lpf_2p, making it a lowpass filter. The second filter is set to be a highpass filter. cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/fil2_type/#practical-considerations","text":"lsh , hsh and peq are ARIA extensions, allowing filters to be used as low-shelf, high-shelf or up to two additional parametric EQ bands, in addition to the default three eqN bands. Filters of these three types use fil_gain or fil2_gain to set the gain of the shelf or band.","title":"Practical Considerations"},{"location":"opcodes/fil2_veltrack/","text":"Examples fil_veltrack=0 fil_veltrack=1200","title":"fil_veltrack / fil2_veltrack"},{"location":"opcodes/fil2_veltrack/#examples","text":"fil_veltrack=0 fil_veltrack=1200","title":"Examples"},{"location":"opcodes/fil_attack/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Fil attack"},{"location":"opcodes/fil_attack/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Examples"},{"location":"opcodes/fil_decay/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Fil decay"},{"location":"opcodes/fil_decay/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/fil_delay/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"Fil delay"},{"location":"opcodes/fil_delay/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/fil_depth/","text":"For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. -12000 cents is 10 octaves. For ampeg, this should not normally be used. Examples fileg_depth=1200 pitcheg_depth=-100","title":"Fil depth"},{"location":"opcodes/fil_depth/#examples","text":"fileg_depth=1200 pitcheg_depth=-100","title":"Examples"},{"location":"opcodes/fil_gain/","text":"fil_gain and fil2_gain are used by the additional ARIA extension filter types lsh (low shelf), hsh (high shelf) and peq (parametric EQ). This allows the two filters to instead be used as additional EQ bands, on top of SFZ's regular three bands. It also allows shelving EQ. In ARIA, low-shelf or high-shelf EQ \"borrows\" one of the filters, while in some Cakewalk plugins it's also possible to have shelf EQ but it \"borrows\" from the three EQ bands rather than the two filters, and uses the eqN_type opcode. Examples fil_type=lsh cutoff=150 fil_gain=-6 fil2_type=hsh cutoff2=80000 fil2_gain=3","title":"fil_gain / fil2_gain"},{"location":"opcodes/fil_gain/#examples","text":"fil_type=lsh cutoff=150 fil_gain=-6 fil2_type=hsh cutoff2=80000 fil2_gain=3","title":"Examples"},{"location":"opcodes/fil_gain_onccN/","text":"fil_gain and fil2_gain are used by the additional ARIA extension filter types lsh (low shelf), hsh (high shelf) and peq (parametric EQ). This allows the two filters to instead be used as additional EQ bands, on top of SFZ's regular three bands. It also allows shelving EQ. In ARIA, low-shelf or high-shelf EQ \"borrows\" one of the filters, while in some Cakewalk plugins it's also possible to have shelf EQ but it \"borrows\" from the three EQ bands rather than the two filters, and uses the eqN_type opcode. Examples fil_type=lsh cutoff=150 fil_gain=-6 fil2_type=hsh cutoff2=80000 fil2_gain=3","title":"fil_gain / fil2_gain"},{"location":"opcodes/fil_gain_onccN/#examples","text":"fil_type=lsh cutoff=150 fil_gain=-6 fil2_type=hsh cutoff2=80000 fil2_gain=3","title":"Examples"},{"location":"opcodes/fil_hold/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"Fil hold"},{"location":"opcodes/fil_hold/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/fil_keycenter/","text":"In this key, the filter keyboard tracking will have no effect. Examples fil_keycenter=60 fil_keycenter=E3","title":"fil_keycenter / fil2_keycenter"},{"location":"opcodes/fil_keycenter/#examples","text":"fil_keycenter=60 fil_keycenter=E3","title":"Examples"},{"location":"opcodes/fil_keytrack/","text":"A value of 100 means 100 cents per half-step. Examples fil_keytrack=100 fil_keytrack=0 The center key for this is specified by fil_keycenter - for keys below this key, the change in filter cutoff will be negative, and above this key, it will be positive. Sforzando accepts and honours negative values.","title":"fil_keytrack / fil2_keytrack"},{"location":"opcodes/fil_keytrack/#examples","text":"fil_keytrack=100 fil_keytrack=0 The center key for this is specified by fil_keycenter - for keys below this key, the change in filter cutoff will be negative, and above this key, it will be positive. Sforzando accepts and honours negative values.","title":"Examples"},{"location":"opcodes/fil_random/","text":"Computed when the note is triggered, remains the same for that region for as long as the region plays. Examples fil_random=100 fil_random=400 Practical Considerations In ARIA, this is unipolar. In rcg sfz and Cakewalk, this is bipolar.","title":"Fil random"},{"location":"opcodes/fil_random/#examples","text":"fil_random=100 fil_random=400","title":"Examples"},{"location":"opcodes/fil_random/#practical-considerations","text":"In ARIA, this is unipolar. In rcg sfz and Cakewalk, this is bipolar.","title":"Practical Considerations"},{"location":"opcodes/fil_release/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot, in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal.","title":"Fil release"},{"location":"opcodes/fil_release/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot, in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal.","title":"Examples"},{"location":"opcodes/fil_sustain/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Fil sustain"},{"location":"opcodes/fil_sustain/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Examples"},{"location":"opcodes/fil_type/","text":"Allows you to choose which type of filter you use if not specified (ie.: only cutoff and resonance in the SFZ). fil_type was created in SFZ v1, so under that specification level only the v1 filters listed below are supported. fil2_type was added later in SFZ v2 as a second filter to be used in series, so under the v2 specification level both opcodes include both v1 and v2 filters. ARIA adds three more possible values for both opcodes. Examples fil_type=lpf_2p fil_type=hpf_1p Passive tone controls in guitars are one-pole low pass filters. Typical subtractive synthesizer filters are two-pole filters. fil2_type=hpf_2p The combination of fil and fil2 can be used to have, for example, both a high-pass and a low-pass filter, like this. In the below example, the first filter does not have a type set explicitly, so fil_type defaults to lpf_2p, making it a lowpass filter. The second filter is set to be a highpass filter. cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations lsh , hsh and peq are ARIA extensions, allowing filters to be used as low-shelf, high-shelf or up to two additional parametric EQ bands, in addition to the default three eqN bands. Filters of these three types use fil_gain or fil2_gain to set the gain of the shelf or band.","title":"fil_type / fil2_type"},{"location":"opcodes/fil_type/#examples","text":"fil_type=lpf_2p fil_type=hpf_1p Passive tone controls in guitars are one-pole low pass filters. Typical subtractive synthesizer filters are two-pole filters. fil2_type=hpf_2p The combination of fil and fil2 can be used to have, for example, both a high-pass and a low-pass filter, like this. In the below example, the first filter does not have a type set explicitly, so fil_type defaults to lpf_2p, making it a lowpass filter. The second filter is set to be a highpass filter. cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/fil_type/#practical-considerations","text":"lsh , hsh and peq are ARIA extensions, allowing filters to be used as low-shelf, high-shelf or up to two additional parametric EQ bands, in addition to the default three eqN bands. Filters of these three types use fil_gain or fil2_gain to set the gain of the shelf or band.","title":"Practical Considerations"},{"location":"opcodes/fil_vel2attack/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Fil vel2attack"},{"location":"opcodes/fil_vel2attack/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Examples"},{"location":"opcodes/fil_vel2decay/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Fil vel2decay"},{"location":"opcodes/fil_vel2decay/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/fil_vel2delay/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"Fil vel2delay"},{"location":"opcodes/fil_vel2delay/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/fil_vel2depth/","text":"For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. -12000 cents is 10 octaves. For ampeg, this should not normally be used. Examples fileg_depth=1200 pitcheg_depth=-100","title":"Fil vel2depth"},{"location":"opcodes/fil_vel2depth/#examples","text":"fileg_depth=1200 pitcheg_depth=-100","title":"Examples"},{"location":"opcodes/fil_vel2hold/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"Fil vel2hold"},{"location":"opcodes/fil_vel2hold/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/fil_vel2release/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot, in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal.","title":"Fil vel2release"},{"location":"opcodes/fil_vel2release/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot, in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal.","title":"Examples"},{"location":"opcodes/fil_vel2sustain/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Fil vel2sustain"},{"location":"opcodes/fil_vel2sustain/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Examples"},{"location":"opcodes/fil_veltrack/","text":"Examples fil_veltrack=0 fil_veltrack=1200","title":"fil_veltrack / fil2_veltrack"},{"location":"opcodes/fil_veltrack/#examples","text":"fil_veltrack=0 fil_veltrack=1200","title":"Examples"},{"location":"opcodes/fileg_attack/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Fileg attack"},{"location":"opcodes/fileg_attack/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Examples"},{"location":"opcodes/fileg_attack_curveccN/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"fileg attack curveccN"},{"location":"opcodes/fileg_attack_curveccN/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Examples"},{"location":"opcodes/fileg_attack_onccN/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"fileg attack onccN"},{"location":"opcodes/fileg_attack_onccN/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Examples"},{"location":"opcodes/fileg_attack_shape/","text":"0 is linear. Positive values are slower curves (that means the envelope will initially not fade in much, and most of the fade in will happen towards the end of the attack period) and negative values faster (quick initial fade in with the latter part of the attack stage fading in less). Past 10 or -10, there's little difference - at that point, the envelope is practically a horizontal line and a vertical line (if positive) or a vertical line followed by a horizontal line (if negative). Examples ampeg_attack_shape=2.1 ampeg_attack_shape=-3.8","title":"Fileg attack shape"},{"location":"opcodes/fileg_attack_shape/#examples","text":"ampeg_attack_shape=2.1 ampeg_attack_shape=-3.8","title":"Examples"},{"location":"opcodes/fileg_attackccN/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"fileg attackccN"},{"location":"opcodes/fileg_attackccN/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Examples"},{"location":"opcodes/fileg_decay/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Fileg decay"},{"location":"opcodes/fileg_decay/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/fileg_decay_curveccN/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"fileg decay curveccN"},{"location":"opcodes/fileg_decay_curveccN/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/fileg_decay_onccN/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"fileg decay onccN"},{"location":"opcodes/fileg_decay_onccN/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/fileg_decay_shape/","text":"0 is linear, positive values are slower curves (that means the envelope will initially not decay out much, and most of the decay will happen towards the end of the decay period) and negative values faster (quick initial decay with quiet tail decaying more slowly). Past 10 or -10, there's little difference - at that point, the envelope is practically a horizontal line and a vertical line (if positive) or a vertical line followed by a horizontal line (if negative). Examples ampeg_decay_shape=2.1 ampeg_decay_shape=-3.8","title":"Fileg decay shape"},{"location":"opcodes/fileg_decay_shape/#examples","text":"ampeg_decay_shape=2.1 ampeg_decay_shape=-3.8","title":"Examples"},{"location":"opcodes/fileg_decay_zero/","text":"When set to 1, the decay slope is fixed, and the higher the sustain level of the envelope, the less time the decay stage will actually take. Changing fileg_sustain will change the actual duration of the decay stage as well, up to a maximum of the full fileg_decay value at fileg_sustain equal to 0. Setting this to 0 will make the decay always happen during the entire time period specified by fileg_decay , regardless of the current fileg_sustain level. Examples fileg_decay_zero=0 fileg_decay_zero=1","title":"Fileg decay zero"},{"location":"opcodes/fileg_decay_zero/#examples","text":"fileg_decay_zero=0 fileg_decay_zero=1","title":"Examples"},{"location":"opcodes/fileg_decayccN/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"fileg decayccN"},{"location":"opcodes/fileg_decayccN/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/fileg_delay/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"Fileg delay"},{"location":"opcodes/fileg_delay/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/fileg_delay_curveccN/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"fileg delay curveccN"},{"location":"opcodes/fileg_delay_curveccN/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/fileg_delay_onccN/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"fileg delay onccN"},{"location":"opcodes/fileg_delay_onccN/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/fileg_delayccN/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"fileg delayccN"},{"location":"opcodes/fileg_delayccN/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/fileg_depth/","text":"For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. -12000 cents is 10 octaves. For ampeg, this should not normally be used. Examples fileg_depth=1200 pitcheg_depth=-100","title":"Fileg depth"},{"location":"opcodes/fileg_depth/#examples","text":"fileg_depth=1200 pitcheg_depth=-100","title":"Examples"},{"location":"opcodes/fileg_depth_curveccN/","text":"For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. -12000 cents is 10 octaves. For ampeg, this should not normally be used. Examples fileg_depth=1200 pitcheg_depth=-100","title":"fileg depth curveccN"},{"location":"opcodes/fileg_depth_curveccN/#examples","text":"fileg_depth=1200 pitcheg_depth=-100","title":"Examples"},{"location":"opcodes/fileg_depth_onccN/","text":"For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. -12000 cents is 10 octaves. For ampeg, this should not normally be used. Examples fileg_depth=1200 pitcheg_depth=-100","title":"fileg depth onccN"},{"location":"opcodes/fileg_depth_onccN/#examples","text":"fileg_depth=1200 pitcheg_depth=-100","title":"Examples"},{"location":"opcodes/fileg_depthccN/","text":"For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. -12000 cents is 10 octaves. For ampeg, this should not normally be used. Examples fileg_depth=1200 pitcheg_depth=-100","title":"fileg depthccN"},{"location":"opcodes/fileg_depthccN/#examples","text":"fileg_depth=1200 pitcheg_depth=-100","title":"Examples"},{"location":"opcodes/fileg_dynamic/","text":"When 1, causes envelope segment durations and sustain level to be recalculated when a MIDI CC message modulating those envelopes is received. When 0, envelope segment durations and sustain level are calculated only at the start of the particular envelope segment. Examples fileg_dynamic=1 fileg_dynamic=0","title":"Fileg dynamic"},{"location":"opcodes/fileg_dynamic/#examples","text":"fileg_dynamic=1 fileg_dynamic=0","title":"Examples"},{"location":"opcodes/fileg_hold/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"Fileg hold"},{"location":"opcodes/fileg_hold/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/fileg_hold_curveccN/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"fileg hold curveccN"},{"location":"opcodes/fileg_hold_curveccN/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/fileg_hold_onccN/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"fileg hold onccN"},{"location":"opcodes/fileg_hold_onccN/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/fileg_holdccN/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"fileg holdccN"},{"location":"opcodes/fileg_holdccN/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/fileg_release/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot, in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal.","title":"Fileg release"},{"location":"opcodes/fileg_release/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot, in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal.","title":"Examples"},{"location":"opcodes/fileg_release_curveccN/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot, in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal.","title":"fileg release curveccN"},{"location":"opcodes/fileg_release_curveccN/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot, in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal.","title":"Examples"},{"location":"opcodes/fileg_release_onccN/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot, in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal.","title":"fileg release onccN"},{"location":"opcodes/fileg_release_onccN/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot, in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal.","title":"Examples"},{"location":"opcodes/fileg_release_shape/","text":"0 is linear, positive values are slower curves (that means the envelope will initially not fade out much, and most of the fade will happen towards the end of the release period) and negative values faster (quick initial fadeout with quiet tail fading out more slowly). Past 10 or -10, there's little difference - at that point, the envelope is practically a horizontal line and a vertical line (if positive) or a vertical line followed by a horizontal line (if negative). Examples ampeg_release_shape=2.1 ampeg_release_shape=-3.8","title":"Fileg release shape"},{"location":"opcodes/fileg_release_shape/#examples","text":"ampeg_release_shape=2.1 ampeg_release_shape=-3.8","title":"Examples"},{"location":"opcodes/fileg_release_zero/","text":"When 1, indicates release time is the time it would take to get from 0dBs to -oo, NOT the time to get from the current sustain to zero. In other words, under default behavior, the release time is fixed, while setting this to 1 makes the release slope fixed but time will be shorter when sustain level is lower. Examples fileg_release_zero=1 fileg_release_zero=0","title":"Fileg release zero"},{"location":"opcodes/fileg_release_zero/#examples","text":"fileg_release_zero=1 fileg_release_zero=0","title":"Examples"},{"location":"opcodes/fileg_releaseccN/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot, in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal.","title":"fileg releaseccN"},{"location":"opcodes/fileg_releaseccN/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot, in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal.","title":"Examples"},{"location":"opcodes/fileg_start/","text":"Examples ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"Fileg start"},{"location":"opcodes/fileg_start/#examples","text":"ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"Examples"},{"location":"opcodes/fileg_start_curveccN/","text":"Examples ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"fileg start curveccN"},{"location":"opcodes/fileg_start_curveccN/#examples","text":"ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"Examples"},{"location":"opcodes/fileg_start_onccN/","text":"Examples ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"fileg start onccN"},{"location":"opcodes/fileg_start_onccN/#examples","text":"ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"Examples"},{"location":"opcodes/fileg_startccN/","text":"Examples ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"fileg startccN"},{"location":"opcodes/fileg_startccN/#examples","text":"ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"Examples"},{"location":"opcodes/fileg_sustain/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Fileg sustain"},{"location":"opcodes/fileg_sustain/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Examples"},{"location":"opcodes/fileg_sustain_curveccN/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"fileg sustain curveccN"},{"location":"opcodes/fileg_sustain_curveccN/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Examples"},{"location":"opcodes/fileg_sustain_onccN/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"fileg sustain onccN"},{"location":"opcodes/fileg_sustain_onccN/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Examples"},{"location":"opcodes/fileg_sustainccN/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"fileg sustainccN"},{"location":"opcodes/fileg_sustainccN/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Examples"},{"location":"opcodes/fileg_vel2attack/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Fileg vel2attack"},{"location":"opcodes/fileg_vel2attack/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Examples"},{"location":"opcodes/fileg_vel2decay/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Fileg vel2decay"},{"location":"opcodes/fileg_vel2decay/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/fileg_vel2delay/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"Fileg vel2delay"},{"location":"opcodes/fileg_vel2delay/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/fileg_vel2depth/","text":"For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. -12000 cents is 10 octaves. For ampeg, this should not normally be used. Examples fileg_depth=1200 pitcheg_depth=-100","title":"Fileg vel2depth"},{"location":"opcodes/fileg_vel2depth/#examples","text":"fileg_depth=1200 pitcheg_depth=-100","title":"Examples"},{"location":"opcodes/fileg_vel2hold/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"Fileg vel2hold"},{"location":"opcodes/fileg_vel2hold/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/fileg_vel2release/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot, in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal.","title":"Fileg vel2release"},{"location":"opcodes/fileg_vel2release/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, ampeg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot, in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, ampeg_release is used when off_mode is set to normal.","title":"Examples"},{"location":"opcodes/fileg_vel2sustain/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Fileg vel2sustain"},{"location":"opcodes/fileg_vel2sustain/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10(eg type)_sustain","title":"Examples"},{"location":"opcodes/fillfo_delay/","text":"Examples pitchlfo_delay=1 amplfo_delay=0.4 This is very useful, as many instruments and vocals don't trigger vibrato immediately when a note starts, but slightly later.","title":"Fillfo delay"},{"location":"opcodes/fillfo_delay/#examples","text":"pitchlfo_delay=1 amplfo_delay=0.4 This is very useful, as many instruments and vocals don't trigger vibrato immediately when a note starts, but slightly later.","title":"Examples"},{"location":"opcodes/fillfo_depth/","text":"Examples amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Fillfo depth"},{"location":"opcodes/fillfo_depth/#examples","text":"amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Examples"},{"location":"opcodes/fillfo_depth_onccN/","text":"Examples amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"fillfo depth onccN"},{"location":"opcodes/fillfo_depth_onccN/#examples","text":"amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Examples"},{"location":"opcodes/fillfo_depthccN/","text":"Examples amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"fillfo depthccN"},{"location":"opcodes/fillfo_depthccN/#examples","text":"amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Examples"},{"location":"opcodes/fillfo_depthchanaft/","text":"Examples amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Fillfo depthchanaft"},{"location":"opcodes/fillfo_depthchanaft/#examples","text":"amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Examples"},{"location":"opcodes/fillfo_depthpolyaft/","text":"Examples amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Fillfo depthpolyaft"},{"location":"opcodes/fillfo_depthpolyaft/#examples","text":"amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Examples"},{"location":"opcodes/fillfo_fade/","text":"Examples amplfo_fade=1 pitchfo_fade=0.4 Useful for vibrato which grows in intensity gradually, as commonly performed by bowed string players.","title":"Fillfo fade"},{"location":"opcodes/fillfo_fade/#examples","text":"amplfo_fade=1 pitchfo_fade=0.4 Useful for vibrato which grows in intensity gradually, as commonly performed by bowed string players.","title":"Examples"},{"location":"opcodes/fillfo_freq/","text":"Examples amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Fillfo freq"},{"location":"opcodes/fillfo_freq/#examples","text":"amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Examples"},{"location":"opcodes/fillfo_freqccN/","text":"Examples amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"fillfo freqccN"},{"location":"opcodes/fillfo_freqccN/#examples","text":"amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Examples"},{"location":"opcodes/fillfo_freqchanaft/","text":"Examples amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Fillfo freqchanaft"},{"location":"opcodes/fillfo_freqchanaft/#examples","text":"amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Examples"},{"location":"opcodes/fillfo_freqpolyaft/","text":"Examples amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Fillfo freqpolyaft"},{"location":"opcodes/fillfo_freqpolyaft/#examples","text":"amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Examples"},{"location":"opcodes/filter_cutoff/","text":"Used under the \u2039effect\u203a header, with type = filter .","title":"Filter cutoff"},{"location":"opcodes/filter_cutoff_onccN/","text":"Used under the \u2039effect\u203a header, with type = filter .","title":"filter cutoff onccN"},{"location":"opcodes/filter_resonance/","text":"Used under the \u2039effect\u203a header, with type = filter .","title":"Filter resonance"},{"location":"opcodes/filter_resonance_onccN/","text":"Used under the \u2039effect\u203a header, with type = filter .","title":"filter resonance onccN"},{"location":"opcodes/filter_type/","text":"Used under the \u2039effect\u203a header, with type = filter .","title":"Filter type"},{"location":"opcodes/filtype/","text":"Allows you to choose which type of filter you use if not specified (ie.: only cutoff and resonance in the SFZ). fil_type was created in SFZ v1, so under that specification level only the v1 filters listed below are supported. fil2_type was added later in SFZ v2 as a second filter to be used in series, so under the v2 specification level both opcodes include both v1 and v2 filters. ARIA adds three more possible values for both opcodes. Examples fil_type=lpf_2p fil_type=hpf_1p Passive tone controls in guitars are one-pole low pass filters. Typical subtractive synthesizer filters are two-pole filters. fil2_type=hpf_2p The combination of fil and fil2 can be used to have, for example, both a high-pass and a low-pass filter, like this. In the below example, the first filter does not have a type set explicitly, so fil_type defaults to lpf_2p, making it a lowpass filter. The second filter is set to be a highpass filter. cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3 Practical Considerations lsh , hsh and peq are ARIA extensions, allowing filters to be used as low-shelf, high-shelf or up to two additional parametric EQ bands, in addition to the default three eqN bands. Filters of these three types use fil_gain or fil2_gain to set the gain of the shelf or band.","title":"fil_type / fil2_type"},{"location":"opcodes/filtype/#examples","text":"fil_type=lpf_2p fil_type=hpf_1p Passive tone controls in guitars are one-pole low pass filters. Typical subtractive synthesizer filters are two-pole filters. fil2_type=hpf_2p The combination of fil and fil2 can be used to have, for example, both a high-pass and a low-pass filter, like this. In the below example, the first filter does not have a type set explicitly, so fil_type defaults to lpf_2p, making it a lowpass filter. The second filter is set to be a highpass filter. cutoff=1200 resonance=6 fil2_type=hpf_2p cutoff2=250 resonance2=3","title":"Examples"},{"location":"opcodes/filtype/#practical-considerations","text":"lsh , hsh and peq are ARIA extensions, allowing filters to be used as low-shelf, high-shelf or up to two additional parametric EQ bands, in addition to the default three eqN bands. Filters of these three types use fil_gain or fil2_gain to set the gain of the shelf or band.","title":"Practical Considerations"},{"location":"opcodes/fxNtomain/","text":"Global, can be set under any \u2039effect\u203a header for identical result. N: 1-4, see routing graph. Translates from % into a linear gain 0-1.","title":"fxNtomain"},{"location":"opcodes/fxNtomix/","text":"Global, can be set under any [\u2039effect\u203a] header for identical result. N: 1-4, see routing graph. Translates from % into a linear gain 0-1.","title":"fxNtomix"},{"location":"opcodes/gain_ccN/","text":"Range is -144.6 to 6 in the specification, but many SFZ players can utilize values above 6. Sfz.dll, Rapture and Dimension have a +24 dB maximum, and ARIA has an upper limit of at least +144, perhaps even more. Examples volume=-24 volume=0 volume=3.5 gain_cc1=12 This will play the sample at unchanged volume when CC1 is at 0, and apply a 12 dB boost when CC1 is at maximum. gain_ccN / volume_onccN is useful for creating volume controls. In Aria, either gain or volume can be used in modulations; however, gain by itself (for example gain=5) is not valid. For a fixed volume change wihtout modulation, only volume works.","title":"gain ccN"},{"location":"opcodes/gain_ccN/#examples","text":"volume=-24 volume=0 volume=3.5 gain_cc1=12 This will play the sample at unchanged volume when CC1 is at 0, and apply a 12 dB boost when CC1 is at maximum. gain_ccN / volume_onccN is useful for creating volume controls. In Aria, either gain or volume can be used in modulations; however, gain by itself (for example gain=5) is not valid. For a fixed volume change wihtout modulation, only volume works.","title":"Examples"},{"location":"opcodes/gain_onccN/","text":"Range is -144.6 to 6 in the specification, but many SFZ players can utilize values above 6. Sfz.dll, Rapture and Dimension have a +24 dB maximum, and ARIA has an upper limit of at least +144, perhaps even more. Examples volume=-24 volume=0 volume=3.5 gain_cc1=12 This will play the sample at unchanged volume when CC1 is at 0, and apply a 12 dB boost when CC1 is at maximum. gain_ccN / volume_onccN is useful for creating volume controls. In Aria, either gain or volume can be used in modulations; however, gain by itself (for example gain=5) is not valid. For a fixed volume change wihtout modulation, only volume works.","title":"gain onccN"},{"location":"opcodes/gain_onccN/#examples","text":"volume=-24 volume=0 volume=3.5 gain_cc1=12 This will play the sample at unchanged volume when CC1 is at 0, and apply a 12 dB boost when CC1 is at maximum. gain_ccN / volume_onccN is useful for creating volume controls. In Aria, either gain or volume can be used in modulations; however, gain by itself (for example gain=5) is not valid. For a fixed volume change wihtout modulation, only volume works.","title":"Examples"},{"location":"opcodes/gain_random/","text":"Computed when the note is triggered, remains the same for that region for as long as the region plays. Examples amp_random=10 amp_random=3 volume=-3 amp_random=6 Practical Considerations In ARIA and Cakewalk, amp_random is unipolar. To create variation which can be either negative or positive, this needs to be combined with a fixed volume offset for half the negative value that amp_random is set to. In the rgc sfz player, amp_random is bipolar.","title":"Gain random"},{"location":"opcodes/gain_random/#examples","text":"amp_random=10 amp_random=3 volume=-3 amp_random=6","title":"Examples"},{"location":"opcodes/gain_random/#practical-considerations","text":"In ARIA and Cakewalk, amp_random is unipolar. To create variation which can be either negative or positive, this needs to be combined with a fixed volume offset for half the negative value that amp_random is set to. In the rgc sfz player, amp_random is bipolar.","title":"Practical Considerations"},{"location":"opcodes/gate_attack/","text":"Used under the \u2039effect\u203a header, with type = gate .","title":"Gate attack"},{"location":"opcodes/gate_onccN/","text":"Used under the \u2039effect\u203a header, with type = gate .","title":"gate onccN"},{"location":"opcodes/gate_release/","text":"Used under the \u2039effect\u203a header, with type = gate .","title":"Gate release"},{"location":"opcodes/gate_stlink/","text":"Used under the \u2039effect\u203a header, with type = gate .","title":"Gate stlink"},{"location":"opcodes/gate_threshold/","text":"Used under the \u2039effect\u203a header, with type = gate .","title":"Gate threshold"},{"location":"opcodes/global_amplitude/","text":"Example global_amplitude=60","title":"Global amplitude"},{"location":"opcodes/global_amplitude/#example","text":"global_amplitude=60","title":"Example"},{"location":"opcodes/global_label/","text":"Useful for debugging. It can be set anywhere, not just under the \u2039global\u203a header. Examples global_label=Acoustic piano global_label=Test legato patch","title":"Global label"},{"location":"opcodes/global_label/#examples","text":"global_label=Acoustic piano global_label=Test legato patch","title":"Examples"},{"location":"opcodes/global_tune/","text":"","title":"Global tune"},{"location":"opcodes/global_volume/","text":"","title":"Global volume"},{"location":"opcodes/group/","text":"ARIA adds also the polyphony_group alias to reduce the confusion between the group opcode and the \u2039 group \u203a header. Examples group=3 group=334 The group opcode is used together with off_by to make something monophonic. For example, the flute is by nature a monophonic instrument, so if a flute were recorded with one microphone and had one set of samples, it would make sense to set all its samples to have one group. A guitar is polyphonic, but each string is monophonic, so a six-string guitar would naturally be split into six groups - one per string. In these cases, the group number will be equal to the off_by number. This is also commonly used with hi-hats - this is an example of where things can get more sophisticated with a large number of groups involved, as it's possible to set more closed hi-hat sounds mute more open ones, but not vice-versa, and it's also quite possible that there are separate close mic, overhead and room samples. group and off_by can also be used in other contexts where one sound should cause another to stop but enforcing monophony is not the goal - for example, a crash cymbal doesn't need to be monophonic, as allowing the sound to build up is reasonably natural, but if we wanted to implement a cymbal choke, then the crash sounds would be in one group, the choke samples in another. Practical Considerations The actual minimum and maximum values are not currently known. Some players will treat numbers outside a certain range as equivalent to group=0, and ARIA/Sforzando will also do this with text strings. The behavior of non-integer numbers is also currently unknown. This makes it possible to use an extremely large number for one group, but it's obviously not recommended.","title":"Group"},{"location":"opcodes/group/#examples","text":"group=3 group=334 The group opcode is used together with off_by to make something monophonic. For example, the flute is by nature a monophonic instrument, so if a flute were recorded with one microphone and had one set of samples, it would make sense to set all its samples to have one group. A guitar is polyphonic, but each string is monophonic, so a six-string guitar would naturally be split into six groups - one per string. In these cases, the group number will be equal to the off_by number. This is also commonly used with hi-hats - this is an example of where things can get more sophisticated with a large number of groups involved, as it's possible to set more closed hi-hat sounds mute more open ones, but not vice-versa, and it's also quite possible that there are separate close mic, overhead and room samples. group and off_by can also be used in other contexts where one sound should cause another to stop but enforcing monophony is not the goal - for example, a crash cymbal doesn't need to be monophonic, as allowing the sound to build up is reasonably natural, but if we wanted to implement a cymbal choke, then the crash sounds would be in one group, the choke samples in another.","title":"Examples"},{"location":"opcodes/group/#practical-considerations","text":"The actual minimum and maximum values are not currently known. Some players will treat numbers outside a certain range as equivalent to group=0, and ARIA/Sforzando will also do this with text strings. The behavior of non-integer numbers is also currently unknown. This makes it possible to use an extremely large number for one group, but it's obviously not recommended.","title":"Practical Considerations"},{"location":"opcodes/group_amplitude/","text":"Example group_amplitude=60","title":"Group amplitude"},{"location":"opcodes/group_amplitude/#example","text":"group_amplitude=60","title":"Example"},{"location":"opcodes/group_label/","text":"Useful for debugging. It can be set anywhere, not just under the \u2039 group \u203a header. Example group_label=Edge","title":"Group label"},{"location":"opcodes/group_label/#example","text":"group_label=Edge","title":"Example"},{"location":"opcodes/group_tune/","text":"","title":"Group tune"},{"location":"opcodes/group_volume/","text":"","title":"Group volume"},{"location":"opcodes/hibend/","text":"The region will play only if last Pitch Bend message received was in the 0 to 4000 range. Examples lobend=0 hibend=4000","title":"lobend / hibend"},{"location":"opcodes/hibend/#examples","text":"lobend=0 hibend=4000","title":"Examples"},{"location":"opcodes/hibpm/","text":"Host tempo value. The region will play if the host tempo is equal to or higher than lobpm , and lower than hibpm . Examples lobpm=0 hibpm=100 lobpm=100 hibpm=200.5","title":"lobpm / hibpm"},{"location":"opcodes/hibpm/#examples","text":"lobpm=0 hibpm=100 lobpm=100 hibpm=200.5","title":"Examples"},{"location":"opcodes/hiccN/","text":"N will normally be a number from 1 to 127. Examples locc74=30 hicc74=100 The region will play only if last MIDI controller 74 received was in the 30 to 100 range. Allowed range is 0 to 127. The defaults are loccN=0 and hiccN=127. Practical applications include using MIDI CC to switch things on and off - for example, additional voices, release noises, vibrato etc. A common example would be having a hi-hat with various degrees of openness sampled, all of those mapped to the same MIDI note, and hicc/locc used to define the ranges for which each degree of openness should play. A simpler example would be switching between sine, saw and noise waveforms: hicc1=63 sample=*sine locc1=64 hicc=126 sample=*saw locc1=127 sample=*noise This is a \"hard\" switch - if a region is within the locc to hicc range it plays, if it's outside that range it does not play. For smooth fades controlled by CC (such as crossfaded dynamic layers or crossfaded vibrato layers on sustained instruments), other opcodes such as xfin_loccN / xfin_hiccN and xfout_loccN / xfout_hiccN should be used, or perhaps the amplitude_onccN ARIA extension.","title":"loccN / hiccN"},{"location":"opcodes/hiccN/#examples","text":"locc74=30 hicc74=100 The region will play only if last MIDI controller 74 received was in the 30 to 100 range. Allowed range is 0 to 127. The defaults are loccN=0 and hiccN=127. Practical applications include using MIDI CC to switch things on and off - for example, additional voices, release noises, vibrato etc. A common example would be having a hi-hat with various degrees of openness sampled, all of those mapped to the same MIDI note, and hicc/locc used to define the ranges for which each degree of openness should play. A simpler example would be switching between sine, saw and noise waveforms: hicc1=63 sample=*sine locc1=64 hicc=126 sample=*saw locc1=127 sample=*noise This is a \"hard\" switch - if a region is within the locc to hicc range it plays, if it's outside that range it does not play. For smooth fades controlled by CC (such as crossfaded dynamic layers or crossfaded vibrato layers on sustained instruments), other opcodes such as xfin_loccN / xfin_hiccN and xfout_loccN / xfout_hiccN should be used, or perhaps the amplitude_onccN ARIA extension.","title":"Examples"},{"location":"opcodes/hichan/","text":"lochan and hichan will almost always be used together. One application of this is SFZ files which are to be controlled from MIDI guitar controllers, which send MIDI data for each string on a separate MIDI channel. The regions for that string would then have lochan and hichan set to the proper number. Examples lochan=1 hichan=7 lochan=2 hichan=2","title":"lochan / hichan"},{"location":"opcodes/hichan/#examples","text":"lochan=1 hichan=7 lochan=2 hichan=2","title":"Examples"},{"location":"opcodes/hichanaft/","text":"Examples The region will play only if last Channel Aftertouch message received was in the 30-100 range. lochanaft=30 hichanaft=100","title":"lochanaft / hichanaft"},{"location":"opcodes/hichanaft/#examples","text":"The region will play only if last Channel Aftertouch message received was in the 30-100 range. lochanaft=30 hichanaft=100","title":"Examples"},{"location":"opcodes/hihdccN/","text":"Other opcodes such as set_hdccN can also be used with these. Example lohdcc90=0.333 hihdcc90=0.7","title":"lohdccN / hihdccN"},{"location":"opcodes/hihdccN/#example","text":"lohdcc90=0.333 hihdcc90=0.7","title":"Example"},{"location":"opcodes/hikey/","text":"When a region only covers one note, it is generally more convenient to use key instead of hikey and lokey . When hikey and lokey are used, they will usually need to be used together with pitch_keycenter . These opcodes, as well as key , can use either MIDI note numbers (0 to 127) or MIDI note names (e.g. c3 or D#4). Using note numbers is recommended, however, as note numbers are interpreted consistently, while the same note names can be mapped to note numbers an octave or even two apart in different DAWs. In the SFZ 1 specification, the allowed range is 0 to 127. However, SFZ 2 additionally includes the possibility to set lokey and hikey to -1, to prevent a region from being triggered by any keys. This is a way (though, admittedly, not a very elegant one) to use the on_loccN / onhiccN opcodes to trigger, for example, pedal noises which are triggered whether any keys are pressed or not. Examples sample=*sine lokey=72 hikey=84 As with the key opcode, the values can also be MIDI note names: sample=*sine lokey=c5 hikey=c6 When an instrument is sampled every minor third, this kind of usage will be common: sample=a4.wav lokey=68 hikey=70 pitch_keycenter=69 sample=c5.wav lokey=71 hikey=73 pitch_keycenter=72 sample=eb5.wav lokey=74 hikey=76 pitch_keycenter=75","title":"lokey / hikey"},{"location":"opcodes/hikey/#examples","text":" sample=*sine lokey=72 hikey=84 As with the key opcode, the values can also be MIDI note names: sample=*sine lokey=c5 hikey=c6 When an instrument is sampled every minor third, this kind of usage will be common: sample=a4.wav lokey=68 hikey=70 pitch_keycenter=69 sample=c5.wav lokey=71 hikey=73 pitch_keycenter=72 sample=eb5.wav lokey=74 hikey=76 pitch_keycenter=75","title":"Examples"},{"location":"opcodes/hint_/","text":"ARIA supports specific opcodes in \u2039 control \u203a which start with \"hint\", these should be ignored by any other SFZ parser. Other engines could implement other hints as they wished. A useful case is hint_ram_based =1, which will cause the samples to be loaded into RAM in their entirety, instead of preloading only starts into RAM and streaming the rest from disk. This can be useful for preventing sound dropout with larger instruments on lower-performance systems, or instruments located on a HDD.","title":"Hint "},{"location":"opcodes/hipolyaft/","text":"Example The region will play only if last Polyphonic Aftertouch message received was in the 30-100 range. lopolyaft=30 hipolyaft=100 Practical Considerations In the rgcaudio sfz player, the incoming note information in the Polyphonic Aftertouch message is not relevant (which basically means polyphonic aftertouch isn't polyphonic, and works like channel aftertouch). In ARIA, the incoming note information is used, and polyphonic aftertouch works polyphonically. Other SFZ players need testing.","title":"lopolyaft / hipolyaft"},{"location":"opcodes/hipolyaft/#example","text":"The region will play only if last Polyphonic Aftertouch message received was in the 30-100 range. lopolyaft=30 hipolyaft=100","title":"Example"},{"location":"opcodes/hipolyaft/#practical-considerations","text":"In the rgcaudio sfz player, the incoming note information in the Polyphonic Aftertouch message is not relevant (which basically means polyphonic aftertouch isn't polyphonic, and works like channel aftertouch). In ARIA, the incoming note information is used, and polyphonic aftertouch works polyphonically. Other SFZ players need testing.","title":"Practical Considerations"},{"location":"opcodes/hiprog/","text":"MIDI program numbers in the General MIDI spec ranged from 0 to 127 but were often displayed externally as 1 to 128. This uses the 0 to 127 range. By default, most DAWs seem to have the program number set to 0, so setting loprog higher than 0 without sending program change messages results in no sound. Examples loprog=0 hiprog=0 loprog=1 hiprog=1 loprog=10 hiprog=12","title":"loprog / hiprog"},{"location":"opcodes/hiprog/#examples","text":"loprog=0 hiprog=0 loprog=1 hiprog=1 loprog=10 hiprog=12","title":"Examples"},{"location":"opcodes/hirand/","text":"Random values. The player will generate a new random number on every note-on event, in the range 0 to 1. Examples lorand=0.2 hirand=0.4 lorand=0.4 hirand=1 The most common application for this is randomized round robins. Note that hirand for a region should equal lorand for the next region - if we had, for example, hirand =0.249 for the first region and lorand =0.25 for the next, that would result in no sound playing if the random number generated was, for example, 0.2496343491. So, an 0.001 chance of no sound at all - a difficult problem to spot when testing. hirand=0.25 sample=kick_vl1_rr1.wav lorand=0.25 hirand=0.5 sample=kick_vl1_rr2.wav lorand=0.5 hirand=0.75 sample=kick_vl1_rr3.wav lorand=0.75 sample=kick_vl1_rr4.wav It is also possible to combine this with the seq_length and seq_position opcodes to split round robins into two subsets, and randomize within each subset. This results in randomization, but prevents the possibility of the same sample being triggered twice in a row when the random number generated falls into the same range as the previously generated number. This can be good when there are a lot (6 or more) round robin samples available. The code for 8 samples split into two sequential subsets might look like this: seq_length=2 seq_position=1 hirand=0.25 sample=kick_vl1_rr1.wav seq_length=2 seq_position=1 lorand=0.25 hirand=0.5 sample=kick_vl1_rr2.wav seq_length=2 seq_position=1 lorand=0.5 hirand=0.75 sample=kick_vl1_rr3.wav seq_length=2 seq_position=1 lorand=0.75 sample=kick_vl1_rr4.wav seq_length=2 seq_position=2 hirand=0.25 sample=kick_vl1_rr5.wav seq_length=2 seq_position=2 lorand=0.25 hirand=0.5 sample=kick_vl1_rr6.wav seq_length=2 seq_position=2 lorand=0.5 hirand=0.75 sample=kick_vl1_rr7.wav seq_length=2 seq_position=2 lorand=0.75 sample=kick_vl1_rr8.wav Practical Considerations In the ARIA implementation of SFZ, sequence position is not tracked together for all regions, which means the above is not a practical way to implement alternating left/right hand or up/down bowing samples. Also in ARIA, a separate random number is generated for each region which is playing, which means lorand/hirand probably should not be used with samples which have multiple mic positions. Using it can result in triggering spot, overhead and room mics which do not match, and that can result in phasing issues etc. There are other potential uses which have nothing to do with round robins, for example having key fingering noises on a clarinet trigger sometimes (but not always) when a note is played.","title":"lorand / hirand"},{"location":"opcodes/hirand/#examples","text":"lorand=0.2 hirand=0.4 lorand=0.4 hirand=1 The most common application for this is randomized round robins. Note that hirand for a region should equal lorand for the next region - if we had, for example, hirand =0.249 for the first region and lorand =0.25 for the next, that would result in no sound playing if the random number generated was, for example, 0.2496343491. So, an 0.001 chance of no sound at all - a difficult problem to spot when testing. hirand=0.25 sample=kick_vl1_rr1.wav lorand=0.25 hirand=0.5 sample=kick_vl1_rr2.wav lorand=0.5 hirand=0.75 sample=kick_vl1_rr3.wav lorand=0.75 sample=kick_vl1_rr4.wav It is also possible to combine this with the seq_length and seq_position opcodes to split round robins into two subsets, and randomize within each subset. This results in randomization, but prevents the possibility of the same sample being triggered twice in a row when the random number generated falls into the same range as the previously generated number. This can be good when there are a lot (6 or more) round robin samples available. The code for 8 samples split into two sequential subsets might look like this: seq_length=2 seq_position=1 hirand=0.25 sample=kick_vl1_rr1.wav seq_length=2 seq_position=1 lorand=0.25 hirand=0.5 sample=kick_vl1_rr2.wav seq_length=2 seq_position=1 lorand=0.5 hirand=0.75 sample=kick_vl1_rr3.wav seq_length=2 seq_position=1 lorand=0.75 sample=kick_vl1_rr4.wav seq_length=2 seq_position=2 hirand=0.25 sample=kick_vl1_rr5.wav seq_length=2 seq_position=2 lorand=0.25 hirand=0.5 sample=kick_vl1_rr6.wav seq_length=2 seq_position=2 lorand=0.5 hirand=0.75 sample=kick_vl1_rr7.wav seq_length=2 seq_position=2 lorand=0.75 sample=kick_vl1_rr8.wav","title":"Examples"},{"location":"opcodes/hirand/#practical-considerations","text":"In the ARIA implementation of SFZ, sequence position is not tracked together for all regions, which means the above is not a practical way to implement alternating left/right hand or up/down bowing samples. Also in ARIA, a separate random number is generated for each region which is playing, which means lorand/hirand probably should not be used with samples which have multiple mic positions. Using it can result in triggering spot, overhead and room mics which do not match, and that can result in phasing issues etc. There are other potential uses which have nothing to do with round robins, for example having key fingering noises on a clarinet trigger sometimes (but not always) when a note is played.","title":"Practical Considerations"},{"location":"opcodes/hitimer/","text":"Not implemented in ARIA, may have been implemented in some Cakewalk products. The timer is how long has passed since the last sample had played in the same group. It is, however, not known whether this is a group header or polyphony group. Examples hitimer=0.25 sample=quick.wav lotimer=0.25 sample=slow.wav","title":"lotimer / hitimer"},{"location":"opcodes/hitimer/#examples","text":" hitimer=0.25 sample=quick.wav lotimer=0.25 sample=slow.wav","title":"Examples"},{"location":"opcodes/hivel/","text":"This is obviously useful for instruments with dynamic layers controlled by velocity. Though dynamic layers can also be controlled by CC, especially for sustained instruments, lovel and hivel are the standard way of controlling dynamics for instruments such as drums and pianos. It is also possible to use lovel / hivel to control other things instead, such as articulations - for example, a guitar could have palm-muted samples on low velocities, and pinch harmonics on velocity 127. These opcodes will often need to be used with amp_velcurve_N , unless amp_veltrack is set to 0. The reason for this is that with default velocity tracking behavior and non-normalized samples (and there are many reasons why normalizing samples should be avoided), the quiet velocity layers will be too quiet. Velocity 0 is a note-off message, so 1 is the lowest usable value with hivel/lovel. Example lovel=64 hivel=95 An instrument with four velocity-controlled dynamic layers might use lovel and hivel like this: hivel=31 amp_velcurve_31=1 sample=kick_vl1.wav lovel=32 hivel=63 amp_velcurve_63=1 sample=kick_vl2.wav lovel=64 hivel=95 amp_velcurve_95=1 sample=kick_vl3.wav lovel=96 sample=kick_vl4.wav The way this would work is the kick_vl1.wav region will play at velocities up to 31, with volume going gradually from 0 at velocity 0 (so, no sound) to full volume at velocity 31. The kick_vl2.wav region will play at velocties 32 to 63, with volume being full at velocity 63 and lower volume (but not zero) at 32. The kick_vl3 wav region will play at velocites 64 to 95, with full volume at velocity 95. Finally, the kick_vl4 layer plays at velocities 96 to 127, with no amp_velcurve_N set meaning it will have full volume at velocity 127.","title":"lovel / hivel"},{"location":"opcodes/hivel/#example","text":"lovel=64 hivel=95 An instrument with four velocity-controlled dynamic layers might use lovel and hivel like this: hivel=31 amp_velcurve_31=1 sample=kick_vl1.wav lovel=32 hivel=63 amp_velcurve_63=1 sample=kick_vl2.wav lovel=64 hivel=95 amp_velcurve_95=1 sample=kick_vl3.wav lovel=96 sample=kick_vl4.wav The way this would work is the kick_vl1.wav region will play at velocities up to 31, with volume going gradually from 0 at velocity 0 (so, no sound) to full volume at velocity 31. The kick_vl2.wav region will play at velocties 32 to 63, with volume being full at velocity 63 and lower volume (but not zero) at 32. The kick_vl3 wav region will play at velocites 64 to 95, with full volume at velocity 95. Finally, the kick_vl4 layer plays at velocities 96 to 127, with no amp_velcurve_N set meaning it will have full volume at velocity 127.","title":"Example"},{"location":"opcodes/image/","text":"Practical Considerations Supported in Cakewalk DropZone, sfizz and possibly other players, but not ARIA / Sforzando. DropZone supports bitmap images with transparent alpha channels, showing one image per instrument and can be placed under any header. The visible image is approximately 530x150 pixels. If a larger image is loaded, only the top left part will be visible. If set multiple times, the last image set in the SFZ file is actually used. Dimension Pro parses but ignores the opcode. sfizz supports it under the header only, together with a custom image_controls opcode to support an additional image in its controls tab. The image size is 775x335 pixels with 1:1 aspect ratio, not limited to BMP images.","title":"Image"},{"location":"opcodes/image/#practical-considerations","text":"Supported in Cakewalk DropZone, sfizz and possibly other players, but not ARIA / Sforzando. DropZone supports bitmap images with transparent alpha channels, showing one image per instrument and can be placed under any header. The visible image is approximately 530x150 pixels. If a larger image is loaded, only the top left part will be visible. If set multiple times, the last image set in the SFZ file is actually used. Dimension Pro parses but ignores the opcode. sfizz supports it under the header only, together with a custom image_controls opcode to support an additional image in its controls tab. The image size is 775x335 pixels with 1:1 aspect ratio, not limited to BMP images.","title":"Practical Considerations"},{"location":"opcodes/include/","text":"The file to which #include points is, in effect, pasted into the SFZ file at the point of the #include. This means that the file structure needs to be respected - after all #includes are processed, \u2039control\u203a header needs to be before the regions in the file, \u2039curve\u203a opcodes need to be at the bottom etc. This can be nested - #included files can contain more #includes of their own, though of course recursion must be avoided! The included path must be surrounded by double quotes, similar to how include works in C/C++ files. Note that this is different from how the paths in the sample opcode works, which do not need quotes. Either a filename or a path can be used. If the #included files are in another folder, the SFZ is interpreted as if it was in the main SFZ file's path, not the path where the #included files are. The #included files can either have the extension sfz or sfzh, which is functionally no different from sfz, just used for clarity when #including a header. This is useful for creating large complex files, and also for simplifying the management of files which repeat similar regions with different opcodes. This is especially convenient in conjunction with the \u2039master\u203a header. Examples #include \"header.sfz\" #include \"note_map.sfz\" #include \"legato/dynfade_legato_first_map.sfz\" Here's an example of how #include and master can be used together: loop_mode=one_shot off_mode=normal tune=-1200 //Everything is tuned down an octave, then tuned back up with its own tune param pan=-100 //Similar for pan - hard left, brought to proper position with param pan_oncc10=0 //Disable master pan amplitude_oncc7=100 ampeg_attack=0.001 ampeg_decay=0.7 ampeg_sustain=100 amplitude_cc30=100 pan_cc31=200 tune_cc32=2400 tune_cc55=-500 offset_cc33=3000 ampeg_sustain_oncc33=-100 #include \"mappings/bobobo_bass.sfz\" amplitude_cc35=100 pan_cc36=200 tune_cc37=2400 offset_cc38=1500 ampeg_sustain_oncc38=-100 tune_cc55=-250 #include \"mappings/bobobo_tenor_l_1.sfz\" #include \"mappings/bobobo_tenor_l_2.sfz\" Using #include with #define in the same instrument requires care, especially if the same value has to be #defined to have different settings at different points in an instrument. The following does not work well in ARIA/Sforzando, assuming that B.sfz uses MYVAR : #define $MYVAR cc12 #include B.sfz #define $MYVAR cc13 #include B.sfz However, a workaround there is to use #include to put each #define statement in a separate file. In simple tests, that has been successful.","title":"Include"},{"location":"opcodes/include/#examples","text":"#include \"header.sfz\" #include \"note_map.sfz\" #include \"legato/dynfade_legato_first_map.sfz\" Here's an example of how #include and master can be used together: loop_mode=one_shot off_mode=normal tune=-1200 //Everything is tuned down an octave, then tuned back up with its own tune param pan=-100 //Similar for pan - hard left, brought to proper position with param pan_oncc10=0 //Disable master pan amplitude_oncc7=100 ampeg_attack=0.001 ampeg_decay=0.7 ampeg_sustain=100 amplitude_cc30=100 pan_cc31=200 tune_cc32=2400 tune_cc55=-500 offset_cc33=3000 ampeg_sustain_oncc33=-100 #include \"mappings/bobobo_bass.sfz\" amplitude_cc35=100 pan_cc36=200 tune_cc37=2400 offset_cc38=1500 ampeg_sustain_oncc38=-100 tune_cc55=-250 #include \"mappings/bobobo_tenor_l_1.sfz\" #include \"mappings/bobobo_tenor_l_2.sfz\" Using #include with #define in the same instrument requires care, especially if the same value has to be #defined to have different settings at different points in an instrument. The following does not work well in ARIA/Sforzando, assuming that B.sfz uses MYVAR : #define $MYVAR cc12 #include B.sfz #define $MYVAR cc13 #include B.sfz However, a workaround there is to use #include to put each #define statement in a separate file. In simple tests, that has been successful.","title":"Examples"},{"location":"opcodes/internal/","text":"","title":"Internal"},{"location":"opcodes/key/","text":"Because of this, it is a very useful and convenient opcode for instruments which do not need to spread a sample across multiple notes. That means most chromatically sampled instruments or drum kits. key values can be specified in MIDI note numbers (0-127) or note names (IPN Standard). Numbers generally are better to use for getting the SFZ to behave the same in all DAWs. Example These two conventions will yield the same key mapping: key=72 // or key=c5 Both are also equivalent to: lokey=72 hikey=72 pitch_keycenter=72 Key can also be combined with the others, which will override the value set by key although key should be specified first. In ARIA, the value set by pitch_keycenter will always be used, whether key or pitch_keycenter is set first in the SFZ file. However, in some other players, setting pitch_keycenter to a different value than key is only effective if key is set first and pitch_keycenter second. Therefore, for compatibility, it is best to set key first, and pitch_keycenter later. key=72 lokey=70 Will be equivalent to lokey=70 hikey=72 pitch_keycenter=72 However, this would just be the same as setting key=72, as key comes later and the lokey value it would set will override the previous lokey. lokey=70 key=72","title":"Key"},{"location":"opcodes/key/#example","text":"These two conventions will yield the same key mapping: key=72 // or key=c5 Both are also equivalent to: lokey=72 hikey=72 pitch_keycenter=72 Key can also be combined with the others, which will override the value set by key although key should be specified first. In ARIA, the value set by pitch_keycenter will always be used, whether key or pitch_keycenter is set first in the SFZ file. However, in some other players, setting pitch_keycenter to a different value than key is only effective if key is set first and pitch_keycenter second. Therefore, for compatibility, it is best to set key first, and pitch_keycenter later. key=72 lokey=70 Will be equivalent to lokey=70 hikey=72 pitch_keycenter=72 However, this would just be the same as setting key=72, as key comes later and the lokey value it would set will override the previous lokey. lokey=70 key=72","title":"Example"},{"location":"opcodes/label_ccN/","text":"Used under the \u2039 control \u203a header. Some DAWs will display those labels as parameter names, and Sforzando will also use them in the Control tab if no GUI is defined. Examples label_cc30=Bass vol label_cc31=Bass pan label_cc32=Tune label_cc33=Mute","title":"label ccN"},{"location":"opcodes/label_ccN/#examples","text":"label_cc30=Bass vol label_cc31=Bass pan label_cc32=Tune label_cc33=Mute","title":"Examples"},{"location":"opcodes/label_keyN/","text":"Used under the \u2039 control \u203a header. Example label_key36=Bass Drum label_key38=Snare Drum label_key54=Tambourine label_key56=Cowbell","title":"label keyN"},{"location":"opcodes/label_keyN/#example","text":"label_key36=Bass Drum label_key38=Snare Drum label_key54=Tambourine label_key56=Cowbell","title":"Example"},{"location":"opcodes/label_outputN/","text":"Used under the \u2039 control \u203a header. Example // Keep output labels short label_output0=Snare label_output1=Kick Drum output=0 // ... output=1 // ...","title":"label outputN"},{"location":"opcodes/label_outputN/#example","text":" // Keep output labels short label_output0=Snare label_output1=Kick Drum output=0 // ... output=1 // ...","title":"Example"},{"location":"opcodes/lfoN_amplitude/","text":"","title":"lfoN amplitude"},{"location":"opcodes/lfoN_amplitude_onccX/","text":"","title":"lfoN amplitude onccX"},{"location":"opcodes/lfoN_amplitude_smoothccX/","text":"","title":"lfoN amplitude smoothccX"},{"location":"opcodes/lfoN_amplitude_stepccX/","text":"","title":"lfoN amplitude stepccX"},{"location":"opcodes/lfoN_bitred/","text":"","title":"lfoN bitred"},{"location":"opcodes/lfoN_bitred_onccX/","text":"","title":"lfoN bitred onccX"},{"location":"opcodes/lfoN_bitred_smoothccX/","text":"","title":"lfoN bitred smoothccX"},{"location":"opcodes/lfoN_bitred_stepccX/","text":"","title":"lfoN bitred stepccX"},{"location":"opcodes/lfoN_count/","text":"If this is not set, the LFO will run and continue to repeat as long as the region plays. Examples lfo01_count=2 lfo02_count=5","title":"lfoN count"},{"location":"opcodes/lfoN_count/#examples","text":"lfo01_count=2 lfo02_count=5","title":"Examples"},{"location":"opcodes/lfoN_cutoff/","text":"","title":"lfoN cutoff"},{"location":"opcodes/lfoN_cutoff2/","text":"","title":"lfoN cutoff2"},{"location":"opcodes/lfoN_cutoff2_onccX/","text":"","title":"lfoN cutoff2 onccX"},{"location":"opcodes/lfoN_cutoff2_smoothccX/","text":"","title":"lfoN cutoff2 smoothccX"},{"location":"opcodes/lfoN_cutoff2_stepccX/","text":"","title":"lfoN cutoff2 stepccX"},{"location":"opcodes/lfoN_cutoff_onccX/","text":"","title":"lfoN cutoff onccX"},{"location":"opcodes/lfoN_cutoff_smoothccX/","text":"","title":"lfoN cutoff smoothccX"},{"location":"opcodes/lfoN_cutoff_stepccX/","text":"","title":"lfoN cutoff stepccX"},{"location":"opcodes/lfoN_decim/","text":"","title":"lfoN decim"},{"location":"opcodes/lfoN_decim_onccX/","text":"","title":"lfoN decim onccX"},{"location":"opcodes/lfoN_decim_smoothccX/","text":"","title":"lfoN decim smoothccX"},{"location":"opcodes/lfoN_decim_stepccX/","text":"","title":"lfoN decim stepccX"},{"location":"opcodes/lfoN_delay/","text":"Often useful for delaying vibrato onset in strings, vocals, guitar, saxophone etc. Can be combined with lfoN_fade in some cases. Examples lfo01_delay=0.1 lfo02_delay=1.2 lfo02_delay_oncc20=2.5","title":"lfoN delay"},{"location":"opcodes/lfoN_delay/#examples","text":"lfo01_delay=0.1 lfo02_delay=1.2 lfo02_delay_oncc20=2.5","title":"Examples"},{"location":"opcodes/lfoN_delay_onccX/","text":"Often useful for delaying vibrato onset in strings, vocals, guitar, saxophone etc. Can be combined with lfoN_fade in some cases. Examples lfo01_delay=0.1 lfo02_delay=1.2 lfo02_delay_oncc20=2.5","title":"lfoN delay onccX"},{"location":"opcodes/lfoN_delay_onccX/#examples","text":"lfo01_delay=0.1 lfo02_delay=1.2 lfo02_delay_oncc20=2.5","title":"Examples"},{"location":"opcodes/lfoN_depth_lfoX/","text":"","title":"lfoN depth lfoX"},{"location":"opcodes/lfoN_depthadd_lfoX/","text":"","title":"lfoN depthadd lfoX"},{"location":"opcodes/lfoN_drive/","text":"","title":"lfoN drive"},{"location":"opcodes/lfoN_drive_onccX/","text":"","title":"lfoN drive onccX"},{"location":"opcodes/lfoN_drive_smoothccX/","text":"","title":"lfoN drive smoothccX"},{"location":"opcodes/lfoN_drive_stepccX/","text":"","title":"lfoN drive stepccX"},{"location":"opcodes/lfoN_eqXbw/","text":"","title":"lfoN eqXbw"},{"location":"opcodes/lfoN_eqXbw_onccY/","text":"","title":"lfoN eqXbw onccY"},{"location":"opcodes/lfoN_eqXbw_smoothccY/","text":"","title":"lfoN eqXbw smoothccY"},{"location":"opcodes/lfoN_eqXbw_stepccY/","text":"","title":"lfoN eqXbw stepccY"},{"location":"opcodes/lfoN_eqXfreq/","text":"","title":"lfoN eqXfreq"},{"location":"opcodes/lfoN_eqXfreq_onccY/","text":"","title":"lfoN eqXfreq onccY"},{"location":"opcodes/lfoN_eqXfreq_smoothccY/","text":"","title":"lfoN eqXfreq smoothccY"},{"location":"opcodes/lfoN_eqXfreq_stepccY/","text":"","title":"lfoN eqXfreq stepccY"},{"location":"opcodes/lfoN_eqXgain/","text":"","title":"lfoN eqXgain"},{"location":"opcodes/lfoN_eqXgain_onccY/","text":"","title":"lfoN eqXgain onccY"},{"location":"opcodes/lfoN_eqXgain_smoothccY/","text":"","title":"lfoN eqXgain smoothccY"},{"location":"opcodes/lfoN_eqXgain_stepccY/","text":"","title":"lfoN eqXgain stepccY"},{"location":"opcodes/lfoN_fade/","text":"Can be quite useful for making vibrato sound more realistic on instruments such as bowed strings, usually combined with lfoN_delay . Examples lfo01_fade=0.1 lfo02_fade=1.2 lfo02_fade_oncc21=2.5","title":"lfoN fade"},{"location":"opcodes/lfoN_fade/#examples","text":"lfo01_fade=0.1 lfo02_fade=1.2 lfo02_fade_oncc21=2.5","title":"Examples"},{"location":"opcodes/lfoN_fade_onccX/","text":"Can be quite useful for making vibrato sound more realistic on instruments such as bowed strings, usually combined with lfoN_delay . Examples lfo01_fade=0.1 lfo02_fade=1.2 lfo02_fade_oncc21=2.5","title":"lfoN fade onccX"},{"location":"opcodes/lfoN_fade_onccX/#examples","text":"lfo01_fade=0.1 lfo02_fade=1.2 lfo02_fade_oncc21=2.5","title":"Examples"},{"location":"opcodes/lfoN_freq/","text":"Can be modulated by MIDI CC, and the modulation can be smoothed so that rapid controller changes are applied with some \"inertia\". Examples lfo01_freq=2 lfo01_freq_oncc117=8.2 lfo01_freq_smoothcc117=50 lfo02_freq=7","title":"lfoN freq"},{"location":"opcodes/lfoN_freq/#examples","text":"lfo01_freq=2 lfo01_freq_oncc117=8.2 lfo01_freq_smoothcc117=50 lfo02_freq=7","title":"Examples"},{"location":"opcodes/lfoN_freq_lfoX/","text":"","title":"lfoN freq lfoX"},{"location":"opcodes/lfoN_freq_lfoX_onccY/","text":"","title":"lfoN freq lfoX onccY"},{"location":"opcodes/lfoN_freq_onccX/","text":"Can be modulated by MIDI CC, and the modulation can be smoothed so that rapid controller changes are applied with some \"inertia\". Examples lfo01_freq=2 lfo01_freq_oncc117=8.2 lfo01_freq_smoothcc117=50 lfo02_freq=7","title":"lfoN freq onccX"},{"location":"opcodes/lfoN_freq_onccX/#examples","text":"lfo01_freq=2 lfo01_freq_oncc117=8.2 lfo01_freq_smoothcc117=50 lfo02_freq=7","title":"Examples"},{"location":"opcodes/lfoN_freq_smoothccX/","text":"Can be modulated by MIDI CC, and the modulation can be smoothed so that rapid controller changes are applied with some \"inertia\". Examples lfo01_freq=2 lfo01_freq_oncc117=8.2 lfo01_freq_smoothcc117=50 lfo02_freq=7","title":"lfoN freq smoothccX"},{"location":"opcodes/lfoN_freq_smoothccX/#examples","text":"lfo01_freq=2 lfo01_freq_oncc117=8.2 lfo01_freq_smoothcc117=50 lfo02_freq=7","title":"Examples"},{"location":"opcodes/lfoN_freq_stepccX/","text":"Can be modulated by MIDI CC, and the modulation can be smoothed so that rapid controller changes are applied with some \"inertia\". Examples lfo01_freq=2 lfo01_freq_oncc117=8.2 lfo01_freq_smoothcc117=50 lfo02_freq=7","title":"lfoN freq stepccX"},{"location":"opcodes/lfoN_freq_stepccX/#examples","text":"lfo01_freq=2 lfo01_freq_oncc117=8.2 lfo01_freq_smoothcc117=50 lfo02_freq=7","title":"Examples"},{"location":"opcodes/lfoN_noiselevel/","text":"","title":"lfoN noiselevel"},{"location":"opcodes/lfoN_noiselevel_onccX/","text":"","title":"lfoN noiselevel onccX"},{"location":"opcodes/lfoN_noiselevel_smoothccX/","text":"","title":"lfoN noiselevel smoothccX"},{"location":"opcodes/lfoN_noiselevel_stepccX/","text":"","title":"lfoN noiselevel stepccX"},{"location":"opcodes/lfoN_noisestep/","text":"","title":"lfoN noisestep"},{"location":"opcodes/lfoN_noisestep_onccX/","text":"","title":"lfoN noisestep onccX"},{"location":"opcodes/lfoN_noisestep_smoothccX/","text":"","title":"lfoN noisestep smoothccX"},{"location":"opcodes/lfoN_noisestep_stepccX/","text":"","title":"lfoN noisestep stepccX"},{"location":"opcodes/lfoN_noisetone/","text":"","title":"lfoN noisetone"},{"location":"opcodes/lfoN_noisetone_onccX/","text":"","title":"lfoN noisetone onccX"},{"location":"opcodes/lfoN_noisetone_smoothccX/","text":"","title":"lfoN noisetone smoothccX"},{"location":"opcodes/lfoN_noisetone_stepccX/","text":"","title":"lfoN noisetone stepccX"},{"location":"opcodes/lfoN_offset/","text":"It's possible for one LFO to use sub waveforms in addition to the main waveform. This can be used to create more complex LFOs. Up to 8 waveforms can be used in one LFO. The second waveform is set by lfoN_offset2 , the third by lfoN_offset3 etc. Using lfoN_offset with no number after the offset sets the offset for the main waveform, which is perhaps not needed very often. Offset will likely mostly be used on the sub waveforms, but it can also be set for the main waveform if needed. Examples lfo01_offset=0.1 lfo02_offset2=-0.3 lfo03_offset2=0.25 lfo03_offset3=0.419 lfo01_wave=12 //S&H style LFO used here for randomization lfo01_pitch=10 lfo01_freq=2 lfo01_freq_oncc1=3 lfo01_wave2=1 //Sine waveform for the secondary waveform lfo01_ratio2=4 //4 times faster lfo01_offset2=0 //No offset lfo01_scale2=0.3 //Shallower than the main wave","title":"lfoN offset"},{"location":"opcodes/lfoN_offset/#examples","text":"lfo01_offset=0.1 lfo02_offset2=-0.3 lfo03_offset2=0.25 lfo03_offset3=0.419 lfo01_wave=12 //S&H style LFO used here for randomization lfo01_pitch=10 lfo01_freq=2 lfo01_freq_oncc1=3 lfo01_wave2=1 //Sine waveform for the secondary waveform lfo01_ratio2=4 //4 times faster lfo01_offset2=0 //No offset lfo01_scale2=0.3 //Shallower than the main wave","title":"Examples"},{"location":"opcodes/lfoN_offsetX/","text":"It's possible for one LFO to use sub waveforms in addition to the main waveform. This can be used to create more complex LFOs. Up to 8 waveforms can be used in one LFO. The second waveform is set by lfoN_offset2 , the third by lfoN_offset3 etc. Using lfoN_offset with no number after the offset sets the offset for the main waveform, which is perhaps not needed very often. Offset will likely mostly be used on the sub waveforms, but it can also be set for the main waveform if needed. Examples lfo01_offset=0.1 lfo02_offset2=-0.3 lfo03_offset2=0.25 lfo03_offset3=0.419 lfo01_wave=12 //S&H style LFO used here for randomization lfo01_pitch=10 lfo01_freq=2 lfo01_freq_oncc1=3 lfo01_wave2=1 //Sine waveform for the secondary waveform lfo01_ratio2=4 //4 times faster lfo01_offset2=0 //No offset lfo01_scale2=0.3 //Shallower than the main wave","title":"lfoN offsetX"},{"location":"opcodes/lfoN_offsetX/#examples","text":"lfo01_offset=0.1 lfo02_offset2=-0.3 lfo03_offset2=0.25 lfo03_offset3=0.419 lfo01_wave=12 //S&H style LFO used here for randomization lfo01_pitch=10 lfo01_freq=2 lfo01_freq_oncc1=3 lfo01_wave2=1 //Sine waveform for the secondary waveform lfo01_ratio2=4 //4 times faster lfo01_offset2=0 //No offset lfo01_scale2=0.3 //Shallower than the main wave","title":"Examples"},{"location":"opcodes/lfoN_pan/","text":"","title":"lfoN pan"},{"location":"opcodes/lfoN_pan_onccX/","text":"","title":"lfoN pan onccX"},{"location":"opcodes/lfoN_pan_smoothccX/","text":"","title":"lfoN pan smoothccX"},{"location":"opcodes/lfoN_pan_stepccX/","text":"","title":"lfoN pan stepccX"},{"location":"opcodes/lfoN_phase/","text":"Example lfo02_phase=0.5 lfo01_phase=0.25 If the wave is a sine (the default shape), then phase 0 means the LFO starts at value 0 (center) and goes up first. Phase 0.5 means starting at 0 and going down first. Phase 0.25 means starting at 1 (max).","title":"lfoN phase"},{"location":"opcodes/lfoN_phase/#example","text":"lfo02_phase=0.5 lfo01_phase=0.25 If the wave is a sine (the default shape), then phase 0 means the LFO starts at value 0 (center) and goes up first. Phase 0.5 means starting at 0 and going down first. Phase 0.25 means starting at 1 (max).","title":"Example"},{"location":"opcodes/lfoN_phase_onccX/","text":"Example lfo02_phase=0.5 lfo01_phase=0.25 If the wave is a sine (the default shape), then phase 0 means the LFO starts at value 0 (center) and goes up first. Phase 0.5 means starting at 0 and going down first. Phase 0.25 means starting at 1 (max).","title":"lfoN phase onccX"},{"location":"opcodes/lfoN_phase_onccX/#example","text":"lfo02_phase=0.5 lfo01_phase=0.25 If the wave is a sine (the default shape), then phase 0 means the LFO starts at value 0 (center) and goes up first. Phase 0.5 means starting at 0 and going down first. Phase 0.25 means starting at 1 (max).","title":"Example"},{"location":"opcodes/lfoN_pitch/","text":"Destination for lfoN which effects the pitch of the region. The value assigned to the opcode is in cents, and oscillates up/down from the base frequency of the played region. For example playing middle C (MIDI note number 60) with lfo1_pitch set to 100 cents, the oscillation will be between C# a semitone above, and B a semitone below. Negative cents are supported, which effects the start pitch of the region. For example lfo1_freq=100 will start at C# then oscillate downwards to B, while lfo1_freq=-100 will start at B and oscillate upwards to C#. Example: sample=*sine lfo1_freq=2 // frequency of the LFO in hertz, (2 oscillations per second) lfo1_pitch=100 // value in cents","title":"lfoN pitch"},{"location":"opcodes/lfoN_pitch/#example","text":" sample=*sine lfo1_freq=2 // frequency of the LFO in hertz, (2 oscillations per second) lfo1_pitch=100 // value in cents","title":"Example:"},{"location":"opcodes/lfoN_pitch_curveccX/","text":"Destination for lfoN which effects the pitch of the region. The value assigned to the opcode is in cents, and oscillates up/down from the base frequency of the played region. For example playing middle C (MIDI note number 60) with lfo1_pitch set to 100 cents, the oscillation will be between C# a semitone above, and B a semitone below. Negative cents are supported, which effects the start pitch of the region. For example lfo1_freq=100 will start at C# then oscillate downwards to B, while lfo1_freq=-100 will start at B and oscillate upwards to C#. Example: sample=*sine lfo1_freq=2 // frequency of the LFO in hertz, (2 oscillations per second) lfo1_pitch=100 // value in cents","title":"lfoN pitch curveccX"},{"location":"opcodes/lfoN_pitch_curveccX/#example","text":" sample=*sine lfo1_freq=2 // frequency of the LFO in hertz, (2 oscillations per second) lfo1_pitch=100 // value in cents","title":"Example:"},{"location":"opcodes/lfoN_pitch_onccX/","text":"Destination for lfoN which effects the pitch of the region. The value assigned to the opcode is in cents, and oscillates up/down from the base frequency of the played region. For example playing middle C (MIDI note number 60) with lfo1_pitch set to 100 cents, the oscillation will be between C# a semitone above, and B a semitone below. Negative cents are supported, which effects the start pitch of the region. For example lfo1_freq=100 will start at C# then oscillate downwards to B, while lfo1_freq=-100 will start at B and oscillate upwards to C#. Example: sample=*sine lfo1_freq=2 // frequency of the LFO in hertz, (2 oscillations per second) lfo1_pitch=100 // value in cents","title":"lfoN pitch onccX"},{"location":"opcodes/lfoN_pitch_onccX/#example","text":" sample=*sine lfo1_freq=2 // frequency of the LFO in hertz, (2 oscillations per second) lfo1_pitch=100 // value in cents","title":"Example:"},{"location":"opcodes/lfoN_pitch_smoothccX/","text":"Destination for lfoN which effects the pitch of the region. The value assigned to the opcode is in cents, and oscillates up/down from the base frequency of the played region. For example playing middle C (MIDI note number 60) with lfo1_pitch set to 100 cents, the oscillation will be between C# a semitone above, and B a semitone below. Negative cents are supported, which effects the start pitch of the region. For example lfo1_freq=100 will start at C# then oscillate downwards to B, while lfo1_freq=-100 will start at B and oscillate upwards to C#. Example: sample=*sine lfo1_freq=2 // frequency of the LFO in hertz, (2 oscillations per second) lfo1_pitch=100 // value in cents","title":"lfoN pitch smoothccX"},{"location":"opcodes/lfoN_pitch_smoothccX/#example","text":" sample=*sine lfo1_freq=2 // frequency of the LFO in hertz, (2 oscillations per second) lfo1_pitch=100 // value in cents","title":"Example:"},{"location":"opcodes/lfoN_pitch_stepccX/","text":"Destination for lfoN which effects the pitch of the region. The value assigned to the opcode is in cents, and oscillates up/down from the base frequency of the played region. For example playing middle C (MIDI note number 60) with lfo1_pitch set to 100 cents, the oscillation will be between C# a semitone above, and B a semitone below. Negative cents are supported, which effects the start pitch of the region. For example lfo1_freq=100 will start at C# then oscillate downwards to B, while lfo1_freq=-100 will start at B and oscillate upwards to C#. Example: sample=*sine lfo1_freq=2 // frequency of the LFO in hertz, (2 oscillations per second) lfo1_pitch=100 // value in cents","title":"lfoN pitch stepccX"},{"location":"opcodes/lfoN_pitch_stepccX/#example","text":" sample=*sine lfo1_freq=2 // frequency of the LFO in hertz, (2 oscillations per second) lfo1_pitch=100 // value in cents","title":"Example:"},{"location":"opcodes/lfoN_ratio/","text":"It's possible for one LFO to use sub waveforms in addition to the main waveform. This can be used to create more complex LFOs. Up to 8 waveforms can be used in one LFO. The second waveform is set by lfoN_ratio2 , the third by lfoN_ratio3 etc. Using lfoN_ratio with no number after the ratio sets the ratio for the main waveform, which is perhaps not needed very often. Ratio will likely mostly be used on the sub waveforms, but it can also be set for the main waveform if needed. Example lfo01_ratio2=4 lfo03_ratio=0.321 lfo01_wave=12 //S&H style LFO used here for randomization lfo01_pitch=10 lfo01_freq=2 lfo01_freq_oncc1=3 lfo01_wave2=1 //Sine waveform for the secondary waveform lfo01_ratio2=4 //4 times faster lfo01_offset2=0 //No offset lfo01_scale2=0.3 //Shallower than the main wave","title":"lfoN ratio"},{"location":"opcodes/lfoN_ratio/#example","text":"lfo01_ratio2=4 lfo03_ratio=0.321 lfo01_wave=12 //S&H style LFO used here for randomization lfo01_pitch=10 lfo01_freq=2 lfo01_freq_oncc1=3 lfo01_wave2=1 //Sine waveform for the secondary waveform lfo01_ratio2=4 //4 times faster lfo01_offset2=0 //No offset lfo01_scale2=0.3 //Shallower than the main wave","title":"Example"},{"location":"opcodes/lfoN_ratioX/","text":"It's possible for one LFO to use sub waveforms in addition to the main waveform. This can be used to create more complex LFOs. Up to 8 waveforms can be used in one LFO. The second waveform is set by lfoN_ratio2 , the third by lfoN_ratio3 etc. Using lfoN_ratio with no number after the ratio sets the ratio for the main waveform, which is perhaps not needed very often. Ratio will likely mostly be used on the sub waveforms, but it can also be set for the main waveform if needed. Example lfo01_ratio2=4 lfo03_ratio=0.321 lfo01_wave=12 //S&H style LFO used here for randomization lfo01_pitch=10 lfo01_freq=2 lfo01_freq_oncc1=3 lfo01_wave2=1 //Sine waveform for the secondary waveform lfo01_ratio2=4 //4 times faster lfo01_offset2=0 //No offset lfo01_scale2=0.3 //Shallower than the main wave","title":"lfoN ratioX"},{"location":"opcodes/lfoN_ratioX/#example","text":"lfo01_ratio2=4 lfo03_ratio=0.321 lfo01_wave=12 //S&H style LFO used here for randomization lfo01_pitch=10 lfo01_freq=2 lfo01_freq_oncc1=3 lfo01_wave2=1 //Sine waveform for the secondary waveform lfo01_ratio2=4 //4 times faster lfo01_offset2=0 //No offset lfo01_scale2=0.3 //Shallower than the main wave","title":"Example"},{"location":"opcodes/lfoN_resonance/","text":"","title":"lfoN resonance"},{"location":"opcodes/lfoN_resonance2/","text":"","title":"lfoN resonance2"},{"location":"opcodes/lfoN_resonance2_onccX/","text":"","title":"lfoN resonance2 onccX"},{"location":"opcodes/lfoN_resonance2_smoothccX/","text":"","title":"lfoN resonance2 smoothccX"},{"location":"opcodes/lfoN_resonance2_stepccX/","text":"","title":"lfoN resonance2 stepccX"},{"location":"opcodes/lfoN_resonance_onccX/","text":"","title":"lfoN resonance onccX"},{"location":"opcodes/lfoN_resonance_smoothccX/","text":"","title":"lfoN resonance smoothccX"},{"location":"opcodes/lfoN_resonance_stepccX/","text":"","title":"lfoN resonance stepccX"},{"location":"opcodes/lfoN_sample_dyn_paramX/","text":"","title":"lfoN sample dyn paramX"},{"location":"opcodes/lfoN_sample_dyn_paramX_onccY/","text":"","title":"lfoN sample dyn paramX onccY"},{"location":"opcodes/lfoN_scale/","text":"It's possible for one LFO to use sub waveforms in addition to the main waveform. This can be used to create more complex LFOs. Up to 8 waveforms can be used in one LFO. The second waveform is set by lfoN_scale2 , the third by lfoN_scale3 etc. Using lfoN_scale with no number after the scale sets the scale for the main waveform, which is perhaps not needed very often. Scale will likely mostly be used on the sub waveforms, but it can also be set for the main waveform if needed. Example lfo01_scale2=0.5 lfo03_scale=0.7 lfo01_wave=12 //S&H style LFO used here for randomization lfo01_pitch=10 lfo01_freq=2 lfo01_freq_oncc1=3 lfo01_wave2=1 //Sine waveform for the secondary waveform lfo01_ratio2=4 //4 times faster lfo01_offset2=0 //No offset lfo01_scale2=0.3 //Shallower than the main wave","title":"lfoN scale"},{"location":"opcodes/lfoN_scale/#example","text":"lfo01_scale2=0.5 lfo03_scale=0.7 lfo01_wave=12 //S&H style LFO used here for randomization lfo01_pitch=10 lfo01_freq=2 lfo01_freq_oncc1=3 lfo01_wave2=1 //Sine waveform for the secondary waveform lfo01_ratio2=4 //4 times faster lfo01_offset2=0 //No offset lfo01_scale2=0.3 //Shallower than the main wave","title":"Example"},{"location":"opcodes/lfoN_scaleX/","text":"It's possible for one LFO to use sub waveforms in addition to the main waveform. This can be used to create more complex LFOs. Up to 8 waveforms can be used in one LFO. The second waveform is set by lfoN_scale2 , the third by lfoN_scale3 etc. Using lfoN_scale with no number after the scale sets the scale for the main waveform, which is perhaps not needed very often. Scale will likely mostly be used on the sub waveforms, but it can also be set for the main waveform if needed. Example lfo01_scale2=0.5 lfo03_scale=0.7 lfo01_wave=12 //S&H style LFO used here for randomization lfo01_pitch=10 lfo01_freq=2 lfo01_freq_oncc1=3 lfo01_wave2=1 //Sine waveform for the secondary waveform lfo01_ratio2=4 //4 times faster lfo01_offset2=0 //No offset lfo01_scale2=0.3 //Shallower than the main wave","title":"lfoN scaleX"},{"location":"opcodes/lfoN_scaleX/#example","text":"lfo01_scale2=0.5 lfo03_scale=0.7 lfo01_wave=12 //S&H style LFO used here for randomization lfo01_pitch=10 lfo01_freq=2 lfo01_freq_oncc1=3 lfo01_wave2=1 //Sine waveform for the secondary waveform lfo01_ratio2=4 //4 times faster lfo01_offset2=0 //No offset lfo01_scale2=0.3 //Shallower than the main wave","title":"Example"},{"location":"opcodes/lfoN_smooth/","text":"","title":"lfoN smooth"},{"location":"opcodes/lfoN_smooth_onccX/","text":"","title":"lfoN smooth onccX"},{"location":"opcodes/lfoN_stepX/","text":"The level of step number X in an LFO used as a step sequencer, which is possible in some Cakewalk products. Must have lfoN_steps set for the LFO in order for this to mean anything. Range is from -100% to 100%, and the range of the MIDI CC modulation is the same, though both added together will effectively be -100% or 100% if their sum exceeds one of those bounds. If this is not set for a particular step, the default value for that step is 0. Examples lfo01_step01=10 lfo01_step01_oncc1=50 lfo01_step02=80 lfo01_step02_oncc1=50","title":"lfoN stepX"},{"location":"opcodes/lfoN_stepX/#examples","text":"lfo01_step01=10 lfo01_step01_oncc1=50 lfo01_step02=80 lfo01_step02_oncc1=50","title":"Examples"},{"location":"opcodes/lfoN_stepX_onccY/","text":"The level of step number X in an LFO used as a step sequencer, which is possible in some Cakewalk products. Must have lfoN_steps set for the LFO in order for this to mean anything. Range is from -100% to 100%, and the range of the MIDI CC modulation is the same, though both added together will effectively be -100% or 100% if their sum exceeds one of those bounds. If this is not set for a particular step, the default value for that step is 0. Examples lfo01_step01=10 lfo01_step01_oncc1=50 lfo01_step02=80 lfo01_step02_oncc1=50","title":"lfoN stepX onccY"},{"location":"opcodes/lfoN_stepX_onccY/#examples","text":"lfo01_step01=10 lfo01_step01_oncc1=50 lfo01_step02=80 lfo01_step02_oncc1=50","title":"Examples"},{"location":"opcodes/lfoN_steps/","text":"The number of steps in the step sequencer. This can be used in some Cakewalk products, together with lfoN_stepX, to use an LFO as a step sequencer instead of a typical LFO. If both lfoN_steps and lfoN_wave are set for the same region, the one which is set later in the SFZ file takes effect - an LFO can't have both a wave and steps, so if lfoN_wave is set and then lfoN_steps is set, the LFO will only act as a step sequencer. lfoN_phase can't be used with step sequencers, but lfoN_delay, lfoN_fade and lfoN_count all can. Examples lfo3_steps=16 lfo1_steps=8","title":"lfoN steps"},{"location":"opcodes/lfoN_steps/#examples","text":"lfo3_steps=16 lfo1_steps=8","title":"Examples"},{"location":"opcodes/lfoN_volume/","text":"","title":"lfoN volume"},{"location":"opcodes/lfoN_volume_onccX/","text":"","title":"lfoN volume onccX"},{"location":"opcodes/lfoN_volume_smoothccX/","text":"","title":"lfoN volume smoothccX"},{"location":"opcodes/lfoN_volume_stepccX/","text":"","title":"lfoN volume stepccX"},{"location":"opcodes/lfoN_wave/","text":"In ARIA it's possible for one LFO to use sub waveforms in addition to the main waveform. This can be used to create more complex LFOs. Up to 8 waveforms can be used in one LFO. The second waveform is set by lfoN_wave2 , the third by lfoN_wave3 etc. lfoN_ratio2 is important for giving each wave a different frequency, and lfoN_scale2 scale lfoN_offsetX can optionally be used as well. In SFZ v2 , the waves are: triangle sine 75% pulse square (50% pulse) 25% pulse 12:5% pulse saw going up saw going down In ARIA , the waves are: deprecated, should not be used, but is random triangle sine 75% pulse square (50% pulse) 25% pulse 12:5% pulse saw going up saw going down used in Chipsounds used in Chipsounds future user LFO future user LFO random sample & hold, generating a random value between -1 and 1 twice per period stepped LFO Triangle is the default waveform in ARIA, though the SFZ1 LFOs in ARIA use the sine as the default waveform. The default waveforms in Cakewalk products or other SFZ players have not been tested. The waveforms supported in the other player engines need to be tested. Examples lfo01_wave=6 lfo02_wave=3 lfo01_wave2=1 lfo03_wave2=12 lfo01_wave=12 //S&H style LFO used here for randomization lfo01_pitch=10 lfo01_freq=2 lfo01_freq_oncc1=3 lfo01_wave2=1 //Sine waveform for the secondary waveform lfo01_ratio2=4 //4 times faster lfo01_offset2=0 //No offset lfo01_scale2=0.3 //Shallower than the main wave Wave 13 is a provision for ARIA to support SFZ 2.0's stepped LFO , equivalent to: lfo01_steps=4 lfo01_freq=1 lfo01_pitch=1200 lfo01_step01_oncc73=100 lfo01_step01_smoothcc73=100 lfo01_step02_oncc73=100 lfo01_step02_smoothcc73=100 lfo01_step03_oncc73=100 lfo01_step03_smoothcc73=100 lfo01_step04_oncc73=100 lfo01_step04_smoothcc73=100","title":"lfoN wave"},{"location":"opcodes/lfoN_wave/#examples","text":"lfo01_wave=6 lfo02_wave=3 lfo01_wave2=1 lfo03_wave2=12 lfo01_wave=12 //S&H style LFO used here for randomization lfo01_pitch=10 lfo01_freq=2 lfo01_freq_oncc1=3 lfo01_wave2=1 //Sine waveform for the secondary waveform lfo01_ratio2=4 //4 times faster lfo01_offset2=0 //No offset lfo01_scale2=0.3 //Shallower than the main wave Wave 13 is a provision for ARIA to support SFZ 2.0's stepped LFO , equivalent to: lfo01_steps=4 lfo01_freq=1 lfo01_pitch=1200 lfo01_step01_oncc73=100 lfo01_step01_smoothcc73=100 lfo01_step02_oncc73=100 lfo01_step02_smoothcc73=100 lfo01_step03_oncc73=100 lfo01_step03_smoothcc73=100 lfo01_step04_oncc73=100 lfo01_step04_smoothcc73=100","title":"Examples"},{"location":"opcodes/lfoN_waveX/","text":"In ARIA it's possible for one LFO to use sub waveforms in addition to the main waveform. This can be used to create more complex LFOs. Up to 8 waveforms can be used in one LFO. The second waveform is set by lfoN_wave2 , the third by lfoN_wave3 etc. lfoN_ratio2 is important for giving each wave a different frequency, and lfoN_scale2 scale lfoN_offsetX can optionally be used as well. In SFZ v2 , the waves are: triangle sine 75% pulse square (50% pulse) 25% pulse 12:5% pulse saw going up saw going down In ARIA , the waves are: deprecated, should not be used, but is random triangle sine 75% pulse square (50% pulse) 25% pulse 12:5% pulse saw going up saw going down used in Chipsounds used in Chipsounds future user LFO future user LFO random sample & hold, generating a random value between -1 and 1 twice per period stepped LFO Triangle is the default waveform in ARIA, though the SFZ1 LFOs in ARIA use the sine as the default waveform. The default waveforms in Cakewalk products or other SFZ players have not been tested. The waveforms supported in the other player engines need to be tested. Examples lfo01_wave=6 lfo02_wave=3 lfo01_wave2=1 lfo03_wave2=12 lfo01_wave=12 //S&H style LFO used here for randomization lfo01_pitch=10 lfo01_freq=2 lfo01_freq_oncc1=3 lfo01_wave2=1 //Sine waveform for the secondary waveform lfo01_ratio2=4 //4 times faster lfo01_offset2=0 //No offset lfo01_scale2=0.3 //Shallower than the main wave Wave 13 is a provision for ARIA to support SFZ 2.0's stepped LFO , equivalent to: lfo01_steps=4 lfo01_freq=1 lfo01_pitch=1200 lfo01_step01_oncc73=100 lfo01_step01_smoothcc73=100 lfo01_step02_oncc73=100 lfo01_step02_smoothcc73=100 lfo01_step03_oncc73=100 lfo01_step03_smoothcc73=100 lfo01_step04_oncc73=100 lfo01_step04_smoothcc73=100","title":"lfoN waveX"},{"location":"opcodes/lfoN_waveX/#examples","text":"lfo01_wave=6 lfo02_wave=3 lfo01_wave2=1 lfo03_wave2=12 lfo01_wave=12 //S&H style LFO used here for randomization lfo01_pitch=10 lfo01_freq=2 lfo01_freq_oncc1=3 lfo01_wave2=1 //Sine waveform for the secondary waveform lfo01_ratio2=4 //4 times faster lfo01_offset2=0 //No offset lfo01_scale2=0.3 //Shallower than the main wave Wave 13 is a provision for ARIA to support SFZ 2.0's stepped LFO , equivalent to: lfo01_steps=4 lfo01_freq=1 lfo01_pitch=1200 lfo01_step01_oncc73=100 lfo01_step01_smoothcc73=100 lfo01_step02_oncc73=100 lfo01_step02_smoothcc73=100 lfo01_step03_oncc73=100 lfo01_step03_smoothcc73=100 lfo01_step04_oncc73=100 lfo01_step04_smoothcc73=100","title":"Examples"},{"location":"opcodes/lfoN_wave_onccX/","text":"In ARIA it's possible for one LFO to use sub waveforms in addition to the main waveform. This can be used to create more complex LFOs. Up to 8 waveforms can be used in one LFO. The second waveform is set by lfoN_wave2 , the third by lfoN_wave3 etc. lfoN_ratio2 is important for giving each wave a different frequency, and lfoN_scale2 scale lfoN_offsetX can optionally be used as well. In SFZ v2 , the waves are: triangle sine 75% pulse square (50% pulse) 25% pulse 12:5% pulse saw going up saw going down In ARIA , the waves are: deprecated, should not be used, but is random triangle sine 75% pulse square (50% pulse) 25% pulse 12:5% pulse saw going up saw going down used in Chipsounds used in Chipsounds future user LFO future user LFO random sample & hold, generating a random value between -1 and 1 twice per period stepped LFO Triangle is the default waveform in ARIA, though the SFZ1 LFOs in ARIA use the sine as the default waveform. The default waveforms in Cakewalk products or other SFZ players have not been tested. The waveforms supported in the other player engines need to be tested. Examples lfo01_wave=6 lfo02_wave=3 lfo01_wave2=1 lfo03_wave2=12 lfo01_wave=12 //S&H style LFO used here for randomization lfo01_pitch=10 lfo01_freq=2 lfo01_freq_oncc1=3 lfo01_wave2=1 //Sine waveform for the secondary waveform lfo01_ratio2=4 //4 times faster lfo01_offset2=0 //No offset lfo01_scale2=0.3 //Shallower than the main wave Wave 13 is a provision for ARIA to support SFZ 2.0's stepped LFO , equivalent to: lfo01_steps=4 lfo01_freq=1 lfo01_pitch=1200 lfo01_step01_oncc73=100 lfo01_step01_smoothcc73=100 lfo01_step02_oncc73=100 lfo01_step02_smoothcc73=100 lfo01_step03_oncc73=100 lfo01_step03_smoothcc73=100 lfo01_step04_oncc73=100 lfo01_step04_smoothcc73=100","title":"lfoN wave onccX"},{"location":"opcodes/lfoN_wave_onccX/#examples","text":"lfo01_wave=6 lfo02_wave=3 lfo01_wave2=1 lfo03_wave2=12 lfo01_wave=12 //S&H style LFO used here for randomization lfo01_pitch=10 lfo01_freq=2 lfo01_freq_oncc1=3 lfo01_wave2=1 //Sine waveform for the secondary waveform lfo01_ratio2=4 //4 times faster lfo01_offset2=0 //No offset lfo01_scale2=0.3 //Shallower than the main wave Wave 13 is a provision for ARIA to support SFZ 2.0's stepped LFO , equivalent to: lfo01_steps=4 lfo01_freq=1 lfo01_pitch=1200 lfo01_step01_oncc73=100 lfo01_step01_smoothcc73=100 lfo01_step02_oncc73=100 lfo01_step02_smoothcc73=100 lfo01_step03_oncc73=100 lfo01_step03_smoothcc73=100 lfo01_step04_oncc73=100 lfo01_step04_smoothcc73=100","title":"Examples"},{"location":"opcodes/lfoN_width/","text":"","title":"lfoN width"},{"location":"opcodes/lfoN_width_onccX/","text":"","title":"lfoN width onccX"},{"location":"opcodes/lfoN_width_smoothccX/","text":"","title":"lfoN width smoothccX"},{"location":"opcodes/lfoN_width_stepccX/","text":"","title":"lfoN width stepccX"},{"location":"opcodes/load_end/","text":"","title":"Load end"},{"location":"opcodes/load_mode/","text":"","title":"Load mode"},{"location":"opcodes/load_start/","text":"","title":"Load start"},{"location":"opcodes/lobend/","text":"The region will play only if last Pitch Bend message received was in the 0 to 4000 range. Examples lobend=0 hibend=4000","title":"lobend / hibend"},{"location":"opcodes/lobend/#examples","text":"lobend=0 hibend=4000","title":"Examples"},{"location":"opcodes/lobpm/","text":"Host tempo value. The region will play if the host tempo is equal to or higher than lobpm , and lower than hibpm . Examples lobpm=0 hibpm=100 lobpm=100 hibpm=200.5","title":"lobpm / hibpm"},{"location":"opcodes/lobpm/#examples","text":"lobpm=0 hibpm=100 lobpm=100 hibpm=200.5","title":"Examples"},{"location":"opcodes/loccN/","text":"N will normally be a number from 1 to 127. Examples locc74=30 hicc74=100 The region will play only if last MIDI controller 74 received was in the 30 to 100 range. Allowed range is 0 to 127. The defaults are loccN=0 and hiccN=127. Practical applications include using MIDI CC to switch things on and off - for example, additional voices, release noises, vibrato etc. A common example would be having a hi-hat with various degrees of openness sampled, all of those mapped to the same MIDI note, and hicc/locc used to define the ranges for which each degree of openness should play. A simpler example would be switching between sine, saw and noise waveforms: hicc1=63 sample=*sine locc1=64 hicc=126 sample=*saw locc1=127 sample=*noise This is a \"hard\" switch - if a region is within the locc to hicc range it plays, if it's outside that range it does not play. For smooth fades controlled by CC (such as crossfaded dynamic layers or crossfaded vibrato layers on sustained instruments), other opcodes such as xfin_loccN / xfin_hiccN and xfout_loccN / xfout_hiccN should be used, or perhaps the amplitude_onccN ARIA extension.","title":"loccN / hiccN"},{"location":"opcodes/loccN/#examples","text":"locc74=30 hicc74=100 The region will play only if last MIDI controller 74 received was in the 30 to 100 range. Allowed range is 0 to 127. The defaults are loccN=0 and hiccN=127. Practical applications include using MIDI CC to switch things on and off - for example, additional voices, release noises, vibrato etc. A common example would be having a hi-hat with various degrees of openness sampled, all of those mapped to the same MIDI note, and hicc/locc used to define the ranges for which each degree of openness should play. A simpler example would be switching between sine, saw and noise waveforms: hicc1=63 sample=*sine locc1=64 hicc=126 sample=*saw locc1=127 sample=*noise This is a \"hard\" switch - if a region is within the locc to hicc range it plays, if it's outside that range it does not play. For smooth fades controlled by CC (such as crossfaded dynamic layers or crossfaded vibrato layers on sustained instruments), other opcodes such as xfin_loccN / xfin_hiccN and xfout_loccN / xfout_hiccN should be used, or perhaps the amplitude_onccN ARIA extension.","title":"Examples"},{"location":"opcodes/lochan/","text":"lochan and hichan will almost always be used together. One application of this is SFZ files which are to be controlled from MIDI guitar controllers, which send MIDI data for each string on a separate MIDI channel. The regions for that string would then have lochan and hichan set to the proper number. Examples lochan=1 hichan=7 lochan=2 hichan=2","title":"lochan / hichan"},{"location":"opcodes/lochan/#examples","text":"lochan=1 hichan=7 lochan=2 hichan=2","title":"Examples"},{"location":"opcodes/lochanaft/","text":"Examples The region will play only if last Channel Aftertouch message received was in the 30-100 range. lochanaft=30 hichanaft=100","title":"lochanaft / hichanaft"},{"location":"opcodes/lochanaft/#examples","text":"The region will play only if last Channel Aftertouch message received was in the 30-100 range. lochanaft=30 hichanaft=100","title":"Examples"},{"location":"opcodes/lohdccN/","text":"Other opcodes such as set_hdccN can also be used with these. Example lohdcc90=0.333 hihdcc90=0.7","title":"lohdccN / hihdccN"},{"location":"opcodes/lohdccN/#example","text":"lohdcc90=0.333 hihdcc90=0.7","title":"Example"},{"location":"opcodes/lokey/","text":"When a region only covers one note, it is generally more convenient to use key instead of hikey and lokey . When hikey and lokey are used, they will usually need to be used together with pitch_keycenter . These opcodes, as well as key , can use either MIDI note numbers (0 to 127) or MIDI note names (e.g. c3 or D#4). Using note numbers is recommended, however, as note numbers are interpreted consistently, while the same note names can be mapped to note numbers an octave or even two apart in different DAWs. In the SFZ 1 specification, the allowed range is 0 to 127. However, SFZ 2 additionally includes the possibility to set lokey and hikey to -1, to prevent a region from being triggered by any keys. This is a way (though, admittedly, not a very elegant one) to use the on_loccN / onhiccN opcodes to trigger, for example, pedal noises which are triggered whether any keys are pressed or not. Examples sample=*sine lokey=72 hikey=84 As with the key opcode, the values can also be MIDI note names: sample=*sine lokey=c5 hikey=c6 When an instrument is sampled every minor third, this kind of usage will be common: sample=a4.wav lokey=68 hikey=70 pitch_keycenter=69 sample=c5.wav lokey=71 hikey=73 pitch_keycenter=72 sample=eb5.wav lokey=74 hikey=76 pitch_keycenter=75","title":"lokey / hikey"},{"location":"opcodes/lokey/#examples","text":" sample=*sine lokey=72 hikey=84 As with the key opcode, the values can also be MIDI note names: sample=*sine lokey=c5 hikey=c6 When an instrument is sampled every minor third, this kind of usage will be common: sample=a4.wav lokey=68 hikey=70 pitch_keycenter=69 sample=c5.wav lokey=71 hikey=73 pitch_keycenter=72 sample=eb5.wav lokey=74 hikey=76 pitch_keycenter=75","title":"Examples"},{"location":"opcodes/loop_count/","text":"This is in addition to the time the sample is played unlooped, as normal, so loop_count=3 will result in the looped part of the sample being played four times, not three times. If the sample contains data after the end of the loop, this portion of the sample will be played after all repetitions of the loop have been completed (assuming no note-off message had been received by then). Examples loop_count=3 loop_count=15","title":"Loop count"},{"location":"opcodes/loop_count/#examples","text":"loop_count=3 loop_count=15","title":"Examples"},{"location":"opcodes/loop_crossfade/","text":"This can be used to add a crossfade to a loop where the looped sample does not have the crossfade \"baked into\" its audio data. Practical Considerations This opcode is uinimplemented in most SFZ players, but it is avaialble in OpenMPT and sfizz. sfizz currently uses a sinusoidal formula as default. \\[ amp = (1-cos(pi*x))/2 \\] OpenMPT's crossfade implementation currently applies a fade halfway between a constant volume fade and constant power fade. \\[ amp = pow(x, 0.75) \\]","title":"Loop crossfade"},{"location":"opcodes/loop_crossfade/#practical-considerations","text":"This opcode is uinimplemented in most SFZ players, but it is avaialble in OpenMPT and sfizz. sfizz currently uses a sinusoidal formula as default. \\[ amp = (1-cos(pi*x))/2 \\] OpenMPT's crossfade implementation currently applies a fade halfway between a constant volume fade and constant power fade. \\[ amp = pow(x, 0.75) \\]","title":"Practical Considerations"},{"location":"opcodes/loop_end/","text":"This is inclusive - the sample specified is played as part of the loop. If loop_end is not specified and the sample has a loop defined, the SFZ player will use the end point of the first loop defined in the file. That means for files with one loop, loop_end does not usually need to be set, as it's generally more practical to define loop points in an audio editor where they can be checked for smoothness, crossfaded if necessary etc. If loop_end is specified, it will be used instead the loop end point defined in the sample. For files which have multiple loops defined, this is the only way to get anything other than the first defined loop to play. This opcode will not have any effect if loop_mode is set to no_loop . Practical Considerations Loop endpoints can be modulated using loop_lengthccN in rgc sfz, and loop_length_onccN in Cakewalk products - though the term \"length\" is used, it's specifically the location of the end point which is modulated. In ARIA, if loop_end is not specified, the sample does not have a loop defined and loop_mode is set to loop_continuous or loop_sustain , the player will loop through the entire file. Not directly related to SFZ players, but causing a common error, some audio editors number samples starting with 1, while according to the WAV file specification the first sample should be number 0. If one of these editors is used to create sample files which have loop point information, and the loop endpoint is set to the last sample of the file, the SFZ player will think the loop endpoint is after the end of the file, and will return an error. The solution to this is either to reduce the loop start and endpoints in the WAV file by 1 each, or to set loop_start and loop_end in the SFZ. Examples loop_end=4503 loop_end=12445","title":"Loop end"},{"location":"opcodes/loop_end/#practical-considerations","text":"Loop endpoints can be modulated using loop_lengthccN in rgc sfz, and loop_length_onccN in Cakewalk products - though the term \"length\" is used, it's specifically the location of the end point which is modulated. In ARIA, if loop_end is not specified, the sample does not have a loop defined and loop_mode is set to loop_continuous or loop_sustain , the player will loop through the entire file. Not directly related to SFZ players, but causing a common error, some audio editors number samples starting with 1, while according to the WAV file specification the first sample should be number 0. If one of these editors is used to create sample files which have loop point information, and the loop endpoint is set to the last sample of the file, the SFZ player will think the loop endpoint is after the end of the file, and will return an error. The solution to this is either to reduce the loop start and endpoints in the WAV file by 1 each, or to set loop_start and loop_end in the SFZ.","title":"Practical Considerations"},{"location":"opcodes/loop_end/#examples","text":"loop_end=4503 loop_end=12445","title":"Examples"},{"location":"opcodes/loop_length_onccN/","text":"This is inclusive - the sample specified is played as part of the loop. If loop_end is not specified and the sample has a loop defined, the SFZ player will use the end point of the first loop defined in the file. That means for files with one loop, loop_end does not usually need to be set, as it's generally more practical to define loop points in an audio editor where they can be checked for smoothness, crossfaded if necessary etc. If loop_end is specified, it will be used instead the loop end point defined in the sample. For files which have multiple loops defined, this is the only way to get anything other than the first defined loop to play. This opcode will not have any effect if loop_mode is set to no_loop . Practical Considerations Loop endpoints can be modulated using loop_lengthccN in rgc sfz, and loop_length_onccN in Cakewalk products - though the term \"length\" is used, it's specifically the location of the end point which is modulated. In ARIA, if loop_end is not specified, the sample does not have a loop defined and loop_mode is set to loop_continuous or loop_sustain , the player will loop through the entire file. Not directly related to SFZ players, but causing a common error, some audio editors number samples starting with 1, while according to the WAV file specification the first sample should be number 0. If one of these editors is used to create sample files which have loop point information, and the loop endpoint is set to the last sample of the file, the SFZ player will think the loop endpoint is after the end of the file, and will return an error. The solution to this is either to reduce the loop start and endpoints in the WAV file by 1 each, or to set loop_start and loop_end in the SFZ. Examples loop_end=4503 loop_end=12445","title":"loop length onccN"},{"location":"opcodes/loop_length_onccN/#practical-considerations","text":"Loop endpoints can be modulated using loop_lengthccN in rgc sfz, and loop_length_onccN in Cakewalk products - though the term \"length\" is used, it's specifically the location of the end point which is modulated. In ARIA, if loop_end is not specified, the sample does not have a loop defined and loop_mode is set to loop_continuous or loop_sustain , the player will loop through the entire file. Not directly related to SFZ players, but causing a common error, some audio editors number samples starting with 1, while according to the WAV file specification the first sample should be number 0. If one of these editors is used to create sample files which have loop point information, and the loop endpoint is set to the last sample of the file, the SFZ player will think the loop endpoint is after the end of the file, and will return an error. The solution to this is either to reduce the loop start and endpoints in the WAV file by 1 each, or to set loop_start and loop_end in the SFZ.","title":"Practical Considerations"},{"location":"opcodes/loop_length_onccN/#examples","text":"loop_end=4503 loop_end=12445","title":"Examples"},{"location":"opcodes/loop_lengthccN/","text":"This is inclusive - the sample specified is played as part of the loop. If loop_end is not specified and the sample has a loop defined, the SFZ player will use the end point of the first loop defined in the file. That means for files with one loop, loop_end does not usually need to be set, as it's generally more practical to define loop points in an audio editor where they can be checked for smoothness, crossfaded if necessary etc. If loop_end is specified, it will be used instead the loop end point defined in the sample. For files which have multiple loops defined, this is the only way to get anything other than the first defined loop to play. This opcode will not have any effect if loop_mode is set to no_loop . Practical Considerations Loop endpoints can be modulated using loop_lengthccN in rgc sfz, and loop_length_onccN in Cakewalk products - though the term \"length\" is used, it's specifically the location of the end point which is modulated. In ARIA, if loop_end is not specified, the sample does not have a loop defined and loop_mode is set to loop_continuous or loop_sustain , the player will loop through the entire file. Not directly related to SFZ players, but causing a common error, some audio editors number samples starting with 1, while according to the WAV file specification the first sample should be number 0. If one of these editors is used to create sample files which have loop point information, and the loop endpoint is set to the last sample of the file, the SFZ player will think the loop endpoint is after the end of the file, and will return an error. The solution to this is either to reduce the loop start and endpoints in the WAV file by 1 each, or to set loop_start and loop_end in the SFZ. Examples loop_end=4503 loop_end=12445","title":"loop lengthccN"},{"location":"opcodes/loop_lengthccN/#practical-considerations","text":"Loop endpoints can be modulated using loop_lengthccN in rgc sfz, and loop_length_onccN in Cakewalk products - though the term \"length\" is used, it's specifically the location of the end point which is modulated. In ARIA, if loop_end is not specified, the sample does not have a loop defined and loop_mode is set to loop_continuous or loop_sustain , the player will loop through the entire file. Not directly related to SFZ players, but causing a common error, some audio editors number samples starting with 1, while according to the WAV file specification the first sample should be number 0. If one of these editors is used to create sample files which have loop point information, and the loop endpoint is set to the last sample of the file, the SFZ player will think the loop endpoint is after the end of the file, and will return an error. The solution to this is either to reduce the loop start and endpoints in the WAV file by 1 each, or to set loop_start and loop_end in the SFZ.","title":"Practical Considerations"},{"location":"opcodes/loop_lengthccN/#examples","text":"loop_end=4503 loop_end=12445","title":"Examples"},{"location":"opcodes/loop_mode/","text":"If loop_mode is not specified, each sample will play according to its predefined loop mode according to the loop metadata in the audio file. That is, the player will play the sample looped using the first defined loop, if available. If no loops are defined (which is usually the case with most files), the wave will play unlooped. 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. one_shot : sample will play from start to end, ignoring note off. This is commonly used for drums. 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. This includes looping during the release phase. loop_sustain : the player will play the loop while the note is held, by keeping it depressed or by using the sustain pedal (CC64). During the release phase, there's no looping. Whether no_loop, loop_continuous or loop_sustain is set, the duration of the release phase is set using ampeg_release . However, in loop_sustain or no_loop mode, the sound can be cut off before the release phase ends, if the end of sample is reached. In loop_continuous mode, the loop will repeat if the loop end is reached during the release phase, including repeating multiple times if the release time is longer than the loop length. Practical Considerations For samples with trigger =release set, no_loop and one_shot will both behave as one_shot and the entire release sample will play. If loop_continuous is set, looping will be applied - and unless loop_count is set or there is some other way the sound will be muted, that means the sound can potentially continue indefinitely. If an instrument is using the default loop_mode=no_loop, there is no need to set loop_mode=one_shot for the release samples; however, if an instrument has loop_mode=loop_continuous set under a header which also includes release samples, the release regions will normally need to be set to loop_mode=one_shot to override that. In ARIA, if loop_mode=loop_continuous or loop_sustain, loop_end is not specified, and the sample does not have a loop defined, the player will loop through the entire sample file. Examples loop_mode=no_loop loop_mode=loop_continuous","title":"Loop mode"},{"location":"opcodes/loop_mode/#practical-considerations","text":"For samples with trigger =release set, no_loop and one_shot will both behave as one_shot and the entire release sample will play. If loop_continuous is set, looping will be applied - and unless loop_count is set or there is some other way the sound will be muted, that means the sound can potentially continue indefinitely. If an instrument is using the default loop_mode=no_loop, there is no need to set loop_mode=one_shot for the release samples; however, if an instrument has loop_mode=loop_continuous set under a header which also includes release samples, the release regions will normally need to be set to loop_mode=one_shot to override that. In ARIA, if loop_mode=loop_continuous or loop_sustain, loop_end is not specified, and the sample does not have a loop defined, the player will loop through the entire sample file.","title":"Practical Considerations"},{"location":"opcodes/loop_mode/#examples","text":"loop_mode=no_loop loop_mode=loop_continuous","title":"Examples"},{"location":"opcodes/loop_start/","text":"If loop_start is not specified and the sample has a loop defined, the SFZ player will use the start point of the first loop defined in the file. That means for files with one loop, loop_start does not usually need to be set, as it's generally more practical to define loop points in an audio editor where they can be checked for smoothness, crossfaded if necessary etc. If loop_start is specified, it will be used instead the loop start point defined in the sample. For files which have multiple loops defined, this is the only way to get anything other than the first defined loop to play. This opcode will not have any effect if loop_mode is set to no_loop . Examples loop_start=4503 loop_start=12445","title":"Loop start"},{"location":"opcodes/loop_start/#examples","text":"loop_start=4503 loop_start=12445","title":"Examples"},{"location":"opcodes/loop_start_onccN/","text":"If loop_start is not specified and the sample has a loop defined, the SFZ player will use the start point of the first loop defined in the file. That means for files with one loop, loop_start does not usually need to be set, as it's generally more practical to define loop points in an audio editor where they can be checked for smoothness, crossfaded if necessary etc. If loop_start is specified, it will be used instead the loop start point defined in the sample. For files which have multiple loops defined, this is the only way to get anything other than the first defined loop to play. This opcode will not have any effect if loop_mode is set to no_loop . Examples loop_start=4503 loop_start=12445","title":"loop start onccN"},{"location":"opcodes/loop_start_onccN/#examples","text":"loop_start=4503 loop_start=12445","title":"Examples"},{"location":"opcodes/loop_startccN/","text":"If loop_start is not specified and the sample has a loop defined, the SFZ player will use the start point of the first loop defined in the file. That means for files with one loop, loop_start does not usually need to be set, as it's generally more practical to define loop points in an audio editor where they can be checked for smoothness, crossfaded if necessary etc. If loop_start is specified, it will be used instead the loop start point defined in the sample. For files which have multiple loops defined, this is the only way to get anything other than the first defined loop to play. This opcode will not have any effect if loop_mode is set to no_loop . Examples loop_start=4503 loop_start=12445","title":"loop startccN"},{"location":"opcodes/loop_startccN/#examples","text":"loop_start=4503 loop_start=12445","title":"Examples"},{"location":"opcodes/loop_tune/","text":"Examples loop_tune=-4 loop_tune=6 Useful with very short loops such as single-cycle waveforms, which can be slightly out of tune compared to the complete waveform from which they were cut.","title":"Loop tune"},{"location":"opcodes/loop_tune/#examples","text":"loop_tune=-4 loop_tune=6 Useful with very short loops such as single-cycle waveforms, which can be slightly out of tune compared to the complete waveform from which they were cut.","title":"Examples"},{"location":"opcodes/loop_type/","text":"This only affects the loop portion of the sample. To play a sample backwards with no looping, use direction instead.","title":"Loop type"},{"location":"opcodes/loopcount/","text":"This is in addition to the time the sample is played unlooped, as normal, so loop_count=3 will result in the looped part of the sample being played four times, not three times. If the sample contains data after the end of the loop, this portion of the sample will be played after all repetitions of the loop have been completed (assuming no note-off message had been received by then). Examples loop_count=3 loop_count=15","title":"Loopcount"},{"location":"opcodes/loopcount/#examples","text":"loop_count=3 loop_count=15","title":"Examples"},{"location":"opcodes/loopend/","text":"This is inclusive - the sample specified is played as part of the loop. If loop_end is not specified and the sample has a loop defined, the SFZ player will use the end point of the first loop defined in the file. That means for files with one loop, loop_end does not usually need to be set, as it's generally more practical to define loop points in an audio editor where they can be checked for smoothness, crossfaded if necessary etc. If loop_end is specified, it will be used instead the loop end point defined in the sample. For files which have multiple loops defined, this is the only way to get anything other than the first defined loop to play. This opcode will not have any effect if loop_mode is set to no_loop . Practical Considerations Loop endpoints can be modulated using loop_lengthccN in rgc sfz, and loop_length_onccN in Cakewalk products - though the term \"length\" is used, it's specifically the location of the end point which is modulated. In ARIA, if loop_end is not specified, the sample does not have a loop defined and loop_mode is set to loop_continuous or loop_sustain , the player will loop through the entire file. Not directly related to SFZ players, but causing a common error, some audio editors number samples starting with 1, while according to the WAV file specification the first sample should be number 0. If one of these editors is used to create sample files which have loop point information, and the loop endpoint is set to the last sample of the file, the SFZ player will think the loop endpoint is after the end of the file, and will return an error. The solution to this is either to reduce the loop start and endpoints in the WAV file by 1 each, or to set loop_start and loop_end in the SFZ. Examples loop_end=4503 loop_end=12445","title":"Loopend"},{"location":"opcodes/loopend/#practical-considerations","text":"Loop endpoints can be modulated using loop_lengthccN in rgc sfz, and loop_length_onccN in Cakewalk products - though the term \"length\" is used, it's specifically the location of the end point which is modulated. In ARIA, if loop_end is not specified, the sample does not have a loop defined and loop_mode is set to loop_continuous or loop_sustain , the player will loop through the entire file. Not directly related to SFZ players, but causing a common error, some audio editors number samples starting with 1, while according to the WAV file specification the first sample should be number 0. If one of these editors is used to create sample files which have loop point information, and the loop endpoint is set to the last sample of the file, the SFZ player will think the loop endpoint is after the end of the file, and will return an error. The solution to this is either to reduce the loop start and endpoints in the WAV file by 1 each, or to set loop_start and loop_end in the SFZ.","title":"Practical Considerations"},{"location":"opcodes/loopend/#examples","text":"loop_end=4503 loop_end=12445","title":"Examples"},{"location":"opcodes/loopmode/","text":"If loop_mode is not specified, each sample will play according to its predefined loop mode according to the loop metadata in the audio file. That is, the player will play the sample looped using the first defined loop, if available. If no loops are defined (which is usually the case with most files), the wave will play unlooped. 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. one_shot : sample will play from start to end, ignoring note off. This is commonly used for drums. 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. This includes looping during the release phase. loop_sustain : the player will play the loop while the note is held, by keeping it depressed or by using the sustain pedal (CC64). During the release phase, there's no looping. Whether no_loop, loop_continuous or loop_sustain is set, the duration of the release phase is set using ampeg_release . However, in loop_sustain or no_loop mode, the sound can be cut off before the release phase ends, if the end of sample is reached. In loop_continuous mode, the loop will repeat if the loop end is reached during the release phase, including repeating multiple times if the release time is longer than the loop length. Practical Considerations For samples with trigger =release set, no_loop and one_shot will both behave as one_shot and the entire release sample will play. If loop_continuous is set, looping will be applied - and unless loop_count is set or there is some other way the sound will be muted, that means the sound can potentially continue indefinitely. If an instrument is using the default loop_mode=no_loop, there is no need to set loop_mode=one_shot for the release samples; however, if an instrument has loop_mode=loop_continuous set under a header which also includes release samples, the release regions will normally need to be set to loop_mode=one_shot to override that. In ARIA, if loop_mode=loop_continuous or loop_sustain, loop_end is not specified, and the sample does not have a loop defined, the player will loop through the entire sample file. Examples loop_mode=no_loop loop_mode=loop_continuous","title":"Loopmode"},{"location":"opcodes/loopmode/#practical-considerations","text":"For samples with trigger =release set, no_loop and one_shot will both behave as one_shot and the entire release sample will play. If loop_continuous is set, looping will be applied - and unless loop_count is set or there is some other way the sound will be muted, that means the sound can potentially continue indefinitely. If an instrument is using the default loop_mode=no_loop, there is no need to set loop_mode=one_shot for the release samples; however, if an instrument has loop_mode=loop_continuous set under a header which also includes release samples, the release regions will normally need to be set to loop_mode=one_shot to override that. In ARIA, if loop_mode=loop_continuous or loop_sustain, loop_end is not specified, and the sample does not have a loop defined, the player will loop through the entire sample file.","title":"Practical Considerations"},{"location":"opcodes/loopmode/#examples","text":"loop_mode=no_loop loop_mode=loop_continuous","title":"Examples"},{"location":"opcodes/loopstart/","text":"If loop_start is not specified and the sample has a loop defined, the SFZ player will use the start point of the first loop defined in the file. That means for files with one loop, loop_start does not usually need to be set, as it's generally more practical to define loop points in an audio editor where they can be checked for smoothness, crossfaded if necessary etc. If loop_start is specified, it will be used instead the loop start point defined in the sample. For files which have multiple loops defined, this is the only way to get anything other than the first defined loop to play. This opcode will not have any effect if loop_mode is set to no_loop . Examples loop_start=4503 loop_start=12445","title":"Loopstart"},{"location":"opcodes/loopstart/#examples","text":"loop_start=4503 loop_start=12445","title":"Examples"},{"location":"opcodes/looptune/","text":"Examples loop_tune=-4 loop_tune=6 Useful with very short loops such as single-cycle waveforms, which can be slightly out of tune compared to the complete waveform from which they were cut.","title":"Looptune"},{"location":"opcodes/looptune/#examples","text":"loop_tune=-4 loop_tune=6 Useful with very short loops such as single-cycle waveforms, which can be slightly out of tune compared to the complete waveform from which they were cut.","title":"Examples"},{"location":"opcodes/looptype/","text":"This only affects the loop portion of the sample. To play a sample backwards with no looping, use direction instead.","title":"Looptype"},{"location":"opcodes/lopolyaft/","text":"Example The region will play only if last Polyphonic Aftertouch message received was in the 30-100 range. lopolyaft=30 hipolyaft=100 Practical Considerations In the rgcaudio sfz player, the incoming note information in the Polyphonic Aftertouch message is not relevant (which basically means polyphonic aftertouch isn't polyphonic, and works like channel aftertouch). In ARIA, the incoming note information is used, and polyphonic aftertouch works polyphonically. Other SFZ players need testing.","title":"lopolyaft / hipolyaft"},{"location":"opcodes/lopolyaft/#example","text":"The region will play only if last Polyphonic Aftertouch message received was in the 30-100 range. lopolyaft=30 hipolyaft=100","title":"Example"},{"location":"opcodes/lopolyaft/#practical-considerations","text":"In the rgcaudio sfz player, the incoming note information in the Polyphonic Aftertouch message is not relevant (which basically means polyphonic aftertouch isn't polyphonic, and works like channel aftertouch). In ARIA, the incoming note information is used, and polyphonic aftertouch works polyphonically. Other SFZ players need testing.","title":"Practical Considerations"},{"location":"opcodes/loprog/","text":"MIDI program numbers in the General MIDI spec ranged from 0 to 127 but were often displayed externally as 1 to 128. This uses the 0 to 127 range. By default, most DAWs seem to have the program number set to 0, so setting loprog higher than 0 without sending program change messages results in no sound. Examples loprog=0 hiprog=0 loprog=1 hiprog=1 loprog=10 hiprog=12","title":"loprog / hiprog"},{"location":"opcodes/loprog/#examples","text":"loprog=0 hiprog=0 loprog=1 hiprog=1 loprog=10 hiprog=12","title":"Examples"},{"location":"opcodes/lorand/","text":"Random values. The player will generate a new random number on every note-on event, in the range 0 to 1. Examples lorand=0.2 hirand=0.4 lorand=0.4 hirand=1 The most common application for this is randomized round robins. Note that hirand for a region should equal lorand for the next region - if we had, for example, hirand =0.249 for the first region and lorand =0.25 for the next, that would result in no sound playing if the random number generated was, for example, 0.2496343491. So, an 0.001 chance of no sound at all - a difficult problem to spot when testing. hirand=0.25 sample=kick_vl1_rr1.wav lorand=0.25 hirand=0.5 sample=kick_vl1_rr2.wav lorand=0.5 hirand=0.75 sample=kick_vl1_rr3.wav lorand=0.75 sample=kick_vl1_rr4.wav It is also possible to combine this with the seq_length and seq_position opcodes to split round robins into two subsets, and randomize within each subset. This results in randomization, but prevents the possibility of the same sample being triggered twice in a row when the random number generated falls into the same range as the previously generated number. This can be good when there are a lot (6 or more) round robin samples available. The code for 8 samples split into two sequential subsets might look like this: seq_length=2 seq_position=1 hirand=0.25 sample=kick_vl1_rr1.wav seq_length=2 seq_position=1 lorand=0.25 hirand=0.5 sample=kick_vl1_rr2.wav seq_length=2 seq_position=1 lorand=0.5 hirand=0.75 sample=kick_vl1_rr3.wav seq_length=2 seq_position=1 lorand=0.75 sample=kick_vl1_rr4.wav seq_length=2 seq_position=2 hirand=0.25 sample=kick_vl1_rr5.wav seq_length=2 seq_position=2 lorand=0.25 hirand=0.5 sample=kick_vl1_rr6.wav seq_length=2 seq_position=2 lorand=0.5 hirand=0.75 sample=kick_vl1_rr7.wav seq_length=2 seq_position=2 lorand=0.75 sample=kick_vl1_rr8.wav Practical Considerations In the ARIA implementation of SFZ, sequence position is not tracked together for all regions, which means the above is not a practical way to implement alternating left/right hand or up/down bowing samples. Also in ARIA, a separate random number is generated for each region which is playing, which means lorand/hirand probably should not be used with samples which have multiple mic positions. Using it can result in triggering spot, overhead and room mics which do not match, and that can result in phasing issues etc. There are other potential uses which have nothing to do with round robins, for example having key fingering noises on a clarinet trigger sometimes (but not always) when a note is played.","title":"lorand / hirand"},{"location":"opcodes/lorand/#examples","text":"lorand=0.2 hirand=0.4 lorand=0.4 hirand=1 The most common application for this is randomized round robins. Note that hirand for a region should equal lorand for the next region - if we had, for example, hirand =0.249 for the first region and lorand =0.25 for the next, that would result in no sound playing if the random number generated was, for example, 0.2496343491. So, an 0.001 chance of no sound at all - a difficult problem to spot when testing. hirand=0.25 sample=kick_vl1_rr1.wav lorand=0.25 hirand=0.5 sample=kick_vl1_rr2.wav lorand=0.5 hirand=0.75 sample=kick_vl1_rr3.wav lorand=0.75 sample=kick_vl1_rr4.wav It is also possible to combine this with the seq_length and seq_position opcodes to split round robins into two subsets, and randomize within each subset. This results in randomization, but prevents the possibility of the same sample being triggered twice in a row when the random number generated falls into the same range as the previously generated number. This can be good when there are a lot (6 or more) round robin samples available. The code for 8 samples split into two sequential subsets might look like this: seq_length=2 seq_position=1 hirand=0.25 sample=kick_vl1_rr1.wav seq_length=2 seq_position=1 lorand=0.25 hirand=0.5 sample=kick_vl1_rr2.wav seq_length=2 seq_position=1 lorand=0.5 hirand=0.75 sample=kick_vl1_rr3.wav seq_length=2 seq_position=1 lorand=0.75 sample=kick_vl1_rr4.wav seq_length=2 seq_position=2 hirand=0.25 sample=kick_vl1_rr5.wav seq_length=2 seq_position=2 lorand=0.25 hirand=0.5 sample=kick_vl1_rr6.wav seq_length=2 seq_position=2 lorand=0.5 hirand=0.75 sample=kick_vl1_rr7.wav seq_length=2 seq_position=2 lorand=0.75 sample=kick_vl1_rr8.wav","title":"Examples"},{"location":"opcodes/lorand/#practical-considerations","text":"In the ARIA implementation of SFZ, sequence position is not tracked together for all regions, which means the above is not a practical way to implement alternating left/right hand or up/down bowing samples. Also in ARIA, a separate random number is generated for each region which is playing, which means lorand/hirand probably should not be used with samples which have multiple mic positions. Using it can result in triggering spot, overhead and room mics which do not match, and that can result in phasing issues etc. There are other potential uses which have nothing to do with round robins, for example having key fingering noises on a clarinet trigger sometimes (but not always) when a note is played.","title":"Practical Considerations"},{"location":"opcodes/lotimer/","text":"Not implemented in ARIA, may have been implemented in some Cakewalk products. The timer is how long has passed since the last sample had played in the same group. It is, however, not known whether this is a group header or polyphony group. Examples hitimer=0.25 sample=quick.wav lotimer=0.25 sample=slow.wav","title":"lotimer / hitimer"},{"location":"opcodes/lotimer/#examples","text":" hitimer=0.25 sample=quick.wav lotimer=0.25 sample=slow.wav","title":"Examples"},{"location":"opcodes/lovel/","text":"This is obviously useful for instruments with dynamic layers controlled by velocity. Though dynamic layers can also be controlled by CC, especially for sustained instruments, lovel and hivel are the standard way of controlling dynamics for instruments such as drums and pianos. It is also possible to use lovel / hivel to control other things instead, such as articulations - for example, a guitar could have palm-muted samples on low velocities, and pinch harmonics on velocity 127. These opcodes will often need to be used with amp_velcurve_N , unless amp_veltrack is set to 0. The reason for this is that with default velocity tracking behavior and non-normalized samples (and there are many reasons why normalizing samples should be avoided), the quiet velocity layers will be too quiet. Velocity 0 is a note-off message, so 1 is the lowest usable value with hivel/lovel. Example lovel=64 hivel=95 An instrument with four velocity-controlled dynamic layers might use lovel and hivel like this: hivel=31 amp_velcurve_31=1 sample=kick_vl1.wav lovel=32 hivel=63 amp_velcurve_63=1 sample=kick_vl2.wav lovel=64 hivel=95 amp_velcurve_95=1 sample=kick_vl3.wav lovel=96 sample=kick_vl4.wav The way this would work is the kick_vl1.wav region will play at velocities up to 31, with volume going gradually from 0 at velocity 0 (so, no sound) to full volume at velocity 31. The kick_vl2.wav region will play at velocties 32 to 63, with volume being full at velocity 63 and lower volume (but not zero) at 32. The kick_vl3 wav region will play at velocites 64 to 95, with full volume at velocity 95. Finally, the kick_vl4 layer plays at velocities 96 to 127, with no amp_velcurve_N set meaning it will have full volume at velocity 127.","title":"lovel / hivel"},{"location":"opcodes/lovel/#example","text":"lovel=64 hivel=95 An instrument with four velocity-controlled dynamic layers might use lovel and hivel like this: hivel=31 amp_velcurve_31=1 sample=kick_vl1.wav lovel=32 hivel=63 amp_velcurve_63=1 sample=kick_vl2.wav lovel=64 hivel=95 amp_velcurve_95=1 sample=kick_vl3.wav lovel=96 sample=kick_vl4.wav The way this would work is the kick_vl1.wav region will play at velocities up to 31, with volume going gradually from 0 at velocity 0 (so, no sound) to full volume at velocity 31. The kick_vl2.wav region will play at velocties 32 to 63, with volume being full at velocity 63 and lower volume (but not zero) at 32. The kick_vl3 wav region will play at velocites 64 to 95, with full volume at velocity 95. Finally, the kick_vl4 layer plays at velocities 96 to 127, with no amp_velcurve_N set meaning it will have full volume at velocity 127.","title":"Example"},{"location":"opcodes/master_amplitude/","text":"Example master_amplitude=60","title":"Master amplitude"},{"location":"opcodes/master_amplitude/#example","text":"master_amplitude=60","title":"Example"},{"location":"opcodes/master_label/","text":"Useful for debugging. It can be set anywhere, not just under the \u2039 master \u203a header. Example master_label=China2","title":"Master label"},{"location":"opcodes/master_label/#example","text":"master_label=China2","title":"Example"},{"location":"opcodes/master_tune/","text":"","title":"Master tune"},{"location":"opcodes/master_volume/","text":"","title":"Master volume"},{"location":"opcodes/md5/","text":"It may be used to verify the integrity of the sample file, or to locate renamed files by content. Example /* University of Iowa Music Instrument Samples - Piano http://theremin.music.uiowa.edu/MISpiano.html */ sample=Piano.ff.A0.aiff md5=4ce81c280832d99f05a0d609a1031d5e","title":"Md5"},{"location":"opcodes/md5/#example","text":"/* University of Iowa Music Instrument Samples - Piano http://theremin.music.uiowa.edu/MISpiano.html */ sample=Piano.ff.A0.aiff md5=4ce81c280832d99f05a0d609a1031d5e","title":"Example"},{"location":"opcodes/noise_filter/","text":"","title":"Noise filter"},{"location":"opcodes/noise_level/","text":"","title":"Noise level"},{"location":"opcodes/noise_level_onccN/","text":"","title":"noise level onccN"},{"location":"opcodes/noise_level_smoothccN/","text":"","title":"noise level smoothccN"},{"location":"opcodes/noise_step/","text":"","title":"Noise step"},{"location":"opcodes/noise_step_onccN/","text":"","title":"noise step onccN"},{"location":"opcodes/noise_stereo/","text":"","title":"Noise stereo"},{"location":"opcodes/noise_tone/","text":"","title":"Noise tone"},{"location":"opcodes/noise_tone_onccN/","text":"","title":"noise tone onccN"},{"location":"opcodes/note_offset/","text":"This opcode tells SFZ to shift all incoming MIDI data by the specified number of notes - basically like octave_offset but measured in half-steps instead of octaves. It should be used under the \u2039 control \u203a header. Example note_offset=-3","title":"Note offset"},{"location":"opcodes/note_offset/#example","text":"note_offset=-3","title":"Example"},{"location":"opcodes/note_polyphony/","text":"Example note_polyphony=3 The difference between applying polyphony across one note and using note_polyphony is that note_polyphony also uses note_selfmask which opens up some additional options. Default self-masking behavior is that higher-or-equal-velocity notes turn off lower-velocity notes, but lower-velocity notes do not turn off higher-velocity notes. A new note will always play. To be more precise, assuming a note_polyphony =1, the self-masking behavior by default is: - If a low-velocity note is playing, a higher-or-equal velocity note kills the low-velocity note. - If a high-velocity note is playing, a strictly-lower-velocity note will play without killing the high-velocity note. The note_polyphony opcode is thus not a strict polyphony limit but more of a hint for the instrument behavior. This behavior is indeed generally desirable when playing repeated piano notes, hammered dulcimers, etc. It can also be useful for cymbals, although especially with hi-hats, those will often use different notes for different articulations, and note_polyphony would be limited to working within an articulation. The note polyphony is checked within a polyphony group, set by the group or polyphony_group opcodes. If no group is specified on the region (or its group, master or globally) the note polyphony applies to the default group as if group =0 was specified. This means that instruments where one note needs to trigger multiple layers, for example drums with separate microphone samples, will usually need to set a separate group number for each microphone position, so the note polyphony limit is tracked separately for each mic.","title":"Note polyphony"},{"location":"opcodes/note_polyphony/#example","text":"note_polyphony=3 The difference between applying polyphony across one note and using note_polyphony is that note_polyphony also uses note_selfmask which opens up some additional options. Default self-masking behavior is that higher-or-equal-velocity notes turn off lower-velocity notes, but lower-velocity notes do not turn off higher-velocity notes. A new note will always play. To be more precise, assuming a note_polyphony =1, the self-masking behavior by default is: - If a low-velocity note is playing, a higher-or-equal velocity note kills the low-velocity note. - If a high-velocity note is playing, a strictly-lower-velocity note will play without killing the high-velocity note. The note_polyphony opcode is thus not a strict polyphony limit but more of a hint for the instrument behavior. This behavior is indeed generally desirable when playing repeated piano notes, hammered dulcimers, etc. It can also be useful for cymbals, although especially with hi-hats, those will often use different notes for different articulations, and note_polyphony would be limited to working within an articulation. The note polyphony is checked within a polyphony group, set by the group or polyphony_group opcodes. If no group is specified on the region (or its group, master or globally) the note polyphony applies to the default group as if group =0 was specified. This means that instruments where one note needs to trigger multiple layers, for example drums with separate microphone samples, will usually need to set a separate group number for each microphone position, so the note polyphony limit is tracked separately for each mic.","title":"Example"},{"location":"opcodes/note_selfmask/","text":"This affects only muting of notes where the polyphony is limited by note_polyphony and not cases where polyphony is used. Default self-masking behavior is that higher-or-equal-velocity notes turn off lower-velocity notes, but lower-velocity notes do not turn off higher-velocity notes. A new note will always play. To be more precise, assuming a note_polyphony =1, the self-masking behavior by default is: - If a low-velocity note is playing, a higher-or-equal velocity note kills the low-velocity note. - If a high-velocity note is playing, a strictly-lower-velocity note will play without killing the high-velocity note. The note_polyphony opcode is thus not a strict polyphony limit but more of a hint for the instrument behavior. This behavior is indeed generally desirable when playing repeated piano notes, ride cymbals, hammered dulcimers etc. With note_selfmask set to off, notes turn off notes with the same pitch regardless of velocity, which generally sounds less \"musical\" but does ensure that note polyphony is always preserved within the set limit, and can sound right for certain instruments. Example note_selfmask=off","title":"Note selfmask"},{"location":"opcodes/note_selfmask/#example","text":"note_selfmask=off","title":"Example"},{"location":"opcodes/octave_offset/","text":"This opcode tells SFZ to shift all incoming MIDI data by the specified octave - this allows changing IPN notation into MMA, so C4 will be MIDI note 48 instead of MIDI note 60. It should be used under the \u2039 control \u203a header. Example octave_offset=-1","title":"Octave offset"},{"location":"opcodes/octave_offset/#example","text":"octave_offset=-1","title":"Example"},{"location":"opcodes/off_by/","text":"When a new region with a group number equal to off_by plays, this region will be turned off. Examples off_by=3 off_by=334 This is used in conjunction with group to make things monophonic, but can also be used in other contexts where one sound should cause another to stop - for example, cymbal chokes. Practical considerations With the default for both group and off_by being 0, any instruments that leave these default values in place should in theory be monophonic. As a workaround, rgc sfz, Cakewalk players, BassMIDI and LinuxSampler implement special behavior where if group=0 and off_by=0, regions are not muted, and muting only happens for non-zero values of off_by. ARIA/Sforzando has a different workaround, with the default value of off_by being 4294967295. The actual minimum and maximum values are not currently known. Some players will treat numbers outside a certain range as equivalent to off_by=0, and ARIA/Sforzando will also do this with text strings. The behavior of non-integer numbers is also currently unknown. This makes it possible to use an extremely large number for one group/off_by combination, but it's obviously not recommended.","title":"Off by"},{"location":"opcodes/off_by/#examples","text":"off_by=3 off_by=334 This is used in conjunction with group to make things monophonic, but can also be used in other contexts where one sound should cause another to stop - for example, cymbal chokes.","title":"Examples"},{"location":"opcodes/off_by/#practical-considerations","text":"With the default for both group and off_by being 0, any instruments that leave these default values in place should in theory be monophonic. As a workaround, rgc sfz, Cakewalk players, BassMIDI and LinuxSampler implement special behavior where if group=0 and off_by=0, regions are not muted, and muting only happens for non-zero values of off_by. ARIA/Sforzando has a different workaround, with the default value of off_by being 4294967295. The actual minimum and maximum values are not currently known. Some players will treat numbers outside a certain range as equivalent to off_by=0, and ARIA/Sforzando will also do this with text strings. The behavior of non-integer numbers is also currently unknown. This makes it possible to use an extremely large number for one group/off_by combination, but it's obviously not recommended.","title":"Practical considerations"},{"location":"opcodes/off_curve/","text":"-2 is a static, non-changing envelope segment. -1 is linear slope. 0 is x^n with n being the coefficient set in off_shape. 1 is n^x. 2 logarithmic, possibly not implemented in any SFZ player. 10 is vendor-specific math. Examples off_curve=-1 off_curve=10","title":"Off curve"},{"location":"opcodes/off_curve/#examples","text":"off_curve=-1 off_curve=10","title":"Examples"},{"location":"opcodes/off_mode/","text":"Region off mode. This opcode will determinate how a region is turned off by an off_by opcode. There are two choices: 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. ARIA also adds off_mode =time which can be used to specify a time independent of the sample release time using off_time , and also off_shape and off_curve to control the curve of the fadeout. In ARIA, time is actually the default value with a default off_time of 6 ms. 6 ms is also the fadeout time for off_mode=fast so these are equivalent in end result, but time is the true default value \"under the hood\". Examples off_mode=fast off_mode=normal Note that the default is fast, and not normal, which means that \"normal isn't normal\", and if normal is needed, it will need to be set explicitly. Normal is useful for legato instruments where a fading in the previous samples while the new one fades in is desirable, and can also be useful for making hi-hat muting behavior sound a little more natural. With longer release times, off_mode =normal is also a way to manage buildup in instruments which have a very long sustain and can have the sound of several notes build up - for example, hammered dulcimers or ride cymbals.","title":"Off mode"},{"location":"opcodes/off_mode/#examples","text":"off_mode=fast off_mode=normal Note that the default is fast, and not normal, which means that \"normal isn't normal\", and if normal is needed, it will need to be set explicitly. Normal is useful for legato instruments where a fading in the previous samples while the new one fades in is desirable, and can also be useful for making hi-hat muting behavior sound a little more natural. With longer release times, off_mode =normal is also a way to manage buildup in instruments which have a very long sustain and can have the sound of several notes build up - for example, hammered dulcimers or ride cymbals.","title":"Examples"},{"location":"opcodes/off_shape/","text":"Like ampeg_release_shape , but for regions being muted by polyphony limitations. Examples off_shape=2.1 off_shape=-3.8","title":"Off shape"},{"location":"opcodes/off_shape/#examples","text":"off_shape=2.1 off_shape=-3.8","title":"Examples"},{"location":"opcodes/off_time/","text":"Examples off_time=0.1 off_time=0.05","title":"Off time"},{"location":"opcodes/off_time/#examples","text":"off_time=0.1 off_time=0.05","title":"Examples"},{"location":"opcodes/offby/","text":"When a new region with a group number equal to off_by plays, this region will be turned off. Examples off_by=3 off_by=334 This is used in conjunction with group to make things monophonic, but can also be used in other contexts where one sound should cause another to stop - for example, cymbal chokes. Practical considerations With the default for both group and off_by being 0, any instruments that leave these default values in place should in theory be monophonic. As a workaround, rgc sfz, Cakewalk players, BassMIDI and LinuxSampler implement special behavior where if group=0 and off_by=0, regions are not muted, and muting only happens for non-zero values of off_by. ARIA/Sforzando has a different workaround, with the default value of off_by being 4294967295. The actual minimum and maximum values are not currently known. Some players will treat numbers outside a certain range as equivalent to off_by=0, and ARIA/Sforzando will also do this with text strings. The behavior of non-integer numbers is also currently unknown. This makes it possible to use an extremely large number for one group/off_by combination, but it's obviously not recommended.","title":"Offby"},{"location":"opcodes/offby/#examples","text":"off_by=3 off_by=334 This is used in conjunction with group to make things monophonic, but can also be used in other contexts where one sound should cause another to stop - for example, cymbal chokes.","title":"Examples"},{"location":"opcodes/offby/#practical-considerations","text":"With the default for both group and off_by being 0, any instruments that leave these default values in place should in theory be monophonic. As a workaround, rgc sfz, Cakewalk players, BassMIDI and LinuxSampler implement special behavior where if group=0 and off_by=0, regions are not muted, and muting only happens for non-zero values of off_by. ARIA/Sforzando has a different workaround, with the default value of off_by being 4294967295. The actual minimum and maximum values are not currently known. Some players will treat numbers outside a certain range as equivalent to off_by=0, and ARIA/Sforzando will also do this with text strings. The behavior of non-integer numbers is also currently unknown. This makes it possible to use an extremely large number for one group/off_by combination, but it's obviously not recommended.","title":"Practical considerations"},{"location":"opcodes/offset/","text":"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. Note that this if this causes the region to play from a point where the value in the file is not zero, this may result in a click in the audio. When modulating offset with a MIDI CC, it's generally not possible to ensure the offset will always land on a near-zero point, so a small ampeg_attack value can be used to create a quick fade-in and avoid clicks. Also, when using a player with disk streaming, such as Sforzando/ARIA, which does not load entire samples to memory but instead preloads on only the start (usually about half a second, following the original Gigasampler method), it is generally not a good idea to use MIDI CC modulate offset by high values so high that they would cause the offset to exceeed this buffer. In practice, that means keeping offset_random no higher than 20000 or so on most systems. Examples offset=3000 offset=32425 offset_cc1=3000 offset_cc64=1388 Uses include: - having the player skip pre-attack pick noise in guitar samples - phase-aligning samples from various microphones - skipping the start of a saxophone sample in legato instruments offset_ccN is useful to specify an alternate sample start point based on MIDI controllers.","title":"Offset"},{"location":"opcodes/offset/#examples","text":"offset=3000 offset=32425 offset_cc1=3000 offset_cc64=1388 Uses include: - having the player skip pre-attack pick noise in guitar samples - phase-aligning samples from various microphones - skipping the start of a saxophone sample in legato instruments offset_ccN is useful to specify an alternate sample start point based on MIDI controllers.","title":"Examples"},{"location":"opcodes/offset_ccN/","text":"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. Note that this if this causes the region to play from a point where the value in the file is not zero, this may result in a click in the audio. When modulating offset with a MIDI CC, it's generally not possible to ensure the offset will always land on a near-zero point, so a small ampeg_attack value can be used to create a quick fade-in and avoid clicks. Also, when using a player with disk streaming, such as Sforzando/ARIA, which does not load entire samples to memory but instead preloads on only the start (usually about half a second, following the original Gigasampler method), it is generally not a good idea to use MIDI CC modulate offset by high values so high that they would cause the offset to exceeed this buffer. In practice, that means keeping offset_random no higher than 20000 or so on most systems. Examples offset=3000 offset=32425 offset_cc1=3000 offset_cc64=1388 Uses include: - having the player skip pre-attack pick noise in guitar samples - phase-aligning samples from various microphones - skipping the start of a saxophone sample in legato instruments offset_ccN is useful to specify an alternate sample start point based on MIDI controllers.","title":"offset ccN"},{"location":"opcodes/offset_ccN/#examples","text":"offset=3000 offset=32425 offset_cc1=3000 offset_cc64=1388 Uses include: - having the player skip pre-attack pick noise in guitar samples - phase-aligning samples from various microphones - skipping the start of a saxophone sample in legato instruments offset_ccN is useful to specify an alternate sample start point based on MIDI controllers.","title":"Examples"},{"location":"opcodes/offset_mode/","text":"An ARIA extension that can be used to set offset to a percentage of the total sample length, instead of being measured in sample units. It applies to both fixed offset and offset modulated by MIDI CC. Examples offset_mode=percent offset_oncc25=50","title":"Offset mode"},{"location":"opcodes/offset_mode/#examples","text":"offset_mode=percent offset_oncc25=50","title":"Examples"},{"location":"opcodes/offset_onccN/","text":"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. Note that this if this causes the region to play from a point where the value in the file is not zero, this may result in a click in the audio. When modulating offset with a MIDI CC, it's generally not possible to ensure the offset will always land on a near-zero point, so a small ampeg_attack value can be used to create a quick fade-in and avoid clicks. Also, when using a player with disk streaming, such as Sforzando/ARIA, which does not load entire samples to memory but instead preloads on only the start (usually about half a second, following the original Gigasampler method), it is generally not a good idea to use MIDI CC modulate offset by high values so high that they would cause the offset to exceeed this buffer. In practice, that means keeping offset_random no higher than 20000 or so on most systems. Examples offset=3000 offset=32425 offset_cc1=3000 offset_cc64=1388 Uses include: - having the player skip pre-attack pick noise in guitar samples - phase-aligning samples from various microphones - skipping the start of a saxophone sample in legato instruments offset_ccN is useful to specify an alternate sample start point based on MIDI controllers.","title":"offset onccN"},{"location":"opcodes/offset_onccN/#examples","text":"offset=3000 offset=32425 offset_cc1=3000 offset_cc64=1388 Uses include: - having the player skip pre-attack pick noise in guitar samples - phase-aligning samples from various microphones - skipping the start of a saxophone sample in legato instruments offset_ccN is useful to specify an alternate sample start point based on MIDI controllers.","title":"Examples"},{"location":"opcodes/offset_random/","text":"In many cases, will need to be used with a small ampeg_attack value to avoid clicks caused by the region playing starting with a point in the sample file where the value is non-zero. Computed when the note is triggered. Unipolar in ARIA, Cakewalk and rcg sfz. Note: when using a player with disk streaming, such as Sforzando/ARIA, which does not load entire samples to memory but instead preloads on only the start (usually about half a second, following the original Gigasampler method), it is generally not a good idea to make the offset_random values so high that they would cause the offset to exceeed this buffer. In practice, that means keeping offset_random no higher than 20000 or so on most systems. Examples offset_random=300 offset_random=100 Potential uses: randomizing the phase alignment of multiple samples playing in unison; playing a looped sample from a randomized start point in order to create natural variation.","title":"Offset random"},{"location":"opcodes/offset_random/#examples","text":"offset_random=300 offset_random=100 Potential uses: randomizing the phase alignment of multiple samples playing in unison; playing a looped sample from a randomized start point in order to create natural variation.","title":"Examples"},{"location":"opcodes/on_hiccN/","text":"Sample trigger on MIDI continuous control N. This does not involve playing any MIDI notes. Example on_locc64=127 on_hicc64=127 Region will play when a MIDI CC64 (sustain pedal) message with 127 value is received. So, basically, when the sustain pedal is pressed down, this region will play. This is useful with piano pedals - in the above example, on_loccN and on_hiccN could be used to trigger a mechanical noise sample, whether any keys are being played or not. It would not typically be used with hi-hat pedals, as most electronic drum kits will send a MIDI note when the pedal hits bottom. Practical Considerations on_locc/on_hicc effectively replaces the default trigger =attack. The behavior of a region which has on_locc/on_hicc and trigger=attack both explicitly specified is not defined by the SFZ specification, and that combination should be used. In ARIA if on_locc/on_hicc and trigger=release or trigger=release_key is used, the on_locc/on_hicc opcode will be effectively disregarded, and the region will behave like a normal release or release_key region.","title":"on_loccN / on_hiccN"},{"location":"opcodes/on_hiccN/#example","text":"on_locc64=127 on_hicc64=127 Region will play when a MIDI CC64 (sustain pedal) message with 127 value is received. So, basically, when the sustain pedal is pressed down, this region will play. This is useful with piano pedals - in the above example, on_loccN and on_hiccN could be used to trigger a mechanical noise sample, whether any keys are being played or not. It would not typically be used with hi-hat pedals, as most electronic drum kits will send a MIDI note when the pedal hits bottom.","title":"Example"},{"location":"opcodes/on_hiccN/#practical-considerations","text":"on_locc/on_hicc effectively replaces the default trigger =attack. The behavior of a region which has on_locc/on_hicc and trigger=attack both explicitly specified is not defined by the SFZ specification, and that combination should be used. In ARIA if on_locc/on_hicc and trigger=release or trigger=release_key is used, the on_locc/on_hicc opcode will be effectively disregarded, and the region will behave like a normal release or release_key region.","title":"Practical Considerations"},{"location":"opcodes/on_hihdccN/","text":"Example on_lohdcc64=1 on_hihdcc64=1","title":"on_lohdccN / on_hihdccN"},{"location":"opcodes/on_hihdccN/#example","text":"on_lohdcc64=1 on_hihdcc64=1","title":"Example"},{"location":"opcodes/on_loccN/","text":"Sample trigger on MIDI continuous control N. This does not involve playing any MIDI notes. Example on_locc64=127 on_hicc64=127 Region will play when a MIDI CC64 (sustain pedal) message with 127 value is received. So, basically, when the sustain pedal is pressed down, this region will play. This is useful with piano pedals - in the above example, on_loccN and on_hiccN could be used to trigger a mechanical noise sample, whether any keys are being played or not. It would not typically be used with hi-hat pedals, as most electronic drum kits will send a MIDI note when the pedal hits bottom. Practical Considerations on_locc/on_hicc effectively replaces the default trigger =attack. The behavior of a region which has on_locc/on_hicc and trigger=attack both explicitly specified is not defined by the SFZ specification, and that combination should be used. In ARIA if on_locc/on_hicc and trigger=release or trigger=release_key is used, the on_locc/on_hicc opcode will be effectively disregarded, and the region will behave like a normal release or release_key region.","title":"on_loccN / on_hiccN"},{"location":"opcodes/on_loccN/#example","text":"on_locc64=127 on_hicc64=127 Region will play when a MIDI CC64 (sustain pedal) message with 127 value is received. So, basically, when the sustain pedal is pressed down, this region will play. This is useful with piano pedals - in the above example, on_loccN and on_hiccN could be used to trigger a mechanical noise sample, whether any keys are being played or not. It would not typically be used with hi-hat pedals, as most electronic drum kits will send a MIDI note when the pedal hits bottom.","title":"Example"},{"location":"opcodes/on_loccN/#practical-considerations","text":"on_locc/on_hicc effectively replaces the default trigger =attack. The behavior of a region which has on_locc/on_hicc and trigger=attack both explicitly specified is not defined by the SFZ specification, and that combination should be used. In ARIA if on_locc/on_hicc and trigger=release or trigger=release_key is used, the on_locc/on_hicc opcode will be effectively disregarded, and the region will behave like a normal release or release_key region.","title":"Practical Considerations"},{"location":"opcodes/on_lohdccN/","text":"Example on_lohdcc64=1 on_hihdcc64=1","title":"on_lohdccN / on_hihdccN"},{"location":"opcodes/on_lohdccN/#example","text":"on_lohdcc64=1 on_hihdcc64=1","title":"Example"},{"location":"opcodes/oscillator/","text":"","title":"Oscillator"},{"location":"opcodes/oscillator_detune/","text":"","title":"Oscillator detune"},{"location":"opcodes/oscillator_detune_onccN/","text":"","title":"oscillator detune onccN"},{"location":"opcodes/oscillator_mod_depth/","text":"","title":"Oscillator mod depth"},{"location":"opcodes/oscillator_mod_depth_onccN/","text":"","title":"oscillator mod depth onccN"},{"location":"opcodes/oscillator_mod_smoothccN/","text":"","title":"oscillator mod smoothccN"},{"location":"opcodes/oscillator_mode/","text":"0: Normal or ring modulation, see also oscillator_multi 1: Phase modulation 2: Frequency modulation","title":"Oscillator mode"},{"location":"opcodes/oscillator_multi/","text":"Assuming oscillator_mode =0: If the value is 1, the region operates normally, in single oscillator mode. If the value is 2, the region operates in ring modulation mode. If between 3 and 9, this defines a unison, with the value being the number of oscillators. In this case, oscillator_detune must also be set to indicate the spread between the oscillators. Cakewalk unison Let m be the number of oscillators defined by oscillator_multi , and d the detune value defined by oscillator_detune . The array of m oscillators is tuned by multiplying d for each oscillator by its coefficient. Oscillator Coefficient 1 0 2 -1 3 1 4 -1/4 5 1/4 6 -1/2 7 1/2 8 -3/4 9 3/4 {: .table .table-sm .table-bordered .table-striped } The oscillators sum into left and right channels with declining linear gain, opposite for each channel. With i the number of the oscillator (starting at 1), the left gain is (i-1)/(m-1) , and the right gain is 1-((i-1)/(m-1)) . Example /* # Left: [4] 25 cents, 0 dB [3] -25 cents, -2.49878 dB [2] 100 cents, -6.0206 dB [1] -100 cents, -12.0412 dB [0] 0 cents, -inf dB # Right: [0] 0 cents, 0 dB [1] -100 cents, -2.49878 dB [2] 100 cents, -6.0206 dB [3] -25 cents, -12.0412 dB [4] 25 cents, -inf dB */ oscillator_detune=100 oscillator_multi=5","title":"Oscillator multi"},{"location":"opcodes/oscillator_multi/#cakewalk-unison","text":"Let m be the number of oscillators defined by oscillator_multi , and d the detune value defined by oscillator_detune . The array of m oscillators is tuned by multiplying d for each oscillator by its coefficient. Oscillator Coefficient 1 0 2 -1 3 1 4 -1/4 5 1/4 6 -1/2 7 1/2 8 -3/4 9 3/4 {: .table .table-sm .table-bordered .table-striped } The oscillators sum into left and right channels with declining linear gain, opposite for each channel. With i the number of the oscillator (starting at 1), the left gain is (i-1)/(m-1) , and the right gain is 1-((i-1)/(m-1)) .","title":"Cakewalk unison"},{"location":"opcodes/oscillator_multi/#example","text":"/* # Left: [4] 25 cents, 0 dB [3] -25 cents, -2.49878 dB [2] 100 cents, -6.0206 dB [1] -100 cents, -12.0412 dB [0] 0 cents, -inf dB # Right: [0] 0 cents, 0 dB [1] -100 cents, -2.49878 dB [2] 100 cents, -6.0206 dB [3] -25 cents, -12.0412 dB [4] 25 cents, -inf dB */ oscillator_detune=100 oscillator_multi=5","title":"Example"},{"location":"opcodes/oscillator_phase/","text":"","title":"Oscillator phase"},{"location":"opcodes/oscillator_quality/","text":"","title":"Oscillator quality"},{"location":"opcodes/oscillator_table_size/","text":"","title":"Oscillator table size"},{"location":"opcodes/output/","text":"If the player doesn't feature multiple outputs (which most currently do not), this opcode is ignored. Examples output=0 output=4","title":"Output"},{"location":"opcodes/output/#examples","text":"output=0 output=4","title":"Examples"},{"location":"opcodes/pan/","text":"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. Examples pan=-30.5 pan=0 pan=43","title":"Pan"},{"location":"opcodes/pan/#examples","text":"pan=-30.5 pan=0 pan=43","title":"Examples"},{"location":"opcodes/pan_ccN/","text":"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. Examples pan=-30.5 pan=0 pan=43","title":"pan ccN"},{"location":"opcodes/pan_ccN/#examples","text":"pan=-30.5 pan=0 pan=43","title":"Examples"},{"location":"opcodes/pan_curveccN/","text":"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. Examples pan=-30.5 pan=0 pan=43","title":"pan curveccN"},{"location":"opcodes/pan_curveccN/#examples","text":"pan=-30.5 pan=0 pan=43","title":"Examples"},{"location":"opcodes/pan_keycenter/","text":"In this key, pan_keytrack will have no effect. Examples pan_keycenter=48 amp_keycenter=65","title":"Pan keycenter"},{"location":"opcodes/pan_keycenter/#examples","text":"pan_keycenter=48 amp_keycenter=65","title":"Examples"},{"location":"opcodes/pan_keytrack/","text":"Positive values mean higher notes are panned more to the right, negative means higher notes are panned more to the left. In most cases, this will be a small value. The note at which this is centered (at which the effect of pan_keytrack is 0) is set using pan_keycenter . Examples pan_keytrack=8 pan_keytrack=-1.3","title":"Pan keytrack"},{"location":"opcodes/pan_keytrack/#examples","text":"pan_keytrack=8 pan_keytrack=-1.3","title":"Examples"},{"location":"opcodes/pan_law/","text":"Allowed values are balance and mma. In earlier versions of ARIA, no_law was also supported but that was later deprecated, and if no_law is specified then balance will be used. Examples pan_law=balance pan_law=mma","title":"Pan law"},{"location":"opcodes/pan_law/#examples","text":"pan_law=balance pan_law=mma","title":"Examples"},{"location":"opcodes/pan_onccN/","text":"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. Examples pan=-30.5 pan=0 pan=43","title":"pan onccN"},{"location":"opcodes/pan_onccN/#examples","text":"pan=-30.5 pan=0 pan=43","title":"Examples"},{"location":"opcodes/pan_random/","text":"","title":"Pan random"},{"location":"opcodes/pan_smoothccN/","text":"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. Examples pan=-30.5 pan=0 pan=43","title":"pan smoothccN"},{"location":"opcodes/pan_smoothccN/#examples","text":"pan=-30.5 pan=0 pan=43","title":"Examples"},{"location":"opcodes/pan_stepccN/","text":"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. Examples pan=-30.5 pan=0 pan=43","title":"pan stepccN"},{"location":"opcodes/pan_stepccN/#examples","text":"pan=-30.5 pan=0 pan=43","title":"Examples"},{"location":"opcodes/pan_veltrack/","text":"With positive values, higher-velocity notes will be panned more to the right, with negative values more to the left. Examples pan_veltrack=100 pan_veltrack=-40","title":"Pan veltrack"},{"location":"opcodes/pan_veltrack/#examples","text":"pan_veltrack=100 pan_veltrack=-40","title":"Examples"},{"location":"opcodes/param_offset/","text":"Multiples of 100 seem most convenient, because with param_offset=300 that would put the first parameter on 300, second on 301, third on 302 and so on, but other integer values can also be used. These then can be used like MIDI CC, but with numbers above 127. In practice with the Sforzando SFZ player, it appears that values that result in all the effect parameters falling between 257 and 500 work best. Higher numbers work, but may not be accessible to DAWs for automation etc. Examples param_offset=300 param_offset=400 param_offset=412 This is how this can actually be used with Sforzando's built in MDA Limiter \u2039 effect \u203a: label_cc400=Limiter Thresh label_cc401=Limiter Level set_cc400=63 set_cc401=63 param_offset=400 type=com.mda.Limiter","title":"Param offset"},{"location":"opcodes/param_offset/#examples","text":"param_offset=300 param_offset=400 param_offset=412 This is how this can actually be used with Sforzando's built in MDA Limiter \u2039 effect \u203a: label_cc400=Limiter Thresh label_cc401=Limiter Level set_cc400=63 set_cc401=63 param_offset=400 type=com.mda.Limiter","title":"Examples"},{"location":"opcodes/phase/","text":"Example phase=invert Practical Considerations Based on testing in Sforzando, this works with both samples and generated sound such as sample=sine , except for sample=noise . Noise might still be inverted, but as it's randomly generated separately for each region, playing a noise region and a phase-inverted noise region at once will still result in noise, not silence.","title":"Phase"},{"location":"opcodes/phase/#example","text":"phase=invert","title":"Example"},{"location":"opcodes/phase/#practical-considerations","text":"Based on testing in Sforzando, this works with both samples and generated sound such as sample=sine , except for sample=noise . Noise might still be inverted, but as it's randomly generated separately for each region, playing a noise region and a phase-inverted noise region at once will still result in noise, not silence.","title":"Practical Considerations"},{"location":"opcodes/phaser_depth/","text":"Used under the \u2039effect\u203a header, with type = phaser .","title":"Phaser depth"},{"location":"opcodes/phaser_depth_onccN/","text":"Used under the \u2039effect\u203a header, with type = phaser .","title":"phaser depth onccN"},{"location":"opcodes/phaser_feedback/","text":"Used under the \u2039effect\u203a header, with type = phaser .","title":"Phaser feedback"},{"location":"opcodes/phaser_feedback_onccN/","text":"Used under the \u2039effect\u203a header, with type = phaser .","title":"phaser feedback onccN"},{"location":"opcodes/phaser_freq/","text":"Used under the \u2039effect\u203a header, with type = phaser .","title":"Phaser freq"},{"location":"opcodes/phaser_freq_onccN/","text":"Used under the \u2039effect\u203a header, with type = phaser .","title":"phaser freq onccN"},{"location":"opcodes/phaser_phase_onccN/","text":"Used under the \u2039effect\u203a header, with type = phaser .","title":"phaser phase onccN"},{"location":"opcodes/phaser_stages/","text":"Used under the \u2039effect\u203a header, with type = phaser .","title":"Phaser stages"},{"location":"opcodes/phaser_waveform/","text":"Used under the \u2039effect\u203a header, with type = phaser .","title":"Phaser waveform"},{"location":"opcodes/phaser_wet/","text":"Used under the \u2039effect\u203a header, with type = phaser .","title":"Phaser wet"},{"location":"opcodes/phaser_wet_onccN/","text":"Used under the \u2039effect\u203a header, with type = phaser .","title":"phaser wet onccN"},{"location":"opcodes/pitch/","text":"Range of tune in the SFZ1 spec is \u00b11 semitone, from -100 to 100, though at least in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents. Examples tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1 Practical Considerations In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"tune / pitch"},{"location":"opcodes/pitch/#examples","text":"tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1","title":"Examples"},{"location":"opcodes/pitch/#practical-considerations","text":"In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"Practical Considerations"},{"location":"opcodes/pitch_attack/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Pitch attack"},{"location":"opcodes/pitch_attack/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Examples"},{"location":"opcodes/pitch_curveccN/","text":"Range of tune in the SFZ1 spec is \u00b11 semitone, from -100 to 100, though at least in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents. Examples tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1 Practical Considerations In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"tune / pitch"},{"location":"opcodes/pitch_curveccN/#examples","text":"tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1","title":"Examples"},{"location":"opcodes/pitch_curveccN/#practical-considerations","text":"In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"Practical Considerations"},{"location":"opcodes/pitch_decay/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Pitch decay"},{"location":"opcodes/pitch_decay/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/pitch_delay/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"Pitch delay"},{"location":"opcodes/pitch_delay/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/pitch_depth/","text":"For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. -12000 cents is 10 octaves. For ampeg, this should not normally be used. Examples fileg_depth=1200 pitcheg_depth=-100","title":"Pitch depth"},{"location":"opcodes/pitch_depth/#examples","text":"fileg_depth=1200 pitcheg_depth=-100","title":"Examples"},{"location":"opcodes/pitch_hold/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"Pitch hold"},{"location":"opcodes/pitch_hold/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/pitch_keycenter/","text":"For samples which only need to be played at their natural pitch and triggered by one specific MIDI note, it's generally easier to use key instead. Cases using both pitch_keycenter and key are described in more detail under key. sample as value Starting with SFZ v2, it's possible to set pitch_keycenter to sample (pitch_keycenter=sample). This causes the SFZ player to look in the sample file metadata for the keycenter value. If pitch_keycenter is set to sample and the file metadata does not contain pitch information, it defaults to MIDI note 0. If samples contain good quality metadata, setting pitch_keycenter to sample can be simpler than setting the keycenter for each individual sample. If pitch_keycenter is set to sample and key is also used, the behavior depends on the sampler. ARIA uses the value set using the key opcode, while rgc sfz and Cakewalk products use the value from the sample metadata. ARIA also supports setting pitch_keycenter to sample only at the level, not at or higher levels. Examples pitch_keycenter=56 pitch_keycenter=c#2 pitch_keycenter=sample","title":"Pitch keycenter"},{"location":"opcodes/pitch_keycenter/#sample-as-value","text":"Starting with SFZ v2, it's possible to set pitch_keycenter to sample (pitch_keycenter=sample). This causes the SFZ player to look in the sample file metadata for the keycenter value. If pitch_keycenter is set to sample and the file metadata does not contain pitch information, it defaults to MIDI note 0. If samples contain good quality metadata, setting pitch_keycenter to sample can be simpler than setting the keycenter for each individual sample. If pitch_keycenter is set to sample and key is also used, the behavior depends on the sampler. ARIA uses the value set using the key opcode, while rgc sfz and Cakewalk products use the value from the sample metadata. ARIA also supports setting pitch_keycenter to sample only at the level, not at or higher levels.","title":"sample as value"},{"location":"opcodes/pitch_keycenter/#examples","text":"pitch_keycenter=56 pitch_keycenter=c#2 pitch_keycenter=sample","title":"Examples"},{"location":"opcodes/pitch_keytrack/","text":"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. Examples pitch_keytrack=20 pitch_keytrack=0 Most of the time, this will either be 100 (default) or 0, but intermediate values, values above 100 or negative values are occasionally useful.","title":"Pitch keytrack"},{"location":"opcodes/pitch_keytrack/#examples","text":"pitch_keytrack=20 pitch_keytrack=0 Most of the time, this will either be 100 (default) or 0, but intermediate values, values above 100 or negative values are occasionally useful.","title":"Examples"},{"location":"opcodes/pitch_onccN/","text":"Range of tune in the SFZ1 spec is \u00b11 semitone, from -100 to 100, though at least in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents. Examples tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1 Practical Considerations In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"tune / pitch"},{"location":"opcodes/pitch_onccN/#examples","text":"tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1","title":"Examples"},{"location":"opcodes/pitch_onccN/#practical-considerations","text":"In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"Practical Considerations"},{"location":"opcodes/pitch_random/","text":"Examples Computed when the note is triggered, remains the same for that region for as long as the region plays. pitch_random=10 pitch_random=400 Useful for humanizing the pitch of instruments with naturally imprecise intonation, especially when playing multiple regions in unison. Practical Considerations In ARIA this is unipolar, and equivalent to pitch_oncc135 . So, if pitch_random is set to 20, the region will play at pitches tuned by an amount in the range from 0 cents to +20 cents. In order to get pitch to fluctuate between -20 and +20 cents, there would be two ways to get there, either by applying a fixed shift of -20 cents and a random shift of up to 40 cents: pitch=-20 pitch_random=40 Or use CC136, which is bipolar random from -1 to 1: pitch_oncc136=20 In rcg sfz and Cakewalk, this is bipolar.","title":"Pitch random"},{"location":"opcodes/pitch_random/#examples","text":"Computed when the note is triggered, remains the same for that region for as long as the region plays. pitch_random=10 pitch_random=400 Useful for humanizing the pitch of instruments with naturally imprecise intonation, especially when playing multiple regions in unison.","title":"Examples"},{"location":"opcodes/pitch_random/#practical-considerations","text":"In ARIA this is unipolar, and equivalent to pitch_oncc135 . So, if pitch_random is set to 20, the region will play at pitches tuned by an amount in the range from 0 cents to +20 cents. In order to get pitch to fluctuate between -20 and +20 cents, there would be two ways to get there, either by applying a fixed shift of -20 cents and a random shift of up to 40 cents: pitch=-20 pitch_random=40 Or use CC136, which is bipolar random from -1 to 1: pitch_oncc136=20 In rcg sfz and Cakewalk, this is bipolar.","title":"Practical Considerations"},{"location":"opcodes/pitch_release/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, pitch_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, pitch_release is used when off_mode is set to normal.","title":"Pitch release"},{"location":"opcodes/pitch_release/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, pitch_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, pitch_release is used when off_mode is set to normal.","title":"Examples"},{"location":"opcodes/pitch_smoothccN/","text":"Range of tune in the SFZ1 spec is \u00b11 semitone, from -100 to 100, though at least in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents. Examples tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1 Practical Considerations In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"tune / pitch"},{"location":"opcodes/pitch_smoothccN/#examples","text":"tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1","title":"Examples"},{"location":"opcodes/pitch_smoothccN/#practical-considerations","text":"In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"Practical Considerations"},{"location":"opcodes/pitch_stepccN/","text":"Range of tune in the SFZ1 spec is \u00b11 semitone, from -100 to 100, though at least in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents. Examples tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1 Practical Considerations In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"tune / pitch"},{"location":"opcodes/pitch_stepccN/#examples","text":"tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1","title":"Examples"},{"location":"opcodes/pitch_stepccN/#practical-considerations","text":"In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"Practical Considerations"},{"location":"opcodes/pitch_sustain/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10","title":"Pitch sustain"},{"location":"opcodes/pitch_sustain/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10","title":"Examples"},{"location":"opcodes/pitch_vel2attack/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Pitch vel2attack"},{"location":"opcodes/pitch_vel2attack/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Examples"},{"location":"opcodes/pitch_vel2decay/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Pitch vel2decay"},{"location":"opcodes/pitch_vel2decay/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/pitch_vel2delay/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"Pitch vel2delay"},{"location":"opcodes/pitch_vel2delay/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/pitch_vel2depth/","text":"For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. -12000 cents is 10 octaves. For ampeg, this should not normally be used. Examples fileg_depth=1200 pitcheg_depth=-100","title":"Pitch vel2depth"},{"location":"opcodes/pitch_vel2depth/#examples","text":"fileg_depth=1200 pitcheg_depth=-100","title":"Examples"},{"location":"opcodes/pitch_vel2hold/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"Pitch vel2hold"},{"location":"opcodes/pitch_vel2hold/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/pitch_vel2release/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, pitch_vel2release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, pitch_vel2release is used when off_mode is set to normal.","title":"Pitch vel2release"},{"location":"opcodes/pitch_vel2release/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, pitch_vel2release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, pitch_vel2release is used when off_mode is set to normal.","title":"Examples"},{"location":"opcodes/pitch_vel2sustain/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10","title":"Pitch vel2sustain"},{"location":"opcodes/pitch_vel2sustain/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10","title":"Examples"},{"location":"opcodes/pitch_veltrack/","text":"Examples pitch_veltrack=0 pitch_veltrack=1200 This can be useful when trying to emulate dynamic response on drum samples recorded at only one velocity.","title":"Pitch veltrack"},{"location":"opcodes/pitch_veltrack/#examples","text":"pitch_veltrack=0 pitch_veltrack=1200 This can be useful when trying to emulate dynamic response on drum samples recorded at only one velocity.","title":"Examples"},{"location":"opcodes/pitcheg_attack/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Pitcheg attack"},{"location":"opcodes/pitcheg_attack/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Examples"},{"location":"opcodes/pitcheg_attack_curveccN/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"pitcheg attack curveccN"},{"location":"opcodes/pitcheg_attack_curveccN/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Examples"},{"location":"opcodes/pitcheg_attack_onccN/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"pitcheg attack onccN"},{"location":"opcodes/pitcheg_attack_onccN/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Examples"},{"location":"opcodes/pitcheg_attack_shape/","text":"0 is linear. Positive values are slower curves (that means the envelope will initially not fade in much, and most of the fade in will happen towards the end of the attack period) and negative values faster (quick initial fade in with the latter part of the attack stage fading in less). Past 10 or -10, there's little difference - at that point, the envelope is practically a horizontal line and a vertical line (if positive) or a vertical line followed by a horizontal line (if negative). Examples ampeg_attack_shape=2.1 ampeg_attack_shape=-3.8","title":"Pitcheg attack shape"},{"location":"opcodes/pitcheg_attack_shape/#examples","text":"ampeg_attack_shape=2.1 ampeg_attack_shape=-3.8","title":"Examples"},{"location":"opcodes/pitcheg_decay/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Pitcheg decay"},{"location":"opcodes/pitcheg_decay/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/pitcheg_decay_curveccN/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"pitcheg decay curveccN"},{"location":"opcodes/pitcheg_decay_curveccN/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/pitcheg_decay_onccN/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"pitcheg decay onccN"},{"location":"opcodes/pitcheg_decay_onccN/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/pitcheg_decay_shape/","text":"0 is linear, positive values are slower curves (that means the envelope will initially not decay out much, and most of the decay will happen towards the end of the decay period) and negative values faster (quick initial decay with quiet tail decaying more slowly). Past 10 or -10, there's little difference - at that point, the envelope is practically a horizontal line and a vertical line (if positive) or a vertical line followed by a horizontal line (if negative). Examples ampeg_decay_shape=2.1 ampeg_decay_shape=-3.8","title":"Pitcheg decay shape"},{"location":"opcodes/pitcheg_decay_shape/#examples","text":"ampeg_decay_shape=2.1 ampeg_decay_shape=-3.8","title":"Examples"},{"location":"opcodes/pitcheg_decay_zero/","text":"When set to 1, the decay slope is fixed, and the higher the sustain level of the envelope, the less time the decay stage will actually take. Changing pitcheg_sustain will change the actual duration of the decay stage as well, up to a maximum of the full pitcheg_decay value at pitcheg_sustain equal to 0. Setting this to 0 will make the decay always happen during the entire time period specified by pitcheg_decay , regardless of the current pitcheg_sustain level. Examples pitcheg_decay_zero=0 pitcheg_decay_zero=1","title":"Pitcheg decay zero"},{"location":"opcodes/pitcheg_decay_zero/#examples","text":"pitcheg_decay_zero=0 pitcheg_decay_zero=1","title":"Examples"},{"location":"opcodes/pitcheg_delay/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"Pitcheg delay"},{"location":"opcodes/pitcheg_delay/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/pitcheg_delay_curveccN/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"pitcheg delay curveccN"},{"location":"opcodes/pitcheg_delay_curveccN/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/pitcheg_delay_onccN/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"pitcheg delay onccN"},{"location":"opcodes/pitcheg_delay_onccN/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/pitcheg_depth/","text":"For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. -12000 cents is 10 octaves. For ampeg, this should not normally be used. Examples fileg_depth=1200 pitcheg_depth=-100","title":"Pitcheg depth"},{"location":"opcodes/pitcheg_depth/#examples","text":"fileg_depth=1200 pitcheg_depth=-100","title":"Examples"},{"location":"opcodes/pitcheg_depth_curveccN/","text":"For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. -12000 cents is 10 octaves. For ampeg, this should not normally be used. Examples fileg_depth=1200 pitcheg_depth=-100","title":"pitcheg depth curveccN"},{"location":"opcodes/pitcheg_depth_curveccN/#examples","text":"fileg_depth=1200 pitcheg_depth=-100","title":"Examples"},{"location":"opcodes/pitcheg_depth_onccN/","text":"For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. -12000 cents is 10 octaves. For ampeg, this should not normally be used. Examples fileg_depth=1200 pitcheg_depth=-100","title":"pitcheg depth onccN"},{"location":"opcodes/pitcheg_depth_onccN/#examples","text":"fileg_depth=1200 pitcheg_depth=-100","title":"Examples"},{"location":"opcodes/pitcheg_depthccN/","text":"For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. -12000 cents is 10 octaves. For ampeg, this should not normally be used. Examples fileg_depth=1200 pitcheg_depth=-100","title":"pitcheg depthccN"},{"location":"opcodes/pitcheg_depthccN/#examples","text":"fileg_depth=1200 pitcheg_depth=-100","title":"Examples"},{"location":"opcodes/pitcheg_dynamic/","text":"When 1, causes envelope segment durations and sustain level to be recalculated when a MIDI CC message modulating those envelopes is received. When 0, envelope segment durations and sustain level are calculated only at the start of the particular envelope segment. Examples pitcheg_dynamic=1 pitcheg_dynamic=0","title":"Pitcheg dynamic"},{"location":"opcodes/pitcheg_dynamic/#examples","text":"pitcheg_dynamic=1 pitcheg_dynamic=0","title":"Examples"},{"location":"opcodes/pitcheg_hold/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"Pitcheg hold"},{"location":"opcodes/pitcheg_hold/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/pitcheg_hold_curveccN/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"pitcheg hold curveccN"},{"location":"opcodes/pitcheg_hold_curveccN/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/pitcheg_hold_onccN/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"pitcheg hold onccN"},{"location":"opcodes/pitcheg_hold_onccN/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/pitcheg_release/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, pitcheg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, pitcheg_release is used when off_mode is set to normal.","title":"Pitcheg release"},{"location":"opcodes/pitcheg_release/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, pitcheg_release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, pitcheg_release is used when off_mode is set to normal.","title":"Examples"},{"location":"opcodes/pitcheg_release_curveccN/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, pitcheg_release_curveccN will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, pitcheg_release_curveccN is used when off_mode is set to normal.","title":"pitcheg release curveccN"},{"location":"opcodes/pitcheg_release_curveccN/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, pitcheg_release_curveccN will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, pitcheg_release_curveccN is used when off_mode is set to normal.","title":"Examples"},{"location":"opcodes/pitcheg_release_onccN/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, pitcheg_release_onccN will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, pitcheg_release_onccN is used when off_mode is set to normal.","title":"pitcheg release onccN"},{"location":"opcodes/pitcheg_release_onccN/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, pitcheg_release_onccN will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, pitcheg_release_onccN is used when off_mode is set to normal.","title":"Examples"},{"location":"opcodes/pitcheg_release_shape/","text":"0 is linear, positive values are slower curves (that means the envelope will initially not fade out much, and most of the fade will happen towards the end of the release period) and negative values faster (quick initial fadeout with quiet tail fading out more slowly). Past 10 or -10, there's little difference - at that point, the envelope is practically a horizontal line and a vertical line (if positive) or a vertical line followed by a horizontal line (if negative). Examples ampeg_release_shape=2.1 ampeg_release_shape=-3.8","title":"Pitcheg release shape"},{"location":"opcodes/pitcheg_release_shape/#examples","text":"ampeg_release_shape=2.1 ampeg_release_shape=-3.8","title":"Examples"},{"location":"opcodes/pitcheg_release_zero/","text":"When 1, indicates release time is the time it would take to get from 0dBs to -oo, NOT the time to get from the current sustain to zero. In other words, under default behavior, the release time is fixed, while setting this to 1 makes the release slope fixed but time will be shorter when sustain level is lower. Examples pitcheg_release_zero=1 pitcheg_release_zero=0","title":"Pitcheg release zero"},{"location":"opcodes/pitcheg_release_zero/#examples","text":"pitcheg_release_zero=1 pitcheg_release_zero=0","title":"Examples"},{"location":"opcodes/pitcheg_start/","text":"Examples ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"Pitcheg start"},{"location":"opcodes/pitcheg_start/#examples","text":"ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"Examples"},{"location":"opcodes/pitcheg_start_curveccN/","text":"Examples ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"pitcheg start curveccN"},{"location":"opcodes/pitcheg_start_curveccN/#examples","text":"ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"Examples"},{"location":"opcodes/pitcheg_start_onccN/","text":"Examples ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"pitcheg start onccN"},{"location":"opcodes/pitcheg_start_onccN/#examples","text":"ampeg_start=20 fileg_start=100 Setting this to 100 should have the same effect as setting the attack time to 0, and adding the attack time to the hold time. Note that in some cases (when the sample starts playing from a point which is not near zero), setting this to a non-zero value for ampeg_start may result in sample playback starting with an audible click.","title":"Examples"},{"location":"opcodes/pitcheg_sustain/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10","title":"Pitcheg sustain"},{"location":"opcodes/pitcheg_sustain/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10","title":"Examples"},{"location":"opcodes/pitcheg_sustain_curveccN/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10","title":"pitcheg sustain curveccN"},{"location":"opcodes/pitcheg_sustain_curveccN/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10","title":"Examples"},{"location":"opcodes/pitcheg_sustain_onccN/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10","title":"pitcheg sustain onccN"},{"location":"opcodes/pitcheg_sustain_onccN/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10","title":"Examples"},{"location":"opcodes/pitcheg_vel2attack/","text":"Examples ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Pitcheg vel2attack"},{"location":"opcodes/pitcheg_vel2attack/#examples","text":"ampeg_attack=1.2 fileg_attack=0.1 These are very frequently used, especially with amplifier envelopes. ampeg_attack is the standard \"A\" in the basic ADSR volume envelope. fileg_attack is key to 303-style basses.","title":"Examples"},{"location":"opcodes/pitcheg_vel2decay/","text":"Examples ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Pitcheg vel2decay"},{"location":"opcodes/pitcheg_vel2decay/#examples","text":"ampeg_decay=1.5 fileg_decay=0.5 This should normally not be shorter than the corresponding envelope's release time.","title":"Examples"},{"location":"opcodes/pitcheg_vel2delay/","text":"This is the time elapsed from note on to the start of the Attack stage. If both envelope delay and the general delay or delay_random are used in the same region, the envelope delays start after delay and delay_random have both completed their duration. Examples fileg_delay=0.004 ampeg_delay=0.05","title":"Pitcheg vel2delay"},{"location":"opcodes/pitcheg_vel2delay/#examples","text":"fileg_delay=0.004 ampeg_delay=0.05","title":"Examples"},{"location":"opcodes/pitcheg_vel2depth/","text":"For pitcheg and fileg, this is in cents, and can range from -12000 to 12000. -12000 cents is 10 octaves. For ampeg, this should not normally be used. Examples fileg_depth=1200 pitcheg_depth=-100","title":"Pitcheg vel2depth"},{"location":"opcodes/pitcheg_vel2depth/#examples","text":"fileg_depth=1200 pitcheg_depth=-100","title":"Examples"},{"location":"opcodes/pitcheg_vel2hold/","text":"During the hold stage, EG output will remain at its maximum value. Examples ampeg_hold=1.5 fileg_hold=0.1","title":"Pitcheg vel2hold"},{"location":"opcodes/pitcheg_vel2hold/#examples","text":"ampeg_hold=1.5 fileg_hold=0.1","title":"Examples"},{"location":"opcodes/pitcheg_vel2release/","text":"Examples ampeg_release=1.34 fileg_release=0.2 In many instruments, pitcheg_vel2release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, pitcheg_vel2release is used when off_mode is set to normal.","title":"Pitcheg vel2release"},{"location":"opcodes/pitcheg_vel2release/#examples","text":"ampeg_release=1.34 fileg_release=0.2 In many instruments, pitcheg_vel2release will need to be set to avoid the sound cutting off unrealistically quickly when a note ends (unless the instrument uses loop_mode set to one_shot , in which case the entire sample will always play) even if amplifier envelopes are not used otherwise to shape the sound. Also, pitcheg_vel2release is used when off_mode is set to normal.","title":"Examples"},{"location":"opcodes/pitcheg_vel2sustain/","text":"Examples ampeg_sustain=40.34 pitcheg_sustain=10","title":"Pitcheg vel2sustain"},{"location":"opcodes/pitcheg_vel2sustain/#examples","text":"ampeg_sustain=40.34 pitcheg_sustain=10","title":"Examples"},{"location":"opcodes/pitchlfo_delay/","text":"Examples pitchlfo_delay=1 amplfo_delay=0.4 This is very useful, as many instruments and vocals don't trigger vibrato immediately when a note starts, but slightly later.","title":"Pitchlfo delay"},{"location":"opcodes/pitchlfo_delay/#examples","text":"pitchlfo_delay=1 amplfo_delay=0.4 This is very useful, as many instruments and vocals don't trigger vibrato immediately when a note starts, but slightly later.","title":"Examples"},{"location":"opcodes/pitchlfo_depth/","text":"Examples amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Pitchlfo depth"},{"location":"opcodes/pitchlfo_depth/#examples","text":"amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Examples"},{"location":"opcodes/pitchlfo_depth_onccN/","text":"Examples amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"pitchlfo depth onccN"},{"location":"opcodes/pitchlfo_depth_onccN/#examples","text":"amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Examples"},{"location":"opcodes/pitchlfo_depthccN/","text":"Examples amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"pitchlfo depthccN"},{"location":"opcodes/pitchlfo_depthccN/#examples","text":"amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Examples"},{"location":"opcodes/pitchlfo_depthchanaft/","text":"Examples amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Pitchlfo depthchanaft"},{"location":"opcodes/pitchlfo_depthchanaft/#examples","text":"amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Examples"},{"location":"opcodes/pitchlfo_depthpolyaft/","text":"Examples amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Pitchlfo depthpolyaft"},{"location":"opcodes/pitchlfo_depthpolyaft/#examples","text":"amplfo_depth=1 pitchlfo_depth=40 For amplifier LFO, this is measured in decibels and can range from -10 to 10. For pitch and filter LFO, this is measured in cents and can range from -1200 to 1200. Whether these values are negative or positive, the LFO will oscillate both up and down around the center value of the amplitude, pitch or filter cutoff - a negative sign for depth only inverts the phase. For cases where an LFO needs to oscillate only in one direction from the normal value (for example: typical guitar vibrato which only bends the pitch upwards, or saxophone vibrato which only bends the pitch down), an offset to the center pitch value will need to be added using the appropriate opcode such as tune. In SFZ2 LFOs add the ability to set the starting phase, making this much easier.","title":"Examples"},{"location":"opcodes/pitchlfo_fade/","text":"Examples amplfo_fade=1 pitchfo_fade=0.4 Useful for vibrato which grows in intensity gradually, as commonly performed by bowed string players.","title":"Pitchlfo fade"},{"location":"opcodes/pitchlfo_fade/#examples","text":"amplfo_fade=1 pitchfo_fade=0.4 Useful for vibrato which grows in intensity gradually, as commonly performed by bowed string players.","title":"Examples"},{"location":"opcodes/pitchlfo_freq/","text":"Examples amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Pitchlfo freq"},{"location":"opcodes/pitchlfo_freq/#examples","text":"amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Examples"},{"location":"opcodes/pitchlfo_freqccN/","text":"Examples amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"pitchlfo freqccN"},{"location":"opcodes/pitchlfo_freqccN/#examples","text":"amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Examples"},{"location":"opcodes/pitchlfo_freqchanaft/","text":"Examples amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Pitchlfo freqchanaft"},{"location":"opcodes/pitchlfo_freqchanaft/#examples","text":"amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Examples"},{"location":"opcodes/pitchlfo_freqpolyaft/","text":"Examples amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Pitchlfo freqpolyaft"},{"location":"opcodes/pitchlfo_freqpolyaft/#examples","text":"amplfo_freq=0.4 amplfo_freq=10 Range is 0 to 20 Hertz, according to the SFZ spec, which means audio-rate LFOs, similar to what is found in some classic hardware synthesizers, are not possible. Some players may in fact be able to utilize higher rates, but 20 Hz is the upper limit required by the SFZ specification.","title":"Examples"},{"location":"opcodes/polyphony/","text":"This can be applied to all regions under a header such as \u2039global\u203a or \u2039group\u203a or to regions which have the same group opcode value set. The below examples all use the group opcode, not the group header, but that is not the only way to use the polyphony opcode. In addition to positive integer values, polyphony can also be set to one of three special text values. With all of these, the polyphony limit is set to 1, and the following behavior is also triggered: legato_high : the highest note played sounds and lower notes are muted. legato_last : the most recent note played sounds (typical legato behavior). legato_low : the lowest note played sounds. Examples polyphony=12 polyphony=5 polyphony=legato_low An example limiting a crash cymbal to four polyphony voices. group=1 polyphony=4 key=49 sample=crash.wav Here is a ride limited to a total of seven voices, with both bow and bell articulations sharing the same polyphony group and the same seven-voice limit. group=2 polyphony=7 key=51 sample=ride_bow.wav key=53 sample=ride_bell.wav This opcode is useful for controlling sound buildup, limiting resource use, and for emulating the behavior of vintage keyboards with limited polyphony. It's also possible to use note_polyphony instead when all the sounds we want to mute each other are mapped to the same pitch, or use both in combination. An alternative for controlling sound buildup is using ampeg_release with off_mode set to normal. It's also possible to have a group with limited polyphony which can be muted by another group, such as a cymbal with edge chokes. group=2 off_by=3 polyphony=7 key=51 sample=ride_bow.wav key=53 sample=ride_bell.wav group=3 key=54 sample=ride.choke.wav An alternative is note_polyphony . The difference between applying polyphony across one note and using note_polyphony is that note_polyphony also uses note_selfmask which opens up some additional options. With the default setting, lower-velocity notes do not mute higher-velocity ones. This is useful for long-ringing instruments such as piano with the sustain pedal pressed down or hammered dulcimer. It can also be useful for cymbals, although especially with hi-hats, those will often use different notes for different articulations, and note_polyphony would be limited to working within an articulation.","title":"Polyphony"},{"location":"opcodes/polyphony/#examples","text":"polyphony=12 polyphony=5 polyphony=legato_low An example limiting a crash cymbal to four polyphony voices. group=1 polyphony=4 key=49 sample=crash.wav Here is a ride limited to a total of seven voices, with both bow and bell articulations sharing the same polyphony group and the same seven-voice limit. group=2 polyphony=7 key=51 sample=ride_bow.wav key=53 sample=ride_bell.wav This opcode is useful for controlling sound buildup, limiting resource use, and for emulating the behavior of vintage keyboards with limited polyphony. It's also possible to use note_polyphony instead when all the sounds we want to mute each other are mapped to the same pitch, or use both in combination. An alternative for controlling sound buildup is using ampeg_release with off_mode set to normal. It's also possible to have a group with limited polyphony which can be muted by another group, such as a cymbal with edge chokes. group=2 off_by=3 polyphony=7 key=51 sample=ride_bow.wav key=53 sample=ride_bell.wav group=3 key=54 sample=ride.choke.wav An alternative is note_polyphony . The difference between applying polyphony across one note and using note_polyphony is that note_polyphony also uses note_selfmask which opens up some additional options. With the default setting, lower-velocity notes do not mute higher-velocity ones. This is useful for long-ringing instruments such as piano with the sustain pedal pressed down or hammered dulcimer. It can also be useful for cymbals, although especially with hi-hats, those will often use different notes for different articulations, and note_polyphony would be limited to working within an articulation.","title":"Examples"},{"location":"opcodes/polyphony_group/","text":"ARIA adds also the polyphony_group alias to reduce the confusion between the group opcode and the \u2039 group \u203a header. Examples group=3 group=334 The group opcode is used together with off_by to make something monophonic. For example, the flute is by nature a monophonic instrument, so if a flute were recorded with one microphone and had one set of samples, it would make sense to set all its samples to have one group. A guitar is polyphonic, but each string is monophonic, so a six-string guitar would naturally be split into six groups - one per string. In these cases, the group number will be equal to the off_by number. This is also commonly used with hi-hats - this is an example of where things can get more sophisticated with a large number of groups involved, as it's possible to set more closed hi-hat sounds mute more open ones, but not vice-versa, and it's also quite possible that there are separate close mic, overhead and room samples. group and off_by can also be used in other contexts where one sound should cause another to stop but enforcing monophony is not the goal - for example, a crash cymbal doesn't need to be monophonic, as allowing the sound to build up is reasonably natural, but if we wanted to implement a cymbal choke, then the crash sounds would be in one group, the choke samples in another. Practical Considerations The actual minimum and maximum values are not currently known. Some players will treat numbers outside a certain range as equivalent to group=0, and ARIA/Sforzando will also do this with text strings. The behavior of non-integer numbers is also currently unknown. This makes it possible to use an extremely large number for one group, but it's obviously not recommended.","title":"Polyphony group"},{"location":"opcodes/polyphony_group/#examples","text":"group=3 group=334 The group opcode is used together with off_by to make something monophonic. For example, the flute is by nature a monophonic instrument, so if a flute were recorded with one microphone and had one set of samples, it would make sense to set all its samples to have one group. A guitar is polyphonic, but each string is monophonic, so a six-string guitar would naturally be split into six groups - one per string. In these cases, the group number will be equal to the off_by number. This is also commonly used with hi-hats - this is an example of where things can get more sophisticated with a large number of groups involved, as it's possible to set more closed hi-hat sounds mute more open ones, but not vice-versa, and it's also quite possible that there are separate close mic, overhead and room samples. group and off_by can also be used in other contexts where one sound should cause another to stop but enforcing monophony is not the goal - for example, a crash cymbal doesn't need to be monophonic, as allowing the sound to build up is reasonably natural, but if we wanted to implement a cymbal choke, then the crash sounds would be in one group, the choke samples in another.","title":"Examples"},{"location":"opcodes/polyphony_group/#practical-considerations","text":"The actual minimum and maximum values are not currently known. Some players will treat numbers outside a certain range as equivalent to group=0, and ARIA/Sforzando will also do this with text strings. The behavior of non-integer numbers is also currently unknown. This makes it possible to use an extremely large number for one group, but it's obviously not recommended.","title":"Practical Considerations"},{"location":"opcodes/polyphony_stealing/","text":"","title":"Polyphony stealing"},{"location":"opcodes/position/","text":"A value of zero means centered, negative values move the panoramic to the left, positive to the right. Examples // mix both channels and play the result at left width=0 position=-100 // make the stereo image narrower and play it // slightly right width=50 position=30 // position modulated by MIDI CC 40 width=50 position_oncc40=-50","title":"Position"},{"location":"opcodes/position/#examples","text":"// mix both channels and play the result at left width=0 position=-100 // make the stereo image narrower and play it // slightly right width=50 position=30 // position modulated by MIDI CC 40 width=50 position_oncc40=-50","title":"Examples"},{"location":"opcodes/position_curveccN/","text":"A value of zero means centered, negative values move the panoramic to the left, positive to the right. Examples // mix both channels and play the result at left width=0 position=-100 // make the stereo image narrower and play it // slightly right width=50 position=30 // position modulated by MIDI CC 40 width=50 position_oncc40=-50","title":"position curveccN"},{"location":"opcodes/position_curveccN/#examples","text":"// mix both channels and play the result at left width=0 position=-100 // make the stereo image narrower and play it // slightly right width=50 position=30 // position modulated by MIDI CC 40 width=50 position_oncc40=-50","title":"Examples"},{"location":"opcodes/position_keycenter/","text":"","title":"Position keycenter"},{"location":"opcodes/position_keytrack/","text":"","title":"Position keytrack"},{"location":"opcodes/position_onccN/","text":"A value of zero means centered, negative values move the panoramic to the left, positive to the right. Examples // mix both channels and play the result at left width=0 position=-100 // make the stereo image narrower and play it // slightly right width=50 position=30 // position modulated by MIDI CC 40 width=50 position_oncc40=-50","title":"position onccN"},{"location":"opcodes/position_onccN/#examples","text":"// mix both channels and play the result at left width=0 position=-100 // make the stereo image narrower and play it // slightly right width=50 position=30 // position modulated by MIDI CC 40 width=50 position_oncc40=-50","title":"Examples"},{"location":"opcodes/position_random/","text":"","title":"Position random"},{"location":"opcodes/position_smoothccN/","text":"A value of zero means centered, negative values move the panoramic to the left, positive to the right. Examples // mix both channels and play the result at left width=0 position=-100 // make the stereo image narrower and play it // slightly right width=50 position=30 // position modulated by MIDI CC 40 width=50 position_oncc40=-50","title":"position smoothccN"},{"location":"opcodes/position_smoothccN/#examples","text":"// mix both channels and play the result at left width=0 position=-100 // make the stereo image narrower and play it // slightly right width=50 position=30 // position modulated by MIDI CC 40 width=50 position_oncc40=-50","title":"Examples"},{"location":"opcodes/position_stepccN/","text":"A value of zero means centered, negative values move the panoramic to the left, positive to the right. Examples // mix both channels and play the result at left width=0 position=-100 // make the stereo image narrower and play it // slightly right width=50 position=30 // position modulated by MIDI CC 40 width=50 position_oncc40=-50","title":"position stepccN"},{"location":"opcodes/position_stepccN/#examples","text":"// mix both channels and play the result at left width=0 position=-100 // make the stereo image narrower and play it // slightly right width=50 position=30 // position modulated by MIDI CC 40 width=50 position_oncc40=-50","title":"Examples"},{"location":"opcodes/position_veltrack/","text":"","title":"Position veltrack"},{"location":"opcodes/region_label/","text":"Useful for debugging. In order to work properly, generally needs to be set under a \u2039region\u203a header. If not set, the info tab will display the file path of the most recently played sample. Example sample=china2_30_01.flac seq_position=1 region_label=30 one // ... sample=china2_30_09.flac seq_position=9 region_label=30 nine sample=china2_30_10.flac seq_position=10 region_label=30 ten","title":"Region label"},{"location":"opcodes/region_label/#example","text":" sample=china2_30_01.flac seq_position=1 region_label=30 one // ... sample=china2_30_09.flac seq_position=9 region_label=30 nine sample=china2_30_10.flac seq_position=10 region_label=30 ten","title":"Example"},{"location":"opcodes/resonance/","text":"Example resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"resonance / resonance2"},{"location":"opcodes/resonance/#example","text":"resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"Example"},{"location":"opcodes/resonance2/","text":"Example resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"resonance / resonance2"},{"location":"opcodes/resonance2/#example","text":"resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"Example"},{"location":"opcodes/resonance2_ccN/","text":"Example resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"resonance / resonance2"},{"location":"opcodes/resonance2_ccN/#example","text":"resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"Example"},{"location":"opcodes/resonance2_curveccN/","text":"Example resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"resonance / resonance2"},{"location":"opcodes/resonance2_curveccN/#example","text":"resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"Example"},{"location":"opcodes/resonance2_onccN/","text":"Example resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"resonance / resonance2"},{"location":"opcodes/resonance2_onccN/#example","text":"resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"Example"},{"location":"opcodes/resonance2_smoothccN/","text":"Example resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"resonance / resonance2"},{"location":"opcodes/resonance2_smoothccN/#example","text":"resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"Example"},{"location":"opcodes/resonance2_stepccN/","text":"Example resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"resonance / resonance2"},{"location":"opcodes/resonance2_stepccN/#example","text":"resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"Example"},{"location":"opcodes/resonance_ccN/","text":"Example resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"resonance / resonance2"},{"location":"opcodes/resonance_ccN/#example","text":"resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"Example"},{"location":"opcodes/resonance_curveccN/","text":"Example resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"resonance / resonance2"},{"location":"opcodes/resonance_curveccN/#example","text":"resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"Example"},{"location":"opcodes/resonance_onccN/","text":"Example resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"resonance / resonance2"},{"location":"opcodes/resonance_onccN/#example","text":"resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"Example"},{"location":"opcodes/resonance_random/","text":"","title":"Resonance random"},{"location":"opcodes/resonance_smoothccN/","text":"Example resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"resonance / resonance2"},{"location":"opcodes/resonance_smoothccN/#example","text":"resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"Example"},{"location":"opcodes/resonance_stepccN/","text":"Example resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"resonance / resonance2"},{"location":"opcodes/resonance_stepccN/#example","text":"resonance=4 resonance_oncc100=3 resonance2=3.2 There are two filters in series - the resonance of one is controlled by resonance, that of the second by resonance2. Raising this can easily result in a very large boost to frequencies around the cutoff, which can result in extremely loud output!","title":"Example"},{"location":"opcodes/reverb_damp/","text":"Used under the \u2039effect\u203a header, with type = fverb .","title":"Reverb damp"},{"location":"opcodes/reverb_damp_onccN/","text":"Used under the \u2039effect\u203a header, with type = fverb .","title":"reverb damp onccN"},{"location":"opcodes/reverb_dry/","text":"Used under the \u2039effect\u203a header, with type = fverb .","title":"Reverb dry"},{"location":"opcodes/reverb_dry_onccN/","text":"Used under the \u2039effect\u203a header, with type = fverb .","title":"reverb dry onccN"},{"location":"opcodes/reverb_input/","text":"Used under the \u2039effect\u203a header, with type = fverb .","title":"Reverb input"},{"location":"opcodes/reverb_input_onccN/","text":"Used under the \u2039effect\u203a header, with type = fverb .","title":"reverb input onccN"},{"location":"opcodes/reverb_predelay/","text":"Used under the \u2039effect\u203a header, with type = fverb .","title":"Reverb predelay"},{"location":"opcodes/reverb_predelay_onccN/","text":"Used under the \u2039effect\u203a header, with type = fverb .","title":"reverb predelay onccN"},{"location":"opcodes/reverb_size/","text":"Used under the \u2039effect\u203a header, with type = fverb .","title":"Reverb size"},{"location":"opcodes/reverb_size_onccN/","text":"Used under the \u2039effect\u203a header, with type = fverb .","title":"reverb size onccN"},{"location":"opcodes/reverb_tone/","text":"Used under the \u2039effect\u203a header, with type = fverb .","title":"Reverb tone"},{"location":"opcodes/reverb_tone_onccN/","text":"Used under the \u2039effect\u203a header, with type = fverb .","title":"reverb tone onccN"},{"location":"opcodes/reverb_type/","text":"Used under the \u2039effect\u203a header, with type = fverb .","title":"Reverb type"},{"location":"opcodes/reverb_wet/","text":"Used under the \u2039effect\u203a header, with type = fverb .","title":"Reverb wet"},{"location":"opcodes/reverb_wet_onccN/","text":"Used under the \u2039effect\u203a header, with type = fverb .","title":"reverb wet onccN"},{"location":"opcodes/reverse_hiccN/","text":"Example reverse_locc1=64 reverse_hicc1=127 Practical Considerations On Cakewalk, the CC does not take effect once region playback started. Not implemented in ARIA, but an alternative is to use two regions, one with direction=reverse then switch region with loccN / hiccN .","title":"reverse_loccN / reverse_hiccN"},{"location":"opcodes/reverse_hiccN/#example","text":"reverse_locc1=64 reverse_hicc1=127","title":"Example"},{"location":"opcodes/reverse_hiccN/#practical-considerations","text":"On Cakewalk, the CC does not take effect once region playback started. Not implemented in ARIA, but an alternative is to use two regions, one with direction=reverse then switch region with loccN / hiccN .","title":"Practical Considerations"},{"location":"opcodes/reverse_loccN/","text":"Example reverse_locc1=64 reverse_hicc1=127 Practical Considerations On Cakewalk, the CC does not take effect once region playback started. Not implemented in ARIA, but an alternative is to use two regions, one with direction=reverse then switch region with loccN / hiccN .","title":"reverse_loccN / reverse_hiccN"},{"location":"opcodes/reverse_loccN/#example","text":"reverse_locc1=64 reverse_hicc1=127","title":"Example"},{"location":"opcodes/reverse_loccN/#practical-considerations","text":"On Cakewalk, the CC does not take effect once region playback started. Not implemented in ARIA, but an alternative is to use two regions, one with direction=reverse then switch region with loccN / hiccN .","title":"Practical Considerations"},{"location":"opcodes/rt_dead/","text":"Allowed values are on and off, default is off, so by default, release samples do not play if their sustain samples have expired. Example rt_dead=on Although the default behavior makes sense for instrument such as pianos, with guitars there is still some noise when a finger releases a fretted note, so it can make sense to use rt_dead=on there. Also, if using release samples to emulate tremolo playing (so that the note plays when the key is pressed, and again when the key is released - this can be useful for vibraphone, marimba etc.), rt_dead=on can also be useful.","title":"Rt dead"},{"location":"opcodes/rt_dead/#example","text":"rt_dead=on Although the default behavior makes sense for instrument such as pianos, with guitars there is still some noise when a finger releases a fretted note, so it can make sense to use rt_dead=on there. Also, if using release samples to emulate tremolo playing (so that the note plays when the key is pressed, and again when the key is released - this can be useful for vibraphone, marimba etc.), rt_dead=on can also be useful.","title":"Example"},{"location":"opcodes/rt_decay/","text":"Example sample=pianoA4.wav trigger=attack sample=keyup_noise.wav trigger=release rt_decay=3 //The sample keyup_noise.wav will play 3db quieter for every second the key has been on. Range is 0 to 200. In general, higher values mean high decrease of the release sample volume with time, which makes sense for release samples associated with sounds which decay quickly when held. For example, higher piano notes decay much faster than lower ones, so the higher notes will need higher rt_decay values. Release samples for sounds which do not naturally decay, such as organs or guitar feedback, do not need their volume to decrease based on note duration, and can use the default value of 0. Practical Considerations In ARIA, extended MIDI CC 151 can be used alongside rt_decay to select different release samples for different time ranges. However, CCs have one value across the entire instrument. CC 151 is time since the last note-on message in seconds. This can give undesired results in arpeggios. The ARIA extension rt_decayN does not allow different release samples to be selected, but it does allow different values of the volume decrease rate to be used for different time ranges. Unlike CC 151, this is not affected by subsequently played notes.","title":"Rt decay"},{"location":"opcodes/rt_decay/#example","text":" sample=pianoA4.wav trigger=attack sample=keyup_noise.wav trigger=release rt_decay=3 //The sample keyup_noise.wav will play 3db quieter for every second the key has been on. Range is 0 to 200. In general, higher values mean high decrease of the release sample volume with time, which makes sense for release samples associated with sounds which decay quickly when held. For example, higher piano notes decay much faster than lower ones, so the higher notes will need higher rt_decay values. Release samples for sounds which do not naturally decay, such as organs or guitar feedback, do not need their volume to decrease based on note duration, and can use the default value of 0.","title":"Example"},{"location":"opcodes/rt_decay/#practical-considerations","text":"In ARIA, extended MIDI CC 151 can be used alongside rt_decay to select different release samples for different time ranges. However, CCs have one value across the entire instrument. CC 151 is time since the last note-on message in seconds. This can give undesired results in arpeggios. The ARIA extension rt_decayN does not allow different release samples to be selected, but it does allow different values of the volume decrease rate to be used for different time ranges. Unlike CC 151, this is not affected by subsequently played notes.","title":"Practical Considerations"},{"location":"opcodes/rt_decayN/","text":"This works similarly to rt_decay, but with a multisegment volume decrease curve. The duration of each segment and a different decrease rate for each segment can be set. Example sample=pianoA4.wav trigger=attack sample=keyup_noise.wav trigger=release rt_decay1=3 rt_decay1_time=2 rt_decay2=1.5 //The sample keyup_noise.wav will play 3db quieter for every second the key has been on. Practical Considerations In ARIA, extended MIDI CC 151 can be used alongside (or instead of) rt_decay to select different release samples for different time ranges. However, CCs have one value across the entire instrument. CC 151 is time since the last note-on message in seconds. This can give undesired results in arpeggios. The rt_decayN opcode does have the advantage of not being affected by subsequently played notes, but unlike CC 151, it cannot be used to select completely different release samples for different time ranges.","title":"rt decayN"},{"location":"opcodes/rt_decayN/#example","text":" sample=pianoA4.wav trigger=attack sample=keyup_noise.wav trigger=release rt_decay1=3 rt_decay1_time=2 rt_decay2=1.5 //The sample keyup_noise.wav will play 3db quieter for every second the key has been on.","title":"Example"},{"location":"opcodes/rt_decayN/#practical-considerations","text":"In ARIA, extended MIDI CC 151 can be used alongside (or instead of) rt_decay to select different release samples for different time ranges. However, CCs have one value across the entire instrument. CC 151 is time since the last note-on message in seconds. This can give undesired results in arpeggios. The rt_decayN opcode does have the advantage of not being affected by subsequently played notes, but unlike CC 151, it cannot be used to select completely different release samples for different time ranges.","title":"Practical Considerations"},{"location":"opcodes/rt_decayN_time/","text":"Example sample=pianoA4.wav trigger=attack sample=keyup_noise.wav trigger=release rt_decay1=3 rt_decay1_time=2 rt_decay2=1.5 //The sample keyup_noise.wav will play 3db quieter for every second the key has been on.","title":"rt decayN time"},{"location":"opcodes/rt_decayN_time/#example","text":" sample=pianoA4.wav trigger=attack sample=keyup_noise.wav trigger=release rt_decay1=3 rt_decay1_time=2 rt_decay2=1.5 //The sample keyup_noise.wav will play 3db quieter for every second the key has been on.","title":"Example"},{"location":"opcodes/sample/","text":"Possibly the most important opcode, this is the one that tells the sampler which sample file to actually play. This should include a relative file path from the folder where the SFZ file is. In most cases, there will be a sample opcode in every region of an SFZ file, though not always. If the sample file is not found, the player will ignore the whole region contents as there's nothing to play. Long names and names with blank spaces and other special characters (excepting the = character) are allowed in the sample definition. Getting the sample to play back at the correct pitch is not automatic, and generally can't be done with the sample opcode alone, even if the file name includes pitch information. Assuming that the tune or transpose opcodes are not used to change the pitch, the sample will play unchanged in pitch when a note equal to the pitch_keycenter opcode value is played. If pitch_keycenter is not defined for the region, sample will play unchanged on note 60 (middle C). If pitch_keytrack is set to 0, the sample will also play unchanged in pitch, regardless of how pitch_keycenter is set. If the key opcode is used to define the range of the sample (instead of lokey , hikey and pitch_keycenter ) the sample will also be unchanged in pitch. Formats At the SFZ1 specification level, the supported sample formats are: + WAV of any sample rate + Ogg Vorbis compressed samples For SFZ2, the Cakewalk book specifies the following sample types in addition of the above: + AIFF of any sample rate + FLAC support is not specified as mandatory, though FLAC was supported by Cakewalk Session Drummer, and is supported by ARIA See also Features section in the home page. WAV is usually the first choice, or perhaps AIFF when using macOS. FLAC is the second choice, as it is lossless compression audio is always preferable, though it needs to be decoded which can cause slower performance compared to WAV. Other compressed formats can be used for test cases or situations where keeping the file size small is more important than audio quality. See also the table of supported sample formats by some engines for more details. Examples sample=A3.wav sample=..\\Samples\\close\\c4_pp_rr3.wav Each engine can also support custom oscillators. For example, ARIA supports using this opcode for some basic synthesized sound waves such as: sample=*sine sample=*saw sample=*square sample=*triangle sample=*tri sample=*noise sample=*silence Tri is an alias for triangle. For cases where we don't want to actually play a sample but want a region to exist and be played (for example, to mute other sounds when using group and off_by , the silence value can be very convenient). Note that in this case the * is a real character and not a wildcard.","title":"Sample"},{"location":"opcodes/sample/#formats","text":"At the SFZ1 specification level, the supported sample formats are: + WAV of any sample rate + Ogg Vorbis compressed samples For SFZ2, the Cakewalk book specifies the following sample types in addition of the above: + AIFF of any sample rate + FLAC support is not specified as mandatory, though FLAC was supported by Cakewalk Session Drummer, and is supported by ARIA See also Features section in the home page. WAV is usually the first choice, or perhaps AIFF when using macOS. FLAC is the second choice, as it is lossless compression audio is always preferable, though it needs to be decoded which can cause slower performance compared to WAV. Other compressed formats can be used for test cases or situations where keeping the file size small is more important than audio quality. See also the table of supported sample formats by some engines for more details.","title":"Formats"},{"location":"opcodes/sample/#examples","text":"sample=A3.wav sample=..\\Samples\\close\\c4_pp_rr3.wav Each engine can also support custom oscillators. For example, ARIA supports using this opcode for some basic synthesized sound waves such as: sample=*sine sample=*saw sample=*square sample=*triangle sample=*tri sample=*noise sample=*silence Tri is an alias for triangle. For cases where we don't want to actually play a sample but want a region to exist and be played (for example, to mute other sounds when using group and off_by , the silence value can be very convenient). Note that in this case the * is a real character and not a wildcard.","title":"Examples"},{"location":"opcodes/sample_dyn_paramN/","text":"","title":"sample dyn paramN"},{"location":"opcodes/sample_dyn_paramN_onccX/","text":"","title":"sample dyn paramN onccX"},{"location":"opcodes/sample_fadeout/","text":"The fadeout end coincides with playback end. (Source: Peter L. Jones SFZ page ) Example sample=4_seconds_c3.wav loop_mode=no_loop sample_fadeout=2.5 The curve used for fading out is linear. Practical Considerations This opcode is supported in RGC sfz and Cakewalk products, where at least in DropZone uses sample units instead seconds.","title":"Sample fadeout"},{"location":"opcodes/sample_fadeout/#example","text":" sample=4_seconds_c3.wav loop_mode=no_loop sample_fadeout=2.5 The curve used for fading out is linear.","title":"Example"},{"location":"opcodes/sample_fadeout/#practical-considerations","text":"This opcode is supported in RGC sfz and Cakewalk products, where at least in DropZone uses sample units instead seconds.","title":"Practical Considerations"},{"location":"opcodes/sample_quality/","text":"Defines the interpolation algorithm used for samples. The higher the setting, the better the algorithm is in terms of sound quality, at the expense of processing speed. 1: linear interpolation 2: higher quality interpolation, for example a polynomial interpolator 3-10: windowed sinc interpolation, using increasingly larger window sizes","title":"Sample quality"},{"location":"opcodes/script/","text":"This is an extension to the SFZ file format which is currently only available with LinuxSampler v2.0.0.svn37 or higher. Find out more about Instrument Scripts . The mandatory path parameter defines the file system path to the real-time instrument script file that shall be loaded and executed, which may either be an absolute path or a relative path. A relative path is always interpreted relative to the SFZ file's location. May only be used in \u2039global\u203a section. Example Loads the WAV file \"some_sound.wav\" and assigns it to the entire key range of the instrument, and loads the real-time instrument script file \"my_nksp_script.txt\" from the subdirectory \"myscripts\". The script will be executed on the respective events the script file provides event handlers for. script=myscripts/my_nksp_script.txt sample=some_sound.wav Source: LinuxSampler Documentation","title":"Script"},{"location":"opcodes/script/#example","text":"Loads the WAV file \"some_sound.wav\" and assigns it to the entire key range of the instrument, and loads the real-time instrument script file \"my_nksp_script.txt\" from the subdirectory \"myscripts\". The script will be executed on the respective events the script file provides event handlers for. script=myscripts/my_nksp_script.txt sample=some_sound.wav Source: LinuxSampler Documentation","title":"Example"},{"location":"opcodes/seq_length/","text":"The player will keep an internal counter creating a consecutive note-on sequence for each region, starting at 1 and resetting at seq_length . Example seq_length=3 A typical usage for a kick drum with four round robins, and a snare with three round robins, would look like this: key=36 seq_length=4 seq_position=1 sample=kick_rr1.wav seq_position=2 sample=kick_rr2.wav seq_position=3 sample=kick_rr3.wav seq_position=4 sample=kick_rr4.wav key=38 seq_length=3 seq_position=1 sample=snare_rr1.wav seq_position=2 sample=snare_rr2.wav seq_position=3 sample=snare_rr3.wav An alternative to this is using lorand / hirand for random, instead of sequential, round robins. If there are enough samples available, both methods can also be combined - the combination is described on the lorand / hirand page. However, lorand/hirand might not be a good idea to use with samples which have multiple microphone positions, and sticking to seq_position and seq_length might be necessary. Practical Considerations In the ARIA implementation of SFZ, sequence position is not tracked together for all regions, which means sequential round robins is not a practical way to implement alternating left/right hand or up/down bowing samples. Setting seq_length to 0 behaves the same as setting it to 1 in Cakewalk players, sfizz and BassMIDI, but a setting of 0 in ARIA will cause each round robin in the sequence to be played once, and playing more notes once the counter exceeds the highest seq_position will result in no sound.","title":"Seq length"},{"location":"opcodes/seq_length/#example","text":"seq_length=3 A typical usage for a kick drum with four round robins, and a snare with three round robins, would look like this: key=36 seq_length=4 seq_position=1 sample=kick_rr1.wav seq_position=2 sample=kick_rr2.wav seq_position=3 sample=kick_rr3.wav seq_position=4 sample=kick_rr4.wav key=38 seq_length=3 seq_position=1 sample=snare_rr1.wav seq_position=2 sample=snare_rr2.wav seq_position=3 sample=snare_rr3.wav An alternative to this is using lorand / hirand for random, instead of sequential, round robins. If there are enough samples available, both methods can also be combined - the combination is described on the lorand / hirand page. However, lorand/hirand might not be a good idea to use with samples which have multiple microphone positions, and sticking to seq_position and seq_length might be necessary.","title":"Example"},{"location":"opcodes/seq_length/#practical-considerations","text":"In the ARIA implementation of SFZ, sequence position is not tracked together for all regions, which means sequential round robins is not a practical way to implement alternating left/right hand or up/down bowing samples. Setting seq_length to 0 behaves the same as setting it to 1 in Cakewalk players, sfizz and BassMIDI, but a setting of 0 in ARIA will cause each round robin in the sequence to be played once, and playing more notes once the counter exceeds the highest seq_position will result in no sound.","title":"Practical Considerations"},{"location":"opcodes/seq_position/","text":"This is used together with seq_length to use samples as round robins. The player will keep an internal counter creating a consecutive note-on sequence for each region, starting at 1 and resetting at seq_length. Maximum allowed value is 100. Example seq_length=4 seq_position=2 In above example, the region will play on the second note every four notes. A typical usage for a kick drum with four round robins, and a snare with three round robins, would look like this: key=36 seq_length=4 seq_position=1 sample=kick_rr1.wav seq_position=2 sample=kick_rr2.wav seq_position=3 sample=kick_rr3.wav seq_position=4 sample=kick_rr4.wav key=38 seq_length=3 seq_position=1 sample=snare_rr1.wav seq_position=2 sample=snare_rr2.wav seq_position=3 sample=snare_rr3.wav An alternative to this is using lorand / hirand for random, instead of sequential, round robins. If there are enough samples available, both methods can also be combined - the combination is described on the lorand / hirand page. However, lorand/hirand might not be a good idea to use with samples which have multiple microphone positions, and sticking to seq_position and seq_length might be necessary. Practical Considerations In at least some SFZ players, sequence position is not tracked together for all regions, which means seq_position is not a practical way to implement alternating left/right hand or up/down bowing samples. Some players also match velocity ranges for each step in the sequence, which can cause problems when the sequence steps do not have the same velocity layer split points. For example, this can produce occasional silence, depending on the velocity of incoming MIDI notes, the velocity of the previous MIDI note, and the current point in the sequence: seq_length=2 key=48 seq_position=1 lovel=1 hivel=31 sample=*noise lovel=32 hivel=127 sample=*saw seq_position=2 lovel=1 hivel=95 sample=*noise lovel=96 hivel=127 sample=*saw This will also happen in cases where, for example, one step in the sequence has three velocity layers and the other step has four, as it's not possible to make the layer split points match then. In those players, this is a workaround: seq_length=2 key=48 seq_position=1 lovel=1 hivel=31 sample=*noise lovel=32 hivel=95 sample=*saw lovel=96 hivel=127 sample=*saw seq_position=2 lovel=1 hivel=31 sample=*noise lovel=32 hivel=95 sample=*noise lovel=96 hivel=127 sample=*saw Setting seq_position to 0 will cause the region to not play in most sfz player, except for sfizz where it will behave the same as setting seq_position to 1.","title":"Seq position"},{"location":"opcodes/seq_position/#example","text":"seq_length=4 seq_position=2 In above example, the region will play on the second note every four notes. A typical usage for a kick drum with four round robins, and a snare with three round robins, would look like this: key=36 seq_length=4 seq_position=1 sample=kick_rr1.wav seq_position=2 sample=kick_rr2.wav seq_position=3 sample=kick_rr3.wav seq_position=4 sample=kick_rr4.wav key=38 seq_length=3 seq_position=1 sample=snare_rr1.wav seq_position=2 sample=snare_rr2.wav seq_position=3 sample=snare_rr3.wav An alternative to this is using lorand / hirand for random, instead of sequential, round robins. If there are enough samples available, both methods can also be combined - the combination is described on the lorand / hirand page. However, lorand/hirand might not be a good idea to use with samples which have multiple microphone positions, and sticking to seq_position and seq_length might be necessary.","title":"Example"},{"location":"opcodes/seq_position/#practical-considerations","text":"In at least some SFZ players, sequence position is not tracked together for all regions, which means seq_position is not a practical way to implement alternating left/right hand or up/down bowing samples. Some players also match velocity ranges for each step in the sequence, which can cause problems when the sequence steps do not have the same velocity layer split points. For example, this can produce occasional silence, depending on the velocity of incoming MIDI notes, the velocity of the previous MIDI note, and the current point in the sequence: seq_length=2 key=48 seq_position=1 lovel=1 hivel=31 sample=*noise lovel=32 hivel=127 sample=*saw seq_position=2 lovel=1 hivel=95 sample=*noise lovel=96 hivel=127 sample=*saw This will also happen in cases where, for example, one step in the sequence has three velocity layers and the other step has four, as it's not possible to make the layer split points match then. In those players, this is a workaround: seq_length=2 key=48 seq_position=1 lovel=1 hivel=31 sample=*noise lovel=32 hivel=95 sample=*saw lovel=96 hivel=127 sample=*saw seq_position=2 lovel=1 hivel=31 sample=*noise lovel=32 hivel=95 sample=*noise lovel=96 hivel=127 sample=*saw Setting seq_position to 0 will cause the region to not play in most sfz player, except for sfizz where it will behave the same as setting seq_position to 1.","title":"Practical Considerations"},{"location":"opcodes/set_ccN/","text":"Used under the \u2039 control \u203a header. Examples set_cc40=127 set_cc100=30","title":"set ccN"},{"location":"opcodes/set_ccN/#examples","text":"set_cc40=127 set_cc100=30","title":"Examples"},{"location":"opcodes/set_hdccN/","text":"Sets a default initial value for MIDI CC number N using a floating point value, when the instrument is initially loaded. Used under the \u2039 control \u203a header. Examples set_hdcc16=0.5 amplitude_oncc16=100 sample=*sine Practical Considerations set_realccN is a deprecated alias for set_hdccN .","title":"set hdccN"},{"location":"opcodes/set_hdccN/#examples","text":" set_hdcc16=0.5 amplitude_oncc16=100 sample=*sine","title":"Examples"},{"location":"opcodes/set_hdccN/#practical-considerations","text":"set_realccN is a deprecated alias for set_hdccN .","title":"Practical Considerations"},{"location":"opcodes/set_realccN/","text":"Sets a default initial value for MIDI CC number N using a floating point value, when the instrument is initially loaded. Used under the \u2039 control \u203a header. Examples set_hdcc16=0.5 amplitude_oncc16=100 sample=*sine Practical Considerations set_realccN is a deprecated alias for set_hdccN .","title":"set realccN"},{"location":"opcodes/set_realccN/#examples","text":" set_hdcc16=0.5 amplitude_oncc16=100 sample=*sine","title":"Examples"},{"location":"opcodes/set_realccN/#practical-considerations","text":"set_realccN is a deprecated alias for set_hdccN .","title":"Practical Considerations"},{"location":"opcodes/sostenuto_cc/","text":"The default is 66, the standard sustain pedal assignment in the MIDI specification. Examples sostenuto_cc=12 sostenuto_cc=122","title":"Sostenuto cc"},{"location":"opcodes/sostenuto_cc/#examples","text":"sostenuto_cc=12 sostenuto_cc=122","title":"Examples"},{"location":"opcodes/sostenuto_lo/","text":"Default is 0.5, meaning the sustain pedal is down as long as the CC value is anything above 0. To make the pedal only act as \"down\" past the halfway point, set this to 64 - then the pedal is considered \"up\" from CC value 0 to 63, and \"down\" from 64 to 127. Leaving this at the default value of 1, or setting it to some other low number such as 10, is useful when the piano supports half-pedaling. Setting it to 64 is preferred by some users who want to use the sostenuto pedal as an on/off switch for instruments with no half-pedaling. Examples sostenuto_lo=64 sostenuto_lo=20","title":"Sostenuto lo"},{"location":"opcodes/sostenuto_lo/#examples","text":"sostenuto_lo=64 sostenuto_lo=20","title":"Examples"},{"location":"opcodes/sostenuto_sw/","text":"Example sostenuto_sw=off","title":"Sostenuto sw"},{"location":"opcodes/sostenuto_sw/#example","text":"sostenuto_sw=off","title":"Example"},{"location":"opcodes/start_hiccN/","text":"Sample trigger on MIDI continuous control N. This does not involve playing any MIDI notes. Example on_locc64=127 on_hicc64=127 Region will play when a MIDI CC64 (sustain pedal) message with 127 value is received. So, basically, when the sustain pedal is pressed down, this region will play. This is useful with piano pedals - in the above example, on_loccN and on_hiccN could be used to trigger a mechanical noise sample, whether any keys are being played or not. It would not typically be used with hi-hat pedals, as most electronic drum kits will send a MIDI note when the pedal hits bottom. Practical Considerations on_locc/on_hicc effectively replaces the default trigger =attack. The behavior of a region which has on_locc/on_hicc and trigger=attack both explicitly specified is not defined by the SFZ specification, and that combination should be used. In ARIA if on_locc/on_hicc and trigger=release or trigger=release_key is used, the on_locc/on_hicc opcode will be effectively disregarded, and the region will behave like a normal release or release_key region.","title":"on_loccN / on_hiccN"},{"location":"opcodes/start_hiccN/#example","text":"on_locc64=127 on_hicc64=127 Region will play when a MIDI CC64 (sustain pedal) message with 127 value is received. So, basically, when the sustain pedal is pressed down, this region will play. This is useful with piano pedals - in the above example, on_loccN and on_hiccN could be used to trigger a mechanical noise sample, whether any keys are being played or not. It would not typically be used with hi-hat pedals, as most electronic drum kits will send a MIDI note when the pedal hits bottom.","title":"Example"},{"location":"opcodes/start_hiccN/#practical-considerations","text":"on_locc/on_hicc effectively replaces the default trigger =attack. The behavior of a region which has on_locc/on_hicc and trigger=attack both explicitly specified is not defined by the SFZ specification, and that combination should be used. In ARIA if on_locc/on_hicc and trigger=release or trigger=release_key is used, the on_locc/on_hicc opcode will be effectively disregarded, and the region will behave like a normal release or release_key region.","title":"Practical Considerations"},{"location":"opcodes/start_hihdccN/","text":"Example on_lohdcc64=1 on_hihdcc64=1","title":"on_lohdccN / on_hihdccN"},{"location":"opcodes/start_hihdccN/#example","text":"on_lohdcc64=1 on_hihdcc64=1","title":"Example"},{"location":"opcodes/start_loccN/","text":"Sample trigger on MIDI continuous control N. This does not involve playing any MIDI notes. Example on_locc64=127 on_hicc64=127 Region will play when a MIDI CC64 (sustain pedal) message with 127 value is received. So, basically, when the sustain pedal is pressed down, this region will play. This is useful with piano pedals - in the above example, on_loccN and on_hiccN could be used to trigger a mechanical noise sample, whether any keys are being played or not. It would not typically be used with hi-hat pedals, as most electronic drum kits will send a MIDI note when the pedal hits bottom. Practical Considerations on_locc/on_hicc effectively replaces the default trigger =attack. The behavior of a region which has on_locc/on_hicc and trigger=attack both explicitly specified is not defined by the SFZ specification, and that combination should be used. In ARIA if on_locc/on_hicc and trigger=release or trigger=release_key is used, the on_locc/on_hicc opcode will be effectively disregarded, and the region will behave like a normal release or release_key region.","title":"on_loccN / on_hiccN"},{"location":"opcodes/start_loccN/#example","text":"on_locc64=127 on_hicc64=127 Region will play when a MIDI CC64 (sustain pedal) message with 127 value is received. So, basically, when the sustain pedal is pressed down, this region will play. This is useful with piano pedals - in the above example, on_loccN and on_hiccN could be used to trigger a mechanical noise sample, whether any keys are being played or not. It would not typically be used with hi-hat pedals, as most electronic drum kits will send a MIDI note when the pedal hits bottom.","title":"Example"},{"location":"opcodes/start_loccN/#practical-considerations","text":"on_locc/on_hicc effectively replaces the default trigger =attack. The behavior of a region which has on_locc/on_hicc and trigger=attack both explicitly specified is not defined by the SFZ specification, and that combination should be used. In ARIA if on_locc/on_hicc and trigger=release or trigger=release_key is used, the on_locc/on_hicc opcode will be effectively disregarded, and the region will behave like a normal release or release_key region.","title":"Practical Considerations"},{"location":"opcodes/start_lohdccN/","text":"Example on_lohdcc64=1 on_hihdcc64=1","title":"on_lohdccN / on_hihdccN"},{"location":"opcodes/start_lohdccN/#example","text":"on_lohdcc64=1 on_hihdcc64=1","title":"Example"},{"location":"opcodes/static_cyclic_level/","text":"Used under the \u2039effect\u203a header, with type = static .","title":"Static cyclic level"},{"location":"opcodes/static_cyclic_time/","text":"Used under the \u2039effect\u203a header, with type = static .","title":"Static cyclic time"},{"location":"opcodes/static_filter/","text":"Used under the \u2039effect\u203a header, with type = static .","title":"Static filter"},{"location":"opcodes/static_level/","text":"Used under the \u2039effect\u203a header, with type = static .","title":"Static level"},{"location":"opcodes/static_level_onccN/","text":"Used under the \u2039effect\u203a header, with type = static .","title":"static level onccN"},{"location":"opcodes/static_random_level/","text":"Used under the \u2039effect\u203a header, with type = static .","title":"Static random level"},{"location":"opcodes/static_random_maxtime/","text":"Used under the \u2039effect\u203a header, with type = static .","title":"Static random maxtime"},{"location":"opcodes/static_random_mintime/","text":"Used under the \u2039effect\u203a header, with type = static .","title":"Static random mintime"},{"location":"opcodes/static_stereo/","text":"Used under the \u2039effect\u203a header, with type = static .","title":"Static stereo"},{"location":"opcodes/static_tone/","text":"Used under the \u2039effect\u203a header, with type = static .","title":"Static tone"},{"location":"opcodes/stop_beats/","text":"Used in Cakewalk Dimension Pro and DropZone, alongside delay_beats , to play slices of loops at specific points in the bar. Examples delay_beats=1 stop_beats=1.5 delay_beats=25.9922 stop_beats=26.0964 Practical Considerations Intended to be a counterpart to delay_beats and used in Cakewalk Dimension Pro and DropZone. This opcode appears to be not implemented in ARIA - it passes the parser in ARIA but seems to have no effect on its region.","title":"Stop beats"},{"location":"opcodes/stop_beats/#examples","text":"delay_beats=1 stop_beats=1.5 delay_beats=25.9922 stop_beats=26.0964","title":"Examples"},{"location":"opcodes/stop_beats/#practical-considerations","text":"Intended to be a counterpart to delay_beats and used in Cakewalk Dimension Pro and DropZone. This opcode appears to be not implemented in ARIA - it passes the parser in ARIA but seems to have no effect on its region.","title":"Practical Considerations"},{"location":"opcodes/stop_hiccN/","text":"Practical Considerations This was intended to be used together with start_loccN / start_hiccN , but has not yet been implemented, which means this opcode passes the parser in ARIA but has no effect on the region.","title":"stop_loccN / stop_hiccN"},{"location":"opcodes/stop_hiccN/#practical-considerations","text":"This was intended to be used together with start_loccN / start_hiccN , but has not yet been implemented, which means this opcode passes the parser in ARIA but has no effect on the region.","title":"Practical Considerations"},{"location":"opcodes/stop_hihdccN/","text":"","title":"stop_lohdccN / stop_hihdccN"},{"location":"opcodes/stop_loccN/","text":"Practical Considerations This was intended to be used together with start_loccN / start_hiccN , but has not yet been implemented, which means this opcode passes the parser in ARIA but has no effect on the region.","title":"stop_loccN / stop_hiccN"},{"location":"opcodes/stop_loccN/#practical-considerations","text":"This was intended to be used together with start_loccN / start_hiccN , but has not yet been implemented, which means this opcode passes the parser in ARIA but has no effect on the region.","title":"Practical Considerations"},{"location":"opcodes/stop_lohdccN/","text":"","title":"stop_lohdccN / stop_hihdccN"},{"location":"opcodes/strings_number/","text":"Used under the \u2039effect\u203a header, with type = strings .","title":"Strings number"},{"location":"opcodes/strings_wet_onccN/","text":"Used under the \u2039effect\u203a header, with type = strings .","title":"strings wet onccN"},{"location":"opcodes/sustain_cc/","text":"The default is 64, the standard sustain pedal assignment in the MIDI specification. Examples sustain_cc=4 sustain_cc=120","title":"Sustain cc"},{"location":"opcodes/sustain_cc/#examples","text":"sustain_cc=4 sustain_cc=120","title":"Examples"},{"location":"opcodes/sustain_lo/","text":"This ARIA extension sets the minimum point at which the sustain pedal (MIDI CC 64) is considered \"down\". Default is 0.5, meaning the sustain pedal is down as long as the CC value is anything above 0. To make the pedal only act as \"down\" past the halfway point, set this to 64 - then the pedal is considered \"up\" from CC value 0 to 63, and \"down\" from 64 to 127. Leaving this at the default value of 1, or setting it to some other low number such as 10, is useful when the piano supports half-pedaling. Setting it to 64 is preferred by some users who want to use the sustain pedal as an on/off sustain switch for instruments with no half-pedaling. Please note that the direction of the MIDI CC values is normally from 0 at the top of the pedal to 127 when it is at the bottom, meaning that physically \"down\" on the pedal is up in terms of MIDI CC value. It is possible to set this to different values for different regions, so that for example mechanical noises and notes will not be affected by the sustain pedal in the same way. Examples sustain_lo=64 sustain_lo=20","title":"Sustain lo"},{"location":"opcodes/sustain_lo/#examples","text":"sustain_lo=64 sustain_lo=20","title":"Examples"},{"location":"opcodes/sustain_sw/","text":"Example sustain_sw=off","title":"Sustain sw"},{"location":"opcodes/sustain_sw/#example","text":"sustain_sw=off","title":"Example"},{"location":"opcodes/sw_default/","text":"sw_default sets a default value for sw_last . In a guitar instrument which uses keyswitches to select articulations, this can be used to for example make the picked articulation active by default when the instrument is first loaded. Without sw_default , this instrument would be silent until a keyswitch is manually used to select an articulation. Example // ********************************************************************** // A Keyswitching Example // // Notes 36,38 and 40 serve as switches to trigger sine, triangle or saw oscillators. // you can expand on this concept to create your own KeySwitching instruments. // ********************************************************************** sw_lokey=36 sw_hikey=40 sw_default=36 sw_last=36 sw_label=Sine lokey=41 sample=*sine sw_last=38 sw_label=Triangle lokey=41 sample=*triangle sw_last=40 sw_label=Saw lokey=41 sample=*saw Practical Considerations sw_label causes ARIA/Sforzando to display the most recent selected keyswitch label appear on its interface. This apparently needs to be set for all regions for which that sw_last value is set, which can mean setting the label in multiple places in an sfz file.","title":"sw_default / sw_label"},{"location":"opcodes/sw_default/#example","text":"// ********************************************************************** // A Keyswitching Example // // Notes 36,38 and 40 serve as switches to trigger sine, triangle or saw oscillators. // you can expand on this concept to create your own KeySwitching instruments. // ********************************************************************** sw_lokey=36 sw_hikey=40 sw_default=36 sw_last=36 sw_label=Sine lokey=41 sample=*sine sw_last=38 sw_label=Triangle lokey=41 sample=*triangle sw_last=40 sw_label=Saw lokey=41 sample=*saw","title":"Example"},{"location":"opcodes/sw_default/#practical-considerations","text":"sw_label causes ARIA/Sforzando to display the most recent selected keyswitch label appear on its interface. This apparently needs to be set for all regions for which that sw_last value is set, which can mean setting the label in multiple places in an sfz file.","title":"Practical Considerations"},{"location":"opcodes/sw_down/","text":"Can be entered in either MIDI note numbers (0 to 127) or in MIDI note names (C-1 to G9) Example sw_down=C3 sw_down=24 sw_up=25 The difference between sw_down and sw_last is that sw_last is a \"sticky\" keyswitch - after releasing the keyswitch note, it continues to affect notes until another keyswitch is pressed. sw_down , on the other hand, is \"non-sticky\" and only affects notes played while the switch is held down. It could also possibly be used for true legato instead of sw_previous . If there is a default articulation which should sound when no sw_down keys are pressed, sw_up should be defined for those regions. For example, if there is a flute with a default sustain articulation which should not sound when an ornamentation is selected using sw_down , the default sustain articulation can use sw_up so it only sounds when no ornamentation keyswitch is held down. In ARIA, either sw_down or sw_up can be a note in the playable range, regardless of whether sw_lokey / hikey is defined or not. In rgc sfz, they can be in the playable range if sw_lokey/hikey are not defined, but if they are defined, then sw_down and sw_up notes must fall in the sw_lokey/hikey range.","title":"sw_down / sw_up"},{"location":"opcodes/sw_down/#example","text":"sw_down=C3 sw_down=24 sw_up=25 The difference between sw_down and sw_last is that sw_last is a \"sticky\" keyswitch - after releasing the keyswitch note, it continues to affect notes until another keyswitch is pressed. sw_down , on the other hand, is \"non-sticky\" and only affects notes played while the switch is held down. It could also possibly be used for true legato instead of sw_previous . If there is a default articulation which should sound when no sw_down keys are pressed, sw_up should be defined for those regions. For example, if there is a flute with a default sustain articulation which should not sound when an ornamentation is selected using sw_down , the default sustain articulation can use sw_up so it only sounds when no ornamentation keyswitch is held down. In ARIA, either sw_down or sw_up can be a note in the playable range, regardless of whether sw_lokey / hikey is defined or not. In rgc sfz, they can be in the playable range if sw_lokey/hikey are not defined, but if they are defined, then sw_down and sw_up notes must fall in the sw_lokey/hikey range.","title":"Example"},{"location":"opcodes/sw_hikey/","text":"Basically, this tells the SFZ player where the keyswitches are. As such, it's normally going to be the same for the entire instrument, so sw_lokey and sw_hikey will be set under the \u2039global\u203a header. This affects sw_last keyswitches. On the other hand, sw_previous keyswitches can be outside of this range - and indeed often must be, as sw_previous is often used for legato instruments. With sw_down / sw_up this behavior is implementation-dependent. In ARIA, either sw_down or sw_up can be a note in the playable range, regardless of whether sw_lokey / hikey is defined or not. In rgc sfz, they can be in the playable range if sw_lokey/hikey are not defined, but if they are defined, then sw_down and sw_up notes must fall in the sw_lokey/hikey range. sw_lokey and sw_hikey can be entered in either MIDI note numbers (0 to 127) or in MIDI note names (C-1 to G9) Example sw_lokey=48 sw_hikey=53","title":"sw_lokey / sw_hikey"},{"location":"opcodes/sw_hikey/#example","text":"sw_lokey=48 sw_hikey=53","title":"Example"},{"location":"opcodes/sw_hilast/","text":"sw_lolast specifies the bottom of the range, and sw_hilast the high. Example sw_lolast=24 sw_hilast=25 This is useful when there are multiple regions being triggered, and some of them are common across several keyswitches - for example, fretting noises triggered on note release on a guitar might be the same across both normal, hammer-on and slide articulations, but should not be triggered for harmonics.","title":"sw_lolast / sw_hilast"},{"location":"opcodes/sw_hilast/#example","text":"sw_lolast=24 sw_hilast=25 This is useful when there are multiple regions being triggered, and some of them are common across several keyswitches - for example, fretting noises triggered on note release on a guitar might be the same across both normal, hammer-on and slide articulations, but should not be triggered for harmonics.","title":"Example"},{"location":"opcodes/sw_label/","text":"sw_default sets a default value for sw_last . In a guitar instrument which uses keyswitches to select articulations, this can be used to for example make the picked articulation active by default when the instrument is first loaded. Without sw_default , this instrument would be silent until a keyswitch is manually used to select an articulation. Example // ********************************************************************** // A Keyswitching Example // // Notes 36,38 and 40 serve as switches to trigger sine, triangle or saw oscillators. // you can expand on this concept to create your own KeySwitching instruments. // ********************************************************************** sw_lokey=36 sw_hikey=40 sw_default=36 sw_last=36 sw_label=Sine lokey=41 sample=*sine sw_last=38 sw_label=Triangle lokey=41 sample=*triangle sw_last=40 sw_label=Saw lokey=41 sample=*saw Practical Considerations sw_label causes ARIA/Sforzando to display the most recent selected keyswitch label appear on its interface. This apparently needs to be set for all regions for which that sw_last value is set, which can mean setting the label in multiple places in an sfz file.","title":"sw_default / sw_label"},{"location":"opcodes/sw_label/#example","text":"// ********************************************************************** // A Keyswitching Example // // Notes 36,38 and 40 serve as switches to trigger sine, triangle or saw oscillators. // you can expand on this concept to create your own KeySwitching instruments. // ********************************************************************** sw_lokey=36 sw_hikey=40 sw_default=36 sw_last=36 sw_label=Sine lokey=41 sample=*sine sw_last=38 sw_label=Triangle lokey=41 sample=*triangle sw_last=40 sw_label=Saw lokey=41 sample=*saw","title":"Example"},{"location":"opcodes/sw_label/#practical-considerations","text":"sw_label causes ARIA/Sforzando to display the most recent selected keyswitch label appear on its interface. This apparently needs to be set for all regions for which that sw_last value is set, which can mean setting the label in multiple places in an sfz file.","title":"Practical Considerations"},{"location":"opcodes/sw_last/","text":"sw_last can be entered in either MIDI note numbers (0 to 127) or in MIDI note names (C-1 to G9) Example sw_last=49 This is commonly used to select articulations, for example to switch between sustain, staccato, spiccato and pizzicato in a violin. With the SFZ 1 or SFZ 2 spec, an instrument which uses sw_last to select articulations will not have a default articulation preselected, meaning when loaded, it will play no sound until one of the keyswitches is pressed - only after that will the instrument respond to notes. The ARIA extensions include sw_default as a solution to this. The difference between this and sw_down is that sw_last is a \"sticky\" keyswitch - after releasing the keyswitch note, it continues to affect notes until another keyswitch is pressed. sw_down , on the other hand, is \"non-sticky\" and only affects notes played while the switch is held down. This makes sw_last a good choice for keyswitching articulations which are often used for many notes in a row, such as sustain or staccato. An example of using sw_last to select oscillator waves, with sw_default used to set the sine to default as well. // ********************************************************************** // A Keyswitching Example // // Notes 36,38 and 40 serve as switches to trigger sine, triangle or saw oscillators. // you can expand on this concept to create your own KeySwitching instruments. // ********************************************************************** sw_lokey=36 sw_hikey=40 sw_default=36 sw_last=36 sw_label=Sine lokey=41 sample=*sine sw_last=38 sw_label=Triangle lokey=41 sample=*triangle sw_last=40 sw_label=Saw lokey=41 sample=*saw","title":"Sw last"},{"location":"opcodes/sw_last/#example","text":"sw_last=49 This is commonly used to select articulations, for example to switch between sustain, staccato, spiccato and pizzicato in a violin. With the SFZ 1 or SFZ 2 spec, an instrument which uses sw_last to select articulations will not have a default articulation preselected, meaning when loaded, it will play no sound until one of the keyswitches is pressed - only after that will the instrument respond to notes. The ARIA extensions include sw_default as a solution to this. The difference between this and sw_down is that sw_last is a \"sticky\" keyswitch - after releasing the keyswitch note, it continues to affect notes until another keyswitch is pressed. sw_down , on the other hand, is \"non-sticky\" and only affects notes played while the switch is held down. This makes sw_last a good choice for keyswitching articulations which are often used for many notes in a row, such as sustain or staccato. An example of using sw_last to select oscillator waves, with sw_default used to set the sine to default as well. // ********************************************************************** // A Keyswitching Example // // Notes 36,38 and 40 serve as switches to trigger sine, triangle or saw oscillators. // you can expand on this concept to create your own KeySwitching instruments. // ********************************************************************** sw_lokey=36 sw_hikey=40 sw_default=36 sw_last=36 sw_label=Sine lokey=41 sample=*sine sw_last=38 sw_label=Triangle lokey=41 sample=*triangle sw_last=40 sw_label=Saw lokey=41 sample=*saw","title":"Example"},{"location":"opcodes/sw_lokey/","text":"Basically, this tells the SFZ player where the keyswitches are. As such, it's normally going to be the same for the entire instrument, so sw_lokey and sw_hikey will be set under the \u2039global\u203a header. This affects sw_last keyswitches. On the other hand, sw_previous keyswitches can be outside of this range - and indeed often must be, as sw_previous is often used for legato instruments. With sw_down / sw_up this behavior is implementation-dependent. In ARIA, either sw_down or sw_up can be a note in the playable range, regardless of whether sw_lokey / hikey is defined or not. In rgc sfz, they can be in the playable range if sw_lokey/hikey are not defined, but if they are defined, then sw_down and sw_up notes must fall in the sw_lokey/hikey range. sw_lokey and sw_hikey can be entered in either MIDI note numbers (0 to 127) or in MIDI note names (C-1 to G9) Example sw_lokey=48 sw_hikey=53","title":"sw_lokey / sw_hikey"},{"location":"opcodes/sw_lokey/#example","text":"sw_lokey=48 sw_hikey=53","title":"Example"},{"location":"opcodes/sw_lolast/","text":"sw_lolast specifies the bottom of the range, and sw_hilast the high. Example sw_lolast=24 sw_hilast=25 This is useful when there are multiple regions being triggered, and some of them are common across several keyswitches - for example, fretting noises triggered on note release on a guitar might be the same across both normal, hammer-on and slide articulations, but should not be triggered for harmonics.","title":"sw_lolast / sw_hilast"},{"location":"opcodes/sw_lolast/#example","text":"sw_lolast=24 sw_hilast=25 This is useful when there are multiple regions being triggered, and some of them are common across several keyswitches - for example, fretting noises triggered on note release on a guitar might be the same across both normal, hammer-on and slide articulations, but should not be triggered for harmonics.","title":"Example"},{"location":"opcodes/sw_note_offset/","text":"Used under the \u2039 control \u203a header.","title":"Sw note offset"},{"location":"opcodes/sw_octave_offset/","text":"Used under the \u2039 control \u203a header.","title":"Sw octave offset"},{"location":"opcodes/sw_previous/","text":"sw_previous can be entered in either MIDI note numbers (0 to 127) or in MIDI note names (C-1 to G9) Example sw_previous=60 Note that unlike sw_last , the note specified by sw_previous doesn't need to fall in the sw_lokey / sw_hikey range. This is useful for true sampled legato.","title":"Sw previous"},{"location":"opcodes/sw_previous/#example","text":"sw_previous=60 Note that unlike sw_last , the note specified by sw_previous doesn't need to fall in the sw_lokey / sw_hikey range. This is useful for true sampled legato.","title":"Example"},{"location":"opcodes/sw_up/","text":"Can be entered in either MIDI note numbers (0 to 127) or in MIDI note names (C-1 to G9) Example sw_down=C3 sw_down=24 sw_up=25 The difference between sw_down and sw_last is that sw_last is a \"sticky\" keyswitch - after releasing the keyswitch note, it continues to affect notes until another keyswitch is pressed. sw_down , on the other hand, is \"non-sticky\" and only affects notes played while the switch is held down. It could also possibly be used for true legato instead of sw_previous . If there is a default articulation which should sound when no sw_down keys are pressed, sw_up should be defined for those regions. For example, if there is a flute with a default sustain articulation which should not sound when an ornamentation is selected using sw_down , the default sustain articulation can use sw_up so it only sounds when no ornamentation keyswitch is held down. In ARIA, either sw_down or sw_up can be a note in the playable range, regardless of whether sw_lokey / hikey is defined or not. In rgc sfz, they can be in the playable range if sw_lokey/hikey are not defined, but if they are defined, then sw_down and sw_up notes must fall in the sw_lokey/hikey range.","title":"sw_down / sw_up"},{"location":"opcodes/sw_up/#example","text":"sw_down=C3 sw_down=24 sw_up=25 The difference between sw_down and sw_last is that sw_last is a \"sticky\" keyswitch - after releasing the keyswitch note, it continues to affect notes until another keyswitch is pressed. sw_down , on the other hand, is \"non-sticky\" and only affects notes played while the switch is held down. It could also possibly be used for true legato instead of sw_previous . If there is a default articulation which should sound when no sw_down keys are pressed, sw_up should be defined for those regions. For example, if there is a flute with a default sustain articulation which should not sound when an ornamentation is selected using sw_down , the default sustain articulation can use sw_up so it only sounds when no ornamentation keyswitch is held down. In ARIA, either sw_down or sw_up can be a note in the playable range, regardless of whether sw_lokey / hikey is defined or not. In rgc sfz, they can be in the playable range if sw_lokey/hikey are not defined, but if they are defined, then sw_down and sw_up notes must fall in the sw_lokey/hikey range.","title":"Example"},{"location":"opcodes/sw_vel/","text":"Values can be: current : Region uses the velocity of current note. previous : Region uses the velocity of the previous note. Example sw_vel=previous With sw_vel set to previous, a newly played region will be the triggered using the previous region's velocity. For example, if the previous velocity is 100 and the velocity of the new note-on message is 60, the new region will play as if its velocity was 100. Setting this to previous is useful for making certain legato instruments sound smoother and more consistent. Practical Considerations At least in ARIA, this affects only volume, and using velocity to modulate pitch or filter cutoff will use the current note's velocity regardless of how sw_vel is set. Also in ARIA, sw_vel can work even if sw_previous is not defined. To have sw_vel working in sfz.dll and DropZone and other Cakewalk players, sw_previous need to be defined. Fil_veltrack, pitch_veltrack and other velocity modulation e.g. ampeg_vel2attack, etc, also affected by sw_vel.","title":"Sw vel"},{"location":"opcodes/sw_vel/#example","text":"sw_vel=previous With sw_vel set to previous, a newly played region will be the triggered using the previous region's velocity. For example, if the previous velocity is 100 and the velocity of the new note-on message is 60, the new region will play as if its velocity was 100. Setting this to previous is useful for making certain legato instruments sound smoother and more consistent.","title":"Example"},{"location":"opcodes/sw_vel/#practical-considerations","text":"At least in ARIA, this affects only volume, and using velocity to modulate pitch or filter cutoff will use the current note's velocity regardless of how sw_vel is set. Also in ARIA, sw_vel can work even if sw_previous is not defined. To have sw_vel working in sfz.dll and DropZone and other Cakewalk players, sw_previous need to be defined. Fil_veltrack, pitch_veltrack and other velocity modulation e.g. ampeg_vel2attack, etc, also affected by sw_vel.","title":"Practical Considerations"},{"location":"opcodes/sync_beats/","text":"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. Example sync_beats=4 In this example, if note is pressed in beat 2 of current track, note won't be played until beat 4 reaches. This opcode will only work in hosts featuring song position information (vstTimeInfo ppqPos).","title":"Sync beats"},{"location":"opcodes/sync_beats/#example","text":"sync_beats=4 In this example, if note is pressed in beat 2 of current track, note won't be played until beat 4 reaches. This opcode will only work in hosts featuring song position information (vstTimeInfo ppqPos).","title":"Example"},{"location":"opcodes/sync_offset/","text":"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. Example sync_beats=4 sync_offset=1 In this example, if note is pressed in beat 2 of current track, note won't be played until beat 5 reaches. This opcode will only work in hosts featuring song position information (vstTimeInfo ppqPos).","title":"Sync offset"},{"location":"opcodes/sync_offset/#example","text":"sync_beats=4 sync_offset=1 In this example, if note is pressed in beat 2 of current track, note won't be played until beat 5 reaches. This opcode will only work in hosts featuring song position information (vstTimeInfo ppqPos).","title":"Example"},{"location":"opcodes/tdfir_dry/","text":"Used under the \u2039effect\u203a header, with type = tdfir .","title":"Tdfir dry"},{"location":"opcodes/tdfir_dry_onccN/","text":"Used under the \u2039effect\u203a header, with type = tdfir .","title":"tdfir dry onccN"},{"location":"opcodes/tdfir_gain/","text":"Used under the \u2039effect\u203a header, with type = tdfir .","title":"Tdfir gain"},{"location":"opcodes/tdfir_impulse/","text":"Used under the \u2039effect\u203a header, with type = tdfir .","title":"Tdfir impulse"},{"location":"opcodes/tdfir_wet/","text":"Used under the \u2039effect\u203a header, with type = tdfir .","title":"Tdfir wet"},{"location":"opcodes/tdfir_wet_onccN/","text":"Used under the \u2039effect\u203a header, with type = tdfir .","title":"tdfir wet onccN"},{"location":"opcodes/transpose/","text":"Examples transpose=3 transpose=-4 transpose=24 Uses include creating layered instruments by transposing samples at different pitches to all play the same note, and (combined with locc and hicc ) octave selection controls in synthesizer-style instruments.","title":"Transpose"},{"location":"opcodes/transpose/#examples","text":"transpose=3 transpose=-4 transpose=24 Uses include creating layered instruments by transposing samples at different pitches to all play the same note, and (combined with locc and hicc ) octave selection controls in synthesizer-style instruments.","title":"Examples"},{"location":"opcodes/trigger/","text":"Values can be: attack : (Default): Region will play on note-on. release : Region will play on note-off or sustain pedal 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 (commonly used for 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). release_key : Region will play on note-off. Ignores sustain pedal. Practical Considerations This entire section is dedicated to release triggers, which can get quite complex. Setting trigger to release or release_key will cause the region to play as if loop_mode was set to one_shot . Beyond that, release region behavior varies considerably between SFZ players. rcg sfz: Both release or release_key regions play whether there is a previous attack region or not. Release_key regions won't play when releasing the sustain pedal. Release samples only play when sustain pedal is up (not depressed). In sfz v1, there is no polyphony or note_polyphony for limiting the number of simultaneous release regions playing, which can result in a very large number of release regions triggered when the sustain pedal is raised. DropZone and other Cakewalk players: Both release or release_key require a previous attack region. Release_key regions won't play when releasing the sustain pedal. Release samples only play when sustain pedal is up (not depressed). To make release or release_key plays without any previous attack region, set rt_dead to on. note_polyphony is now available to control the accumulation of release voices of repeated notes when Sustain pedal is down. ARIA and Sforzando: release requires a previous attack region. release_key doesn't require a previous attack region. release responds to Sustain Pedal position. release_key ignores Sustain Pedal completely. rt_dead is not supported, and defaults to off. note_polyphony is available to control the accumulation of release voices. Release samples can require a corresponding region with trigger set to attack to be active at the moment when the note-off message is received, or the release region will never play. In rgc sfz, this is not required. In DropZone and other Cakewalk players, it is required unless rt_dead is set to on. In ARIA, it is required for trigger=release regions but not for trigger=release_key regions. For cases where a corresponding attack region is required, here is more detail. An attack region is considered corresponding if it has the same MIDI note number, and the same velocity range, as the release region. The velocity which matters here is the note-on velocity of the initial region - not the velocity of the note-off message which triggers the release region. Round robins do not need to match, so it is possible to for example have five round robins for releases and only four round robins for attacks. This corresponding attack region is then used to calculate the volume of the release region based on the attack region's velocity and rt_decay . If there is no corresponding attack region, or the corresponding attack region has finished playing due to reaching sample end etc, then the release region will not play. This is designed primarily designed for piano release samples. Triggering a release sample without a corresponding attack region is is useful for release samples which are noises not dependent on the volume of any corresponding note, such as hurdy-gurdy key returns, which will sound the same whether the wheel is turning or not. Note that at least in ARIA and Sforzando, a note-on event which triggers multiple regions (for example a multimic instrument, or one with simulated unison) will have multiple corresponding regions for the release region, causing the release region to be triggered multiple times. With seven mics and a separate release for each mic, this would mean a key release would trigger a total of 49 samples if not controlled with note_polyphony . However, setting note_polyphony=1 and giving each mic a different [group] number solves this. When using releases with round robins and multiple voices, it can be tricky to make the release sample round robin counter advance correctly. When there are 2 matching regions playing, ARIA appears to advance the counter for the releases by 2, and if there are 4 release round robins, only 2 of them will actually be used. One workaround for that is triggering an extra region of silence to make the round robin counter advance by 3, but this will only work if the number of regions is consistent and predictable. With instruments that have release samples with a number of microphone positions or organ stops, any of which could be on or off, the total number of matching regions is very difficult to assess, and it's far easier to use lorand/hirand to select the release samples instead. on_loccN / on_hiccN effectively replace the default trigger=attack, as it is used for regions which are to be triggered by MIDI CC messages and not MIDI note messages. For regions which use these opcodes, trigger should be left unspecified. Examples trigger=release trigger=legato","title":"Trigger"},{"location":"opcodes/trigger/#practical-considerations","text":"This entire section is dedicated to release triggers, which can get quite complex. Setting trigger to release or release_key will cause the region to play as if loop_mode was set to one_shot . Beyond that, release region behavior varies considerably between SFZ players. rcg sfz: Both release or release_key regions play whether there is a previous attack region or not. Release_key regions won't play when releasing the sustain pedal. Release samples only play when sustain pedal is up (not depressed). In sfz v1, there is no polyphony or note_polyphony for limiting the number of simultaneous release regions playing, which can result in a very large number of release regions triggered when the sustain pedal is raised. DropZone and other Cakewalk players: Both release or release_key require a previous attack region. Release_key regions won't play when releasing the sustain pedal. Release samples only play when sustain pedal is up (not depressed). To make release or release_key plays without any previous attack region, set rt_dead to on. note_polyphony is now available to control the accumulation of release voices of repeated notes when Sustain pedal is down. ARIA and Sforzando: release requires a previous attack region. release_key doesn't require a previous attack region. release responds to Sustain Pedal position. release_key ignores Sustain Pedal completely. rt_dead is not supported, and defaults to off. note_polyphony is available to control the accumulation of release voices. Release samples can require a corresponding region with trigger set to attack to be active at the moment when the note-off message is received, or the release region will never play. In rgc sfz, this is not required. In DropZone and other Cakewalk players, it is required unless rt_dead is set to on. In ARIA, it is required for trigger=release regions but not for trigger=release_key regions. For cases where a corresponding attack region is required, here is more detail. An attack region is considered corresponding if it has the same MIDI note number, and the same velocity range, as the release region. The velocity which matters here is the note-on velocity of the initial region - not the velocity of the note-off message which triggers the release region. Round robins do not need to match, so it is possible to for example have five round robins for releases and only four round robins for attacks. This corresponding attack region is then used to calculate the volume of the release region based on the attack region's velocity and rt_decay . If there is no corresponding attack region, or the corresponding attack region has finished playing due to reaching sample end etc, then the release region will not play. This is designed primarily designed for piano release samples. Triggering a release sample without a corresponding attack region is is useful for release samples which are noises not dependent on the volume of any corresponding note, such as hurdy-gurdy key returns, which will sound the same whether the wheel is turning or not. Note that at least in ARIA and Sforzando, a note-on event which triggers multiple regions (for example a multimic instrument, or one with simulated unison) will have multiple corresponding regions for the release region, causing the release region to be triggered multiple times. With seven mics and a separate release for each mic, this would mean a key release would trigger a total of 49 samples if not controlled with note_polyphony . However, setting note_polyphony=1 and giving each mic a different [group] number solves this. When using releases with round robins and multiple voices, it can be tricky to make the release sample round robin counter advance correctly. When there are 2 matching regions playing, ARIA appears to advance the counter for the releases by 2, and if there are 4 release round robins, only 2 of them will actually be used. One workaround for that is triggering an extra region of silence to make the round robin counter advance by 3, but this will only work if the number of regions is consistent and predictable. With instruments that have release samples with a number of microphone positions or organ stops, any of which could be on or off, the total number of matching regions is very difficult to assess, and it's far easier to use lorand/hirand to select the release samples instead. on_loccN / on_hiccN effectively replace the default trigger=attack, as it is used for regions which are to be triggered by MIDI CC messages and not MIDI note messages. For regions which use these opcodes, trigger should be left unspecified.","title":"Practical Considerations"},{"location":"opcodes/trigger/#examples","text":"trigger=release trigger=legato","title":"Examples"},{"location":"opcodes/tune/","text":"Range of tune in the SFZ1 spec is \u00b11 semitone, from -100 to 100, though at least in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents. Examples tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1 Practical Considerations In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"tune / pitch"},{"location":"opcodes/tune/#examples","text":"tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1","title":"Examples"},{"location":"opcodes/tune/#practical-considerations","text":"In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"Practical Considerations"},{"location":"opcodes/tune_ccN/","text":"Range of tune in the SFZ1 spec is \u00b11 semitone, from -100 to 100, though at least in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents. Examples tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1 Practical Considerations In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"tune / pitch"},{"location":"opcodes/tune_ccN/#examples","text":"tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1","title":"Examples"},{"location":"opcodes/tune_ccN/#practical-considerations","text":"In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"Practical Considerations"},{"location":"opcodes/tune_curveccN/","text":"Range of tune in the SFZ1 spec is \u00b11 semitone, from -100 to 100, though at least in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents. Examples tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1 Practical Considerations In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"tune / pitch"},{"location":"opcodes/tune_curveccN/#examples","text":"tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1","title":"Examples"},{"location":"opcodes/tune_curveccN/#practical-considerations","text":"In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"Practical Considerations"},{"location":"opcodes/tune_keytrack/","text":"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. Examples pitch_keytrack=20 pitch_keytrack=0 Most of the time, this will either be 100 (default) or 0, but intermediate values, values above 100 or negative values are occasionally useful.","title":"Tune keytrack"},{"location":"opcodes/tune_keytrack/#examples","text":"pitch_keytrack=20 pitch_keytrack=0 Most of the time, this will either be 100 (default) or 0, but intermediate values, values above 100 or negative values are occasionally useful.","title":"Examples"},{"location":"opcodes/tune_onccN/","text":"Range of tune in the SFZ1 spec is \u00b11 semitone, from -100 to 100, though at least in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents. Examples tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1 Practical Considerations In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"tune / pitch"},{"location":"opcodes/tune_onccN/#examples","text":"tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1","title":"Examples"},{"location":"opcodes/tune_onccN/#practical-considerations","text":"In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"Practical Considerations"},{"location":"opcodes/tune_random/","text":"Examples Computed when the note is triggered, remains the same for that region for as long as the region plays. pitch_random=10 pitch_random=400 Useful for humanizing the pitch of instruments with naturally imprecise intonation, especially when playing multiple regions in unison. Practical Considerations In ARIA this is unipolar, and equivalent to pitch_oncc135 . So, if pitch_random is set to 20, the region will play at pitches tuned by an amount in the range from 0 cents to +20 cents. In order to get pitch to fluctuate between -20 and +20 cents, there would be two ways to get there, either by applying a fixed shift of -20 cents and a random shift of up to 40 cents: pitch=-20 pitch_random=40 Or use CC136, which is bipolar random from -1 to 1: pitch_oncc136=20 In rcg sfz and Cakewalk, this is bipolar.","title":"Tune random"},{"location":"opcodes/tune_random/#examples","text":"Computed when the note is triggered, remains the same for that region for as long as the region plays. pitch_random=10 pitch_random=400 Useful for humanizing the pitch of instruments with naturally imprecise intonation, especially when playing multiple regions in unison.","title":"Examples"},{"location":"opcodes/tune_random/#practical-considerations","text":"In ARIA this is unipolar, and equivalent to pitch_oncc135 . So, if pitch_random is set to 20, the region will play at pitches tuned by an amount in the range from 0 cents to +20 cents. In order to get pitch to fluctuate between -20 and +20 cents, there would be two ways to get there, either by applying a fixed shift of -20 cents and a random shift of up to 40 cents: pitch=-20 pitch_random=40 Or use CC136, which is bipolar random from -1 to 1: pitch_oncc136=20 In rcg sfz and Cakewalk, this is bipolar.","title":"Practical Considerations"},{"location":"opcodes/tune_smoothccN/","text":"Range of tune in the SFZ1 spec is \u00b11 semitone, from -100 to 100, though at least in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents. Examples tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1 Practical Considerations In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"tune / pitch"},{"location":"opcodes/tune_smoothccN/#examples","text":"tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1","title":"Examples"},{"location":"opcodes/tune_smoothccN/#practical-considerations","text":"In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"Practical Considerations"},{"location":"opcodes/tune_stepccN/","text":"Range of tune in the SFZ1 spec is \u00b11 semitone, from -100 to 100, though at least in ARIA, it seems a broader range is supported, at least -2400 to 2400 cents. Examples tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1 Practical Considerations In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"tune / pitch"},{"location":"opcodes/tune_stepccN/#examples","text":"tune=33 tune=-30 tune=94 Uses include correcting the intonation of naturally off-pitch samples, and detuning unison voices. Modulating pitch with MIDI CC to create a tune control is possible in SFZ2. If the control needs to go both up and down, there are two ways to do this. One is to move the pitch down by the tuning range, then have modulation move it up by twice the tuning range, so that when the control is at the midpoint, the region will play at its orignal, unmodulated pitch. For a range of 100 cents this would look like this: tune=-100 pitch_oncc27=200 Another way is to use default \u2039curve\u203a 1 which ranges from -1 to 1, and set the pitch control to the tuning range. pitch_oncc27=100 pitch_curvecc27=1","title":"Examples"},{"location":"opcodes/tune_stepccN/#practical-considerations","text":"In ARIA, tune_*ccN can also be used as an alias for pitch_*ccN (see below).","title":"Practical Considerations"},{"location":"opcodes/tune_veltrack/","text":"Examples pitch_veltrack=0 pitch_veltrack=1200 This can be useful when trying to emulate dynamic response on drum samples recorded at only one velocity.","title":"Tune veltrack"},{"location":"opcodes/tune_veltrack/#examples","text":"pitch_veltrack=0 pitch_veltrack=1200 This can be useful when trying to emulate dynamic response on drum samples recorded at only one velocity.","title":"Examples"},{"location":"opcodes/type/","text":"ARIA Extensions In the PC version of ARIA, the MDA effects are bundled. That means that under the \u2039effect\u203a header, any of these effect types can be set. com.mda.Limiter com.mda.Overdrive com.mda.Leslie com.mda.RingMod com.mda.Delay com.mda.Bandisto com.mda.Ambience com.mda.DubDelay com.mda.Detune com.mda.Dither com.mda.Combo com.mda.Degrade com.mda.SubSynth com.mda.RezFilter Also see param_offset for how to configure the parameters for these effects in ARIA. The order of the parameters is the same as at the plugin version of the MDA effects . These effects are not part of the SFZ engine, so it is not possible to, for example, have one MIDI CC parameter control two parameters in the same effect, or use custom curves . Example usage below: set_cc300=64 set_cc301=127 param_offset=300 type=com.mda.Overdrive Cakewalk implementation In Cakewalk, each of the effect types has its own set of opcodes controlling its parameters. Here is a list of what is currently known. The effect routing logic in Rapture is as follows: apan Automatic panning with LFO: apan_depth apan_dry apan_freq apan_phase apan_waveform apan_wet comp Compressor: comp_attack comp_gain comp_ratio comp_release comp_stlink comp_threshold delay Multi-purpose delay line: delay_cutoff delay_damphi delay_damplo delay_dry delay_feedback delay_filter delay_input delay_levelc delay_levell delay_levelr delay_lfofreq delay_moddepth delay_mode delay_panc delay_panl delay_panr delay_resonance delay_spread delay_syncc_onccN delay_syncl_onccN delay_syncr_onccN delay_time_tap delay_timec delay_timel delay_timer delay_wet disto Asymmetric distorsion with tone control: disto_depth disto_dry disto_stages disto_tone disto_wet eq Equalizer (Same opcode meanings as ordinary EQ): eq_bw eq_freq eq_gain eq_type filter (Same opcode meanings as ordinary filter): filter_cutoff filter_resonance filter_type fverb Algorithmic reverberation: reverb_damp reverb_dry reverb_input reverb_predelay reverb_size reverb_tone reverb_type reverb_wet gate Signal gate: gate_onccN gate_attack gate_release gate_stlink gate_threshold limiter No opcodes for this type. lofi Bit depth reducer and decimator combined: bitred decim mverb Present in some Cakewalk products only, undocumented. phaser Dual-notch phaser with LFO: phaser_depth phaser_feedback phaser_freq phaser_phase_onccN phaser_stages phaser_waveform phaser_wet static Static noise generator: static_cyclic_level static_cyclic_time static_filter static_level static_random_level static_random_maxtime static_random_mintime static_stereo static_tone strings Sympathetic resonance with waveguide synthesis: strings_number strings_wet_onccN tdfir Impulse response convolver: tdfir_dry tdfir_gain tdfir_impulse tdfir_wet Note that the Cakewalk book has some typos in opcode names, such as EffectN (capital letter) or \u2039effects\u203a . On this site, non-working effect types mentioned in the book were replaced with tested ones. For example, autopan does not appear to work in any Cakewalk product, while apan works. Same for lofi instead bitred and decim , and disto instead of distortion .","title":"Type"},{"location":"opcodes/type/#aria-extensions","text":"In the PC version of ARIA, the MDA effects are bundled. That means that under the \u2039effect\u203a header, any of these effect types can be set. com.mda.Limiter com.mda.Overdrive com.mda.Leslie com.mda.RingMod com.mda.Delay com.mda.Bandisto com.mda.Ambience com.mda.DubDelay com.mda.Detune com.mda.Dither com.mda.Combo com.mda.Degrade com.mda.SubSynth com.mda.RezFilter Also see param_offset for how to configure the parameters for these effects in ARIA. The order of the parameters is the same as at the plugin version of the MDA effects . These effects are not part of the SFZ engine, so it is not possible to, for example, have one MIDI CC parameter control two parameters in the same effect, or use custom curves . Example usage below: set_cc300=64 set_cc301=127 param_offset=300 type=com.mda.Overdrive","title":"ARIA Extensions"},{"location":"opcodes/type/#cakewalk-implementation","text":"In Cakewalk, each of the effect types has its own set of opcodes controlling its parameters. Here is a list of what is currently known. The effect routing logic in Rapture is as follows:","title":"Cakewalk implementation"},{"location":"opcodes/type/#apan","text":"Automatic panning with LFO: apan_depth apan_dry apan_freq apan_phase apan_waveform apan_wet","title":"apan"},{"location":"opcodes/type/#comp","text":"Compressor: comp_attack comp_gain comp_ratio comp_release comp_stlink comp_threshold","title":"comp"},{"location":"opcodes/type/#delay","text":"Multi-purpose delay line: delay_cutoff delay_damphi delay_damplo delay_dry delay_feedback delay_filter delay_input delay_levelc delay_levell delay_levelr delay_lfofreq delay_moddepth delay_mode delay_panc delay_panl delay_panr delay_resonance delay_spread delay_syncc_onccN delay_syncl_onccN delay_syncr_onccN delay_time_tap delay_timec delay_timel delay_timer delay_wet","title":"delay"},{"location":"opcodes/type/#disto","text":"Asymmetric distorsion with tone control: disto_depth disto_dry disto_stages disto_tone disto_wet","title":"disto"},{"location":"opcodes/type/#eq","text":"Equalizer (Same opcode meanings as ordinary EQ): eq_bw eq_freq eq_gain eq_type","title":"eq"},{"location":"opcodes/type/#filter","text":"(Same opcode meanings as ordinary filter): filter_cutoff filter_resonance filter_type","title":"filter"},{"location":"opcodes/type/#fverb","text":"Algorithmic reverberation: reverb_damp reverb_dry reverb_input reverb_predelay reverb_size reverb_tone reverb_type reverb_wet","title":"fverb"},{"location":"opcodes/type/#gate","text":"Signal gate: gate_onccN gate_attack gate_release gate_stlink gate_threshold","title":"gate"},{"location":"opcodes/type/#limiter","text":"No opcodes for this type.","title":"limiter"},{"location":"opcodes/type/#lofi","text":"Bit depth reducer and decimator combined: bitred decim","title":"lofi"},{"location":"opcodes/type/#mverb","text":"Present in some Cakewalk products only, undocumented.","title":"mverb"},{"location":"opcodes/type/#phaser","text":"Dual-notch phaser with LFO: phaser_depth phaser_feedback phaser_freq phaser_phase_onccN phaser_stages phaser_waveform phaser_wet","title":"phaser"},{"location":"opcodes/type/#static","text":"Static noise generator: static_cyclic_level static_cyclic_time static_filter static_level static_random_level static_random_maxtime static_random_mintime static_stereo static_tone","title":"static"},{"location":"opcodes/type/#strings","text":"Sympathetic resonance with waveguide synthesis: strings_number strings_wet_onccN","title":"strings"},{"location":"opcodes/type/#tdfir","text":"Impulse response convolver: tdfir_dry tdfir_gain tdfir_impulse tdfir_wet Note that the Cakewalk book has some typos in opcode names, such as EffectN (capital letter) or \u2039effects\u203a . On this site, non-working effect types mentioned in the book were replaced with tested ones. For example, autopan does not appear to work in any Cakewalk product, while apan works. Same for lofi instead bitred and decim , and disto instead of distortion .","title":"tdfir"},{"location":"opcodes/vN/","text":"One curve header is used to define each curve. The values for various points along the curve can then be set, from v000 to v127 . The default is v000=0 and v127=1 . Any points along the curve not defined explicitly will be interpolated linearly between points which are defined. There are default built-in curves in ARIA. If no curve is specified for a modulation, curve 0 is used. The built-in ARIA curves are: Default curve (number 0). linear, from 0 to 1 1. bipolar, from -1 to 1 (useful for things such as tuning and panning, used by CC10 panning by default) 2. linear inverted, from 1 to 0 3. bipolar inverted, from 1 to -1 4. concave (used for CC7 volume tracking and amp_veltrack) 5. Xfin power curve 6. Xfout power curve These can be overwritten, but as they are used by the engine for their normal functions, it's safer to use curve_index numbers of 7 and above for custom curves. Curve_index in ARIA can be any integer from 0 to 255. Examples curve_index=17 v000=0 v095=1 v127=1 curve_index=18 v000=0 v095=0.5 v127=1 Here's a scenario using one MIDI CC to control the amplitude of two samples along two different curves. amplitude_oncc110=100 amplitude_curvecc110=9 sample=bigger.wav amplitude_oncc110=100 amplitude_curvecc110=10 sample=smaller.wav //The curves for the room ambiences - bigger room first curve_index=9 v000=0 v063=0 v127=1 curve_index=10 v000=0 v063=1 v127=0.1 And how to use the default curve 1 to create a tuning control which goes down and up, with the pitch unmodulated when the control is in the middle. pitch_oncc27=100 pitch_curvecc27=1","title":"\u2039curve\u203a"},{"location":"opcodes/vN/#examples","text":"curve_index=17 v000=0 v095=1 v127=1 curve_index=18 v000=0 v095=0.5 v127=1 Here's a scenario using one MIDI CC to control the amplitude of two samples along two different curves. amplitude_oncc110=100 amplitude_curvecc110=9 sample=bigger.wav amplitude_oncc110=100 amplitude_curvecc110=10 sample=smaller.wav //The curves for the room ambiences - bigger room first curve_index=9 v000=0 v063=0 v127=1 curve_index=10 v000=0 v063=1 v127=0.1 And how to use the default curve 1 to create a tuning control which goes down and up, with the pitch unmodulated when the control is in the middle. pitch_oncc27=100 pitch_curvecc27=1","title":"Examples"},{"location":"opcodes/vNNN/","text":"One curve header is used to define each curve. The values for various points along the curve can then be set, from v000 to v127 . The default is v000=0 and v127=1 . Any points along the curve not defined explicitly will be interpolated linearly between points which are defined. There are default built-in curves in ARIA. If no curve is specified for a modulation, curve 0 is used. The built-in ARIA curves are: Default curve (number 0). linear, from 0 to 1 1. bipolar, from -1 to 1 (useful for things such as tuning and panning, used by CC10 panning by default) 2. linear inverted, from 1 to 0 3. bipolar inverted, from 1 to -1 4. concave (used for CC7 volume tracking and amp_veltrack) 5. Xfin power curve 6. Xfout power curve These can be overwritten, but as they are used by the engine for their normal functions, it's safer to use curve_index numbers of 7 and above for custom curves. Curve_index in ARIA can be any integer from 0 to 255. Examples curve_index=17 v000=0 v095=1 v127=1 curve_index=18 v000=0 v095=0.5 v127=1 Here's a scenario using one MIDI CC to control the amplitude of two samples along two different curves. amplitude_oncc110=100 amplitude_curvecc110=9 sample=bigger.wav amplitude_oncc110=100 amplitude_curvecc110=10 sample=smaller.wav //The curves for the room ambiences - bigger room first curve_index=9 v000=0 v063=0 v127=1 curve_index=10 v000=0 v063=1 v127=0.1 And how to use the default curve 1 to create a tuning control which goes down and up, with the pitch unmodulated when the control is in the middle. pitch_oncc27=100 pitch_curvecc27=1","title":"\u2039curve\u203a"},{"location":"opcodes/vNNN/#examples","text":"curve_index=17 v000=0 v095=1 v127=1 curve_index=18 v000=0 v095=0.5 v127=1 Here's a scenario using one MIDI CC to control the amplitude of two samples along two different curves. amplitude_oncc110=100 amplitude_curvecc110=9 sample=bigger.wav amplitude_oncc110=100 amplitude_curvecc110=10 sample=smaller.wav //The curves for the room ambiences - bigger room first curve_index=9 v000=0 v063=0 v127=1 curve_index=10 v000=0 v063=1 v127=0.1 And how to use the default curve 1 to create a tuning control which goes down and up, with the pitch unmodulated when the control is in the middle. pitch_oncc27=100 pitch_curvecc27=1","title":"Examples"},{"location":"opcodes/varNN_/","text":"Example var01_cutoff=4800 var02_pitch=400 Here is how this could be used, together with varNN_mod and varNN_onccX to control velocity tracking on a filter cutoff: //Lowpass filter cutoff=120 cutoff_cc102=8400 fil_keytrack=100 resonance=0 resonance_cc103=24 var01_cutoff=4800 //Velocity track var01_mod=mult var01_oncc131=1 var01_oncc111=1 Available targets The list of possible modulation targets is basically the same standard list as for LFOs or envelopes, though variables can't modulate other modulators, so it's not currently possible to use a variable to modulate an LFO, or to modulate another variable. This list has not been verified by testing. It was created by cutting down the list of available targets for modulation by LFO. Decim and bitred might not actually be implemented.","title":"varNN "},{"location":"opcodes/varNN_/#example","text":"var01_cutoff=4800 var02_pitch=400 Here is how this could be used, together with varNN_mod and varNN_onccX to control velocity tracking on a filter cutoff: //Lowpass filter cutoff=120 cutoff_cc102=8400 fil_keytrack=100 resonance=0 resonance_cc103=24 var01_cutoff=4800 //Velocity track var01_mod=mult var01_oncc131=1 var01_oncc111=1","title":"Example"},{"location":"opcodes/varNN_/#available-targets","text":"The list of possible modulation targets is basically the same standard list as for LFOs or envelopes, though variables can't modulate other modulators, so it's not currently possible to use a variable to modulate an LFO, or to modulate another variable. This list has not been verified by testing. It was created by cutting down the list of available targets for modulation by LFO. Decim and bitred might not actually be implemented.","title":"Available targets"},{"location":"opcodes/varNN_curveccX/","text":"mult : multiplication, with 1 being full scale - 0 at a CC value of 0, and 1 at CC value of 127. This is how the amplitude opcode works. add : addition, how volume , cutoff and all other modulation destinations work by default when modulated. Example var01_mod=mult var02_mod=add Here is how multiplication could be used, together with varNN_* (in this case, var01_cutoff as 01 is the variable number and cutoff is the target) and varNN_onccX to control velocity tracking on a filter cutoff: //Lowpass filter cutoff=120 cutoff_cc102=8400 fil_keytrack=100 resonance=0 resonance_cc103=24 var01_cutoff=4800 //Velocity track var01_mod=mult var01_oncc131=1 var01_oncc111=1","title":"varNN curveccX"},{"location":"opcodes/varNN_curveccX/#example","text":"var01_mod=mult var02_mod=add Here is how multiplication could be used, together with varNN_* (in this case, var01_cutoff as 01 is the variable number and cutoff is the target) and varNN_onccX to control velocity tracking on a filter cutoff: //Lowpass filter cutoff=120 cutoff_cc102=8400 fil_keytrack=100 resonance=0 resonance_cc103=24 var01_cutoff=4800 //Velocity track var01_mod=mult var01_oncc131=1 var01_oncc111=1","title":"Example"},{"location":"opcodes/varNN_mod/","text":"mult : multiplication, with 1 being full scale - 0 at a CC value of 0, and 1 at CC value of 127. This is how the amplitude opcode works. add : addition, how volume , cutoff and all other modulation destinations work by default when modulated. Example var01_mod=mult var02_mod=add Here is how multiplication could be used, together with varNN_* (in this case, var01_cutoff as 01 is the variable number and cutoff is the target) and varNN_onccX to control velocity tracking on a filter cutoff: //Lowpass filter cutoff=120 cutoff_cc102=8400 fil_keytrack=100 resonance=0 resonance_cc103=24 var01_cutoff=4800 //Velocity track var01_mod=mult var01_oncc131=1 var01_oncc111=1","title":"varNN mod"},{"location":"opcodes/varNN_mod/#example","text":"var01_mod=mult var02_mod=add Here is how multiplication could be used, together with varNN_* (in this case, var01_cutoff as 01 is the variable number and cutoff is the target) and varNN_onccX to control velocity tracking on a filter cutoff: //Lowpass filter cutoff=120 cutoff_cc102=8400 fil_keytrack=100 resonance=0 resonance_cc103=24 var01_cutoff=4800 //Velocity track var01_mod=mult var01_oncc131=1 var01_oncc111=1","title":"Example"},{"location":"opcodes/varNN_onccX/","text":"mult : multiplication, with 1 being full scale - 0 at a CC value of 0, and 1 at CC value of 127. This is how the amplitude opcode works. add : addition, how volume , cutoff and all other modulation destinations work by default when modulated. Example var01_mod=mult var02_mod=add Here is how multiplication could be used, together with varNN_* (in this case, var01_cutoff as 01 is the variable number and cutoff is the target) and varNN_onccX to control velocity tracking on a filter cutoff: //Lowpass filter cutoff=120 cutoff_cc102=8400 fil_keytrack=100 resonance=0 resonance_cc103=24 var01_cutoff=4800 //Velocity track var01_mod=mult var01_oncc131=1 var01_oncc111=1","title":"varNN onccX"},{"location":"opcodes/varNN_onccX/#example","text":"var01_mod=mult var02_mod=add Here is how multiplication could be used, together with varNN_* (in this case, var01_cutoff as 01 is the variable number and cutoff is the target) and varNN_onccX to control velocity tracking on a filter cutoff: //Lowpass filter cutoff=120 cutoff_cc102=8400 fil_keytrack=100 resonance=0 resonance_cc103=24 var01_cutoff=4800 //Velocity track var01_mod=mult var01_oncc131=1 var01_oncc111=1","title":"Example"},{"location":"opcodes/vendor_specific/","text":"","title":"Vendor specific"},{"location":"opcodes/volume/","text":"Range is -144.6 to 6 in the specification, but many SFZ players can utilize values above 6. Sfz.dll, Rapture and Dimension have a +24 dB maximum, and ARIA has an upper limit of at least +144, perhaps even more. Examples volume=-24 volume=0 volume=3.5 gain_cc1=12 This will play the sample at unchanged volume when CC1 is at 0, and apply a 12 dB boost when CC1 is at maximum. gain_ccN / volume_onccN is useful for creating volume controls. In Aria, either gain or volume can be used in modulations; however, gain by itself (for example gain=5) is not valid. For a fixed volume change wihtout modulation, only volume works.","title":"Volume"},{"location":"opcodes/volume/#examples","text":"volume=-24 volume=0 volume=3.5 gain_cc1=12 This will play the sample at unchanged volume when CC1 is at 0, and apply a 12 dB boost when CC1 is at maximum. gain_ccN / volume_onccN is useful for creating volume controls. In Aria, either gain or volume can be used in modulations; however, gain by itself (for example gain=5) is not valid. For a fixed volume change wihtout modulation, only volume works.","title":"Examples"},{"location":"opcodes/volume_curveccN/","text":"Range is -144.6 to 6 in the specification, but many SFZ players can utilize values above 6. Sfz.dll, Rapture and Dimension have a +24 dB maximum, and ARIA has an upper limit of at least +144, perhaps even more. Examples volume=-24 volume=0 volume=3.5 gain_cc1=12 This will play the sample at unchanged volume when CC1 is at 0, and apply a 12 dB boost when CC1 is at maximum. gain_ccN / volume_onccN is useful for creating volume controls. In Aria, either gain or volume can be used in modulations; however, gain by itself (for example gain=5) is not valid. For a fixed volume change wihtout modulation, only volume works.","title":"volume curveccN"},{"location":"opcodes/volume_curveccN/#examples","text":"volume=-24 volume=0 volume=3.5 gain_cc1=12 This will play the sample at unchanged volume when CC1 is at 0, and apply a 12 dB boost when CC1 is at maximum. gain_ccN / volume_onccN is useful for creating volume controls. In Aria, either gain or volume can be used in modulations; however, gain by itself (for example gain=5) is not valid. For a fixed volume change wihtout modulation, only volume works.","title":"Examples"},{"location":"opcodes/volume_onccN/","text":"Range is -144.6 to 6 in the specification, but many SFZ players can utilize values above 6. Sfz.dll, Rapture and Dimension have a +24 dB maximum, and ARIA has an upper limit of at least +144, perhaps even more. Examples volume=-24 volume=0 volume=3.5 gain_cc1=12 This will play the sample at unchanged volume when CC1 is at 0, and apply a 12 dB boost when CC1 is at maximum. gain_ccN / volume_onccN is useful for creating volume controls. In Aria, either gain or volume can be used in modulations; however, gain by itself (for example gain=5) is not valid. For a fixed volume change wihtout modulation, only volume works.","title":"volume onccN"},{"location":"opcodes/volume_onccN/#examples","text":"volume=-24 volume=0 volume=3.5 gain_cc1=12 This will play the sample at unchanged volume when CC1 is at 0, and apply a 12 dB boost when CC1 is at maximum. gain_ccN / volume_onccN is useful for creating volume controls. In Aria, either gain or volume can be used in modulations; however, gain by itself (for example gain=5) is not valid. For a fixed volume change wihtout modulation, only volume works.","title":"Examples"},{"location":"opcodes/volume_smoothccN/","text":"Range is -144.6 to 6 in the specification, but many SFZ players can utilize values above 6. Sfz.dll, Rapture and Dimension have a +24 dB maximum, and ARIA has an upper limit of at least +144, perhaps even more. Examples volume=-24 volume=0 volume=3.5 gain_cc1=12 This will play the sample at unchanged volume when CC1 is at 0, and apply a 12 dB boost when CC1 is at maximum. gain_ccN / volume_onccN is useful for creating volume controls. In Aria, either gain or volume can be used in modulations; however, gain by itself (for example gain=5) is not valid. For a fixed volume change wihtout modulation, only volume works.","title":"volume smoothccN"},{"location":"opcodes/volume_smoothccN/#examples","text":"volume=-24 volume=0 volume=3.5 gain_cc1=12 This will play the sample at unchanged volume when CC1 is at 0, and apply a 12 dB boost when CC1 is at maximum. gain_ccN / volume_onccN is useful for creating volume controls. In Aria, either gain or volume can be used in modulations; however, gain by itself (for example gain=5) is not valid. For a fixed volume change wihtout modulation, only volume works.","title":"Examples"},{"location":"opcodes/volume_stepccN/","text":"Range is -144.6 to 6 in the specification, but many SFZ players can utilize values above 6. Sfz.dll, Rapture and Dimension have a +24 dB maximum, and ARIA has an upper limit of at least +144, perhaps even more. Examples volume=-24 volume=0 volume=3.5 gain_cc1=12 This will play the sample at unchanged volume when CC1 is at 0, and apply a 12 dB boost when CC1 is at maximum. gain_ccN / volume_onccN is useful for creating volume controls. In Aria, either gain or volume can be used in modulations; however, gain by itself (for example gain=5) is not valid. For a fixed volume change wihtout modulation, only volume works.","title":"volume stepccN"},{"location":"opcodes/volume_stepccN/#examples","text":"volume=-24 volume=0 volume=3.5 gain_cc1=12 This will play the sample at unchanged volume when CC1 is at 0, and apply a 12 dB boost when CC1 is at maximum. gain_ccN / volume_onccN is useful for creating volume controls. In Aria, either gain or volume can be used in modulations; however, gain by itself (for example gain=5) is not valid. For a fixed volume change wihtout modulation, only volume works.","title":"Examples"},{"location":"opcodes/waveguide/","text":"Not properly documented, but apparently supported in Dimension Pro, Rapture, and the Cakewalk sfz player at some point. Example waveguide=on","title":"Waveguide"},{"location":"opcodes/waveguide/#example","text":"waveguide=on","title":"Example"},{"location":"opcodes/width/","text":"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. Note: Range in the table is specified as -100 to 100. Some players, such as Aria/Sforzando, do not clamp the range. Values over 100 expand the stereo width. For example, for a mono signal panned 6dB to the left, a value of 200 produces the mono signal panned 12dB to the left. Examples width=100 // stereo width=0 // play this stereo sample as mono width=50 // mix 50% of one channel with the other","title":"Width"},{"location":"opcodes/width/#examples","text":"width=100 // stereo width=0 // play this stereo sample as mono width=50 // mix 50% of one channel with the other","title":"Examples"},{"location":"opcodes/width_curveccN/","text":"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. Note: Range in the table is specified as -100 to 100. Some players, such as Aria/Sforzando, do not clamp the range. Values over 100 expand the stereo width. For example, for a mono signal panned 6dB to the left, a value of 200 produces the mono signal panned 12dB to the left. Examples width=100 // stereo width=0 // play this stereo sample as mono width=50 // mix 50% of one channel with the other","title":"width curveccN"},{"location":"opcodes/width_curveccN/#examples","text":"width=100 // stereo width=0 // play this stereo sample as mono width=50 // mix 50% of one channel with the other","title":"Examples"},{"location":"opcodes/width_onccN/","text":"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. Note: Range in the table is specified as -100 to 100. Some players, such as Aria/Sforzando, do not clamp the range. Values over 100 expand the stereo width. For example, for a mono signal panned 6dB to the left, a value of 200 produces the mono signal panned 12dB to the left. Examples width=100 // stereo width=0 // play this stereo sample as mono width=50 // mix 50% of one channel with the other","title":"width onccN"},{"location":"opcodes/width_onccN/#examples","text":"width=100 // stereo width=0 // play this stereo sample as mono width=50 // mix 50% of one channel with the other","title":"Examples"},{"location":"opcodes/width_smoothccN/","text":"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. Note: Range in the table is specified as -100 to 100. Some players, such as Aria/Sforzando, do not clamp the range. Values over 100 expand the stereo width. For example, for a mono signal panned 6dB to the left, a value of 200 produces the mono signal panned 12dB to the left. Examples width=100 // stereo width=0 // play this stereo sample as mono width=50 // mix 50% of one channel with the other","title":"width smoothccN"},{"location":"opcodes/width_smoothccN/#examples","text":"width=100 // stereo width=0 // play this stereo sample as mono width=50 // mix 50% of one channel with the other","title":"Examples"},{"location":"opcodes/width_stepccN/","text":"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. Note: Range in the table is specified as -100 to 100. Some players, such as Aria/Sforzando, do not clamp the range. Values over 100 expand the stereo width. For example, for a mono signal panned 6dB to the left, a value of 200 produces the mono signal panned 12dB to the left. Examples width=100 // stereo width=0 // play this stereo sample as mono width=50 // mix 50% of one channel with the other","title":"width stepccN"},{"location":"opcodes/width_stepccN/#examples","text":"width=100 // stereo width=0 // play this stereo sample as mono width=50 // mix 50% of one channel with the other","title":"Examples"},{"location":"opcodes/xf_cccurve/","text":"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.","title":"Xf cccurve"},{"location":"opcodes/xf_keycurve/","text":"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.","title":"Xf keycurve"},{"location":"opcodes/xf_velcurve/","text":"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.","title":"Xf velcurve"},{"location":"opcodes/xfin_hiccN/","text":"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 . Examples xfin_locc1=64 xfin_hicc1=127 This is used alongside xfout_loccN / xfout_hiccN to create crossfaded dynamic layers for sustained instruments, for example to use the mod wheel to crossfade quiet tuba sustain samples to loud tuba sustain samples. It could also be used to crossfade wavetable samples, use one control to blend multiple microphone perspectives etc. When there are multiple regions under the same note wtih xfin_loccN , xfin_hiccN , xfout_loccN / xfout_hiccN used to determine which regions are currently heard (and at what volume), all regions will be triggered - but some of them may play at zero volume, and therefore be inaudible. In some cases where these controls are not used for dynamic expressive performance but rather for setting a static mix (for example of microphone perspectives), it can make sense to use them alongside loccN / hiccN to keep the regions which would be at zero volume from being triggered and consuming resources.","title":"xfin_loccN / xfin_hiccN"},{"location":"opcodes/xfin_hiccN/#examples","text":"xfin_locc1=64 xfin_hicc1=127 This is used alongside xfout_loccN / xfout_hiccN to create crossfaded dynamic layers for sustained instruments, for example to use the mod wheel to crossfade quiet tuba sustain samples to loud tuba sustain samples. It could also be used to crossfade wavetable samples, use one control to blend multiple microphone perspectives etc. When there are multiple regions under the same note wtih xfin_loccN , xfin_hiccN , xfout_loccN / xfout_hiccN used to determine which regions are currently heard (and at what volume), all regions will be triggered - but some of them may play at zero volume, and therefore be inaudible. In some cases where these controls are not used for dynamic expressive performance but rather for setting a static mix (for example of microphone perspectives), it can make sense to use them alongside loccN / hiccN to keep the regions which would be at zero volume from being triggered and consuming resources.","title":"Examples"},{"location":"opcodes/xfin_hikey/","text":"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 . Example xfin_lokey=c3 xfin_hikey=c4","title":"xfin_lokey / xfin_hikey"},{"location":"opcodes/xfin_hikey/#example","text":"xfin_lokey=c3 xfin_hikey=c4","title":"Example"},{"location":"opcodes/xfin_hivel/","text":"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 . Example xfin_lovel=0 xfin_hivel=31 This is useful for having velocity-based dynamic layers which are gradually crossfaded based on velocity, instead of having hard lovel / hivel cutoffs between the layers.","title":"xfin_lovel / xfin_hivel"},{"location":"opcodes/xfin_hivel/#example","text":"xfin_lovel=0 xfin_hivel=31 This is useful for having velocity-based dynamic layers which are gradually crossfaded based on velocity, instead of having hard lovel / hivel cutoffs between the layers.","title":"Example"},{"location":"opcodes/xfin_loccN/","text":"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 . Examples xfin_locc1=64 xfin_hicc1=127 This is used alongside xfout_loccN / xfout_hiccN to create crossfaded dynamic layers for sustained instruments, for example to use the mod wheel to crossfade quiet tuba sustain samples to loud tuba sustain samples. It could also be used to crossfade wavetable samples, use one control to blend multiple microphone perspectives etc. When there are multiple regions under the same note wtih xfin_loccN , xfin_hiccN , xfout_loccN / xfout_hiccN used to determine which regions are currently heard (and at what volume), all regions will be triggered - but some of them may play at zero volume, and therefore be inaudible. In some cases where these controls are not used for dynamic expressive performance but rather for setting a static mix (for example of microphone perspectives), it can make sense to use them alongside loccN / hiccN to keep the regions which would be at zero volume from being triggered and consuming resources.","title":"xfin_loccN / xfin_hiccN"},{"location":"opcodes/xfin_loccN/#examples","text":"xfin_locc1=64 xfin_hicc1=127 This is used alongside xfout_loccN / xfout_hiccN to create crossfaded dynamic layers for sustained instruments, for example to use the mod wheel to crossfade quiet tuba sustain samples to loud tuba sustain samples. It could also be used to crossfade wavetable samples, use one control to blend multiple microphone perspectives etc. When there are multiple regions under the same note wtih xfin_loccN , xfin_hiccN , xfout_loccN / xfout_hiccN used to determine which regions are currently heard (and at what volume), all regions will be triggered - but some of them may play at zero volume, and therefore be inaudible. In some cases where these controls are not used for dynamic expressive performance but rather for setting a static mix (for example of microphone perspectives), it can make sense to use them alongside loccN / hiccN to keep the regions which would be at zero volume from being triggered and consuming resources.","title":"Examples"},{"location":"opcodes/xfin_lokey/","text":"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 . Example xfin_lokey=c3 xfin_hikey=c4","title":"xfin_lokey / xfin_hikey"},{"location":"opcodes/xfin_lokey/#example","text":"xfin_lokey=c3 xfin_hikey=c4","title":"Example"},{"location":"opcodes/xfin_lovel/","text":"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 . Example xfin_lovel=0 xfin_hivel=31 This is useful for having velocity-based dynamic layers which are gradually crossfaded based on velocity, instead of having hard lovel / hivel cutoffs between the layers.","title":"xfin_lovel / xfin_hivel"},{"location":"opcodes/xfin_lovel/#example","text":"xfin_lovel=0 xfin_hivel=31 This is useful for having velocity-based dynamic layers which are gradually crossfaded based on velocity, instead of having hard lovel / hivel cutoffs between the layers.","title":"Example"},{"location":"opcodes/xfout_hiccN/","text":"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 . Examples xfout_locc1=64 xfout_hicc1=127","title":"xfout_loccN / xfout_hiccN"},{"location":"opcodes/xfout_hiccN/#examples","text":"xfout_locc1=64 xfout_hicc1=127","title":"Examples"},{"location":"opcodes/xfout_hikey/","text":"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 . Example xfout_lokey=72 xfout_hikey=84 As with the [key] opcode, the values can also be MIDI note names: xfout_lokey=c5 xfout_hikey=c6","title":"xfout_lokey / xfout_hikey"},{"location":"opcodes/xfout_hikey/#example","text":"xfout_lokey=72 xfout_hikey=84 As with the [key] opcode, the values can also be MIDI note names: xfout_lokey=c5 xfout_hikey=c6","title":"Example"},{"location":"opcodes/xfout_hivel/","text":"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 . Example xfout_lovel=32 xfout_hivel=63","title":"xfout_lovel / xfout_hivel"},{"location":"opcodes/xfout_hivel/#example","text":"xfout_lovel=32 xfout_hivel=63","title":"Example"},{"location":"opcodes/xfout_loccN/","text":"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 . Examples xfout_locc1=64 xfout_hicc1=127","title":"xfout_loccN / xfout_hiccN"},{"location":"opcodes/xfout_loccN/#examples","text":"xfout_locc1=64 xfout_hicc1=127","title":"Examples"},{"location":"opcodes/xfout_lokey/","text":"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 . Example xfout_lokey=72 xfout_hikey=84 As with the [key] opcode, the values can also be MIDI note names: xfout_lokey=c5 xfout_hikey=c6","title":"xfout_lokey / xfout_hikey"},{"location":"opcodes/xfout_lokey/#example","text":"xfout_lokey=72 xfout_hikey=84 As with the [key] opcode, the values can also be MIDI note names: xfout_lokey=c5 xfout_hikey=c6","title":"Example"},{"location":"opcodes/xfout_lovel/","text":"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 . Example xfout_lovel=32 xfout_hivel=63","title":"xfout_lovel / xfout_hivel"},{"location":"opcodes/xfout_lovel/#example","text":"xfout_lovel=32 xfout_hivel=63","title":"Example"},{"location":"software/engines/","text":"Name AIFF FLAC MP3 Ogg WAV WavPack ARIA \u2022 \u2022 \u2022 \u2022 Calfbox \u2022 \u2022 \u2022 \u2022 sfizz \u2022 \u2022 \u2022 \u2022 \u2022 \u2022","title":"Engines sample formats support"},{"location":"software/players/","text":"There are several SFZ players, which are used to play samples as defined in SFZ files. Sforzando currently offers the most complete SFZ standard support, including ARIA extensions , but SFZ files which only use the SFZ v1 or SFZ v2 standard will work with multiple SFZ players. We use \"Free and Open Source\" (FOSS) as defined by the OSI as \"software to be freely used, modified, and shared.\" Supported Opcodes Below are the known links to the various lists of supported opcodes:\\ BassMIDI , Bitwig , HISE , LinuxSampler , liquidsfz , OpenMPT , sfizz , zerberus (MuseScore <= v3.6.2) or else in our Wiki . Players Name License Linux macOS Windows Description Calfbox GPL-3.0-or-later \u2713 \u2713 \u2713 C library and Python module to build audio applications like MIDI sequencers or samplers (SFZ or SF2 via Fluidsynth). Carla (SFZero) GPL-2.0-or-later \u2713 \u2713 \u2713 Fully-featured audio plugin host, with support for many audio drivers and plugin formats. Grace MIT X X \u2713 liquidsfz LGPL-2.1 \u2713 X X SFZ sampler library with LV2 and JACK support. sfizz BSD-2-Clause \u2713 \u2713 \u2713 SFZ library, AU/LV2/VST3 plugin with JACK support. SFZero FOSS \u2713 \u2713 \u2713 An SFZ (and SF2) player and Juce module. Zerberus FOSS \u2713 \u2713 \u2713 MuseScore SFZ synthesizer. LinuxSampler Custom \u2713 \u2713 \u2713 BassMIDI VSTi Freeware X X \u2713 Extension to the BASS audio library, enabling the playing of MIDI files and custom event sequences, using SF2 soundfonts and/or SFZ to provide the sounds. MIDI input is also supported. HighLife Freeware \u2713 \u2713 \u2713 A sampler with integrated effects and wave editor, with support for WAV, MP3, OGG, RAW, FLAC, SND (Akai MPC 2000) and even AKP (Akai S5000/S6000) audio formats. sforzando Freeware X \u2713 \u2713 A free, highly SFZ 2.0 compliant sample player. Supports almost all SFZ v1 and v2 opcodes, plus ARIA extensions. TX16Wx Sampler Freeware X \u2713 \u2713 Zampler Freeware X \u2713 \u2713 Synth-based sample player using SFZ format as its sound generator. It supports very minimal SFZ v1 opcodes, only for key-range and velocity-range mapping. ARIA OEM X \u2713 \u2713 An audio sampling and synthesis Engine based on the SFZ 1.0 / SFZ 2.0 open file formats for instrument programming and the Scala open file format to define scales and temperaments. Bliss Sampler Commercial \u2713 \u2713 \u2713 An UI themable sampler and wave editor in VST2/3 and AU audio plugin format with selectable high quality interpolation and integrated effects. Samplelord Commercial X X \u2713 Sample player as standalone or VSTi plugin for Windows 32-bit OS that can load different sounds in different formats. Has basic parameter controls, supports only SFZ v1 opcodes. TAL-Sampler Commercial \u2713 \u2713 \u2713 Unify Commercial X \u2713 \u2713 Falcon Commercial X \u2713 \u2713 Wusik 8008, Wusik One, Wusik EVE V5 Commercial X X \u2713 sfz-web-player CC0-1.0 \u2713 \u2713 \u2713 TypeScript/JavaScript SFZ player using the Web Audio API. Import from SFZ Name License Linux macOS Windows Description Bitwig Studio Commercial \u2713 \u2713 \u2713 Sampler device supports the import of SFZ. Also via drag & drop. HISE GPL-3.0 \u2713 \u2713 \u2713 MSoundFactory Commercial X \u2713 \u2713 Sampler module imports/exports SFZ. OpenMPT BSD-3-Clause X X \u2713 Poise Freeware X X \u2713 Simple 16 drum pads percussion sampler, 8 layers. Very limited SFZ support. Renoise (Redux) Commercial \u2713 \u2713 \u2713 No longer available Alchemy (Camel Audio was acquired by Apple, and the current incarnation of Alchemy no longer supports SFZ.) Cakewalk sfz (backup on web.archive.org) Equator 2 (per Equator 2 FAQ , \"SFZ import is not currently supported\")","title":"SFZ Players"},{"location":"software/players/#supported-opcodes","text":"Below are the known links to the various lists of supported opcodes:\\ BassMIDI , Bitwig , HISE , LinuxSampler , liquidsfz , OpenMPT , sfizz , zerberus (MuseScore <= v3.6.2) or else in our Wiki .","title":"Supported Opcodes"},{"location":"software/players/#no-longer-available","text":"Alchemy (Camel Audio was acquired by Apple, and the current incarnation of Alchemy no longer supports SFZ.) Cakewalk sfz (backup on web.archive.org) Equator 2 (per Equator 2 FAQ , \"SFZ import is not currently supported\")","title":"No longer available"},{"location":"software/tools/","text":"Although SFZ files can be created with any text editor, and some users have also created SFZ with spreadsheets, there are some dedicated tools which can make mapping large amounts of samples easier. As SFZ instruments can quickly grow to thousands of samples, efficiency in creating the mappings becomes important. One way of creating SFZ files is to use one of these tools to create the initial maps with keys, dynamic layers, round robins etc. defined, then add controls etc. using a text editor. Automappers Name License Linux macOS Windows Description SFZ Python Automapper Public Domain \u2713 \u2713 \u2713 Folder-to-SFZ converter Freeware \u2713 \u2713 \u2713 Bjoerns Sample Mapper Freeware X \u2713 \u2713 soundmap GPL-3.0 \u2713 \u2713 \u2713 Online automapper. Can create .sfz and .dspreset Converters Name License Linux macOS Windows Description ConvertWithMoss (Java) LGPL-3.0-only \u2713 \u2713 \u2713 Converts multisamples in a specific source format to a different destination format. exs2sfz (Python) ISC \u2713 \u2713 \u2713 EXS24 to SFZ sample library metadata converter. SFZ to HISE Converter MIT \u2713 \u2713 \u2713 Parses and translates/converts SFZ instruments to HISE samplemaps and extracts SFZ opcode data to a JS/JSON object. Runs in a web browser. EXS2SFZ Freeware X \u2713 \u2713 Imports sample mapping information from EXS24 instruments and generates SFZ files from it. TX2SFZ Freeware X X \u2713 Converts sample mapping information from TX16WX sampler to SFZ. Awave Studio Commercial X X \u2713 Multi-purpose audio tool that reads a veritable host of audio carrying file formats from different platforms, synthesizers, trackers, mobile phones. It can be used in a variety of ways; as a file format converter, as an audio editor, or as a synth instrument editor. Chicken Systems Translator Commercial X \u2713 \u2713 Extreme Sample Converter Commercial X X \u2713 sfz-tools-cli CC0-1.0 \u2713 \u2713 \u2713 Command line interface comprised of several tools to read, convert and parse SFZ and audio files. Editors Name License Linux macOS Windows Description Polyphone GPL-3.0 \u2713 \u2713 \u2713 An open-source soundfont editor for creating musical instruments. Note: being a soundfont editor (sf2) it has limited sfz support when exporting. sfZed Freeware X X \u2713 An editor for the SFZ format used by certain VST instruments. It will also convert Soundfont SF2 to SFZ and works with a midi keyboard to allow you to play and set values, including mapping drum samples. Loop Editors Name License Linux macOS Windows Description LoopAuditioneer GPL-3.0-or-later \u2713 X \u2713 Software for evaluating, creating and manipulating loops and cues and other properties of wav file metadata. Edison Commercial X \u2713 \u2713 Fully integrated audio editing and recording tool in FL Studio. Endless WAV Freeware X \u2713 \u2713 Software to create sustain loops in WAV files (8, 16 and 24 bit) with loop mix, auto loop, realtime crossfade, fade and cut functions. Wavosaur Freeware X X \u2713 Software for editing, processing and recording sounds, wav and mp3 files. Wavosaur has all the features to edit audio (cut, copy, paste, etc.) produce music loops, analyze, record, batch convert. Supports VST plugins, ASIO driver, multichannel wav files, real time effect processing. Misc Name License Linux macOS Windows Description Freepats-tools GPL-3.0 \u2713 \u2713 \u2713 Tools to manage, create and convert sound fonts, collections of sampled musical instruments and sound banks. Originally created for the FreePats project . sfzlint MIT \u2713 \u2713 \u2713 Linter and parser for .sfz files. sfz-tools-core CC0-1.0 \u2713 \u2713 \u2713 TypeScript/JavaScript library to read, convert and parse SFZ and audio files. Syntax Highlighting Name License Linux macOS Windows Description CudaText Editor MPL-2.0 \u2713 \u2713 \u2713 SFZ major mode for GNU Emacs MIT \u2713 \u2713 \u2713 for Geany FOSS \u2713 \u2713 \u2713 for gedit FOSS \u2713 \u2713 \u2713 for Kate MIT \u2713 \u2713 \u2713 for Sublime Text FOSS \u2713 \u2713 \u2713 for VSCode MIT \u2713 \u2713 \u2713 for Notepad++ FOSS X X \u2713 for Notepad++ FOSS X X \u2713 SFZ Tools for UltraEdit FOSS \u2713 \u2713 \u2713 Some Windows only software can be used under other Unix based operating systems using Wine / CrossOver or in a virtual machine software like VirtualBox .","title":"SFZ Creation Tools"},{"location":"tutorials/basic_sfz_file/","text":"Just copy the following in your preferred text editor. We also have a section in the tools page listing some text editor's SFZ syntax highlighting add-ons. Fill in the blanks and save as an SFZ: //------------------------------------------------------------------------------ // A basic sfz template //------------------------------------------------------------------------------ default_path= // relative path of your samples // parameters that affect the whole instrument go here. // ***************************************************************************** // Your mapping starts here // ***************************************************************************** // 1 // Parameters that affect multiple regions go here fil_type= // One of the many filter types available cutoff= // freq in hertz cutoff_onccX= // variation in cents resonance= // value in db resonance_onccX= // variation in db trigger=attack // or release or first or legato loop_mode=no_loop // or loop_continuous or one_shot or loop_sustain sample=/*wav or flac file*/ key=// or lokey= hikey= pitch_keycenter= sample= key= sample= key= sample= key= sample= key= sample= key= sample= key= sample= key=","title":"Basic SFZ file"},{"location":"tutorials/basics/","text":"A SFZ file is a set of plain text, computer-readable instructions, which accompany a sample set and define how the sampler should load and work with those samples. If the samples are the strings of a piano or pipes of an organ, the SFZ file is the mechanism that connects the key to the hammer which strikes the strings or the air and signals to the pipes of the organ. SFZ files can be opened, edited, and created in any text editor application, even the default 'Notepad' in Windows. No external software is necessary to create or modify a SFZ file, though there are some pieces of software or scripts out there which greatly ease the creation or editing process. An example of this is an automapper, which is a script or application that takes a sample set and uses the names of the samples or actual audio content to determine how to map those samples. The SFZ file's role is a simple, two-part operation: 1. Explain how to filter or sort the incoming MIDI data and determine which sample(s), if any, should sound in response. 2. Instruct the Sampler how to modulate , or adapt , those samples, such as make them quieter or apply a filter. graph LR A(Incoming MIDI Data) --> B(Sampler) B --> C(Audio Output) B --> D(SFZ File) D --> E(Sample1.wav) D --> F(Sample2.wav) D --> G(Sample3.wav) E --> H(Modulation) F --> H G --> H H --> C Opcodes The primary component of any SFZ file is the opcode. Opcodes essentially define 'thing=value'. For example, the opcode 'volume=6' defines the volume of the sample as +6 decibels relative to normal. Opcodes functionally perform two different roles: (1) defining performance parameters , or (2) restricting the conditions under which that sound may be used . For example, volume=6 defines a performance property: the sample will sound 6 decibels louder. On the other hand, lokey=36 hikey=38 limits what condition the sound may play: the key to trigger the sound must be in the range 36 through 38. You can think of your SFZ file as a giant conditional filter, which systematically takes a MIDI message and attempts to perform a specific action in response. At the most basic level, if you simply type sample=piano.wav Then that sample will be mapped to MIDI key 60 (middle C), and be available at ALL velocity ranges, ALL key ranges, and under ALL continuous controller values (i.e. regardless of if sustain pedal is held down or not, for example). If we add lokey=58 hikey=62 pitch_keycenter=60 to the region, then our piano note will ONLY respond if a key within the range 58-62 (Bb to D on either side of middle C) is played. We are restricting the conditions under which that specific sample will be played. We can restrict whether or not a specific sample will play by a very wide range of parameters, including which keys are pressed, at what velocity, and what MIDI continuous controller (CC) values are currently present. For example, we can have a piano sample for when the sustain pedal is down AND velocity is less than 20 AND the key pressed is between 58 and 62 as follows: sample=piano.wav pitch_keycenter=60 //here we define the real \"concert\" pitch of the sample, MIDI note 60 or middle C lokey=58 //here we set the range of pitches the region will play on hikey=62 lovel=1 //here we set the range of key velocities that the region will play on hivel=20 locc64=64 //here we set that the sustain pedal, cc64, must be on for the region to play hicc64=127 If for any reason the MIDI signal DOES NOT meet ALL of the conditions, that sample will not play. That is the basic underlying framework on how SFZ files are organized. Headers Headers serve to organize and separate opcodes, and are marked with < > on either side. There are three primary headers: , , and , from most to least restrictive. A region, for example, may only contain a single sample. A group is comprised of a series of regions, each containing a single sample. A global is comprised of a series of groups, each containing a series of regions, etc. is a special purpose header used for a few special opcodes such as default_path . Generally SFZ instruments are not indented, but if they were, they would appear as such: sample= sample= sample= sample= Inheriting Note that if you entered an opcode between a and its first , that opcode would be inherited by the s within the group. The same can be done for as well, with affecting all of the s within it, and that being passed down to each of the s within those groups as welll, allowing the parameters of dozens, hundreds, or thousands of samples to be altered with a single line. This massively cuts down on file size, as you do not need to repeat the same text in each item. lovel=64 // enter stuff here if you want to apply it to all regions hivel=127 sample=Trumpet_C4_v2.wav key=60 sample=Trumpet_C#4_v2.wav key=61 sample=Trumpet_D4_v2.wav key=62 is the same as: sample=Trumpet_C4_v2.wav key=60 lovel=64 hivel=127 sample=Trumpet_C#4_v2.wav key=61 lovel=64 hivel=127 sample=Trumpet_D4_v2.wav key=62 lovel=64 hivel=127 This behavior can be overriden if that same opcode is specified within the lesser header with a different value. For example: volume=6 //this value will be inherited by everything, unless overriden below //Group A volume=5 //Region 1 volume=4 //Region 2 //Group B //Region 3 volume=2 //Region 4 (indented for clarity; SFZ is not usually indented) Here's what's going on here: Region 1's volume is 4, as it has volume defined. Region 2's volume is 5, as it doesn't have volume defined, so it inherits from Group A, as Group A has volume defined. Region 3's volume is 2, as it has volume defined. Region 4's volume is 6 as it doesn't have volume defined, nor does Group B, so it inherits from the Global volume setting which is 6. Always look for opportunities to use inheriting to keep your scripts tidy by removing duplicate code. Header Nesting Unlike many popular scripting or programming languages or markup languages like HTML, XML, JSON, etc. there is no such concept as nesting in SFZ. Nesting is when a header of the same type can exist within another header of the same type. Nesting is very useful, but it can add a lot of complexity and layers to a language, and is a common source of bugs or mistakes as well as a slight impediment of speed. The downside to the lack of nesting is that the number of layers is restricted severely rather than infinite. That is why there is both and , and the ARIA Player/Sforzando will also use an intermediate between the two, to provide one more layer. In SFZ format, a header ends when the next header of that type is started. For example, if I put a after another , it will end the first region automatically at the start of declaring the next. Keep in mind that group, global, and master are merely macros to reduce duplicate code. When compiled (in most SFZ players), the SFZ file will run as if everything is inside the regions themselves. Organization of Opcodes within Headers Opcodes may be listed in a row OR one per line, unofficially known as 'condensed' and 'expanded' view: sample=piano_D4_vl1.wav lokey=62 hikey=63 pitch_keycenter=62 lovel=1 hivel=50 is equal to: sample=piano_D4_vl1.wav lokey=62 hikey=63 pitch_keycenter=62 lovel=1 hivel=50 You can see how much space is saved in the latter case, and it allows bulk adjustments to be done easier and makes debugging slightly easier, e.g.: sample=piano_D4_vl1.wav lokey=62 hikey=63 pitch_keycenter=62 lovel=1 hivel=50 sample=piano_E4_vl1.wav lokey=64 hikey=65 pitch_keycenter=64 lovel=1 hivel=50 sample=piano_F#4_vl1.wav lokey=66 hikey=67 pitch_keycenter=66 lovel=11 hivel=50 sample=piano_G#4_vl1.wav lokey=68 hikey=69 pitch_keycenter=68 lovel=1 hivel=50 You can see there is something wrong with the third region, a typo of lovel=11 instaed of lovel=1 . These four lines would replace over 20 lines, making files much more manageable. It is possible to swap between the two by using a find-and-replace operation in your text editor (e.g. Notepad++ or equivalent) to replace new line character with a space (this can be done by selecting a blank line by clicking and dragging down on a blank so that one line is highlighted, THEN open the find/replace dialog and it will be auto-filled in the 'find' field; put a single space in the 'replace with' field. Try executing and see if it works; see the video below for a visual representation of the process). https://youtu.be/Lr7_qS2iV30 Pitch If using a pitch based instrument, you will most likely be working heavily with three opcodes: lokey , hikey , and pitch_keycenter . These opcodes define the range of MIDI note numbers or note names that will allow the note to play. It is highly recommended that you use MIDI note numbers, as pitch naming conventions are poorly standardized at best. You can remember the MIDI note numbers for the C's as follows, using International Pitch Notation , which states C4=MIDI note number 60: C1:24 C2: 36 (this is the C below bass clef) C3: 48 (this is the C in bass clef) C4: 60 (this is Middle C) C5: 72 (this is the C in treble clef) C6: 84 (this is the C above treble clef) C7: 96 (note that many, many samplers use a different standard of C3=60, in which case all numbers are shifted down one; in fact, this is probably much more commonly found) You'll notice each value is exactly 12 notes apart from the others. It's not too difficult to calculate notes between the C's, or keep a chart on your wall or desk with the note names and MIDI numbers listed out. Many hours have been saved debugging and mapping for me in this way. Velocity Layers For most instruments, it is possible to perform notes of varying intensity. For classically trained musicians, this might be called dynamics (such as piano, forte, mezzo-forte, etc.). For a piano, when a key is struck with minimal force versus a great deal of force, a rather different tone is emitted, with harder strikes having more higher frequency content present. In the MIDI world, we refer to this as Velocity , borrowing the term from the world of physics. In the original MIDI spec, velocity has a range of 1-127 (aside: a velocity value of '0' is actually an alias of 'note off' signal, so the actual range is 1-127, not 0-127). So, to make a realistic piano (or really most any instrument), it is necessary to sample the tone of the instrument at several different dynamic levels or velocities. We collectively refer to these sets of levels as Velocity Layers or Dynamic Layers . For example, let us say we record a piano with three such velocity layers. The softest layer might be what a classically trained pianist might call piano or pianissimo (p or pp marking). The moderate layer might be mezzo-forte (mf) , and the hardest layer fortissimo (ff) . In SFZ, we would assign each layer to a velocity range from the 1-127 range. For example, the lowest layer might get the range of 1-50, the medium from 51-100, and the loudest from 101-127. We express this in SFZ using lovel and hivel, for example: sample=piano_C4_vl1.wav lovel=1 hivel=50 sample=piano_C4_vl2.wav lovel=51 hivel=100 sample=piano_C4_vl3.wav lovel=101 hivel=127 We would of course also add our lokey , hikey , and pitch_keycenter to these as well if we recorded multiple tones on the instrument. Using Velocity with Groups & Inheriting To simplify our lives and keep our SFZ files from being huge, we can also use the header to organize our velocity layers, for example. Any within a will of course inherit whatever is listed in that , so if we group our samples as shown below, we can significantly cut down on the amount of space needed in the file: //velocity layer 1 (pp) lovel=1 hivel=50 //C4 sample=piano_C4_vl1.wav lokey=60 hikey=61 pitch_keycenter=60 //D4 sample=piano_D4_vl1.wav lokey=62 hikey=63 pitch_keycenter=62 //E4 sample=piano_E4_vl1.wav lokey=64 hikey=64 pitch_keycenter=64 //F4 sample=piano_F4_vl1.wav lokey=65 hikey=66 pitch_keycenter=65 //velocity layer 2 (mf) lovel=51 hivel=100 //C4 sample=piano_C4_vl2.wav lokey=60 hikey=61 pitch_keycenter=60 //D4 sample=piano_D4_vl2.wav lokey=62 hikey=63 pitch_keycenter=62 //E4 sample=piano_E4_vl2.wav lokey=64 hikey=64 pitch_keycenter=64 //F4 sample=piano_F4_vl2.wav lokey=65 hikey=66 pitch_keycenter=65 //velocity layer 3 (ff) lovel=101 hivel=127 //C4 sample=piano_C4_vl3.wav lokey=60 hikey=61 pitch_keycenter=60 //D4 sample=piano_D4_vl3.wav lokey=62 hikey=63 pitch_keycenter=62 //E4 sample=piano_E4_vl3.wav lokey=64 hikey=64 pitch_keycenter=64 //F4 sample=piano_F4_vl3.wav lokey=65 hikey=66 pitch_keycenter=65 Keep in mind of course that we can always override the inheriting behavior here, such as in the case of a sample for which only two velocity layers were recorded. This might happen in the case of a mistake, or in the case where time was running short in the session, or in some cases where the instrument physically has less distinction between its quietest and loudest sounds and it was desirable to save some time. You can also use group, master, and global to organize other things than velocity layers, such as keys, sustain pedal state, round robins, mic positions, and more. Just be careful as in some cases you might run out of headers to use if the file gets too complex, such as if you are using multiple mic positions, round robins, and grouping your velocity layers as well. Includes One final more advanced topic to discuss is Includes. Perhaps the dark magic of SFZ, #include allows you to take the contents of one SFZ file and import them into your current file. This allows another layer of organiziation to take place, with, for example, all of the samples for each drum in a drum kit to exist in a separate .sfz file without an assigned key range, and a single master .sfz file to inherit each of those into a where their key range is assigned (see Virtuosity Drums as a good example of this process). This might also be useful for an acoustic instrument to organize by mic position or articulation. This allows you to keep an extremely tidy workflow, creating easily-managed main files where you can rapidly change key ranges and other control values to get the controls you need. .videoWrapper { position: relative; padding-bottom: 56.333%; height: 0; background: black; } .videoWrapper iframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 0; } function get_youtube_id(url) { var p = /^(?:https?:\\/\\/)?(?:www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=)|youtube-nocookie\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/; return (url.match(p)) ? RegExp.$1 : false; } function vimeo_embed(url,el) { var id = false; $.ajax({ url: 'https://vimeo.com/api/oembed.json?url='+url, async: true, success: function(response) { if(response.video_id) { id = response.video_id; if(url.indexOf('autoplay=1') !== -1) var autoplay=1; else var autoplay=0; if(url.indexOf('loop=1') !== -1) var loop=1; else var loop=0; var theInnerHTML = '
'; p[i].innerHTML = theInnerHTML; } if(p[i].innerHTML.indexOf('vimeo.com') !== -1) { //ask vimeo for the id and place the embed vimeo_embed(p[i].innerHTML,p[i]); } } } } video_embed(); function mp3_embed() { var p = document.getElementsByTagName('p'); for(var i = 0; i < p.length; i++) { if(p[i].innerHTML.indexOf('.mp3') !== -1) { var str = p[i].innerHTML.split('?'); if(str.length == 1) str[1] = ''; var str1 = str[1]; str1 = str1.replace('&','').replace('&',''); str1 = str1.replace('autoplay=1','').replace('autoplay=0',''); str1 = str1.replace('loop=1','').replace('loop=0',''); str1 = str1.replace('controls=0','').replace('controls=1',''); if (str[0].lastIndexOf('.mp3', str[0].length - 4) === str[0].length - 4 && str1.length == 0) { if(str[1].indexOf('autoplay=1') !== -1) var autoplay=1; else var autoplay=0; if(str[1].indexOf('loop=1') !== -1) var loop=1; else var loop=0; if(str[1].indexOf('controls=0') !== -1) var controls=0; else var controls=1; var newInnerHTML = 'Your browser does not support the audio element.'; p[i].innerHTML = newInnerHTML; } } } } mp3_embed();","title":"Intro to SFZ"},{"location":"tutorials/basics/#opcodes","text":"The primary component of any SFZ file is the opcode. Opcodes essentially define 'thing=value'. For example, the opcode 'volume=6' defines the volume of the sample as +6 decibels relative to normal. Opcodes functionally perform two different roles: (1) defining performance parameters , or (2) restricting the conditions under which that sound may be used . For example, volume=6 defines a performance property: the sample will sound 6 decibels louder. On the other hand, lokey=36 hikey=38 limits what condition the sound may play: the key to trigger the sound must be in the range 36 through 38. You can think of your SFZ file as a giant conditional filter, which systematically takes a MIDI message and attempts to perform a specific action in response. At the most basic level, if you simply type sample=piano.wav Then that sample will be mapped to MIDI key 60 (middle C), and be available at ALL velocity ranges, ALL key ranges, and under ALL continuous controller values (i.e. regardless of if sustain pedal is held down or not, for example). If we add lokey=58 hikey=62 pitch_keycenter=60 to the region, then our piano note will ONLY respond if a key within the range 58-62 (Bb to D on either side of middle C) is played. We are restricting the conditions under which that specific sample will be played. We can restrict whether or not a specific sample will play by a very wide range of parameters, including which keys are pressed, at what velocity, and what MIDI continuous controller (CC) values are currently present. For example, we can have a piano sample for when the sustain pedal is down AND velocity is less than 20 AND the key pressed is between 58 and 62 as follows: sample=piano.wav pitch_keycenter=60 //here we define the real \"concert\" pitch of the sample, MIDI note 60 or middle C lokey=58 //here we set the range of pitches the region will play on hikey=62 lovel=1 //here we set the range of key velocities that the region will play on hivel=20 locc64=64 //here we set that the sustain pedal, cc64, must be on for the region to play hicc64=127 If for any reason the MIDI signal DOES NOT meet ALL of the conditions, that sample will not play. That is the basic underlying framework on how SFZ files are organized.","title":"Opcodes"},{"location":"tutorials/basics/#headers","text":"Headers serve to organize and separate opcodes, and are marked with < > on either side. There are three primary headers: , , and , from most to least restrictive. A region, for example, may only contain a single sample. A group is comprised of a series of regions, each containing a single sample. A global is comprised of a series of groups, each containing a series of regions, etc. is a special purpose header used for a few special opcodes such as default_path . Generally SFZ instruments are not indented, but if they were, they would appear as such: sample= sample= sample= sample=","title":"Headers"},{"location":"tutorials/basics/#inheriting","text":"Note that if you entered an opcode between a and its first , that opcode would be inherited by the s within the group. The same can be done for as well, with affecting all of the s within it, and that being passed down to each of the s within those groups as welll, allowing the parameters of dozens, hundreds, or thousands of samples to be altered with a single line. This massively cuts down on file size, as you do not need to repeat the same text in each item. lovel=64 // enter stuff here if you want to apply it to all regions hivel=127 sample=Trumpet_C4_v2.wav key=60 sample=Trumpet_C#4_v2.wav key=61 sample=Trumpet_D4_v2.wav key=62 is the same as: sample=Trumpet_C4_v2.wav key=60 lovel=64 hivel=127 sample=Trumpet_C#4_v2.wav key=61 lovel=64 hivel=127 sample=Trumpet_D4_v2.wav key=62 lovel=64 hivel=127 This behavior can be overriden if that same opcode is specified within the lesser header with a different value. For example: volume=6 //this value will be inherited by everything, unless overriden below //Group A volume=5 //Region 1 volume=4 //Region 2 //Group B //Region 3 volume=2 //Region 4 (indented for clarity; SFZ is not usually indented) Here's what's going on here: Region 1's volume is 4, as it has volume defined. Region 2's volume is 5, as it doesn't have volume defined, so it inherits from Group A, as Group A has volume defined. Region 3's volume is 2, as it has volume defined. Region 4's volume is 6 as it doesn't have volume defined, nor does Group B, so it inherits from the Global volume setting which is 6. Always look for opportunities to use inheriting to keep your scripts tidy by removing duplicate code.","title":"Inheriting"},{"location":"tutorials/basics/#header-nesting","text":"Unlike many popular scripting or programming languages or markup languages like HTML, XML, JSON, etc. there is no such concept as nesting in SFZ. Nesting is when a header of the same type can exist within another header of the same type. Nesting is very useful, but it can add a lot of complexity and layers to a language, and is a common source of bugs or mistakes as well as a slight impediment of speed. The downside to the lack of nesting is that the number of layers is restricted severely rather than infinite. That is why there is both and , and the ARIA Player/Sforzando will also use an intermediate between the two, to provide one more layer. In SFZ format, a header ends when the next header of that type is started. For example, if I put a after another , it will end the first region automatically at the start of declaring the next. Keep in mind that group, global, and master are merely macros to reduce duplicate code. When compiled (in most SFZ players), the SFZ file will run as if everything is inside the regions themselves.","title":"Header Nesting"},{"location":"tutorials/basics/#organization-of-opcodes-within-headers","text":"Opcodes may be listed in a row OR one per line, unofficially known as 'condensed' and 'expanded' view: sample=piano_D4_vl1.wav lokey=62 hikey=63 pitch_keycenter=62 lovel=1 hivel=50 is equal to: sample=piano_D4_vl1.wav lokey=62 hikey=63 pitch_keycenter=62 lovel=1 hivel=50 You can see how much space is saved in the latter case, and it allows bulk adjustments to be done easier and makes debugging slightly easier, e.g.: sample=piano_D4_vl1.wav lokey=62 hikey=63 pitch_keycenter=62 lovel=1 hivel=50 sample=piano_E4_vl1.wav lokey=64 hikey=65 pitch_keycenter=64 lovel=1 hivel=50 sample=piano_F#4_vl1.wav lokey=66 hikey=67 pitch_keycenter=66 lovel=11 hivel=50 sample=piano_G#4_vl1.wav lokey=68 hikey=69 pitch_keycenter=68 lovel=1 hivel=50 You can see there is something wrong with the third region, a typo of lovel=11 instaed of lovel=1 . These four lines would replace over 20 lines, making files much more manageable. It is possible to swap between the two by using a find-and-replace operation in your text editor (e.g. Notepad++ or equivalent) to replace new line character with a space (this can be done by selecting a blank line by clicking and dragging down on a blank so that one line is highlighted, THEN open the find/replace dialog and it will be auto-filled in the 'find' field; put a single space in the 'replace with' field. Try executing and see if it works; see the video below for a visual representation of the process). https://youtu.be/Lr7_qS2iV30","title":"Organization of Opcodes within Headers"},{"location":"tutorials/basics/#pitch","text":"If using a pitch based instrument, you will most likely be working heavily with three opcodes: lokey , hikey , and pitch_keycenter . These opcodes define the range of MIDI note numbers or note names that will allow the note to play. It is highly recommended that you use MIDI note numbers, as pitch naming conventions are poorly standardized at best. You can remember the MIDI note numbers for the C's as follows, using International Pitch Notation , which states C4=MIDI note number 60: C1:24 C2: 36 (this is the C below bass clef) C3: 48 (this is the C in bass clef) C4: 60 (this is Middle C) C5: 72 (this is the C in treble clef) C6: 84 (this is the C above treble clef) C7: 96 (note that many, many samplers use a different standard of C3=60, in which case all numbers are shifted down one; in fact, this is probably much more commonly found) You'll notice each value is exactly 12 notes apart from the others. It's not too difficult to calculate notes between the C's, or keep a chart on your wall or desk with the note names and MIDI numbers listed out. Many hours have been saved debugging and mapping for me in this way.","title":"Pitch"},{"location":"tutorials/basics/#velocity-layers","text":"For most instruments, it is possible to perform notes of varying intensity. For classically trained musicians, this might be called dynamics (such as piano, forte, mezzo-forte, etc.). For a piano, when a key is struck with minimal force versus a great deal of force, a rather different tone is emitted, with harder strikes having more higher frequency content present. In the MIDI world, we refer to this as Velocity , borrowing the term from the world of physics. In the original MIDI spec, velocity has a range of 1-127 (aside: a velocity value of '0' is actually an alias of 'note off' signal, so the actual range is 1-127, not 0-127). So, to make a realistic piano (or really most any instrument), it is necessary to sample the tone of the instrument at several different dynamic levels or velocities. We collectively refer to these sets of levels as Velocity Layers or Dynamic Layers . For example, let us say we record a piano with three such velocity layers. The softest layer might be what a classically trained pianist might call piano or pianissimo (p or pp marking). The moderate layer might be mezzo-forte (mf) , and the hardest layer fortissimo (ff) . In SFZ, we would assign each layer to a velocity range from the 1-127 range. For example, the lowest layer might get the range of 1-50, the medium from 51-100, and the loudest from 101-127. We express this in SFZ using lovel and hivel, for example: sample=piano_C4_vl1.wav lovel=1 hivel=50 sample=piano_C4_vl2.wav lovel=51 hivel=100 sample=piano_C4_vl3.wav lovel=101 hivel=127 We would of course also add our lokey , hikey , and pitch_keycenter to these as well if we recorded multiple tones on the instrument.","title":"Velocity Layers"},{"location":"tutorials/basics/#using-velocity-with-groups-inheriting","text":"To simplify our lives and keep our SFZ files from being huge, we can also use the header to organize our velocity layers, for example. Any within a will of course inherit whatever is listed in that , so if we group our samples as shown below, we can significantly cut down on the amount of space needed in the file: //velocity layer 1 (pp) lovel=1 hivel=50 //C4 sample=piano_C4_vl1.wav lokey=60 hikey=61 pitch_keycenter=60 //D4 sample=piano_D4_vl1.wav lokey=62 hikey=63 pitch_keycenter=62 //E4 sample=piano_E4_vl1.wav lokey=64 hikey=64 pitch_keycenter=64 //F4 sample=piano_F4_vl1.wav lokey=65 hikey=66 pitch_keycenter=65 //velocity layer 2 (mf) lovel=51 hivel=100 //C4 sample=piano_C4_vl2.wav lokey=60 hikey=61 pitch_keycenter=60 //D4 sample=piano_D4_vl2.wav lokey=62 hikey=63 pitch_keycenter=62 //E4 sample=piano_E4_vl2.wav lokey=64 hikey=64 pitch_keycenter=64 //F4 sample=piano_F4_vl2.wav lokey=65 hikey=66 pitch_keycenter=65 //velocity layer 3 (ff) lovel=101 hivel=127 //C4 sample=piano_C4_vl3.wav lokey=60 hikey=61 pitch_keycenter=60 //D4 sample=piano_D4_vl3.wav lokey=62 hikey=63 pitch_keycenter=62 //E4 sample=piano_E4_vl3.wav lokey=64 hikey=64 pitch_keycenter=64 //F4 sample=piano_F4_vl3.wav lokey=65 hikey=66 pitch_keycenter=65 Keep in mind of course that we can always override the inheriting behavior here, such as in the case of a sample for which only two velocity layers were recorded. This might happen in the case of a mistake, or in the case where time was running short in the session, or in some cases where the instrument physically has less distinction between its quietest and loudest sounds and it was desirable to save some time. You can also use group, master, and global to organize other things than velocity layers, such as keys, sustain pedal state, round robins, mic positions, and more. Just be careful as in some cases you might run out of headers to use if the file gets too complex, such as if you are using multiple mic positions, round robins, and grouping your velocity layers as well.","title":"Using Velocity with Groups & Inheriting"},{"location":"tutorials/basics/#includes","text":"One final more advanced topic to discuss is Includes. Perhaps the dark magic of SFZ, #include allows you to take the contents of one SFZ file and import them into your current file. This allows another layer of organiziation to take place, with, for example, all of the samples for each drum in a drum kit to exist in a separate .sfz file without an assigned key range, and a single master .sfz file to inherit each of those into a where their key range is assigned (see Virtuosity Drums as a good example of this process). This might also be useful for an acoustic instrument to organize by mic position or articulation. This allows you to keep an extremely tidy workflow, creating easily-managed main files where you can rapidly change key ranges and other control values to get the controls you need. .videoWrapper { position: relative; padding-bottom: 56.333%; height: 0; background: black; } .videoWrapper iframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 0; } function get_youtube_id(url) { var p = /^(?:https?:\\/\\/)?(?:www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=)|youtube-nocookie\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/; return (url.match(p)) ? RegExp.$1 : false; } function vimeo_embed(url,el) { var id = false; $.ajax({ url: 'https://vimeo.com/api/oembed.json?url='+url, async: true, success: function(response) { if(response.video_id) { id = response.video_id; if(url.indexOf('autoplay=1') !== -1) var autoplay=1; else var autoplay=0; if(url.indexOf('loop=1') !== -1) var loop=1; else var loop=0; var theInnerHTML = '
'; p[i].innerHTML = theInnerHTML; } if(p[i].innerHTML.indexOf('vimeo.com') !== -1) { //ask vimeo for the id and place the embed vimeo_embed(p[i].innerHTML,p[i]); } } } } video_embed(); function mp3_embed() { var p = document.getElementsByTagName('p'); for(var i = 0; i < p.length; i++) { if(p[i].innerHTML.indexOf('.mp3') !== -1) { var str = p[i].innerHTML.split('?'); if(str.length == 1) str[1] = ''; var str1 = str[1]; str1 = str1.replace('&','').replace('&',''); str1 = str1.replace('autoplay=1','').replace('autoplay=0',''); str1 = str1.replace('loop=1','').replace('loop=0',''); str1 = str1.replace('controls=0','').replace('controls=1',''); if (str[0].lastIndexOf('.mp3', str[0].length - 4) === str[0].length - 4 && str1.length == 0) { if(str[1].indexOf('autoplay=1') !== -1) var autoplay=1; else var autoplay=0; if(str[1].indexOf('loop=1') !== -1) var loop=1; else var loop=0; if(str[1].indexOf('controls=0') !== -1) var controls=0; else var controls=1; var newInnerHTML = 'Your browser does not support the audio element.'; p[i].innerHTML = newInnerHTML; } } } } mp3_embed();","title":"Includes"},{"location":"tutorials/brush_stirs/","text":"Not all drum sounds are hits which can be used in the usual way described in our drum basics article. One major exception are brush techniques which involve scraping the brush across a drum head, often in a circle. If you are not sure what this looks or sounds like, this video is a good guide . These techniques are called swirls or stirs, and for the purpose of this article we'll call them stirs. As the sound changes in intensity, and the duration of the scrapes needs to fit the tempo and rhythm of the song, sampling them requires a different approach to the usual drum hits. The two common approaches are to completely ignore this technique and not sample it at all, and to record loops to fit various tempos. This article describes another approach. The key principle here is that stirs are a noisy, nonlinear sound with a lot of randomness, which makes them very easy to crossfade or loop with no phase issues. Therefore, instead of trying to record stirs performed in a realistic way, we propose recording long, unrealistically steady stirs with no perceptible rhythm or expression, and then using those samples as source material for building up a musical stir. Recording the source material For the purposes of this example, let's assume the source stirs are recorded at four speeds, with 1 being the slowest and 4 being the fastest. Speed 1 is slow enough that a full circle around the head of the drum is completed in more than 4 seconds. That's enough to fill a measure at 60 bpm and still have some sound left, so the user can start the next stir before the previous one ends, and thus achieve a continuous sound. Speed 4 is several circles per second, to match the speed at which the brush would be moving during the peak of an aggressive stir. Making the sound steady at this speed is a challenge. As for how long the recordings need to be, speed 1 needs to be long enough for the longest stir we want to be able to make. However, if tuning controls are to be applied, it's important to remember that pitching a sample up shortens it, so if the tuning range is to extend to one octave up, then a 10-second sample is the minimum to make a 5-second stir. Speeds 3 and 4 are not used thorughout the duration of a stir but only for peaks, and for the purposes of this example they can be half the length of speed 1. Simple stir model We can make a very simple stir using speed 1 by playing the sample with loop_mode set to one_shot, like we normally would set it for a drum hit, and using a simple volume envelope to fade this sample in over a time, and then fade it out. key=26 loop_mode=one_shot sample=snare_stir_speed_1.wav ampeg_attack=1.0 ampeg_decay=1.0 ampeg_sustain=0 The resulting volume envelope will look something like this. The illustrations are not precise, only general shapes. This is a good start, and we can add expression and realism by layering a faster speed on top of it near the stir's peak, with half the duration of the base layer. We use ampeg_delay to delay the start of the second layer by the same amount, so the peaks of both layers align in time. key=26 loop_mode=one_shot sample=snare_stir_speed_1.wav ampeg_attack=1.0 ampeg_decay=1.0 ampeg_sustain=0 key=26 loop_mode=one_shot sample=snare_stir_speed_3.wav ampeg_delay=0.5 ampeg_attack=0.5 ampeg_decay=0.5 ampeg_sustain=0 Modulating stir duration This has a fixed duration and is not flexible, but the stir length can easily be modulated by a single CC parameter changing all the envelope durations. Extremely short stirs, lasting only a small fraction of a second, are obviously not going to sound realistic, so we can use a minimum value to prevent that. Let's use CC1 (standard mod wheel). key=26 loop_mode=one_shot sample=snare_stir_speed_1.wav ampeg_attack=0.1 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.4 ampeg_decaycc1=0.4 key=26 loop_mode=one_shot sample=snare_stir_speed_3.wav ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25 Making the shape more realistic Drummers testing the above model have asked for some adjustments to make it sound more realistic. One is to make the first half of the base layer steadier. This can be done very easily by shortening the attack and adding a hold time to the envelope, ensuring that they still add up to the same amount of time that the faster layer's delay and attack, so the peak will remain aligned at all values of the modulation parameter. The attack stage should generally be shorter than the hold stage. key=26 loop_mode=one_shot sample=snare_stir_speed_1.wav ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4 key=26 loop_mode=one_shot sample=snare_stir_speed_3.wav ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25 Also, the peak should be sharper and more accented than it is with linear envelopes. Changing the envelope curves accomplishes this, though the initial attack envelope of the base layer can remain linear. The below values seem like a decent start. key=26 loop_mode=one_shot sample=snare_stir_speed_1.wav ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4 ampeg_attack_shape=0.0 ampeg_decay_shape=-1.4 key=26 loop_mode=one_shot sample=snare_stir_speed_3.wav ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25 ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4 Adjusting the envelope shapes The above fixed envelope shapes are good for medium tempos and energy levels, but for slow tempos the flat envelope shapes actually work quite well, and more energetic tracks might sound better with even sharper envelope peaks. It would be nice to adjust the envelope curve shapes with MIDI CC, but it is not currently possible to do this. It's possible to work around this by crossfading sharp-envelope and flat-envelope regions, or use locc/hicc to select between several pre-baked envelope shapes . Here's an example of the latter method. key=26 loop_mode=one_shot hicc100=42 sample=snare_stir_speed_1.wav ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 hicc100=42 sample=snare_stir_speed_3.wav ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 locc100=43 hicc100=86 sample=snare_stir_speed_1.wav ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4 ampeg_attack_shape=0.0 ampeg_decay_shape=-1.4 locc100=43 hicc100=86 sample=snare_stir_speed_3.wav ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25 ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4 locc100=87 sample=snare_stir_speed_1.wav ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4 ampeg_attack_shape=0.0 ampeg_decay_shape=-3.5 locc100=87 sample=snare_stir_speed_3.wav ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25 ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5 Adding ornaments So far, we have a stir with adjustable duration and shape which peaks halfway through. More complex patterns can have more than one peak, though. A simple way to emulate that is to use a differnet MIDI note to trigger short ornaments which will add a brief extra sound to the stir, thus emulating a momentary acceleration of the brush. We can use one of the higher stir speeds for this. key=27 loop_mode=one_shot sample=snare_stir_speed_2.wav ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_attackcc1=0.2 ampeg_decaycc1=0.2 hicc100=42 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 hicc100=42 ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4 hicc100=42 ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5 Accents We can also create accents, which are similar to the typical stir but peak much more quickly and use faster speeds. In pracitce, they can be used either as short, aggressive stirs, or added on top of basic stirs to create more complex patterns. The difference in the SFZ here is that the attack curve shape can be applied to the attack portion as well, and there is no hold stage in the envelope. key=28 loop_mode=one_shot hicc100=42 sample=snare_stir_speed_2.wav ampeg_attack=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.4 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 hicc100=42 sample=snare_stir_speed_4.wav ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.2 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 locc100=43 hicc100=86 sample=snare_stir_speed_2.wav ampeg_attack=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.4 ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4 locc100=43 hicc100=86 sample=snare_stir_speed_4.wav ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.2 ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4 locc100=87 sample=snare_stir_speed_2.wav ampeg_attack=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.4 ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5 locc100=87 sample=snare_stir_speed_4.wav ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.2 ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5 Muting As all the above sounds have loop_mode set to one_shot, triggering a note causes the sound to play until the volume envelope drops to zero. If ending a stir earlier than that is required, we can use polyphony groups. The group and off_by opcodes are the key ones here. We can use them to make stirs self-mute, so that triggering a new stir will mute any previously playing stirs, as well as add a key which produces no sound, using silence instead of a sample , but is in the same mute groups, so triggering this key will mute any stir or accent currently playing. This key can be used to stop stirs early. Note that, as usual, separate groups are needed for layers which are to play simultaneously, and if there are multiple microphone positions then those would need separate groups as well. In the below example we also have stirs mute accents, and vice versa, although the ornaments are left out of the mute groups and can be layered on top of other sounds without muting them. For a more sophisticated use of mute groups with other pieces of the drum kit, please see cymbal muting . loop_mode=one_shot off_mode=normal ampeg_release=0.1 ampeg_releasecc1=0.2 key=26 hicc100=42 sample=snare_stir_speed_1.wav ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 group=1 off_by=1 hicc100=42 sample=snare_stir_speed_3.wav ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 group=2 off_by=2 locc100=43 hicc100=86 sample=snare_stir_speed_1.wav ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4 ampeg_attack_shape=0.0 ampeg_decay_shape=-1.4 group=1 off_by=1 locc100=43 hicc100=86 sample=snare_stir_speed_3.wav ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25 ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4 group=2 off_by=2 locc100=87 sample=snare_stir_speed_1.wav ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4 ampeg_attack_shape=0.0 ampeg_decay_shape=-3.5 group=1 off_by=1 locc100=87 sample=snare_stir_speed_3.wav ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25 ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5 group=2 off_by=2 key=27 sample=snare_stir_speed_2.wav ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_attackcc1=0.2 ampeg_decaycc1=0.2 hicc100=42 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 hicc100=42 ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4 hicc100=42 ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5 key=28 hicc100=42 sample=snare_stir_speed_2.wav ampeg_attack=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.4 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 group=1 off_by=1 hicc100=42 sample=snare_stir_speed_4.wav ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.2 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 group=2 off_by=2 locc100=43 hicc100=86 sample=snare_stir_speed_2.wav ampeg_attack=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.4 ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4 group=1 off_by=1 locc100=43 hicc100=86 sample=snare_stir_speed_4.wav ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.2 ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4 group=2 off_by=2 locc100=87 sample=snare_stir_speed_2.wav ampeg_attack=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.4 ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5 group=1 off_by=1 locc100=87 sample=snare_stir_speed_4.wav ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.2 ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5 group=2 off_by=2 key=29 sample=*silence group=1 off_by=1 group=2 off_by=2 It is, of course, possible to apply round robins and dynamic layers to this, just like any other drum sound. That is left as an exercise to the reader. Alternative approach The above approach was developed to be playable from an electronic drum kit controller. For keyboard controllers or sequencing, another approach is possible where instead of using a MIDI note to trigger a new stir every time the drummer would complete a circle, we hold down a long note for as long as we want to produce stirs (so, possibly for several measures, or even the entire duration of a song). We then use MIDI CC to crossfade between the layers to modulate the speed of the stir in order to create realism and rhythmic interest. In order to be able to do this, the samples will have to be looped, but as stated at the beginning, looping or crossfading noisy samples is very easy as there are no phase issues. We also set the loop_mode opcode to continuous instead of the one_shot setting used in the earlier approach. key=26 loop_mode=continuous ampeg_release=0.25 sample=snare_stir_speed_1.wav xfin_locc1=0 xfin_hicc1=31 xfout_locc1=32 xfout_hicc1=63 sample=snare_stir_speed_2.wav xfin_locc1=32 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=95 sample=snare_stir_speed_3.wav xfin_locc1=64 xfin_hicc1=95 xfout_locc1=96 xfout_hicc1=127 sample=snare_stir_speed_4.wav xfin_locc1=96 xfin_hicc1=127 In practice, this approach has proven more difficult to use, with it being easy to sound obviously unrealistic by moving the MIDI CC parameter too quickly or staying at high values for too long. With care, however, it can produce realistic results, and it is extremely flexible. Further possibilities The brush flutter technique can be treated similarly to the base layer of the stirs. There is no need to layer faster and slower flutters. In theory, this approach could also be extended to other noisy, highly nonlinear sounds which can vary in duration - perhaps shakers. The main challenge there would be to record shakers shaking smoothly for an extended duration. It is also certainly possible to further improve the above model with more realism and playablity.","title":"Brush stirs"},{"location":"tutorials/brush_stirs/#recording-the-source-material","text":"For the purposes of this example, let's assume the source stirs are recorded at four speeds, with 1 being the slowest and 4 being the fastest. Speed 1 is slow enough that a full circle around the head of the drum is completed in more than 4 seconds. That's enough to fill a measure at 60 bpm and still have some sound left, so the user can start the next stir before the previous one ends, and thus achieve a continuous sound. Speed 4 is several circles per second, to match the speed at which the brush would be moving during the peak of an aggressive stir. Making the sound steady at this speed is a challenge. As for how long the recordings need to be, speed 1 needs to be long enough for the longest stir we want to be able to make. However, if tuning controls are to be applied, it's important to remember that pitching a sample up shortens it, so if the tuning range is to extend to one octave up, then a 10-second sample is the minimum to make a 5-second stir. Speeds 3 and 4 are not used thorughout the duration of a stir but only for peaks, and for the purposes of this example they can be half the length of speed 1.","title":"Recording the source material"},{"location":"tutorials/brush_stirs/#simple-stir-model","text":"We can make a very simple stir using speed 1 by playing the sample with loop_mode set to one_shot, like we normally would set it for a drum hit, and using a simple volume envelope to fade this sample in over a time, and then fade it out. key=26 loop_mode=one_shot sample=snare_stir_speed_1.wav ampeg_attack=1.0 ampeg_decay=1.0 ampeg_sustain=0 The resulting volume envelope will look something like this. The illustrations are not precise, only general shapes. This is a good start, and we can add expression and realism by layering a faster speed on top of it near the stir's peak, with half the duration of the base layer. We use ampeg_delay to delay the start of the second layer by the same amount, so the peaks of both layers align in time. key=26 loop_mode=one_shot sample=snare_stir_speed_1.wav ampeg_attack=1.0 ampeg_decay=1.0 ampeg_sustain=0 key=26 loop_mode=one_shot sample=snare_stir_speed_3.wav ampeg_delay=0.5 ampeg_attack=0.5 ampeg_decay=0.5 ampeg_sustain=0","title":"Simple stir model"},{"location":"tutorials/brush_stirs/#modulating-stir-duration","text":"This has a fixed duration and is not flexible, but the stir length can easily be modulated by a single CC parameter changing all the envelope durations. Extremely short stirs, lasting only a small fraction of a second, are obviously not going to sound realistic, so we can use a minimum value to prevent that. Let's use CC1 (standard mod wheel). key=26 loop_mode=one_shot sample=snare_stir_speed_1.wav ampeg_attack=0.1 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.4 ampeg_decaycc1=0.4 key=26 loop_mode=one_shot sample=snare_stir_speed_3.wav ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25","title":"Modulating stir duration"},{"location":"tutorials/brush_stirs/#making-the-shape-more-realistic","text":"Drummers testing the above model have asked for some adjustments to make it sound more realistic. One is to make the first half of the base layer steadier. This can be done very easily by shortening the attack and adding a hold time to the envelope, ensuring that they still add up to the same amount of time that the faster layer's delay and attack, so the peak will remain aligned at all values of the modulation parameter. The attack stage should generally be shorter than the hold stage. key=26 loop_mode=one_shot sample=snare_stir_speed_1.wav ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4 key=26 loop_mode=one_shot sample=snare_stir_speed_3.wav ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25 Also, the peak should be sharper and more accented than it is with linear envelopes. Changing the envelope curves accomplishes this, though the initial attack envelope of the base layer can remain linear. The below values seem like a decent start. key=26 loop_mode=one_shot sample=snare_stir_speed_1.wav ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4 ampeg_attack_shape=0.0 ampeg_decay_shape=-1.4 key=26 loop_mode=one_shot sample=snare_stir_speed_3.wav ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25 ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4","title":"Making the shape more realistic"},{"location":"tutorials/brush_stirs/#adjusting-the-envelope-shapes","text":"The above fixed envelope shapes are good for medium tempos and energy levels, but for slow tempos the flat envelope shapes actually work quite well, and more energetic tracks might sound better with even sharper envelope peaks. It would be nice to adjust the envelope curve shapes with MIDI CC, but it is not currently possible to do this. It's possible to work around this by crossfading sharp-envelope and flat-envelope regions, or use locc/hicc to select between several pre-baked envelope shapes . Here's an example of the latter method. key=26 loop_mode=one_shot hicc100=42 sample=snare_stir_speed_1.wav ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 hicc100=42 sample=snare_stir_speed_3.wav ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 locc100=43 hicc100=86 sample=snare_stir_speed_1.wav ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4 ampeg_attack_shape=0.0 ampeg_decay_shape=-1.4 locc100=43 hicc100=86 sample=snare_stir_speed_3.wav ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25 ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4 locc100=87 sample=snare_stir_speed_1.wav ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4 ampeg_attack_shape=0.0 ampeg_decay_shape=-3.5 locc100=87 sample=snare_stir_speed_3.wav ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25 ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5","title":"Adjusting the envelope shapes"},{"location":"tutorials/brush_stirs/#adding-ornaments","text":"So far, we have a stir with adjustable duration and shape which peaks halfway through. More complex patterns can have more than one peak, though. A simple way to emulate that is to use a differnet MIDI note to trigger short ornaments which will add a brief extra sound to the stir, thus emulating a momentary acceleration of the brush. We can use one of the higher stir speeds for this. key=27 loop_mode=one_shot sample=snare_stir_speed_2.wav ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_attackcc1=0.2 ampeg_decaycc1=0.2 hicc100=42 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 hicc100=42 ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4 hicc100=42 ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5","title":"Adding ornaments"},{"location":"tutorials/brush_stirs/#accents","text":"We can also create accents, which are similar to the typical stir but peak much more quickly and use faster speeds. In pracitce, they can be used either as short, aggressive stirs, or added on top of basic stirs to create more complex patterns. The difference in the SFZ here is that the attack curve shape can be applied to the attack portion as well, and there is no hold stage in the envelope. key=28 loop_mode=one_shot hicc100=42 sample=snare_stir_speed_2.wav ampeg_attack=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.4 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 hicc100=42 sample=snare_stir_speed_4.wav ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.2 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 locc100=43 hicc100=86 sample=snare_stir_speed_2.wav ampeg_attack=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.4 ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4 locc100=43 hicc100=86 sample=snare_stir_speed_4.wav ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.2 ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4 locc100=87 sample=snare_stir_speed_2.wav ampeg_attack=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.4 ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5 locc100=87 sample=snare_stir_speed_4.wav ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.2 ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5","title":"Accents"},{"location":"tutorials/brush_stirs/#muting","text":"As all the above sounds have loop_mode set to one_shot, triggering a note causes the sound to play until the volume envelope drops to zero. If ending a stir earlier than that is required, we can use polyphony groups. The group and off_by opcodes are the key ones here. We can use them to make stirs self-mute, so that triggering a new stir will mute any previously playing stirs, as well as add a key which produces no sound, using silence instead of a sample , but is in the same mute groups, so triggering this key will mute any stir or accent currently playing. This key can be used to stop stirs early. Note that, as usual, separate groups are needed for layers which are to play simultaneously, and if there are multiple microphone positions then those would need separate groups as well. In the below example we also have stirs mute accents, and vice versa, although the ornaments are left out of the mute groups and can be layered on top of other sounds without muting them. For a more sophisticated use of mute groups with other pieces of the drum kit, please see cymbal muting . loop_mode=one_shot off_mode=normal ampeg_release=0.1 ampeg_releasecc1=0.2 key=26 hicc100=42 sample=snare_stir_speed_1.wav ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 group=1 off_by=1 hicc100=42 sample=snare_stir_speed_3.wav ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 group=2 off_by=2 locc100=43 hicc100=86 sample=snare_stir_speed_1.wav ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4 ampeg_attack_shape=0.0 ampeg_decay_shape=-1.4 group=1 off_by=1 locc100=43 hicc100=86 sample=snare_stir_speed_3.wav ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25 ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4 group=2 off_by=2 locc100=87 sample=snare_stir_speed_1.wav ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4 ampeg_attack_shape=0.0 ampeg_decay_shape=-3.5 group=1 off_by=1 locc100=87 sample=snare_stir_speed_3.wav ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25 ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5 group=2 off_by=2 key=27 sample=snare_stir_speed_2.wav ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_attackcc1=0.2 ampeg_decaycc1=0.2 hicc100=42 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 hicc100=42 ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4 hicc100=42 ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5 key=28 hicc100=42 sample=snare_stir_speed_2.wav ampeg_attack=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.4 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 group=1 off_by=1 hicc100=42 sample=snare_stir_speed_4.wav ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.2 ampeg_attack_shape=0.0 ampeg_decay_shape=0.0 group=2 off_by=2 locc100=43 hicc100=86 sample=snare_stir_speed_2.wav ampeg_attack=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.4 ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4 group=1 off_by=1 locc100=43 hicc100=86 sample=snare_stir_speed_4.wav ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.2 ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4 group=2 off_by=2 locc100=87 sample=snare_stir_speed_2.wav ampeg_attack=0.05 ampeg_decay=0.1 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.4 ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5 group=1 off_by=1 locc100=87 sample=snare_stir_speed_4.wav ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0 ampeg_attackcc1=0.05 ampeg_decaycc1=0.2 ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5 group=2 off_by=2 key=29 sample=*silence group=1 off_by=1 group=2 off_by=2 It is, of course, possible to apply round robins and dynamic layers to this, just like any other drum sound. That is left as an exercise to the reader.","title":"Muting"},{"location":"tutorials/brush_stirs/#alternative-approach","text":"The above approach was developed to be playable from an electronic drum kit controller. For keyboard controllers or sequencing, another approach is possible where instead of using a MIDI note to trigger a new stir every time the drummer would complete a circle, we hold down a long note for as long as we want to produce stirs (so, possibly for several measures, or even the entire duration of a song). We then use MIDI CC to crossfade between the layers to modulate the speed of the stir in order to create realism and rhythmic interest. In order to be able to do this, the samples will have to be looped, but as stated at the beginning, looping or crossfading noisy samples is very easy as there are no phase issues. We also set the loop_mode opcode to continuous instead of the one_shot setting used in the earlier approach. key=26 loop_mode=continuous ampeg_release=0.25 sample=snare_stir_speed_1.wav xfin_locc1=0 xfin_hicc1=31 xfout_locc1=32 xfout_hicc1=63 sample=snare_stir_speed_2.wav xfin_locc1=32 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=95 sample=snare_stir_speed_3.wav xfin_locc1=64 xfin_hicc1=95 xfout_locc1=96 xfout_hicc1=127 sample=snare_stir_speed_4.wav xfin_locc1=96 xfin_hicc1=127 In practice, this approach has proven more difficult to use, with it being easy to sound obviously unrealistic by moving the MIDI CC parameter too quickly or staying at high values for too long. With care, however, it can produce realistic results, and it is extremely flexible.","title":"Alternative approach"},{"location":"tutorials/brush_stirs/#further-possibilities","text":"The brush flutter technique can be treated similarly to the base layer of the stirs. There is no need to layer faster and slower flutters. In theory, this approach could also be extended to other noisy, highly nonlinear sounds which can vary in duration - perhaps shakers. The main challenge there would be to record shakers shaking smoothly for an extended duration. It is also certainly possible to further improve the above model with more realism and playablity.","title":"Further possibilities"},{"location":"tutorials/cymbal_muting/","text":"A lot of the information in this article deals with implementing sampled hi-hats and cymbals in general, and although the code examples are in SFZ, the principles should also apply to other samplers, or even synthesized cymbals. Muting previously played notes is important with monophonic instruments, such as flutes or trumpets. With hi-hats, it is also crucial to sounding like a hi-hat - an open hi-hat hit will be muted in real life when the hi-hat pedal is closed. Let's start with a simple hi-hat with closed hit, foot chik, half-open and open samples, with the latter two on the same key and degree of openness selected by MIDI CC 4 - the common hi-hat pedal assignment in electronic drum kits. key=42 sample=hh_closed.wav key=44 sample=hh_chik.wav key=46 sample=hh_half_open.wav hicc4=63 key=46 sample=hh_open.wav locc4=64 Simple self-muting The above hi-hat has no muting implemented, so playing a closed hit after an open one would result in the open hit unrealistically continuing to ring. The simplest way to take care of that is to put all the regions in the same \u2039group\u203a and use off_by to make that group mute itself - that will mean any hi-hat hit will mute any currently playing hi-hat hit. Setting off_mode to normal and using ampeg_release or off_time to set the time it takes for the previous sample to fade out also helps this sound a bit more natural. off_mode=normal ampeg_release=0.07 key=42 sample=hh_closed.wav group=1 off_by=1 key=44 sample=hh_chik.wav group=1 off_by=1 key=46 sample=hh_half_open.wav hicc4=63 group=1 off_by=1 key=46 sample=hh_open.wav locc4=64 group=1 off_by=1 Hierarchical self-muting This is the way many virtual drum kits work, but it is not fully satisfactory if, for example, playing a ride pattern on an open hi-hat. Things do start getting more complicated here, though, and many developers feel that it's enough to stop here, just implement the above rules, and have a reasonably working virtual hi-hat. For those who want more, however, Peter L. Jones has developed a hierarchy of muting, where hits which are more closed mute hits that are more open, but hits which are more open do not mute hits which are more closed. Hits also don't mute hits with the same degree of openness. So, chiks mute all hits, closed hits mute any partially open hits but not chiks or closed hits etc. With this amount of degrees of openness, half-open hits would mute open hits, and open hits would mute nothing. So, we need to put each hi-hat articulation in a different group. This, however, means we need a group which mutes several other groups, and regions in a group cannot have multiple or varying off_by values. So, what we have to do is use silence - either the silence* setting of sample ARIA extension, or an actual file of a short silence. Note that the silence samples also have to have off_by settings the same as the hi-hat samples in their mute group. Also, since group 1 doesn't mute anything, we don't need to add any silence regions to that group. Note that the group opcode used here and the \u2039group\u203a header are completely separate concepts - \"group\" for the remainder of this article refers to the opcode, not the header, though group headers are also used in the code examples. // Here are the hi-hat samples off_mode=normal ampeg_release=0.07 key=42 sample=hh_closed.wav group=3 off_by=4 key=44 sample=hh_chik.wav group=4 key=46 sample=hh_half_open.wav hicc4=63 group=2 off_by=3 key=46 sample=hh_open.wav locc4=64 group=1 off_by=2 group=2 off_by=3 // The range which mutes open hi-hats - that is, everything except open sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=46 hicc4=63 group=3 off_by=4 // The range which mutes half-open and open hi-hats - that is, closed and chik loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 group=4 // The range which mutes closed, half-open and open hi-hats - that is, just chik loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=44 Special treatment of foot splashes The above isn't perfect - for example, fully opening up a hi-hat after playing a hard half-open hit in the real world would stop the clashes between the top and bottom, effectively stopping a half-open sound and replacing it with quieter open ringing - but it is a reasonable compromise covering various degrees of openness. Also, the more degrees of openness there are, the more groups will be needed. There are, however, more hi-hat articulations possible. One which has special behavior when it comes to muting is the foot splash - closing the hi-hat with the pedal, then quickly reopening it. This articulation needs to mute itself, because playing one foot splash after another involves closing the hi-hat, which will mute the ringing. Whether the splash should mute other types of hits is an open question, however. Splashes, especially gentler ones, involve only momentary contact of the cymbal edges and not complete closure. Whether an open hi-hat hit followed by a splash sounds better when the splash mutes the open hit is left as a decision to the reader. The below example has the splash muting everything else, except for pedal chiks, because it invovles closing the hi-hat fully. So, if a kit has foot splash samples (for which there is no standard general MIDI note assignment, so let's use 54 here - an octave above the chik, though in general MIDI that's supposed to be the cowbell note), we'd need to set up one more group, and have that mute itself. It will also need to be muted by all other types of hi-hat hits, except for fully open hits. //Here are the hi-hat samples off_mode=normal ampeg_release=0.07 key=42 sample=hh_closed.wav group=4 off_by=5 key=44 sample=hh_chik.wav group=5 key=46 sample=hh_half_open.wav hicc4=63 group=3 off_by=4 key=46 sample=hh_open.wav locc4=64 group=2 off_by=3 key=54 sample=hh_splash.wav group=1 off_by=1 group=1 off_by=1 //The range which mutes foot splashes - everything except open and foot splash //Foot splash mutes itself, but this group does not include the foot splash key //That's because the foot splash samples themselves are in the same group sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=46 group=3 off_by=4 //The range which mutes open hi-hats - that is, everything except open sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=46 hicc4=63 key=54 group=4 off_by=5 //The range which mutes half-open and open hi-hats - that is, closed, chik and foot splash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=54 group=5 //The range which mutes closed, half-open and open hi-hats - that is, just chik and foot splash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=44 key=54 Limiting polyphony This works reasonably well. Another potential refinement is to also avoid excessive buildup when the more open articulations (which with some hi-hat pairs can ring for upwards of 20 seconds), while still allowing enough for ride patterns on an open hi-hat to sound right. We can do this by using the polyphony opcode to put a limit on the number of polyphony voices used by a specific group. Note this must be set for the silence regions, also, so that every region in a group will have the same off_by and polyphony as all the other regions in that group. Polyphony of 4 for the open hi-hats and 3 for the half-open are judgment calls. Drier cymbals and articulations with less sustain will generally sound realistic with lower numbers here, and brushes might need a lower number than sticks. Limiting the polyphony for the more closed articulations is not necessary in practice, unless playing unrealistically dense trap hi-hat patterns, because they don't ring very long anyway. Limiting the polyphony for the foot splash is not necessary at all, because it mutes itself. //Here are the hi-hat samples off_mode=normal ampeg_release=0.07 key=42 sample=hh_closed.wav group=4 off_by=5 key=44 sample=hh_chik.wav group=5 key=46 sample=hh_half_open.wav hicc4=63 group=3 off_by=4 polyphony=3 key=46 sample=hh_open.wav locc4=64 group=2 off_by=3 polyphony=4 key=54 sample=hh_splash.wav group=1 off_by=1 group=1 off_by=1 //The range which mutes foot splashes //All sounds except open mute foot splashes, but this group does not include the foot splash key //That's because the foot splash samples are in the same group, and will mute anything else sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=46 hicc4=63 group=3 off_by=4 polyphony=3 //The range which mutes open hi-hats - that is, everything except open and foot splash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=46 hicc4=63 key=54 group=4 off_by=5 //The range which mutes half-open and open hi-hats - that is, closed, chik and foot splash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=54 group=5 //The range which mutes closed, half-open and open hi-hats - that is, just chik and foot splash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=44 Edge cases The above can sound strange when a hard hi-hat hit is being muted by a much quieter one. If the hit doing the muting is both quiet and short, it can be practically inaudible, and the resulting sound seems to only be the open hit, suddenly fading out. This is especially risky if using amp_veltrack set to 100, which will make hits with very low velocity extremely quiet, or if the lowest dynamic layers of more closed hits and foot chiks are recorded very quietly. Lowering amp_veltrack for the lowest velocity layers is one potential way to reduce this problem, as is setting amp_velcurve_1 to some value around 0.2 to 0.5 (higher values if there are more dynamic layers). In real life, however, a hard open hi-hat hit would have reduced in volume before the start of the soft closed hit, as the pedal needs to be closed before a closed hit can be made. This would, of course, cause many edge clashes along the way, which we do not have a way to emulate. However, it is possible to use the pedal's MIDI CC to make the open sample quieter outside of the range where the open hi-hat sample would be triggered. This can be done by modulating the hi-hat's amplitude , and applying a \u2039curve\u203a which will keep the amplitude at 100% unless the pedal is a good deal more closed than it was when the sample was triggered. //Here are the hi-hat samples off_mode=normal ampeg_release=0.07 key=42 sample=hh_closed.wav group=4 off_by=5 key=44 sample=hh_chik.wav group=5 key=46 sample=hh_half_open.wav hicc4=63 group=3 off_by=4 amplitude_cc4=100 amplitude_curvecc4=21 amplitude_smoothcc4=150 key=46 sample=hh_open.wav locc4=64 group=2 off_by=3 amplitude_cc4=100 amplitude_curvecc4=21 amplitude_smoothcc4=150 key=54 sample=hh_splash.wav group=1 off_by=1 curve_index=21 v000=0.13 v037=0.8 v077=1 v127=1 curve_index=22 v000=0.1 v037=0.7 v077=1 v127=1 Using smoothing on the amplitude modulation helps avoid sudden jumps, though playing an open hit, closing the hi-hat pedal most of the way and then reopening it will still result in obviously unrealistic volume fluctuations. So, this is not a perfect solution by any means. It's probably better to do this by using a volume envelope and using CC4 to modulate its decay time, with the sustain set to a low level. and the ampeg_dynamic opcode set to 1 so that moving the pedal will cause the decay time to be recalculated. However, that has not been tested yet, as the author's test kit was already using envelopes on the hi-hat to emulate drier cymbals. Also, applying this to splash samples, which involve the pedal starting closed and opening rapidly, is another problem which requires a solution. Multimic samples So far, each hi-hat articulation has only one sample, which will obviously not be the case in most virtual drum kits. This does not add much complexity, though, as the samples for each degree of openness simply need to all be in the same group. All half-open samples, for example, including all round robins, all velocity layers, can share the same group. If there are separate articulations for each degree of openness, such as shank, tip and bell, those can also all be on the same group. Brushes, sticks and mallets can often also share the same groups, unless the brushes need lower polyphony numbers. However, if there are separate samples for different microphones and the groups are self-muting, they will need to be in different groups. In the current example, only the footsplash is self-muting, but if using the simpler rules where all hi-hat articulations mute all others, all groups are self-muting. So, having separate close hi-hat mic and a stereo overhead pair would mean twice as many of those groups (assuming the stereo overheads are in the L and R channel of the same sample), and close hi-hat, stereo overheads, close room and far room would mean four times as many. The polyphony numbers for groups which have polyphony will also have to be multiplied by the same factor. Here is an example with close and overhead, with slightly longer fadeout times for the more distant overhead mics: //Here are the hi-hat samples off_mode=normal key=42 sample=hh_closed_close.wav group=4 off_by=5 ampeg_release=0.12 key=42 sample=hh_closed_oh.wav group=4 off_by=5 ampeg_release=0.2 key=44 sample=hh_chik_close.wav group=5 ampeg_release=0.12 key=44 sample=hh_chik_oh.wav group=5 ampeg_release=0.2 key=46 sample=hh_half_open_close.wav hicc4=63 group=3 off_by=4 polyphony=6 ampeg_release=0.12 key=46 sample=hh_half_open_oh.wav hicc4=63 group=3 off_by=4 polyphony=6 ampeg_release=0.2 key=46 sample=hh_open_close.wav locc4=64 group=2 off_by=3 polyphony=8 ampeg_release=0.12 key=46 sample=hh_open_oh.wav locc4=64 group=2 off_by=3 polyphony=8 ampeg_release=0.2 key=54 sample=hh_splash_close.wav group=1 off_by=1 ampeg_release=0.12 key=54 sample=hh_splash_oh.wav group=11 off_by=11 ampeg_release=0.2 group=1 off_by=1 //The range which mutes foot splashes for the close mic //All sounds except open mute foot splashes, but this group does not include the foot splash key //That's because the foot splash samples are in the same group, and will mute anything else sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=46 hicc4=63 group=11 off_by=11 //The range which mutes foot splashes for the overhead mics //All sounds mute foot splashes, but this group does not include the foot splash key //That's because the foot splash samples are in the same group, and will mute anything else sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=46 hicc4=63 group=3 off_by=4 polyphony=3 //The range which mutes open hi-hats for both close and overhead mics - that is, everything except open sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=46 hicc4=63 key=54 group=4 off_by=5 //The range which mutes half-open and open hi-hats - that is, closed, chik and foot splash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=54 group=5 //The range which mutes closed, half-open and open hi-hats - that is, just chik sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=44 Header organization That is as complex as it gets, though there are a few minor points to be aware of. Many drum kits with round robins will set seq_length at the \u2039global\u203a level, and in those cases, the silence regions would only trigger for the first hit in the round robin sequence, unless they have seq_length set to 1 to override the global setting. Also, the \u2039master\u203a header level and #include statement are useful ARIA extensions for keeping deeply sampled hi-hat mappings organized. Cymbals other than hi-hats Cymbals other than hi-hats are simpler, but there are two considerations when muting those. One is limiting polyphony, which is especially important with cymbals intended for playing rolls, and with jazz ride cymbals (rock/metal rides which primarily use the bell articulation, not as much). The other is that it's also possible to record separate choke samples, and have those mute everything else. A ride with bell, bow and edge articulations, choke samples and overhead and room mics might be set up like below. Note that while each articulation has its own groups and different polyphony limits, all articulations for each mic have the same off_by value, which is the group value of the choke samples for that mic. It would not be necessary to have this many groups to implement muting, but this setup would also allow a mapping using only the overhead mics and no room mic to be created without breaking anything, as each mic's samples have separate groups. Having different polyphony numbers for different mics can result in an inconsistent sound, so it is not recommended. off_mode=normal //Bow hits key=51 group=30 off_by=33 polyphony=5 ampeg_release=0.3 sample=ride_bow_oh.wav key=51 group=40 off_by=43 polyphony=5 ampeg_release=0.4 sample=ride_bow_rm.wav //Bell hits key=53 group=31 off_by=33 polyphony=4 ampeg_release=0.3 sample=ride_bell_oh.wav key=53 group=41 off_by=43 polyphony=4 ampeg_release=0.4 sample=ride_bell_rm.wav //Edge hits (crashes) key=59 group=32 off_by=33 polyphony=6 ampeg_release=0.3 sample=ride_edge_oh.wav key=59 group=42 off_by=43 polyphony=6 ampeg_release=0.4 sample=ride_edge_rm.wav //Edge chokes key=71 ampeg_attack=0.15 group=33 sample=ride_choke_oh.wav key=71 ampeg_attack=0.15 group=43 sample=ride_choke_rm.wav It is also possible to use note_polyphony here, which has the advantage of allowing note_selfmask to be used. This is good when a hard hit is followed by several lighter ones on the same cymbal - using polyphony, the quieter hits will mute the loud one when the polyphony limit is reached, which can result in the louder hit's sustain suddenly and unrealistically vanishing. However, this can cause problems with hi-hats where one MIDI note needs to trigger several silence groups as well. This is why Virtuosity Drums has the hi-hat regions set with note_polyphony=MAX, though there might be a better way. Note_polyphony is also separated by keys; while the polyphony limit under a group can be tracked together for several keys under one group, note_polyphony is tracked separately for each MIDI note value. The above example modified to use note_polyphony instead of polyphony would look like this: off_mode=normal //Bow hits key=51 group=30 off_by=33 note_polyphony=5 ampeg_release=0.3 sample=ride_bow_oh.wav key=51 group=40 off_by=43 note_polyphony=5 ampeg_release=0.4 sample=ride_bow_rm.wav //Bell hits key=53 group=31 off_by=33 note_polyphony=4 ampeg_release=0.3 sample=ride_bell_oh.wav key=53 group=41 off_by=43 note_polyphony=4 ampeg_release=0.4 sample=ride_bell_rm.wav //Edge hits (crashes) key=59 group=32 off_by=33 note_polyphony=6 ampeg_release=0.3 sample=ride_edge_oh.wav key=59 group=42 off_by=43 note_polyphony=6 ampeg_release=0.4 sample=ride_edge_rm.wav //Edge chokes key=71 ampeg_attack=0.15 group=33 sample=ride_choke_oh.wav key=71 ampeg_attack=0.15 group=43 sample=ride_choke_rm.wav Another approach to limiting polyphony If there is no need have a choke group, it's possible to limit the polyphony of a cymbal in a way which is more controllable, by having it self-mute but making the fadeout time of the previous samples long. This cannot be done when chokes are required, because chokes need a fast fadeout, but it is another option which allows how much dense patterns on a cymbal will build up to be controlled with a MIDI CC parameter - the polyphony opcode cannot be modulated by MIDI CC, but ampeg_release can. Here is how that might work using CC 100 to modulate the time, with different maximum times for different articulations, as in general edge hits will build up the most and bell hits the least. Of course, it's not very possible to modulate the buildup of a cymbal in the real world, but that doesn't mean it can't be useful in the sampled world. off_mode=normal ampeg_release=0.1 //Bow hits key=51 group=30 off_by=30 ampeg_release_oncc100=5 sample=ride_bow_oh.wav key=51 group=40 off_by=40 ampeg_release_oncc100=5.7 sample=ride_bow_rm.wav //Bell hits key=53 group=31 off_by=31 ampeg_release_oncc100=3 sample=ride_bell_oh.wav key=53 group=41 off_by=41 ampeg_release_oncc100=3.5 sample=ride_bell_rm.wav //Edge hits (crashes) key=59 group=32 off_by=32 ampeg_release_oncc100=7 sample=ride_edge_oh.wav key=59 group=42 off_by=42 ampeg_release_oncc100=8 sample=ride_edge_rm.wav Deep-sampled hi-hat example Putting most of the above knowledge together into a complex example can result in long SFZ files, but the principles themselves remain the same. The mapping for a deeply sampled hi-hat with tightly closed, closed, loosely closed, quarter open, half open, open, foot chik, foot splash and pedal return samples, with separate shank and tip hits for tightly closed, closed, loosely closed and quarter open might look like this: //Key assignments - hi-hat #define $htclstkey 42 #define $htchkkey 44 #define $htvartkey 46 #define $htclsskey 54 #define $htsplkey 56 #define $htvarskey 58 #define $htretkey 68 //Hi-hat CC ranges - order for keyboard/sequencing use //E-kit pedal should be backwards #define $ht_lo_hi_init 127 #define $ht_cl_lo 0 #define $ht_cl_hi 25 #define $ht_lc_lo 26 #define $ht_lc_hi 51 #define $ht_qo_lo 52 #define $ht_qo_hi 76 #define $ht_ho_lo 77 #define $ht_ho_hi 102 #define $ht_open_lo 103 #define $ht_open_hi 127 #define $mg_open_lo 0 #define $mg_open_hi 102 #define $mg_ho_lo 0 #define $mg_ho_hi 76 #define $mg_qo_lo 0 #define $mg_qo_hi 51 #define $mg_lc_lo 0 #define $mg_lc_hi 25 label_cc4=Hi-hat position label_cc100=Hi-hat close label_cc101=Hi-hat OH set_cc4=$ht_lo_hi_init set_cc100=40 set_cc101=100 loop_mode=one_shot seq_length=4 ampeg_release=0.12 amp_velcurve_1=0.4 //Foot chiks key=$htchkkey amplitude_cc100=100 #include \"mappings/hihat_14/ht_chik_cl.sfz\" key=$htchkkey amplitude_cc101=100 #include \"mappings/hihat_14/ht_chik_oh.sfz\" //Stick tip hits key=$htclstkey amplitude_cc100=100 group=11 off_by=10 #include \"mappings/hihat_14/ht_tc_cl.sfz\" key=$htclstkey amplitude_cc101=100 group=21 off_by=20 ampeg_release=0.2 #include \"mappings/hihat_14/ht_tc_oh.sfz\" key=$htvartkey amplitude_cc100=100 group=12 off_by=11 locc4=$ht_cl_lo hicc4=$ht_cl_hi #include \"mappings/hihat_14/ht_cl_cl.sfz\" key=$htvartkey amplitude_cc101=100 group=22 off_by=21 ampeg_release=0.2 locc4=$ht_cl_lo hicc4=$ht_cl_hi #include \"mappings/hihat_14/ht_cl_oh.sfz\" key=$htvartkey amplitude_cc100=100 group=13 off_by=12 locc4=$ht_lc_lo hicc4=$ht_lc_hi #include \"mappings/hihat_14/ht_lc_cl.sfz\" key=$htvartkey amplitude_cc101=100 group=23 off_by=22 ampeg_release=0.2 locc4=$ht_lc_lo hicc4=$ht_lc_hi #include \"mappings/hihat_14/ht_lc_oh.sfz\" key=$htvartkey amplitude_cc100=100 group=14 off_by=13 locc4=$ht_qo_lo hicc4=$ht_qo_hi #include \"mappings/hihat_14/ht_qo_cl.sfz\" key=$htvartkey amplitude_cc101=100 group=24 off_by=23 ampeg_release=0.2 locc4=$ht_qo_lo hicc4=$ht_qo_hi #include \"mappings/hihat_14/ht_qo_oh.sfz\" key=$htvartkey amplitude_cc100=100 group=15 off_by=14 amplitude_oncc4=100 amplitude_curvecc4=21 amplitude_smoothcc4=150 locc4=$ht_ho_lo hicc4=$ht_ho_hi #include \"mappings/hihat_14/ht_ho_cl.sfz\" key=$htvartkey amplitude_cc101=100 group=25 off_by=24 ampeg_release=0.2 amplitude_oncc4=100 amplitude_curvecc4=21 amplitude_smoothcc4=150 locc4=$ht_ho_lo hicc4=$ht_ho_hi #include \"mappings/hihat_14/ht_ho_oh.sfz\" key=$htvartkey amplitude_cc100=100 group=16 off_by=15 amplitude_oncc4=100 amplitude_curvecc4=22 amplitude_smoothcc4=150 locc4=$ht_open_lo hicc4=$ht_open_hi #include \"mappings/hihat_14/ht_open_cl.sfz\" key=$htvartkey amplitude_cc101=100 group=26 off_by=25 ampeg_release=0.2 amplitude_oncc4=100 amplitude_curvecc4=22 amplitude_smoothcc4=150 locc4=$ht_open_lo hicc4=$ht_open_hi #include \"mappings/hihat_14/ht_open_oh.sfz\" //Stick shank hits key=$htclsskey amplitude_cc100=100 group=11 off_by=10 #include \"mappings/hihat_14/ht_tc_s_cl.sfz\" key=$htclsskey amplitude_cc101=100 group=21 off_by=20 ampeg_release=0.2 #include \"mappings/hihat_14/ht_tc_s_oh.sfz\" key=$htvarskey amplitude_cc100=100 group=12 off_by=11 locc4=$ht_cl_lo hicc4=$ht_cl_hi #include \"mappings/hihat_14/ht_cl_s_cl.sfz\" key=$htvarskey amplitude_cc101=100 group=22 off_by=21 ampeg_release=0.2 locc4=$ht_cl_lo hicc4=$ht_cl_hi #include \"mappings/hihat_14/ht_cl_s_oh.sfz\" key=$htvarskey amplitude_cc100=100 group=13 off_by=12 locc4=$ht_lc_lo hicc4=$ht_lc_hi #include \"mappings/hihat_14/ht_lc_s_cl.sfz\" key=$htvarskey amplitude_cc101=10 group=23 off_by=22 ampeg_release=0.2 locc4=$ht_lc_lo hicc4=$ht_lc_hi #include \"mappings/hihat_14/ht_lc_s_oh.sfz\" key=$htvarskey amplitude_cc100=100 group=14 off_by=13 locc4=$ht_qo_lo hicc4=$ht_qo_hi #include \"mappings/hihat_14/ht_qo_s_cl.sfz\" key=$htvarskey amplitude_cc101=100 group=24 off_by=23 ampeg_release=0.2 locc4=$ht_qo_lo hicc4=$ht_qo_hi #include \"mappings/hihat_14/ht_qo_s_oh.sfz\" key=$htvarskey amplitude_cc100=100 group=15 off_by=14 amplitude_oncc4=100 amplitude_curvecc4=21 amplitude_smoothcc4=150 locc4=$ht_ho_lo hicc4=$ht_ho_hi #include \"mappings/hihat_14/ht_ho_cl.sfz\" key=$htvarskey amplitude_cc101=100 group=25 off_by=24 ampeg_release=0.2 amplitude_oncc4=100 amplitude_curvecc4=21 amplitude_smoothcc4=150 locc4=$ht_ho_lo hicc4=$ht_ho_hi #include \"mappings/hihat_14/ht_ho_oh.sfz\" key=$htvarskey amplitude_cc100=100 group=16 off_by=15 amplitude_oncc4=100 amplitude_curvecc4=22 amplitude_smoothcc4=150 locc4=$ht_open_lo hicc4=$ht_open_hi #include \"mappings/hihat_14/ht_open_cl.sfz\" key=$htvarskey amplitude_cc101=100 group=26 off_by=25 ampeg_release=0.2 amplitude_oncc4=100 amplitude_curvecc4=22 amplitude_smoothcc4=150 locc4=$ht_open_lo hicc4=$ht_open_hi #include \"mappings/hihat_14/ht_open_oh.sfz\" //Footsplashes are the only self-muting group key=$htsplkey amplitude_cc100=100 group=17 off_by=17 #include \"mappings/hihat_14/ht_footspl_cl.sfz\" key=$htsplkey amplitude_cc101=100 group=27 off_by=27 ampeg_release=0.2 #include \"mappings/hihat_14/ht_footspl_oh.sfz\" //Stick hits on the shaft, not involved in muting key=$htperckey amplitude_cc100=100 #include \"mappings/hihat_14/ht_perc_cl.sfz\" key=$htperckey amplitude_cc101=100 #include \"mappings/hihat_14/ht_perc_oh.sfz\" //Hi hat pedal return noises, muted by anything else key=$htretkey amplitude_cc100=100 group=18 off_by=17 #include \"mappings/hihat_14/ht_return_cl.sfz\" key=$htretkey amplitude_cc101=100 group=28 off_by=27 ampeg_release=0.2 #include \"mappings/hihat_14/ht_return_oh.sfz\" //Hat mute silence groups seq_length=1 group=18 //The range which mutes hi-hat pedal return noises //Everything except themselves sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=17 key=$htclstkey key=$htchkkey key=$htvartkey key=$htclsskey key=$htvarskey key=$htsplkey group=17 //The range which mutes footsplashes //Everything except pedal return noises and open //Footsplashes are the only articulation which mutes itself //Splash also mutes splash, but key=$htsplkey is not part of this silence group //Instead splash regions themselves are marked with group=17 also //Kind of a kludge, but keeps the silence from instantly muting the splash //while allowing a subsequent splash to mute the current splash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=17 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_open_lo hicc4=$mg_open_hi key=$htclsskey key=$htvarskey locc4=$mg_open_lo hicc4=$mg_open_hi group=15 //The range which mutes open hi-hats //Everything except pedal return noises and open //Just like the footsplash mute group, except the footsplash key is in this too sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=14 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_open_lo hicc4=$mg_open_hi key=$htclsskey key=$htvarskey locc4=$mg_open_lo hicc4=$mg_open_hi key=$htsplkey key=$htsplkey group=14 //The range which mutes half open hi-hats //Everything except open and half-open sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=13 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_ho_lo hicc4=$mg_ho_hi key=$htclsskey key=$htvarskey locc4=$mg_ho_lo hicc4=$mg_ho_hi key=$htsplkey group=13 //The range which mutes quarter open hi-hats //Everything except open, half-open and quarter open sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=12 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_qo_lo hicc4=$mg_qo_hi key=$htclsskey key=$htvarskey locc4=$mg_qo_lo hicc4=$mg_qo_hi key=$htsplkey group=12 //The range which mutes loosely closed hi-hats //Everything except open, half-open, quarter open and loosely closed sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=11 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_lc_lo hicc4=$mg_lc_hi key=$htclsskey key=$htvarskey locc4=$mg_lc_lo hicc4=$mg_lc_hi key=$htsplkey group=11 //The range which mutes regular closed hi-hats //Just foot chik, tightly closed and footsplash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=10 key=$htclstkey key=$htchkkey key=$htclsskey key=$htsplkey group=10 //The range which mutes tightly closed hi-hats - just foot chik and footsplash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=$htchkkey key=$htsplkey group=28 //The range which mutes hi-hat pedal return noises //Everything except themselves sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=27 key=$htclstkey key=$htchkkey key=$htvartkey key=$htclsskey key=$htvarskey key=$htsplkey group=27 //The range which mutes footsplashes //Everything except pedal return noises and open //Footsplashes are the only articulation which mutes itself //Splash also mutes splash, but key=$htsplkey is not part of this silence group //Instead splash regions themselves are marked with group=27 also //Kind of a kludge, but keeps the silence from instantly muting the splash //while allowing a subsequent splash to mute the current splash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=27 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_open_lo hicc4=$mg_open_hi key=$htclsskey key=$htvarskey locc4=$mg_open_lo hicc4=$mg_open_hi group=25 //The range which mutes open hi-hats //Everything except pedal return noises and open //Just like the footsplash mute group, except the footsplash key is in this too sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=24 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_open_lo hicc4=$mg_open_hi key=$htclsskey key=$htvarskey locc4=$mg_open_lo hicc4=$mg_open_hi key=$htsplkey key=$htsplkey group=24 //The range which mutes half open hi-hats //Everything except open and half-open sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=23 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_ho_lo hicc4=$mg_ho_hi key=$htclsskey key=$htvarskey locc4=$mg_ho_lo hicc4=$mg_ho_hi key=$htsplkey group=23 //The range which mutes quarter open hi-hats //Everything except open, half-open and quarter open sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=22 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_qo_lo hicc4=$mg_qo_hi key=$htclsskey key=$htvarskey locc4=$mg_qo_lo hicc4=$mg_qo_hi key=$htsplkey group=22 //The range which mutes loosely closed hi-hats //Everything except open, half-open, quarter open and loosely closed sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=21 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_lc_lo hicc4=$mg_lc_hi key=$htclsskey key=$htvarskey locc4=$mg_lc_lo hicc4=$mg_lc_hi key=$htsplkey group=21 //The range which mutes regular closed hi-hats //Just foot chik, tightly closed and footsplash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=20 key=$htclstkey key=$htchkkey key=$htclsskey key=$htsplkey group=20 //The range which mutes tightly closed hi-hats - just foot chik and footsplash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=$htchkkey key=$htsplkey curve_index=21 v000=0.13 v037=0.8 v077=1 v127=1 curve_index=22 v000=0.1 v037=0.7 v077=1 v127=1","title":"Cymbal muting"},{"location":"tutorials/cymbal_muting/#simple-self-muting","text":"The above hi-hat has no muting implemented, so playing a closed hit after an open one would result in the open hit unrealistically continuing to ring. The simplest way to take care of that is to put all the regions in the same \u2039group\u203a and use off_by to make that group mute itself - that will mean any hi-hat hit will mute any currently playing hi-hat hit. Setting off_mode to normal and using ampeg_release or off_time to set the time it takes for the previous sample to fade out also helps this sound a bit more natural. off_mode=normal ampeg_release=0.07 key=42 sample=hh_closed.wav group=1 off_by=1 key=44 sample=hh_chik.wav group=1 off_by=1 key=46 sample=hh_half_open.wav hicc4=63 group=1 off_by=1 key=46 sample=hh_open.wav locc4=64 group=1 off_by=1","title":"Simple self-muting"},{"location":"tutorials/cymbal_muting/#hierarchical-self-muting","text":"This is the way many virtual drum kits work, but it is not fully satisfactory if, for example, playing a ride pattern on an open hi-hat. Things do start getting more complicated here, though, and many developers feel that it's enough to stop here, just implement the above rules, and have a reasonably working virtual hi-hat. For those who want more, however, Peter L. Jones has developed a hierarchy of muting, where hits which are more closed mute hits that are more open, but hits which are more open do not mute hits which are more closed. Hits also don't mute hits with the same degree of openness. So, chiks mute all hits, closed hits mute any partially open hits but not chiks or closed hits etc. With this amount of degrees of openness, half-open hits would mute open hits, and open hits would mute nothing. So, we need to put each hi-hat articulation in a different group. This, however, means we need a group which mutes several other groups, and regions in a group cannot have multiple or varying off_by values. So, what we have to do is use silence - either the silence* setting of sample ARIA extension, or an actual file of a short silence. Note that the silence samples also have to have off_by settings the same as the hi-hat samples in their mute group. Also, since group 1 doesn't mute anything, we don't need to add any silence regions to that group. Note that the group opcode used here and the \u2039group\u203a header are completely separate concepts - \"group\" for the remainder of this article refers to the opcode, not the header, though group headers are also used in the code examples. // Here are the hi-hat samples off_mode=normal ampeg_release=0.07 key=42 sample=hh_closed.wav group=3 off_by=4 key=44 sample=hh_chik.wav group=4 key=46 sample=hh_half_open.wav hicc4=63 group=2 off_by=3 key=46 sample=hh_open.wav locc4=64 group=1 off_by=2 group=2 off_by=3 // The range which mutes open hi-hats - that is, everything except open sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=46 hicc4=63 group=3 off_by=4 // The range which mutes half-open and open hi-hats - that is, closed and chik loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 group=4 // The range which mutes closed, half-open and open hi-hats - that is, just chik loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=44","title":"Hierarchical self-muting"},{"location":"tutorials/cymbal_muting/#special-treatment-of-foot-splashes","text":"The above isn't perfect - for example, fully opening up a hi-hat after playing a hard half-open hit in the real world would stop the clashes between the top and bottom, effectively stopping a half-open sound and replacing it with quieter open ringing - but it is a reasonable compromise covering various degrees of openness. Also, the more degrees of openness there are, the more groups will be needed. There are, however, more hi-hat articulations possible. One which has special behavior when it comes to muting is the foot splash - closing the hi-hat with the pedal, then quickly reopening it. This articulation needs to mute itself, because playing one foot splash after another involves closing the hi-hat, which will mute the ringing. Whether the splash should mute other types of hits is an open question, however. Splashes, especially gentler ones, involve only momentary contact of the cymbal edges and not complete closure. Whether an open hi-hat hit followed by a splash sounds better when the splash mutes the open hit is left as a decision to the reader. The below example has the splash muting everything else, except for pedal chiks, because it invovles closing the hi-hat fully. So, if a kit has foot splash samples (for which there is no standard general MIDI note assignment, so let's use 54 here - an octave above the chik, though in general MIDI that's supposed to be the cowbell note), we'd need to set up one more group, and have that mute itself. It will also need to be muted by all other types of hi-hat hits, except for fully open hits. //Here are the hi-hat samples off_mode=normal ampeg_release=0.07 key=42 sample=hh_closed.wav group=4 off_by=5 key=44 sample=hh_chik.wav group=5 key=46 sample=hh_half_open.wav hicc4=63 group=3 off_by=4 key=46 sample=hh_open.wav locc4=64 group=2 off_by=3 key=54 sample=hh_splash.wav group=1 off_by=1 group=1 off_by=1 //The range which mutes foot splashes - everything except open and foot splash //Foot splash mutes itself, but this group does not include the foot splash key //That's because the foot splash samples themselves are in the same group sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=46 group=3 off_by=4 //The range which mutes open hi-hats - that is, everything except open sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=46 hicc4=63 key=54 group=4 off_by=5 //The range which mutes half-open and open hi-hats - that is, closed, chik and foot splash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=54 group=5 //The range which mutes closed, half-open and open hi-hats - that is, just chik and foot splash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=44 key=54","title":"Special treatment of foot splashes"},{"location":"tutorials/cymbal_muting/#limiting-polyphony","text":"This works reasonably well. Another potential refinement is to also avoid excessive buildup when the more open articulations (which with some hi-hat pairs can ring for upwards of 20 seconds), while still allowing enough for ride patterns on an open hi-hat to sound right. We can do this by using the polyphony opcode to put a limit on the number of polyphony voices used by a specific group. Note this must be set for the silence regions, also, so that every region in a group will have the same off_by and polyphony as all the other regions in that group. Polyphony of 4 for the open hi-hats and 3 for the half-open are judgment calls. Drier cymbals and articulations with less sustain will generally sound realistic with lower numbers here, and brushes might need a lower number than sticks. Limiting the polyphony for the more closed articulations is not necessary in practice, unless playing unrealistically dense trap hi-hat patterns, because they don't ring very long anyway. Limiting the polyphony for the foot splash is not necessary at all, because it mutes itself. //Here are the hi-hat samples off_mode=normal ampeg_release=0.07 key=42 sample=hh_closed.wav group=4 off_by=5 key=44 sample=hh_chik.wav group=5 key=46 sample=hh_half_open.wav hicc4=63 group=3 off_by=4 polyphony=3 key=46 sample=hh_open.wav locc4=64 group=2 off_by=3 polyphony=4 key=54 sample=hh_splash.wav group=1 off_by=1 group=1 off_by=1 //The range which mutes foot splashes //All sounds except open mute foot splashes, but this group does not include the foot splash key //That's because the foot splash samples are in the same group, and will mute anything else sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=46 hicc4=63 group=3 off_by=4 polyphony=3 //The range which mutes open hi-hats - that is, everything except open and foot splash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=46 hicc4=63 key=54 group=4 off_by=5 //The range which mutes half-open and open hi-hats - that is, closed, chik and foot splash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=54 group=5 //The range which mutes closed, half-open and open hi-hats - that is, just chik and foot splash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=44","title":"Limiting polyphony"},{"location":"tutorials/cymbal_muting/#edge-cases","text":"The above can sound strange when a hard hi-hat hit is being muted by a much quieter one. If the hit doing the muting is both quiet and short, it can be practically inaudible, and the resulting sound seems to only be the open hit, suddenly fading out. This is especially risky if using amp_veltrack set to 100, which will make hits with very low velocity extremely quiet, or if the lowest dynamic layers of more closed hits and foot chiks are recorded very quietly. Lowering amp_veltrack for the lowest velocity layers is one potential way to reduce this problem, as is setting amp_velcurve_1 to some value around 0.2 to 0.5 (higher values if there are more dynamic layers). In real life, however, a hard open hi-hat hit would have reduced in volume before the start of the soft closed hit, as the pedal needs to be closed before a closed hit can be made. This would, of course, cause many edge clashes along the way, which we do not have a way to emulate. However, it is possible to use the pedal's MIDI CC to make the open sample quieter outside of the range where the open hi-hat sample would be triggered. This can be done by modulating the hi-hat's amplitude , and applying a \u2039curve\u203a which will keep the amplitude at 100% unless the pedal is a good deal more closed than it was when the sample was triggered. //Here are the hi-hat samples off_mode=normal ampeg_release=0.07 key=42 sample=hh_closed.wav group=4 off_by=5 key=44 sample=hh_chik.wav group=5 key=46 sample=hh_half_open.wav hicc4=63 group=3 off_by=4 amplitude_cc4=100 amplitude_curvecc4=21 amplitude_smoothcc4=150 key=46 sample=hh_open.wav locc4=64 group=2 off_by=3 amplitude_cc4=100 amplitude_curvecc4=21 amplitude_smoothcc4=150 key=54 sample=hh_splash.wav group=1 off_by=1 curve_index=21 v000=0.13 v037=0.8 v077=1 v127=1 curve_index=22 v000=0.1 v037=0.7 v077=1 v127=1 Using smoothing on the amplitude modulation helps avoid sudden jumps, though playing an open hit, closing the hi-hat pedal most of the way and then reopening it will still result in obviously unrealistic volume fluctuations. So, this is not a perfect solution by any means. It's probably better to do this by using a volume envelope and using CC4 to modulate its decay time, with the sustain set to a low level. and the ampeg_dynamic opcode set to 1 so that moving the pedal will cause the decay time to be recalculated. However, that has not been tested yet, as the author's test kit was already using envelopes on the hi-hat to emulate drier cymbals. Also, applying this to splash samples, which involve the pedal starting closed and opening rapidly, is another problem which requires a solution.","title":"Edge cases"},{"location":"tutorials/cymbal_muting/#multimic-samples","text":"So far, each hi-hat articulation has only one sample, which will obviously not be the case in most virtual drum kits. This does not add much complexity, though, as the samples for each degree of openness simply need to all be in the same group. All half-open samples, for example, including all round robins, all velocity layers, can share the same group. If there are separate articulations for each degree of openness, such as shank, tip and bell, those can also all be on the same group. Brushes, sticks and mallets can often also share the same groups, unless the brushes need lower polyphony numbers. However, if there are separate samples for different microphones and the groups are self-muting, they will need to be in different groups. In the current example, only the footsplash is self-muting, but if using the simpler rules where all hi-hat articulations mute all others, all groups are self-muting. So, having separate close hi-hat mic and a stereo overhead pair would mean twice as many of those groups (assuming the stereo overheads are in the L and R channel of the same sample), and close hi-hat, stereo overheads, close room and far room would mean four times as many. The polyphony numbers for groups which have polyphony will also have to be multiplied by the same factor. Here is an example with close and overhead, with slightly longer fadeout times for the more distant overhead mics: //Here are the hi-hat samples off_mode=normal key=42 sample=hh_closed_close.wav group=4 off_by=5 ampeg_release=0.12 key=42 sample=hh_closed_oh.wav group=4 off_by=5 ampeg_release=0.2 key=44 sample=hh_chik_close.wav group=5 ampeg_release=0.12 key=44 sample=hh_chik_oh.wav group=5 ampeg_release=0.2 key=46 sample=hh_half_open_close.wav hicc4=63 group=3 off_by=4 polyphony=6 ampeg_release=0.12 key=46 sample=hh_half_open_oh.wav hicc4=63 group=3 off_by=4 polyphony=6 ampeg_release=0.2 key=46 sample=hh_open_close.wav locc4=64 group=2 off_by=3 polyphony=8 ampeg_release=0.12 key=46 sample=hh_open_oh.wav locc4=64 group=2 off_by=3 polyphony=8 ampeg_release=0.2 key=54 sample=hh_splash_close.wav group=1 off_by=1 ampeg_release=0.12 key=54 sample=hh_splash_oh.wav group=11 off_by=11 ampeg_release=0.2 group=1 off_by=1 //The range which mutes foot splashes for the close mic //All sounds except open mute foot splashes, but this group does not include the foot splash key //That's because the foot splash samples are in the same group, and will mute anything else sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=46 hicc4=63 group=11 off_by=11 //The range which mutes foot splashes for the overhead mics //All sounds mute foot splashes, but this group does not include the foot splash key //That's because the foot splash samples are in the same group, and will mute anything else sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=46 hicc4=63 group=3 off_by=4 polyphony=3 //The range which mutes open hi-hats for both close and overhead mics - that is, everything except open sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=46 hicc4=63 key=54 group=4 off_by=5 //The range which mutes half-open and open hi-hats - that is, closed, chik and foot splash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=42 key=44 key=54 group=5 //The range which mutes closed, half-open and open hi-hats - that is, just chik sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=44","title":"Multimic samples"},{"location":"tutorials/cymbal_muting/#header-organization","text":"That is as complex as it gets, though there are a few minor points to be aware of. Many drum kits with round robins will set seq_length at the \u2039global\u203a level, and in those cases, the silence regions would only trigger for the first hit in the round robin sequence, unless they have seq_length set to 1 to override the global setting. Also, the \u2039master\u203a header level and #include statement are useful ARIA extensions for keeping deeply sampled hi-hat mappings organized.","title":"Header organization"},{"location":"tutorials/cymbal_muting/#cymbals-other-than-hi-hats","text":"Cymbals other than hi-hats are simpler, but there are two considerations when muting those. One is limiting polyphony, which is especially important with cymbals intended for playing rolls, and with jazz ride cymbals (rock/metal rides which primarily use the bell articulation, not as much). The other is that it's also possible to record separate choke samples, and have those mute everything else. A ride with bell, bow and edge articulations, choke samples and overhead and room mics might be set up like below. Note that while each articulation has its own groups and different polyphony limits, all articulations for each mic have the same off_by value, which is the group value of the choke samples for that mic. It would not be necessary to have this many groups to implement muting, but this setup would also allow a mapping using only the overhead mics and no room mic to be created without breaking anything, as each mic's samples have separate groups. Having different polyphony numbers for different mics can result in an inconsistent sound, so it is not recommended. off_mode=normal //Bow hits key=51 group=30 off_by=33 polyphony=5 ampeg_release=0.3 sample=ride_bow_oh.wav key=51 group=40 off_by=43 polyphony=5 ampeg_release=0.4 sample=ride_bow_rm.wav //Bell hits key=53 group=31 off_by=33 polyphony=4 ampeg_release=0.3 sample=ride_bell_oh.wav key=53 group=41 off_by=43 polyphony=4 ampeg_release=0.4 sample=ride_bell_rm.wav //Edge hits (crashes) key=59 group=32 off_by=33 polyphony=6 ampeg_release=0.3 sample=ride_edge_oh.wav key=59 group=42 off_by=43 polyphony=6 ampeg_release=0.4 sample=ride_edge_rm.wav //Edge chokes key=71 ampeg_attack=0.15 group=33 sample=ride_choke_oh.wav key=71 ampeg_attack=0.15 group=43 sample=ride_choke_rm.wav It is also possible to use note_polyphony here, which has the advantage of allowing note_selfmask to be used. This is good when a hard hit is followed by several lighter ones on the same cymbal - using polyphony, the quieter hits will mute the loud one when the polyphony limit is reached, which can result in the louder hit's sustain suddenly and unrealistically vanishing. However, this can cause problems with hi-hats where one MIDI note needs to trigger several silence groups as well. This is why Virtuosity Drums has the hi-hat regions set with note_polyphony=MAX, though there might be a better way. Note_polyphony is also separated by keys; while the polyphony limit under a group can be tracked together for several keys under one group, note_polyphony is tracked separately for each MIDI note value. The above example modified to use note_polyphony instead of polyphony would look like this: off_mode=normal //Bow hits key=51 group=30 off_by=33 note_polyphony=5 ampeg_release=0.3 sample=ride_bow_oh.wav key=51 group=40 off_by=43 note_polyphony=5 ampeg_release=0.4 sample=ride_bow_rm.wav //Bell hits key=53 group=31 off_by=33 note_polyphony=4 ampeg_release=0.3 sample=ride_bell_oh.wav key=53 group=41 off_by=43 note_polyphony=4 ampeg_release=0.4 sample=ride_bell_rm.wav //Edge hits (crashes) key=59 group=32 off_by=33 note_polyphony=6 ampeg_release=0.3 sample=ride_edge_oh.wav key=59 group=42 off_by=43 note_polyphony=6 ampeg_release=0.4 sample=ride_edge_rm.wav //Edge chokes key=71 ampeg_attack=0.15 group=33 sample=ride_choke_oh.wav key=71 ampeg_attack=0.15 group=43 sample=ride_choke_rm.wav","title":"Cymbals other than hi-hats"},{"location":"tutorials/cymbal_muting/#another-approach-to-limiting-polyphony","text":"If there is no need have a choke group, it's possible to limit the polyphony of a cymbal in a way which is more controllable, by having it self-mute but making the fadeout time of the previous samples long. This cannot be done when chokes are required, because chokes need a fast fadeout, but it is another option which allows how much dense patterns on a cymbal will build up to be controlled with a MIDI CC parameter - the polyphony opcode cannot be modulated by MIDI CC, but ampeg_release can. Here is how that might work using CC 100 to modulate the time, with different maximum times for different articulations, as in general edge hits will build up the most and bell hits the least. Of course, it's not very possible to modulate the buildup of a cymbal in the real world, but that doesn't mean it can't be useful in the sampled world. off_mode=normal ampeg_release=0.1 //Bow hits key=51 group=30 off_by=30 ampeg_release_oncc100=5 sample=ride_bow_oh.wav key=51 group=40 off_by=40 ampeg_release_oncc100=5.7 sample=ride_bow_rm.wav //Bell hits key=53 group=31 off_by=31 ampeg_release_oncc100=3 sample=ride_bell_oh.wav key=53 group=41 off_by=41 ampeg_release_oncc100=3.5 sample=ride_bell_rm.wav //Edge hits (crashes) key=59 group=32 off_by=32 ampeg_release_oncc100=7 sample=ride_edge_oh.wav key=59 group=42 off_by=42 ampeg_release_oncc100=8 sample=ride_edge_rm.wav","title":"Another approach to limiting polyphony"},{"location":"tutorials/cymbal_muting/#deep-sampled-hi-hat-example","text":"Putting most of the above knowledge together into a complex example can result in long SFZ files, but the principles themselves remain the same. The mapping for a deeply sampled hi-hat with tightly closed, closed, loosely closed, quarter open, half open, open, foot chik, foot splash and pedal return samples, with separate shank and tip hits for tightly closed, closed, loosely closed and quarter open might look like this: //Key assignments - hi-hat #define $htclstkey 42 #define $htchkkey 44 #define $htvartkey 46 #define $htclsskey 54 #define $htsplkey 56 #define $htvarskey 58 #define $htretkey 68 //Hi-hat CC ranges - order for keyboard/sequencing use //E-kit pedal should be backwards #define $ht_lo_hi_init 127 #define $ht_cl_lo 0 #define $ht_cl_hi 25 #define $ht_lc_lo 26 #define $ht_lc_hi 51 #define $ht_qo_lo 52 #define $ht_qo_hi 76 #define $ht_ho_lo 77 #define $ht_ho_hi 102 #define $ht_open_lo 103 #define $ht_open_hi 127 #define $mg_open_lo 0 #define $mg_open_hi 102 #define $mg_ho_lo 0 #define $mg_ho_hi 76 #define $mg_qo_lo 0 #define $mg_qo_hi 51 #define $mg_lc_lo 0 #define $mg_lc_hi 25 label_cc4=Hi-hat position label_cc100=Hi-hat close label_cc101=Hi-hat OH set_cc4=$ht_lo_hi_init set_cc100=40 set_cc101=100 loop_mode=one_shot seq_length=4 ampeg_release=0.12 amp_velcurve_1=0.4 //Foot chiks key=$htchkkey amplitude_cc100=100 #include \"mappings/hihat_14/ht_chik_cl.sfz\" key=$htchkkey amplitude_cc101=100 #include \"mappings/hihat_14/ht_chik_oh.sfz\" //Stick tip hits key=$htclstkey amplitude_cc100=100 group=11 off_by=10 #include \"mappings/hihat_14/ht_tc_cl.sfz\" key=$htclstkey amplitude_cc101=100 group=21 off_by=20 ampeg_release=0.2 #include \"mappings/hihat_14/ht_tc_oh.sfz\" key=$htvartkey amplitude_cc100=100 group=12 off_by=11 locc4=$ht_cl_lo hicc4=$ht_cl_hi #include \"mappings/hihat_14/ht_cl_cl.sfz\" key=$htvartkey amplitude_cc101=100 group=22 off_by=21 ampeg_release=0.2 locc4=$ht_cl_lo hicc4=$ht_cl_hi #include \"mappings/hihat_14/ht_cl_oh.sfz\" key=$htvartkey amplitude_cc100=100 group=13 off_by=12 locc4=$ht_lc_lo hicc4=$ht_lc_hi #include \"mappings/hihat_14/ht_lc_cl.sfz\" key=$htvartkey amplitude_cc101=100 group=23 off_by=22 ampeg_release=0.2 locc4=$ht_lc_lo hicc4=$ht_lc_hi #include \"mappings/hihat_14/ht_lc_oh.sfz\" key=$htvartkey amplitude_cc100=100 group=14 off_by=13 locc4=$ht_qo_lo hicc4=$ht_qo_hi #include \"mappings/hihat_14/ht_qo_cl.sfz\" key=$htvartkey amplitude_cc101=100 group=24 off_by=23 ampeg_release=0.2 locc4=$ht_qo_lo hicc4=$ht_qo_hi #include \"mappings/hihat_14/ht_qo_oh.sfz\" key=$htvartkey amplitude_cc100=100 group=15 off_by=14 amplitude_oncc4=100 amplitude_curvecc4=21 amplitude_smoothcc4=150 locc4=$ht_ho_lo hicc4=$ht_ho_hi #include \"mappings/hihat_14/ht_ho_cl.sfz\" key=$htvartkey amplitude_cc101=100 group=25 off_by=24 ampeg_release=0.2 amplitude_oncc4=100 amplitude_curvecc4=21 amplitude_smoothcc4=150 locc4=$ht_ho_lo hicc4=$ht_ho_hi #include \"mappings/hihat_14/ht_ho_oh.sfz\" key=$htvartkey amplitude_cc100=100 group=16 off_by=15 amplitude_oncc4=100 amplitude_curvecc4=22 amplitude_smoothcc4=150 locc4=$ht_open_lo hicc4=$ht_open_hi #include \"mappings/hihat_14/ht_open_cl.sfz\" key=$htvartkey amplitude_cc101=100 group=26 off_by=25 ampeg_release=0.2 amplitude_oncc4=100 amplitude_curvecc4=22 amplitude_smoothcc4=150 locc4=$ht_open_lo hicc4=$ht_open_hi #include \"mappings/hihat_14/ht_open_oh.sfz\" //Stick shank hits key=$htclsskey amplitude_cc100=100 group=11 off_by=10 #include \"mappings/hihat_14/ht_tc_s_cl.sfz\" key=$htclsskey amplitude_cc101=100 group=21 off_by=20 ampeg_release=0.2 #include \"mappings/hihat_14/ht_tc_s_oh.sfz\" key=$htvarskey amplitude_cc100=100 group=12 off_by=11 locc4=$ht_cl_lo hicc4=$ht_cl_hi #include \"mappings/hihat_14/ht_cl_s_cl.sfz\" key=$htvarskey amplitude_cc101=100 group=22 off_by=21 ampeg_release=0.2 locc4=$ht_cl_lo hicc4=$ht_cl_hi #include \"mappings/hihat_14/ht_cl_s_oh.sfz\" key=$htvarskey amplitude_cc100=100 group=13 off_by=12 locc4=$ht_lc_lo hicc4=$ht_lc_hi #include \"mappings/hihat_14/ht_lc_s_cl.sfz\" key=$htvarskey amplitude_cc101=10 group=23 off_by=22 ampeg_release=0.2 locc4=$ht_lc_lo hicc4=$ht_lc_hi #include \"mappings/hihat_14/ht_lc_s_oh.sfz\" key=$htvarskey amplitude_cc100=100 group=14 off_by=13 locc4=$ht_qo_lo hicc4=$ht_qo_hi #include \"mappings/hihat_14/ht_qo_s_cl.sfz\" key=$htvarskey amplitude_cc101=100 group=24 off_by=23 ampeg_release=0.2 locc4=$ht_qo_lo hicc4=$ht_qo_hi #include \"mappings/hihat_14/ht_qo_s_oh.sfz\" key=$htvarskey amplitude_cc100=100 group=15 off_by=14 amplitude_oncc4=100 amplitude_curvecc4=21 amplitude_smoothcc4=150 locc4=$ht_ho_lo hicc4=$ht_ho_hi #include \"mappings/hihat_14/ht_ho_cl.sfz\" key=$htvarskey amplitude_cc101=100 group=25 off_by=24 ampeg_release=0.2 amplitude_oncc4=100 amplitude_curvecc4=21 amplitude_smoothcc4=150 locc4=$ht_ho_lo hicc4=$ht_ho_hi #include \"mappings/hihat_14/ht_ho_oh.sfz\" key=$htvarskey amplitude_cc100=100 group=16 off_by=15 amplitude_oncc4=100 amplitude_curvecc4=22 amplitude_smoothcc4=150 locc4=$ht_open_lo hicc4=$ht_open_hi #include \"mappings/hihat_14/ht_open_cl.sfz\" key=$htvarskey amplitude_cc101=100 group=26 off_by=25 ampeg_release=0.2 amplitude_oncc4=100 amplitude_curvecc4=22 amplitude_smoothcc4=150 locc4=$ht_open_lo hicc4=$ht_open_hi #include \"mappings/hihat_14/ht_open_oh.sfz\" //Footsplashes are the only self-muting group key=$htsplkey amplitude_cc100=100 group=17 off_by=17 #include \"mappings/hihat_14/ht_footspl_cl.sfz\" key=$htsplkey amplitude_cc101=100 group=27 off_by=27 ampeg_release=0.2 #include \"mappings/hihat_14/ht_footspl_oh.sfz\" //Stick hits on the shaft, not involved in muting key=$htperckey amplitude_cc100=100 #include \"mappings/hihat_14/ht_perc_cl.sfz\" key=$htperckey amplitude_cc101=100 #include \"mappings/hihat_14/ht_perc_oh.sfz\" //Hi hat pedal return noises, muted by anything else key=$htretkey amplitude_cc100=100 group=18 off_by=17 #include \"mappings/hihat_14/ht_return_cl.sfz\" key=$htretkey amplitude_cc101=100 group=28 off_by=27 ampeg_release=0.2 #include \"mappings/hihat_14/ht_return_oh.sfz\" //Hat mute silence groups seq_length=1 group=18 //The range which mutes hi-hat pedal return noises //Everything except themselves sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=17 key=$htclstkey key=$htchkkey key=$htvartkey key=$htclsskey key=$htvarskey key=$htsplkey group=17 //The range which mutes footsplashes //Everything except pedal return noises and open //Footsplashes are the only articulation which mutes itself //Splash also mutes splash, but key=$htsplkey is not part of this silence group //Instead splash regions themselves are marked with group=17 also //Kind of a kludge, but keeps the silence from instantly muting the splash //while allowing a subsequent splash to mute the current splash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=17 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_open_lo hicc4=$mg_open_hi key=$htclsskey key=$htvarskey locc4=$mg_open_lo hicc4=$mg_open_hi group=15 //The range which mutes open hi-hats //Everything except pedal return noises and open //Just like the footsplash mute group, except the footsplash key is in this too sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=14 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_open_lo hicc4=$mg_open_hi key=$htclsskey key=$htvarskey locc4=$mg_open_lo hicc4=$mg_open_hi key=$htsplkey key=$htsplkey group=14 //The range which mutes half open hi-hats //Everything except open and half-open sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=13 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_ho_lo hicc4=$mg_ho_hi key=$htclsskey key=$htvarskey locc4=$mg_ho_lo hicc4=$mg_ho_hi key=$htsplkey group=13 //The range which mutes quarter open hi-hats //Everything except open, half-open and quarter open sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=12 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_qo_lo hicc4=$mg_qo_hi key=$htclsskey key=$htvarskey locc4=$mg_qo_lo hicc4=$mg_qo_hi key=$htsplkey group=12 //The range which mutes loosely closed hi-hats //Everything except open, half-open, quarter open and loosely closed sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=11 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_lc_lo hicc4=$mg_lc_hi key=$htclsskey key=$htvarskey locc4=$mg_lc_lo hicc4=$mg_lc_hi key=$htsplkey group=11 //The range which mutes regular closed hi-hats //Just foot chik, tightly closed and footsplash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=10 key=$htclstkey key=$htchkkey key=$htclsskey key=$htsplkey group=10 //The range which mutes tightly closed hi-hats - just foot chik and footsplash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=$htchkkey key=$htsplkey group=28 //The range which mutes hi-hat pedal return noises //Everything except themselves sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=27 key=$htclstkey key=$htchkkey key=$htvartkey key=$htclsskey key=$htvarskey key=$htsplkey group=27 //The range which mutes footsplashes //Everything except pedal return noises and open //Footsplashes are the only articulation which mutes itself //Splash also mutes splash, but key=$htsplkey is not part of this silence group //Instead splash regions themselves are marked with group=27 also //Kind of a kludge, but keeps the silence from instantly muting the splash //while allowing a subsequent splash to mute the current splash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=27 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_open_lo hicc4=$mg_open_hi key=$htclsskey key=$htvarskey locc4=$mg_open_lo hicc4=$mg_open_hi group=25 //The range which mutes open hi-hats //Everything except pedal return noises and open //Just like the footsplash mute group, except the footsplash key is in this too sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=24 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_open_lo hicc4=$mg_open_hi key=$htclsskey key=$htvarskey locc4=$mg_open_lo hicc4=$mg_open_hi key=$htsplkey key=$htsplkey group=24 //The range which mutes half open hi-hats //Everything except open and half-open sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=23 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_ho_lo hicc4=$mg_ho_hi key=$htclsskey key=$htvarskey locc4=$mg_ho_lo hicc4=$mg_ho_hi key=$htsplkey group=23 //The range which mutes quarter open hi-hats //Everything except open, half-open and quarter open sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=22 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_qo_lo hicc4=$mg_qo_hi key=$htclsskey key=$htvarskey locc4=$mg_qo_lo hicc4=$mg_qo_hi key=$htsplkey group=22 //The range which mutes loosely closed hi-hats //Everything except open, half-open, quarter open and loosely closed sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=21 key=$htclstkey key=$htchkkey key=$htvartkey locc4=$mg_lc_lo hicc4=$mg_lc_hi key=$htclsskey key=$htvarskey locc4=$mg_lc_lo hicc4=$mg_lc_hi key=$htsplkey group=21 //The range which mutes regular closed hi-hats //Just foot chik, tightly closed and footsplash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 off_by=20 key=$htclstkey key=$htchkkey key=$htclsskey key=$htsplkey group=20 //The range which mutes tightly closed hi-hats - just foot chik and footsplash sample=*silence loop_mode=loop_continuous off_mode=fast ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=$htchkkey key=$htsplkey curve_index=21 v000=0.13 v037=0.8 v077=1 v127=1 curve_index=22 v000=0.1 v037=0.7 v077=1 v127=1","title":"Deep-sampled hi-hat example"},{"location":"tutorials/drum_basics/","text":"SFZ has a lot of opcodes. No instrument uses all of them, though, and even highly complicated instruments with thousands of samples will usually only use a dozen or two different opcodes. In this guide, we'll talk about the opcodes needed to make a simple drum kit. If you have some drum samples, a text editor and an SFZ player, this should be all the knowledge you need to make a working SFZ mapping for those samples. Most of them will apply to most other instrument types as well. Later, we'll apply this knowledge to instruments such as piano, guitar, violin and flute. A very simple instrument to make would be an electronic drum kit with one sample for each sound. A functional mapping for an entire sampled drum machine using one-shot samples could be made using only the region header, and two opcodes sample and key . With kick, snare and hi-hat samples on their standard General MIDI notes, this could be the entire SFZ file: key=36 sample=kick.wav key=38 sample=snare.wav key=42 sample=closedhat.wav This would work. Load this into an SFZ player, hit the C on MIDI note 36, and you get the kick sample playing. However, each sound would play only while a note is held. With drums it's usually a good idea to play the entire sample, so a very short note will result in a complete drum hit sounding. We can do that with the loop_mode opcode, which is also used for looping (as the name implies), but loop_mode=one_shot causes the sampler to play the entire sample from start to end, ignoring note off. key=36 loop_mode=one_shot sample=kick.wav key=38 loop_mode=one_shot sample=snare.wav key=42 loop_mode=one_shot sample=closedhat.wav There's no need to set the one_shot for each region, though. We can simplify our life by using the \u2039global\u203a header like this: loop_mode=one_shot key=36 sample=kick.wav key=38 sample=snare.wav key=42 sample=closedhat.wav This is basically all that's required to take, for example, some of Wave Alchemy's very nice free samples of TR-808 or Tanzbar drum machines, and make a working SFZ mapping for them. Let's say what we have isn't drum machine samples, but acoustic drum samples. These sounds will have natural variation between hits - some depending on hit location, a lot depending on dynamics (how hard the drum is hit), and some just plain random. Let's ignore controlling hit location for now (drum samples mostly do ignore it), and focus on the other two. Dynamic variation can be captured by recording hits of various intensity, and organizing them into dynamic layers, also called velocity layers. If we have an acoustic kick drum sampled at four dynamics - quiet, kind of quiet, kind of loud and loud - we have four dynamic layers. Let's say the files for these layers are named like this: kick_vl1.wav kick_vl2.wav kick_vl3.wav kick_vl4.wav To trigger the quiet sample at low MIDI note velocities, we'd use the lovel and hivel opcodes like this: key=36 lovel=0 hivel=31 sample=kick_vl1.wav All four hits with velocity ranges assigned, evenly splitting the full 0 to 127 velocity range into four, would look like this: key=36 lovel=0 hivel=31 sample=kick_vl1.wav key=36 lovel=32 hivel=63 sample=kick_vl2.wav key=36 lovel=64 hivel=95 sample=kick_vl3.wav key=36 lovel=96 hivel=127 sample=kick_vl4.wav This can, again, be simplified. The defalut value for lovel is 0, and for hivel it's 127, so we don't need to specify setting them to those numbers. Also, we can use a \u2039group\u203a header to make the key opcode the same across all four regions: loop_mode=one_shot key=36 hivel=31 sample=kick_vl1.wav lovel=32 hivel=63 sample=kick_vl2.wav lovel=64 hivel=95 sample=kick_vl3.wav lovel=96 sample=kick_vl4.wav However, the quiet samples will play quieter than they should - because of standard velocity tracking, each sample would play at full volume if the velocity was 127, but we actually need each sample to play at full volume at the velocity which is equal to its hivel value. This can be done in various ways, and the way we recommend is the amp_velcurve_N opcode, like this: loop_mode=one_shot key=36 hivel=31 amp_velcurve_31=1 sample=kick_vl1.wav lovel=32 hivel=63 amp_velcurve_63=1 sample=kick_vl2.wav lovel=64 hivel=95 amp_velcurve_95=1 sample=kick_vl3.wav lovel=96 sample=kick_vl4.wav Let's say that each dynamic layer also contains four round robins - four samples with roughly the same dynamic. This allows us to include some variation, and sound more natural - fast parts won't sound like a \"machine gun\". There are two basic ways to put round robins to use. One is to use the seq_length and seq_position opcodes, like this: loop_mode=one_shot key=36 hivel=31 amp_velcurve_31=1 seq_length=4 seq_position=1 sample=kick_vl1_rr1.wav seq_position=2 sample=kick_vl1_rr2.wav seq_position=3 sample=kick_vl1_rr3.wav seq_position=4 sample=kick_vl1_rr4.wav key=36 lovel=32 hivel=63 amp_velcurve_63=1 seq_length=4 seq_position=1 sample=kick_vl2_rr1.wav seq_position=2 sample=kick_vl2_rr2.wav seq_position=3 sample=kick_vl2_rr3.wav seq_position=4 sample=kick_vl2_rr4.wav key=36 lovel=64 hivel=95 amp_velcurve_95=1 seq_length=4 seq_position=1 sample=kick_vl3_rr1.wav seq_position=2 sample=kick_vl3_rr2.wav seq_position=3 sample=kick_vl3_rr3.wav seq_position=4 sample=kick_vl3_rr4.wav key=36 lovel=96 seq_length=4 seq_position=1 sample=kick_vl4_rr1.wav seq_position=2 sample=kick_vl4_rr2.wav seq_position=3 sample=kick_vl4_rr3.wav seq_position=4 sample=kick_vl4_rr4.wav That's a kick drum with four dynamic layers and four sequential round robins. As you might have noticed, we're repeating the key=36 and seq_length=4 opcodes in every group. Those two opcodes could be moved to the global level if all we wanted was a kick drum, but as we're going to have other instruments with other keys and possibly different numbers of round robins, we kept them at the group level. The other way to use round robins is randomized, using the lorand and hirand opcodes. This will make the sample player generate a random number, then play the region whose lorand to hirand range includes that random number. Whether robins should be used in this random way or the above sequential way, the answer is \"it depends\". It seems that more instruments use sequential, though. This is how random round robins would be set up for our kick drum samples: loop_mode=one_shot key=36 hivel=31 amp_velcurve_31=1 hirand=0.25 sample=kick_vl1_rr1.wav lorand=0.25 hirand=0.5 sample=kick_vl1_rr2.wav lorand=0.5 hirand=0.75 sample=kick_vl1_rr3.wav lorand=0.75 sample=kick_vl1_rr4.wav key=36 lovel=32 hivel=63 amp_velcurve_63=1 hirand=0.25 sample=kick_vl2_rr1.wav lorand=0.25 hirand=0.5 sample=kick_vl2_rr2.wav lorand=0.5 hirand=0.75 sample=kick_vl2_rr3.wav lorand=0.75 sample=kick_vl2_rr4.wav key=36 lovel=64 hivel=95 amp_velcurve_95=1 hirand=0.25 sample=kick_vl3_rr1.wav lorand=0.25 hirand=0.5 sample=kick_vl3_rr2.wav lorand=0.5 hirand=0.75 sample=kick_vl3_rr3.wav lorand=0.75 sample=kick_vl3_rr4.wav key=36 lovel=96 hirand=0.25 sample=kick_vl4_rr1.wav lorand=0.25 hirand=0.5 sample=kick_vl4_rr2.wav lorand=0.5 hirand=0.75 sample=kick_vl4_rr3.wav lorand=0.75 sample=kick_vl4_rr4.wav If we go back to sequential round robins and add a snare with only three round robins, plus a few comments, the resulting SFZ would look like this: // This is an example of a basic drum kit mapping // All samples set to play in their entirety when a note is received loop_mode=one_shot // This is the kick, on MIDI note 36, with four dynamic layers and four round robins key=36 hivel=31 amp_velcurve_31=1 seq_length=4 seq_position=1 sample=kick_vl1_rr1.wav seq_position=2 sample=kick_vl1_rr2.wav seq_position=3 sample=kick_vl1_rr3.wav seq_position=4 sample=kick_vl1_rr4.wav key=36 lovel=32 hivel=63 amp_velcurve_63=1 seq_length=4 seq_position=1 sample=kick_vl2_rr1.wav seq_position=2 sample=kick_vl2_rr2.wav seq_position=3 sample=kick_vl2_rr3.wav seq_position=4 sample=kick_vl2_rr4.wav key=36 lovel=64 hivel=95 amp_velcurve_95=1 seq_length=4 seq_position=1 sample=kick_vl3_rr1.wav seq_position=2 sample=kick_vl3_rr2.wav seq_position=3 sample=kick_vl3_rr3.wav seq_position=4 sample=kick_vl3_rr4.wav key=36 lovel=96 seq_length=4 seq_position=1 sample=kick_vl4_rr1.wav seq_position=2 sample=kick_vl4_rr2.wav seq_position=3 sample=kick_vl4_rr3.wav seq_position=4 sample=kick_vl4_rr4.wav // Here is the snare, on MIDI note 38, with four dynamic layers and three round robins key=38 hivel=31 amp_velcurve_31=1 seq_length=3 seq_position=1 sample=snare_vl1_rr1.wav seq_position=2 sample=snare_vl1_rr2.wav seq_position=3 sample=snare_vl1_rr3.wav key=38 lovel=32 hivel=63 amp_velcurve_63=1 seq_length=3 seq_position=1 sample=snare_vl2_rr1.wav seq_position=2 sample=snare_vl2_rr2.wav seq_position=3 sample=snare_vl2_rr3.wav key=38 lovel=64 hivel=95 amp_velcurve_95=1 seq_length=3 seq_position=1 sample=snare_vl3_rr1.wav seq_position=2 sample=snare_vl3_rr2.wav seq_position=3 sample=snare_vl3_rr3.wav key=38 lovel=96 seq_length=3 seq_position=1 sample=snare_vl4_rr1.wav seq_position=2 sample=snare_vl4_rr2.wav seq_position=3 sample=snare_vl4_rr3.wav This is almost all the information needed to map basic drum kits in SFZ. Almost, because well-sampled hi-hats will have many different articulations, and that creates some additional considerations, which we will describe on another page .","title":"Drum basics"},{"location":"tutorials/envelope_generators/","text":"Envelope generators (EGs) are used to control the profile of the volume, filter, pitch, or other parameter, based on the timing of the key press and release (including sustain / sostenuto pedal release.) These are often called \"ADSRs\", after the four parameters (Attack, Decay, Sustain, Release) that were used to control envelopes in early synthesizers (and many current ones as well.) See SFZ1 Modulations to see examples of how these can be applied. SFZ has two types of EGs: SFZ1 and SFZ2. SFZ1: DSAHDSR SFZ1 envelopes are sometimes called DSAHDSR after the 7 controls of the envelope, which are applied in the order given below. An EG can control a variety of parameters, but to help understand, you can imagine it controlling the volume, in which case you can substitute \"volume\" for \"EG\" below. Parameter Suffix Description Delay time (s) _delay time to wait after key is depressed until the EG starts Start level (%) _start level at which to start Attack time (s) _attack time from note start (at start level) to 100% level Hold time (s) _hold time the volume is held at 100% level Decay time 1 (s) _decay time 3 for the volume to decrease from 100% to the sustain level Sustain level (%) _sustain the % level at which the EG remains while the key is down or the sustain pedal is down Release time 2 _release time 3 for the EG to decrease to zero. This begins when both key and sustain pedal are released, even if the prior stages have not completed. Here is a screenshot of an audio file created using Sforzando, showing the ampeg envelope shape and its stages. Note that this image assumes the Start level is 0. If it were nonzero, the tip of the left-pointing arrow would look chopped off vertically. Here's a play-by-play explanation, when using the EG for volume (ampeg_xxx). When the key is depressed, Delay time elapses and then the note starts (at Start level, which above is the default of 0.) The volume increases (at a constant dB/sec rate) for the Attack time and then reaches the peak level for that note (which is controlled by the velocity and possibly other parameters.) The volume stays at that level for the Hold time, after which it falls off for the Decay time until it reaches the Sustain level. It remains at that level until the key and sustain pedal are both released, when it takes the Release time to fall off to silence. Note that when using an envelope generator to control volume, it is usually not necessary to adjust release or decay times based on velocity: that will happen naturally. That is, if I configure ampeg_release =1 and play a very loud note, that note will decay with a rate so that one second later it will be about 90 dB quieter than when it started. If I play a very soft note, that note will also decay with the same rate, so that 1 second later it will be 90 dB quieter when it started. That's pretty close to how most natural instruments behave. Another note when using an envelope to control volume: if you're playing a sample that already has a natural envelope, such as the pluck of a harp string, you normally don't have to configure the envelope because it's already in the sample, which has a natural attack and decay. However, you'll still probably want to configure a release, so that if the key is released before the sample is finished, it doesn't end abruptly. With most natural instruments, this release rate varies with pitch, but not velocity. SFZ2 The SFZ2 standard has a more flexible generator that can be used in addition to the above. This is briefly described in SFZ2 Modulations:Envelopes . References th:nth-of-type(1){width:20%;} Decay time is actually a constant decay rate that is specified as the time for the EG to go from 100% to 0% . However, this can be changed by setting xxx_decay_zero=0 to instead mean to decay from 100% to sustain level in the given time, from the actual sustain level. \u21a9 Release time is actually a constant decay rate that is specified as the time for the EG to go from the sustain level to zero. However, this can be changed setting by xxx_release_zero=1 to instead mean to decay from 100% to zero in the given time. \u21a9 When using an amp envelope generator, \"0%\" means \"silence\" but it's actually interpreted as -90dBFS for Aria, or -80dBFS for original sfz. This adjustment is needed because volume is contolled in dB, and silence in dB is negative infinity, which complicates the math. \u21a9 \u21a9","title":"Envelope Generators"},{"location":"tutorials/envelope_generators/#sfz1-dsahdsr","text":"SFZ1 envelopes are sometimes called DSAHDSR after the 7 controls of the envelope, which are applied in the order given below. An EG can control a variety of parameters, but to help understand, you can imagine it controlling the volume, in which case you can substitute \"volume\" for \"EG\" below. Parameter Suffix Description Delay time (s) _delay time to wait after key is depressed until the EG starts Start level (%) _start level at which to start Attack time (s) _attack time from note start (at start level) to 100% level Hold time (s) _hold time the volume is held at 100% level Decay time 1 (s) _decay time 3 for the volume to decrease from 100% to the sustain level Sustain level (%) _sustain the % level at which the EG remains while the key is down or the sustain pedal is down Release time 2 _release time 3 for the EG to decrease to zero. This begins when both key and sustain pedal are released, even if the prior stages have not completed. Here is a screenshot of an audio file created using Sforzando, showing the ampeg envelope shape and its stages. Note that this image assumes the Start level is 0. If it were nonzero, the tip of the left-pointing arrow would look chopped off vertically. Here's a play-by-play explanation, when using the EG for volume (ampeg_xxx). When the key is depressed, Delay time elapses and then the note starts (at Start level, which above is the default of 0.) The volume increases (at a constant dB/sec rate) for the Attack time and then reaches the peak level for that note (which is controlled by the velocity and possibly other parameters.) The volume stays at that level for the Hold time, after which it falls off for the Decay time until it reaches the Sustain level. It remains at that level until the key and sustain pedal are both released, when it takes the Release time to fall off to silence. Note that when using an envelope generator to control volume, it is usually not necessary to adjust release or decay times based on velocity: that will happen naturally. That is, if I configure ampeg_release =1 and play a very loud note, that note will decay with a rate so that one second later it will be about 90 dB quieter than when it started. If I play a very soft note, that note will also decay with the same rate, so that 1 second later it will be 90 dB quieter when it started. That's pretty close to how most natural instruments behave. Another note when using an envelope to control volume: if you're playing a sample that already has a natural envelope, such as the pluck of a harp string, you normally don't have to configure the envelope because it's already in the sample, which has a natural attack and decay. However, you'll still probably want to configure a release, so that if the key is released before the sample is finished, it doesn't end abruptly. With most natural instruments, this release rate varies with pitch, but not velocity.","title":"SFZ1: DSAHDSR"},{"location":"tutorials/envelope_generators/#sfz2","text":"The SFZ2 standard has a more flexible generator that can be used in addition to the above. This is briefly described in SFZ2 Modulations:Envelopes .","title":"SFZ2"},{"location":"tutorials/envelope_generators/#references","text":"th:nth-of-type(1){width:20%;} Decay time is actually a constant decay rate that is specified as the time for the EG to go from 100% to 0% . However, this can be changed by setting xxx_decay_zero=0 to instead mean to decay from 100% to sustain level in the given time, from the actual sustain level. \u21a9 Release time is actually a constant decay rate that is specified as the time for the EG to go from the sustain level to zero. However, this can be changed setting by xxx_release_zero=1 to instead mean to decay from 100% to zero in the given time. \u21a9 When using an amp envelope generator, \"0%\" means \"silence\" but it's actually interpreted as -90dBFS for Aria, or -80dBFS for original sfz. This adjustment is needed because volume is contolled in dB, and silence in dB is negative infinity, which complicates the math. \u21a9 \u21a9","title":"References"},{"location":"tutorials/epic_drums/","text":"Basic Concept Epic percussion in media music is commonly created by recording large ensembles of large, low-tuned drums (for example taikos) in large, naturally reverberant spaces. The Virtuosity Drums kit includes an \"Epic\" knob which makes the small, high-tuned jazz kit recorded in a music store sound surprisingly, well, epic. This tutorial explains how that trick works. Using drum samples at pitches lower than the original recording makes them sound bigger in several ways. One, obviously, the pitch is lower. Two, slowing down the playback also slows down attack times and lengthens decay tails. This includes any reverb tails captured by the microphones, which means pitching a sound down makes it sound as if it was recorded in a larger space. However, pitching sounds down also takes away the high end and reduces definition. Playing a sound at both its original pitch and tuned down an octave is a way to get both at the same time - a large, deep sound with reverb tails twice the length of the real recording, and the clarity and definition of the originally pitched sample. This could be done using the tune opcode, though transpose is likely more convenient.Here is a very simple example using a single floor tom sample: sample=Rack_Tom.wav transpose=-12 sample=Rack_Tom.wav If the sample maps are modularized using #include statements, it becomes very simple to set up a volume control, and also use locc so that the transposed samples don't use up polyphony voices when their volume is at zero. amplitude_oncc101=100 locc101=1 #include \"sample_maps/rack_tom.sfz\" amplitude_oncc102=100 locc102=1 transpose=-12 #include \"sample_maps/rack_tom.sfz\" Some Pitfalls This does not work as well with close mics, which don't have much room reverb in the recording. This is why in Virtuosity Drums, the kick and snare mics aren't used with the Epic control. With kicks and other low drums, there's also a point of diminishing returns with having a lot of low frequencies, which is one more reason to not apply this to kick close mics. Although sample maps can often be reused, as in the above example, instruments which have self-muting behavior, such as hi-hats, or instruments with polyphony limitations will need separate polyphony group numbers for the transposed regions, just as if the transposed regions were separate microphone positions. With complex muting scenarios this will result in very large numbers of groups which can be difficult to keep track of, but with simple self-muting it could look like this: amplitude_oncc101=100 locc101=1 group=1 off_by=1 #include \"sample_maps/hi_hat.sfz\" amplitude_oncc102=100 locc102=1 group=11 off_by=11 transpose=-12 #include \"sample_maps/hi_hat.sfz\" If the samples include any preroll before the hit, which more distant microphone samples naturally will, transposing down an octave will double the length of that preroll. This is usually not a problem, but in extreme cases it may be necessary to use offset to reduce the preroll to avoid a flam sound. In Virtuosity Drums, this is done for the hi-hat pedal articulations. On the topic of flams, this does not work well with flams, buzz rolls and other sounds which do not consist of a single distinct hit. Long rolls and partially closed hi-hats seem to work fairly well, however. Tambourines, shakers etc. will usually sound quite unnatural with the transposed and untransposed sound appearing as separate entities, but sometimes this can be musically useful. Other Uses Applying this trick to a snare bottom mic usually results in a sound which is not epic, but can be very industrial. Beyond drums, this could work reasonably well with other instruments. Sounds with fast, distinct attacks will behave more similarly to drums, though at least on principle this could be used with sounds such as sustained bowed strings also. Of course, pitched instruments can be doubled with another note an octave lower without transposition, as long as the lower note also falls in their range. However, transposition an octave down does make the reverb tails twice as long.","title":"Epic Drums"},{"location":"tutorials/epic_drums/#basic-concept","text":"Epic percussion in media music is commonly created by recording large ensembles of large, low-tuned drums (for example taikos) in large, naturally reverberant spaces. The Virtuosity Drums kit includes an \"Epic\" knob which makes the small, high-tuned jazz kit recorded in a music store sound surprisingly, well, epic. This tutorial explains how that trick works. Using drum samples at pitches lower than the original recording makes them sound bigger in several ways. One, obviously, the pitch is lower. Two, slowing down the playback also slows down attack times and lengthens decay tails. This includes any reverb tails captured by the microphones, which means pitching a sound down makes it sound as if it was recorded in a larger space. However, pitching sounds down also takes away the high end and reduces definition. Playing a sound at both its original pitch and tuned down an octave is a way to get both at the same time - a large, deep sound with reverb tails twice the length of the real recording, and the clarity and definition of the originally pitched sample. This could be done using the tune opcode, though transpose is likely more convenient.Here is a very simple example using a single floor tom sample: sample=Rack_Tom.wav transpose=-12 sample=Rack_Tom.wav If the sample maps are modularized using #include statements, it becomes very simple to set up a volume control, and also use locc so that the transposed samples don't use up polyphony voices when their volume is at zero. amplitude_oncc101=100 locc101=1 #include \"sample_maps/rack_tom.sfz\" amplitude_oncc102=100 locc102=1 transpose=-12 #include \"sample_maps/rack_tom.sfz\"","title":"Basic Concept"},{"location":"tutorials/epic_drums/#some-pitfalls","text":"This does not work as well with close mics, which don't have much room reverb in the recording. This is why in Virtuosity Drums, the kick and snare mics aren't used with the Epic control. With kicks and other low drums, there's also a point of diminishing returns with having a lot of low frequencies, which is one more reason to not apply this to kick close mics. Although sample maps can often be reused, as in the above example, instruments which have self-muting behavior, such as hi-hats, or instruments with polyphony limitations will need separate polyphony group numbers for the transposed regions, just as if the transposed regions were separate microphone positions. With complex muting scenarios this will result in very large numbers of groups which can be difficult to keep track of, but with simple self-muting it could look like this: amplitude_oncc101=100 locc101=1 group=1 off_by=1 #include \"sample_maps/hi_hat.sfz\" amplitude_oncc102=100 locc102=1 group=11 off_by=11 transpose=-12 #include \"sample_maps/hi_hat.sfz\" If the samples include any preroll before the hit, which more distant microphone samples naturally will, transposing down an octave will double the length of that preroll. This is usually not a problem, but in extreme cases it may be necessary to use offset to reduce the preroll to avoid a flam sound. In Virtuosity Drums, this is done for the hi-hat pedal articulations. On the topic of flams, this does not work well with flams, buzz rolls and other sounds which do not consist of a single distinct hit. Long rolls and partially closed hi-hats seem to work fairly well, however. Tambourines, shakers etc. will usually sound quite unnatural with the transposed and untransposed sound appearing as separate entities, but sometimes this can be musically useful.","title":"Some Pitfalls"},{"location":"tutorials/epic_drums/#other-uses","text":"Applying this trick to a snare bottom mic usually results in a sound which is not epic, but can be very industrial. Beyond drums, this could work reasonably well with other instruments. Sounds with fast, distinct attacks will behave more similarly to drums, though at least on principle this could be used with sounds such as sustained bowed strings also. Of course, pitched instruments can be doubled with another note an octave lower without transposition, as long as the lower note also falls in their range. However, transposition an octave down does make the reverb tails twice as long.","title":"Other Uses"},{"location":"tutorials/legato/","text":"Basic monophony In the basic sustained instruments tutorial, we have the below example of a monophonic flute, which uses the group and off_by opcodes to allow only one be played at a time, and the off_mode together with ampeg_release make the fadeout of the previous note a little smoother. This is a starting point for implementing legato. If only group and off_by are specified, the resulting sound will probably be quite bad, as this will use default values for off_mode, ampeg_attack and ampeg_release. This means the note being muted will drop off extremely quickly, which will probably leave an audible drop in levels during the transition, unless the next note has an extremely fast attack. Therefore, at least ampeg_release will need to be specified in most cases - though most instruments will need to specify that even if not using legato. ampeg_release=0.3 amp_veltrack=0 sw_lokey=48 sw_hikey=49 group=1 off_by=1 off_mode=normal lokey=50 hikey=51 pitch_keycenter=50 sw_last=48 sample=d4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85 sample=d4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127 sample=d4_f.wav xfin_locc1=86 xfin_hicc1=127 lokey=52 hikey=53 pitch_keycenter=52 sw_last=48 sample=e4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85 sample=e4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127 sample=e4_f.wav xfin_locc1=86 xfin_hicc1=127 lokey=50 hikey=51 pitch_keycenter=50 sw_last=49 sample=d4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127 sample=d4_ft_f.wav xfin_locc1=64 xfin_hicc1=127 lokey=52 hikey=53 pitch_keycenter=52 sw_last=49 sample=e4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127 sample=e4_ft_f.wav xfin_locc1=64 xfin_hicc1=127 Legato regions The above will allow only one note to sound at a time, with a quick crossfade between the old and new note. In many cases, though, it makes sense to treat the legato notes differently than the notes which start a phrase when no other note is playing. The trigger opcode is used to separate regions into initial and legato. For sustained sounds, it can make sense to use the offset opcode to skip the start of the sample for legato regions. It's also probably a good idea to use offset_attack in these cases, which both makes the transition sound smoother and avoids clicks and pops in cases where the offset does not fall on a zero crossing. Here are the relevant opcodes from the Hadziha choir. An offset of 6000 samples is enough to skip the fraction of a second when the singers are starting the note, but not enough to skip the part of the sample when they're still settling on a common pitch, so it works well for this particular choir. The crossfade times with an off time of 1 second and legato note attack time of 0.4 seconds are probably much longer than would be needed for most solo instruments or voices, or ensembles intended for fast legato, but could be a good range for other types of ensembles playing slowly. Note that the samples are not all in the same group - the initial note regions are in polyphony group 1, which is muted by group 2. The legato regions are in polyphony group 2, which mutes itself. Having everything in group 1 should also work, though. This was done this was to allow the use of additional syllable start samples, which would then be group 3 and also be muted by group 2. As with hi-hat muting, if there are multiple mic positions in separate files, each mic position will need its own polyphony groups. off_mode=time off_time=1 amp_veltrack=0 trigger=first group=1 off_by=2 //Sample map goes here #include \"mappings/6_a_map.sfz\" trigger=legato offset=6000 ampeg_attack=0.4 group=2 off_by=2 //Sample map goes here #include \"mappings/6_a_map.sfz\" As this does not use velocity to control note volume, that frees up velocity for something else, so in this specific case velocity is repurposed to shorten the attack time on the legato notes, which makes the patch more intuitively playable. off_mode=time off_time=1 amp_veltrack=0 trigger=first group=1 off_by=3 //Sample map goes here #include \"mappings/6_a_map.sfz\" trigger=legato offset=6000 ampeg_attack=1 ampeg_vel2attack=-0.8 group=3 off_by=3 //Sample map goes here #include \"mappings/6_a_map.sfz\" Portamento Another possibility is portamento, or having a pitch glide implemented on the legato regions. Here are the relevant opcodes from Karoryfer Samples Meatbass, which has both legato and portamento. The portamento is very obviously fake for slow glides across long intervals, but as long as the interval is no more than a third or fourth, it can be convincing. Of course, the narrower the interval and the shorter the time, the easier it is to sound convincing. With the portamento time at zero, this is effectively the same as non-portamento legato in the above example. In the below setup, MIDI CC109 controls the glide time and an SFZ2 envelope is used to make the pitch change happen. CC140 is the ARIA extension CC for pitch delta, and being the difference in pitch between the previous note and the current note, it sets the depth of the glide envelope. eg06_sustain=1 //Pitch envelope setup for legato slides eg06_level0=-1 //Envelope starts away from the note pitch eg06_time0=0 eg06_pitch_oncc140=100 //This is the pitch depth eg06_time1=0 eg06_level1=0 //At the end of the envelope, return to base pitch //eg06_time1_oncc109 needs to be set for the legato regions - but we don't want //it on for all regions so the default is 0 //At zero envelope duration the pitch goes to base pitch immediately so there //is no glide //Typical stuff for monophonic instruments off_mode=normal ampeg_release_oncc104=2 All the sample regions are then basically duplicated in non-legato and legato versions. Here's an example non-legato region with trigger set to first and no eg06_time_oncc109 set. The group and off_by work just like in the above examples. trigger=first off_mode=normal group=1 off_by=1 sample=..\\Samples\\arco_looped\\c4_sustain.wav pitch_keycenter=48 And the corresponding legato region with trigger set to legato, the eg06 glide envelope time control, and also an attack time, to let the note fade in more gradually, with this controlled by CC100 rather than velocity, as the example above. This is another option. trigger=legato off_mode=normal group=1 off_by=1 eg06_time1_oncc109=0.3 ampeg_attack_oncc100=0.5 sample=..\\Samples\\arco_looped\\c4_sustain.wav pitch_keycenter=48 True sampled legato Here are examples from a simple flute test by MatFluor. The trigger=first regions work similarly as all the above examples, and the sw_previous opcode can be used to choose which sample plays for the legato regions. If the samples would include both the legato transition and the complete sustain of the following note, things would be very simple: // Legato transitions and the complete sustain of the next note both in the same sample trigger=legato group=2 off_by=1 ampeg_attack=0.05 ampeg_release=0.2 off_mode=normal // Leg transitions up sample=legatovib_g4_a4.wav key=A4 sw_previous=G4 sample=legatovib_g4_c5.wav key=C5 sw_previous=G4 sample=legatovib_a4_c5.wav key=C5 sw_previous=A4 // Leg transitions down sample=legatovib_c5_a4.wav key=A4 sw_previous=C5 sample=legatovib_c5_g4.wav key=G4 sw_previous=C5 Recording the full sustain after every transition adds greatly to the recording time, diskspace and RAM use, however. It may be necessary in some cases, such as solo vocals, but in other cases it's possible to use transition samples which are short, then fade in the regular sustain sample. // Legato transitions in one sample, crossfaded into standard sustain in another sample trigger=legato group=2 off_by=1 ampeg_attack=0.05 ampeg_release=0.2 off_mode=normal // Leg transitions up sample=legatovib_g4_a4.wav key=A4 sw_previous=G4 ampeg_hold=0.25 ampeg_decay=0.2 ampeg_sustain=0 offset=45000 ampeg_decay_shape=-1.4 sample=legatovib_g4_c5.wav key=C5 sw_previous=G4 ampeg_hold=0.25 ampeg_decay=0.2 ampeg_sustain=0 offset=45000 ampeg_decay_shape=-1.4 sample=legatovib_a4_c5.wav key=C5 sw_previous=A4 ampeg_hold=0.25 ampeg_decay=0.2 ampeg_sustain=0 offset=45000 ampeg_decay_shape=-1.4 // Leg transitions down sample=legatovib_c5_a4.wav key=A4 sw_previous=C5 ampeg_hold=0.25 ampeg_decay=0.2 ampeg_sustain=0 offset=45000 ampeg_decay_shape=-1.4 sample=legatovib_c5_g4.wav key=G4 sw_previous=C5 ampeg_hold=0.25 ampeg_decay=0.2 ampeg_sustain=0 offset=45000 ampeg_decay_shape=-1.4 sample=legatovib_a4_g4.wav key=G4 sw_previous=A4 ampeg_hold=0.25 ampeg_decay=0.2 ampeg_sustain=0 offset=43000 ampeg_decay_shape=-1.4 // Leg sustains sample=sustainvib_c5.wav key=C5 ampeg_attack=0.3 offset=5000 ampeg_attack_shape=3.8 sample=sustainvib_a4.wav key=A4 ampeg_attack=0.3 offset=5000 ampeg_attack_shape=3.8 sample=sustainvib_g4.wav key=G4 ampeg_attack=0.3 offset=5000 ampeg_attack_shape=3.8 Another consideration is that for instruments with a wide range, it may not be worthwhile to record every possible transition, and only record transitions of up to one octave, for example. The extended CCs do not always behave quite like other CCs, necessitating using hdcc in ARIA, but the below works for a legato vocal with a range of less than two octaves. off_mode=time off_time=0.4 ampeg_release=0.3 trigger=first group=1 off_by=1 #include \"modules/vowel_sustain_a.sfz\" trigger=legato group=1 off_by=1 ampeg_attack=0.1 ampeg_hold=0.3 ampeg_decay=0.6 ampeg_sustain=0 hihdcc141=12.1 #include \"modules/vowel_transition_a.sfz\" trigger=legato group=2 off_by=1 delay=0.3 ampeg_attack=0.2 offset=40000 hihdcc141=12.1 #include \"modules/vowel_sustain_a.sfz\" trigger=legato group=1 off_by=1 ampeg_attack=0.1 lohdcc141=12.9 hihdcc141=24 offset=12000 #include \"modules/vowel_sustain_a.sfz\" It would also be possible to use CC 140 in a similar way in an instrument which, for example, had legato transitions recorded ascending but not descending.","title":"Legato"},{"location":"tutorials/legato/#basic-monophony","text":"In the basic sustained instruments tutorial, we have the below example of a monophonic flute, which uses the group and off_by opcodes to allow only one be played at a time, and the off_mode together with ampeg_release make the fadeout of the previous note a little smoother. This is a starting point for implementing legato. If only group and off_by are specified, the resulting sound will probably be quite bad, as this will use default values for off_mode, ampeg_attack and ampeg_release. This means the note being muted will drop off extremely quickly, which will probably leave an audible drop in levels during the transition, unless the next note has an extremely fast attack. Therefore, at least ampeg_release will need to be specified in most cases - though most instruments will need to specify that even if not using legato. ampeg_release=0.3 amp_veltrack=0 sw_lokey=48 sw_hikey=49 group=1 off_by=1 off_mode=normal lokey=50 hikey=51 pitch_keycenter=50 sw_last=48 sample=d4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85 sample=d4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127 sample=d4_f.wav xfin_locc1=86 xfin_hicc1=127 lokey=52 hikey=53 pitch_keycenter=52 sw_last=48 sample=e4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85 sample=e4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127 sample=e4_f.wav xfin_locc1=86 xfin_hicc1=127 lokey=50 hikey=51 pitch_keycenter=50 sw_last=49 sample=d4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127 sample=d4_ft_f.wav xfin_locc1=64 xfin_hicc1=127 lokey=52 hikey=53 pitch_keycenter=52 sw_last=49 sample=e4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127 sample=e4_ft_f.wav xfin_locc1=64 xfin_hicc1=127","title":"Basic monophony"},{"location":"tutorials/legato/#legato-regions","text":"The above will allow only one note to sound at a time, with a quick crossfade between the old and new note. In many cases, though, it makes sense to treat the legato notes differently than the notes which start a phrase when no other note is playing. The trigger opcode is used to separate regions into initial and legato. For sustained sounds, it can make sense to use the offset opcode to skip the start of the sample for legato regions. It's also probably a good idea to use offset_attack in these cases, which both makes the transition sound smoother and avoids clicks and pops in cases where the offset does not fall on a zero crossing. Here are the relevant opcodes from the Hadziha choir. An offset of 6000 samples is enough to skip the fraction of a second when the singers are starting the note, but not enough to skip the part of the sample when they're still settling on a common pitch, so it works well for this particular choir. The crossfade times with an off time of 1 second and legato note attack time of 0.4 seconds are probably much longer than would be needed for most solo instruments or voices, or ensembles intended for fast legato, but could be a good range for other types of ensembles playing slowly. Note that the samples are not all in the same group - the initial note regions are in polyphony group 1, which is muted by group 2. The legato regions are in polyphony group 2, which mutes itself. Having everything in group 1 should also work, though. This was done this was to allow the use of additional syllable start samples, which would then be group 3 and also be muted by group 2. As with hi-hat muting, if there are multiple mic positions in separate files, each mic position will need its own polyphony groups. off_mode=time off_time=1 amp_veltrack=0 trigger=first group=1 off_by=2 //Sample map goes here #include \"mappings/6_a_map.sfz\" trigger=legato offset=6000 ampeg_attack=0.4 group=2 off_by=2 //Sample map goes here #include \"mappings/6_a_map.sfz\" As this does not use velocity to control note volume, that frees up velocity for something else, so in this specific case velocity is repurposed to shorten the attack time on the legato notes, which makes the patch more intuitively playable. off_mode=time off_time=1 amp_veltrack=0 trigger=first group=1 off_by=3 //Sample map goes here #include \"mappings/6_a_map.sfz\" trigger=legato offset=6000 ampeg_attack=1 ampeg_vel2attack=-0.8 group=3 off_by=3 //Sample map goes here #include \"mappings/6_a_map.sfz\"","title":"Legato regions"},{"location":"tutorials/legato/#portamento","text":"Another possibility is portamento, or having a pitch glide implemented on the legato regions. Here are the relevant opcodes from Karoryfer Samples Meatbass, which has both legato and portamento. The portamento is very obviously fake for slow glides across long intervals, but as long as the interval is no more than a third or fourth, it can be convincing. Of course, the narrower the interval and the shorter the time, the easier it is to sound convincing. With the portamento time at zero, this is effectively the same as non-portamento legato in the above example. In the below setup, MIDI CC109 controls the glide time and an SFZ2 envelope is used to make the pitch change happen. CC140 is the ARIA extension CC for pitch delta, and being the difference in pitch between the previous note and the current note, it sets the depth of the glide envelope. eg06_sustain=1 //Pitch envelope setup for legato slides eg06_level0=-1 //Envelope starts away from the note pitch eg06_time0=0 eg06_pitch_oncc140=100 //This is the pitch depth eg06_time1=0 eg06_level1=0 //At the end of the envelope, return to base pitch //eg06_time1_oncc109 needs to be set for the legato regions - but we don't want //it on for all regions so the default is 0 //At zero envelope duration the pitch goes to base pitch immediately so there //is no glide //Typical stuff for monophonic instruments off_mode=normal ampeg_release_oncc104=2 All the sample regions are then basically duplicated in non-legato and legato versions. Here's an example non-legato region with trigger set to first and no eg06_time_oncc109 set. The group and off_by work just like in the above examples. trigger=first off_mode=normal group=1 off_by=1 sample=..\\Samples\\arco_looped\\c4_sustain.wav pitch_keycenter=48 And the corresponding legato region with trigger set to legato, the eg06 glide envelope time control, and also an attack time, to let the note fade in more gradually, with this controlled by CC100 rather than velocity, as the example above. This is another option. trigger=legato off_mode=normal group=1 off_by=1 eg06_time1_oncc109=0.3 ampeg_attack_oncc100=0.5 sample=..\\Samples\\arco_looped\\c4_sustain.wav pitch_keycenter=48","title":"Portamento"},{"location":"tutorials/legato/#true-sampled-legato","text":"Here are examples from a simple flute test by MatFluor. The trigger=first regions work similarly as all the above examples, and the sw_previous opcode can be used to choose which sample plays for the legato regions. If the samples would include both the legato transition and the complete sustain of the following note, things would be very simple: // Legato transitions and the complete sustain of the next note both in the same sample trigger=legato group=2 off_by=1 ampeg_attack=0.05 ampeg_release=0.2 off_mode=normal // Leg transitions up sample=legatovib_g4_a4.wav key=A4 sw_previous=G4 sample=legatovib_g4_c5.wav key=C5 sw_previous=G4 sample=legatovib_a4_c5.wav key=C5 sw_previous=A4 // Leg transitions down sample=legatovib_c5_a4.wav key=A4 sw_previous=C5 sample=legatovib_c5_g4.wav key=G4 sw_previous=C5 Recording the full sustain after every transition adds greatly to the recording time, diskspace and RAM use, however. It may be necessary in some cases, such as solo vocals, but in other cases it's possible to use transition samples which are short, then fade in the regular sustain sample. // Legato transitions in one sample, crossfaded into standard sustain in another sample trigger=legato group=2 off_by=1 ampeg_attack=0.05 ampeg_release=0.2 off_mode=normal // Leg transitions up sample=legatovib_g4_a4.wav key=A4 sw_previous=G4 ampeg_hold=0.25 ampeg_decay=0.2 ampeg_sustain=0 offset=45000 ampeg_decay_shape=-1.4 sample=legatovib_g4_c5.wav key=C5 sw_previous=G4 ampeg_hold=0.25 ampeg_decay=0.2 ampeg_sustain=0 offset=45000 ampeg_decay_shape=-1.4 sample=legatovib_a4_c5.wav key=C5 sw_previous=A4 ampeg_hold=0.25 ampeg_decay=0.2 ampeg_sustain=0 offset=45000 ampeg_decay_shape=-1.4 // Leg transitions down sample=legatovib_c5_a4.wav key=A4 sw_previous=C5 ampeg_hold=0.25 ampeg_decay=0.2 ampeg_sustain=0 offset=45000 ampeg_decay_shape=-1.4 sample=legatovib_c5_g4.wav key=G4 sw_previous=C5 ampeg_hold=0.25 ampeg_decay=0.2 ampeg_sustain=0 offset=45000 ampeg_decay_shape=-1.4 sample=legatovib_a4_g4.wav key=G4 sw_previous=A4 ampeg_hold=0.25 ampeg_decay=0.2 ampeg_sustain=0 offset=43000 ampeg_decay_shape=-1.4 // Leg sustains sample=sustainvib_c5.wav key=C5 ampeg_attack=0.3 offset=5000 ampeg_attack_shape=3.8 sample=sustainvib_a4.wav key=A4 ampeg_attack=0.3 offset=5000 ampeg_attack_shape=3.8 sample=sustainvib_g4.wav key=G4 ampeg_attack=0.3 offset=5000 ampeg_attack_shape=3.8 Another consideration is that for instruments with a wide range, it may not be worthwhile to record every possible transition, and only record transitions of up to one octave, for example. The extended CCs do not always behave quite like other CCs, necessitating using hdcc in ARIA, but the below works for a legato vocal with a range of less than two octaves. off_mode=time off_time=0.4 ampeg_release=0.3 trigger=first group=1 off_by=1 #include \"modules/vowel_sustain_a.sfz\" trigger=legato group=1 off_by=1 ampeg_attack=0.1 ampeg_hold=0.3 ampeg_decay=0.6 ampeg_sustain=0 hihdcc141=12.1 #include \"modules/vowel_transition_a.sfz\" trigger=legato group=2 off_by=1 delay=0.3 ampeg_attack=0.2 offset=40000 hihdcc141=12.1 #include \"modules/vowel_sustain_a.sfz\" trigger=legato group=1 off_by=1 ampeg_attack=0.1 lohdcc141=12.9 hihdcc141=24 offset=12000 #include \"modules/vowel_sustain_a.sfz\" It would also be possible to use CC 140 in a similar way in an instrument which, for example, had legato transitions recorded ascending but not descending.","title":"True sampled legato"},{"location":"tutorials/lfo/","text":"Just copy the following in your preferred text editor. We also have a section in the tools page listing some text editor's SFZ syntax highlighting add-ons. Add to your own SFZ to spice up your instruments: // ********************************************************************** // SFZ1 Pitch LFO Example // // // ********************************************************************** pitchlfo_freq=4 pitchlfo_depth=0 //default setting pitchlfo_depth_oncc1=200 //pitch variation in cents using the mod wheel sample=*sine // ********************************************************************** // SFZ2 Pitch LFO Example // // // ********************************************************************** lfo06_freq=4 lfo06_pitch=0 //default setting lfo06_pitch_oncc1=200 //pitch variation in cents using the mod wheel sample=*sine","title":"Pitch LFO Examples"},{"location":"tutorials/modular_instruments/","text":"The Include Statement SFZ is not a programming language, and has a structure based on a hierarchy of headers. There are no procedure or function calls which would allow the same block of code to be called from various places in an SFZ file. This can lead to a lot of repetition in large SFZ instruments. As a simple example, here's a polyphony switch in an instrument causing duplication of the sample map. hicc100=63 key=48 sample=c4.wav key=49 sample=db4.wav key=50 sample=d4.wav key=51 sample=eb4.wav key=52 sample=e4.wav key=53 sample=f4.wav key=54 sample=gb4.wav key=55 sample=g4.wav key=56 sample=ab4.wav key=57 sample=a4.wav key=58 sample=bb4.wav key=59 sample=b4.wav key=60 sample=c5.wav locc100=64 group=1 off_by=1 key=48 sample=c4.wav key=49 sample=db4.wav key=50 sample=d4.wav key=51 sample=eb4.wav key=52 sample=e4.wav key=53 sample=f4.wav key=54 sample=gb4.wav key=55 sample=g4.wav key=56 sample=ab4.wav key=57 sample=a4.wav key=58 sample=bb4.wav key=59 sample=b4.wav key=60 sample=c5.wav If we create an SFZ file called sample_map.sfz with the following content: key=48 sample=c4.wav key=49 sample=db4.wav key=50 sample=d4.wav key=51 sample=eb4.wav key=52 sample=e4.wav key=53 sample=f4.wav key=54 sample=gb4.wav key=55 sample=g4.wav key=56 sample=ab4.wav key=57 sample=a4.wav key=58 sample=bb4.wav key=59 sample=b4.wav key=60 sample=c5.wav Then the sample map becomes a reusable module which can be \"called\" using an #include statement. The instrument can be decluttered to this: hicc100=63 #include \"sample_map.sfz\" locc100=64 group=1 off_by=1 #include \"sample_map.sfz\" Include And File Paths With large instruments which would be broken down into many files, the included files can be placed in a different folder or in a subfolder of the folder containing the instruments. Regardless of which file folder the included files are in, the sample file paths and include file paths will be calculated starting with the folder which contains the instrument file. So, if our above example instrument has the main SFZ file, called main.sfz, in a Programs folder under the instrument root, samples in a Samples folder under that, and the sample_map.sfz is in Programs/mappings, then main.sfz should contain: hicc100=63 #include \"mappings/sample_map.sfz\" locc100=64 group=1 off_by=1 #include \"mappings/sample_map.sfz\" The sample_map.sfz file in mappings should have the following contents: key=48 sample=../Samples/c4.wav key=49 sample=../Samples/db4.wav key=50 sample=../Samples/d4.wav key=51 sample=../Samples/eb4.wav key=52 sample=../Samples/e4.wav key=53 sample=../Samples/f4.wav key=54 sample=../Samples/gb4.wav key=55 sample=../Samples/g4.wav key=56 sample=../Samples/ab4.wav key=57 sample=../Samples/a4.wav key=58 sample=../Samples/bb4.wav key=59 sample=../Samples/b4.wav key=60 sample=../Samples/c5.wav This means that opening the main.sfz file will work, but trying to open sample_map.sfz directly would not, as it would try to locate the samples in a relative path of ../Samples, which exists when starting from Programs, but does not exist when starting from Programs/modules. This can make testing sample maps somewhat messy, as they need to be moved out of their \"proper\" folder if the map needs to be tested by itself, without the rest of the SFZ. Include And Nesting Included files can, themselves, include files. This is not a problem, just avoid circular recursion. Other Use Cases For Include In addition to sample maps, modulations can also be reused. For example, a common set of vibrato controls can be included for violin samples which need them, but left out for samples which don't, such as harmonics, percussive noises and legato transitions. Different dynamics controls for long vs. short bowed articulations are also candidates for such treatment. sw_last=34 sw_label=Sustain #include \"modules/vibrato.sfz\" #include \"modules/long_dynamics.sfz\" #include \"mappings/sustain.sfz\" sw_last=33 sw_label=Staccato #include \"modules/vibrato.sfz\" #include \"modules/short_dynamics.sfz\" #include \"mappings/staccato.sfz\" sw_last=32 sw_label=Natural harmonics #include \"modules/long_dynamics.sfz\" #include \"mappings/harmonics.sfz\" sw_last=31 sw_label=Percussive noises #include \"modules/short_dynamics.sfz\" #include \"mappings/noises.sfz\" The same file can also be included in multiple instruments, for example a violin spiccato articulation map can be used in both a spiccato-only instrument and in a keyswitch instrument which contains other articulations as well. Putting each set of round robins inside its own file without defining seq_position inside that file can also be useful for emulating double-tracking. If the basic non-doubletracked instrument is set up like this: seq_length=4 seq_position=1 #include \"mappings/palm_mute_rr1_map.sfz\" seq_position=2 #include \"mappings/palm_mute_rr2_map.sfz\" seq_position=3 #include \"mappings/palm_mute_rr3_map.sfz\" seq_position=4 #include \"mappings/palm_mute_rr4_map.sfz\" It then becomes very simple to make a doubletracked instrument which uses differnt round robins in the left and right channels: seq_length=4 pan=100 seq_position=1 #include \"mappings/palm_mute_rr1_map.sfz\" pan=100 seq_position=2 #include \"mappings/palm_mute_rr2_map.sfz\" pan=100 seq_position=3 #include \"mappings/palm_mute_rr3_map.sfz\" pan=100 seq_position=4 #include \"mappings/palm_mute_rr4_map.sfz\" pan=-100 seq_position=1 #include \"mappings/palm_mute_rr2_map.sfz\" pan=-100 seq_position=2 #include \"mappings/palm_mute_rr3_map.sfz\" pan=-100 seq_position=3 #include \"mappings/palm_mute_rr4_map.sfz\" pan=-100 seq_position=4 #include \"mappings/palm_mute_rr1_map.sfz\" Include And Headers When including files, it's common to put lower levels of header organization, such as region and group in the included file, and put higher levels in the main file. However, this is not necessary, and any levels of headers can be included. It is important to keep in mind that included files are essentially just concatenated to make the SFZ file which the SFZ instrument actually parses. Although an included file is a little like a procedure in a programming language, it isn't really one, and the end of the included file is not meaningful when SFZ opcodes set under headers within an included file will be in effect until encountering another header of the same or higher level. For example, let's say a snare drum sample map contains one-shot samples under headers and also multisampled hits under a header later in the file, and this file is called snare_map.sfz. key=37 sample=Sidestick.wav key=39 sample=Off_center.wav key=40 sample=Rimshot.wav key=38 seq_length=4 seq_position=1 sample=Center_rr1.wav seq_position=2 sample=Center_rr2.wav seq_position=3 sample=Center_rr3.wav seq_position=4 sample=Center_rr4.wav If we want to put snare controls which apply to all those, this would work: amplitude_oncc100=100 tune_oncc101=1200 tune_curvecc101=1 #include \"snare_map.sfz\" This, however, would make the controls affect the sidesticks, off-center hits and rimshot, but not the center hits: amplitude_oncc100=100 tune_oncc101=1200 tune_curvecc101=1 #include \"snare_map.sfz\" That is because the opcodes set under the header would only be active until the header for the center hits is reached. If a header is used, they remain in force until another header is encountered. When the headers are not immediately visible because they're in an included file, it is easy to fall into this kind of trap. The Define Statement In addition to include, #define is the other statement which is very useful in making instruments more modular. Define and include can be used together. For example, user-editable parameters, such as MIDI note assignments for drum kits and CC ranges, can also be placed in a separate file such as the below. #define $KICKKEY 36 #define $SIDESTICKKEY 37 #define $SNAREKEY 38 The defined variables can then be used throughout the instrument, and an end user who wants to change the keymap can edit the file containing the defined numbers without having to search through the entire instrument. In the specific implementation of ARIA, anything which uses the defined variables also needs to be placed in the main SFZ file using include, because of the way ARIA parses SFZ files, described in more detail under the opcode page. Using define as a constant with a single value thorughout an instrument works easily. Defining the same variable to have multiple values at different points in the same instrument, however, requires care. Using #define to set the same variable to different values at one point in the same SFZ file does not work well at least in ARIA/Sforzando when loading an instrument. However, a workaround there is to use include to put each set of define statements with different values in a separate file. In simple tests, that has been successful. Sometimes copying large chunks of SFZ code and performing search-replace within them is easier than redefining variables comes into play. There's a balance of when to use include statements and when to just copy some files and use search-replace. Multiple defined variables can be used in the same line. #define $MIC_NAME Room #define $MIC_MIX_CC 32 label_cc$MIC_MIX_CC=$MIC_NAME One thing to keep in mind is that each variable name should be unique. This is good: #define $SNARE_KEY 38 #define $SNARE_RIMSHOT_KEY 40 This will fail in at least some SFZ players, because the complete name of one variable is also the start of another variable's name: #define $SNARE 38 #define $SNARE_RIMSHOT 40","title":"Modular SFZ Instruments"},{"location":"tutorials/modular_instruments/#the-include-statement","text":"SFZ is not a programming language, and has a structure based on a hierarchy of headers. There are no procedure or function calls which would allow the same block of code to be called from various places in an SFZ file. This can lead to a lot of repetition in large SFZ instruments. As a simple example, here's a polyphony switch in an instrument causing duplication of the sample map. hicc100=63 key=48 sample=c4.wav key=49 sample=db4.wav key=50 sample=d4.wav key=51 sample=eb4.wav key=52 sample=e4.wav key=53 sample=f4.wav key=54 sample=gb4.wav key=55 sample=g4.wav key=56 sample=ab4.wav key=57 sample=a4.wav key=58 sample=bb4.wav key=59 sample=b4.wav key=60 sample=c5.wav locc100=64 group=1 off_by=1 key=48 sample=c4.wav key=49 sample=db4.wav key=50 sample=d4.wav key=51 sample=eb4.wav key=52 sample=e4.wav key=53 sample=f4.wav key=54 sample=gb4.wav key=55 sample=g4.wav key=56 sample=ab4.wav key=57 sample=a4.wav key=58 sample=bb4.wav key=59 sample=b4.wav key=60 sample=c5.wav If we create an SFZ file called sample_map.sfz with the following content: key=48 sample=c4.wav key=49 sample=db4.wav key=50 sample=d4.wav key=51 sample=eb4.wav key=52 sample=e4.wav key=53 sample=f4.wav key=54 sample=gb4.wav key=55 sample=g4.wav key=56 sample=ab4.wav key=57 sample=a4.wav key=58 sample=bb4.wav key=59 sample=b4.wav key=60 sample=c5.wav Then the sample map becomes a reusable module which can be \"called\" using an #include statement. The instrument can be decluttered to this: hicc100=63 #include \"sample_map.sfz\" locc100=64 group=1 off_by=1 #include \"sample_map.sfz\"","title":"The Include Statement"},{"location":"tutorials/modular_instruments/#include-and-file-paths","text":"With large instruments which would be broken down into many files, the included files can be placed in a different folder or in a subfolder of the folder containing the instruments. Regardless of which file folder the included files are in, the sample file paths and include file paths will be calculated starting with the folder which contains the instrument file. So, if our above example instrument has the main SFZ file, called main.sfz, in a Programs folder under the instrument root, samples in a Samples folder under that, and the sample_map.sfz is in Programs/mappings, then main.sfz should contain: hicc100=63 #include \"mappings/sample_map.sfz\" locc100=64 group=1 off_by=1 #include \"mappings/sample_map.sfz\" The sample_map.sfz file in mappings should have the following contents: key=48 sample=../Samples/c4.wav key=49 sample=../Samples/db4.wav key=50 sample=../Samples/d4.wav key=51 sample=../Samples/eb4.wav key=52 sample=../Samples/e4.wav key=53 sample=../Samples/f4.wav key=54 sample=../Samples/gb4.wav key=55 sample=../Samples/g4.wav key=56 sample=../Samples/ab4.wav key=57 sample=../Samples/a4.wav key=58 sample=../Samples/bb4.wav key=59 sample=../Samples/b4.wav key=60 sample=../Samples/c5.wav This means that opening the main.sfz file will work, but trying to open sample_map.sfz directly would not, as it would try to locate the samples in a relative path of ../Samples, which exists when starting from Programs, but does not exist when starting from Programs/modules. This can make testing sample maps somewhat messy, as they need to be moved out of their \"proper\" folder if the map needs to be tested by itself, without the rest of the SFZ.","title":"Include And File Paths"},{"location":"tutorials/modular_instruments/#include-and-nesting","text":"Included files can, themselves, include files. This is not a problem, just avoid circular recursion.","title":"Include And Nesting"},{"location":"tutorials/modular_instruments/#other-use-cases-for-include","text":"In addition to sample maps, modulations can also be reused. For example, a common set of vibrato controls can be included for violin samples which need them, but left out for samples which don't, such as harmonics, percussive noises and legato transitions. Different dynamics controls for long vs. short bowed articulations are also candidates for such treatment. sw_last=34 sw_label=Sustain #include \"modules/vibrato.sfz\" #include \"modules/long_dynamics.sfz\" #include \"mappings/sustain.sfz\" sw_last=33 sw_label=Staccato #include \"modules/vibrato.sfz\" #include \"modules/short_dynamics.sfz\" #include \"mappings/staccato.sfz\" sw_last=32 sw_label=Natural harmonics #include \"modules/long_dynamics.sfz\" #include \"mappings/harmonics.sfz\" sw_last=31 sw_label=Percussive noises #include \"modules/short_dynamics.sfz\" #include \"mappings/noises.sfz\" The same file can also be included in multiple instruments, for example a violin spiccato articulation map can be used in both a spiccato-only instrument and in a keyswitch instrument which contains other articulations as well. Putting each set of round robins inside its own file without defining seq_position inside that file can also be useful for emulating double-tracking. If the basic non-doubletracked instrument is set up like this: seq_length=4 seq_position=1 #include \"mappings/palm_mute_rr1_map.sfz\" seq_position=2 #include \"mappings/palm_mute_rr2_map.sfz\" seq_position=3 #include \"mappings/palm_mute_rr3_map.sfz\" seq_position=4 #include \"mappings/palm_mute_rr4_map.sfz\" It then becomes very simple to make a doubletracked instrument which uses differnt round robins in the left and right channels: seq_length=4 pan=100 seq_position=1 #include \"mappings/palm_mute_rr1_map.sfz\" pan=100 seq_position=2 #include \"mappings/palm_mute_rr2_map.sfz\" pan=100 seq_position=3 #include \"mappings/palm_mute_rr3_map.sfz\" pan=100 seq_position=4 #include \"mappings/palm_mute_rr4_map.sfz\" pan=-100 seq_position=1 #include \"mappings/palm_mute_rr2_map.sfz\" pan=-100 seq_position=2 #include \"mappings/palm_mute_rr3_map.sfz\" pan=-100 seq_position=3 #include \"mappings/palm_mute_rr4_map.sfz\" pan=-100 seq_position=4 #include \"mappings/palm_mute_rr1_map.sfz\"","title":"Other Use Cases For Include"},{"location":"tutorials/modular_instruments/#include-and-headers","text":"When including files, it's common to put lower levels of header organization, such as region and group in the included file, and put higher levels in the main file. However, this is not necessary, and any levels of headers can be included. It is important to keep in mind that included files are essentially just concatenated to make the SFZ file which the SFZ instrument actually parses. Although an included file is a little like a procedure in a programming language, it isn't really one, and the end of the included file is not meaningful when SFZ opcodes set under headers within an included file will be in effect until encountering another header of the same or higher level. For example, let's say a snare drum sample map contains one-shot samples under headers and also multisampled hits under a header later in the file, and this file is called snare_map.sfz. key=37 sample=Sidestick.wav key=39 sample=Off_center.wav key=40 sample=Rimshot.wav key=38 seq_length=4 seq_position=1 sample=Center_rr1.wav seq_position=2 sample=Center_rr2.wav seq_position=3 sample=Center_rr3.wav seq_position=4 sample=Center_rr4.wav If we want to put snare controls which apply to all those, this would work: amplitude_oncc100=100 tune_oncc101=1200 tune_curvecc101=1 #include \"snare_map.sfz\" This, however, would make the controls affect the sidesticks, off-center hits and rimshot, but not the center hits: amplitude_oncc100=100 tune_oncc101=1200 tune_curvecc101=1 #include \"snare_map.sfz\" That is because the opcodes set under the header would only be active until the header for the center hits is reached. If a header is used, they remain in force until another header is encountered. When the headers are not immediately visible because they're in an included file, it is easy to fall into this kind of trap.","title":"Include And Headers"},{"location":"tutorials/modular_instruments/#the-define-statement","text":"In addition to include, #define is the other statement which is very useful in making instruments more modular. Define and include can be used together. For example, user-editable parameters, such as MIDI note assignments for drum kits and CC ranges, can also be placed in a separate file such as the below. #define $KICKKEY 36 #define $SIDESTICKKEY 37 #define $SNAREKEY 38 The defined variables can then be used throughout the instrument, and an end user who wants to change the keymap can edit the file containing the defined numbers without having to search through the entire instrument. In the specific implementation of ARIA, anything which uses the defined variables also needs to be placed in the main SFZ file using include, because of the way ARIA parses SFZ files, described in more detail under the opcode page. Using define as a constant with a single value thorughout an instrument works easily. Defining the same variable to have multiple values at different points in the same instrument, however, requires care. Using #define to set the same variable to different values at one point in the same SFZ file does not work well at least in ARIA/Sforzando when loading an instrument. However, a workaround there is to use include to put each set of define statements with different values in a separate file. In simple tests, that has been successful. Sometimes copying large chunks of SFZ code and performing search-replace within them is easier than redefining variables comes into play. There's a balance of when to use include statements and when to just copy some files and use search-replace. Multiple defined variables can be used in the same line. #define $MIC_NAME Room #define $MIC_MIX_CC 32 label_cc$MIC_MIX_CC=$MIC_NAME One thing to keep in mind is that each variable name should be unique. This is good: #define $SNARE_KEY 38 #define $SNARE_RIMSHOT_KEY 40 This will fail in at least some SFZ players, because the complete name of one variable is also the start of another variable's name: #define $SNARE 38 #define $SNARE_RIMSHOT 40","title":"The Define Statement"},{"location":"tutorials/range_extension/","text":"This tutorial describes how to extend the range of an instrument which does not have samples for all notes in the desired range. This is not complicated, but there are some downsides to doing it the simple way. Things work the same way when extending up or down. When there are intermediate pitches missing, for example when an instrument is sampled every minor third or every octave, there won't be much choice, though if round robins are available the last approach can prove useful. Simple extension of closest avaialble sample Let's say we have only one sampled violin section with the following map, and we want to be able to play the notes for another octave above the highest currently avaialble note. sample=c4.wav key=48 sample=db4.wav key=49 sample=d4.wav key=50 sample=eb4.wav key=51 sample=e4.wav key=52 sample=f4.wav key=53 sample=gb4.wav key=54 sample=g4.wav key=55 sample=ab4.wav key=56 sample=a4.wav key=57 sample=bb4.wav key=58 sample=b4.wav key=59 sample=c5.wav key=60 The simplest way is to just stretch the highest note. Using lokey, hikey and pitch_keycenter as separate opcodes is better than using key and transpose, as it allows one region to cover a wide range of pitches. sample=c5.wav lokey=60 hikey=72 pitch_keycenter=60 Note that ARIA will produce no sound if asked to transpose a sample more than four octaves up - if that is needed, create some extra copies of the samples and transpose them in an audio editor. This accounts for transposition, pitch bend and any other tuning adjustments, so if an octave of pitch bend is needed, the maximum effectively avaialable transpotition becomes an octave less. There is no similar limitation with downward transposition, though. Filling in missing pitches In the above case, the range is being stretched upwards, but the same principle applies if there are notes missing within the range, whether due to recording errors, or the limitations of instruments which can't produce all notes of the chromatic scale. Let's say we have a simple pentatonic xylophone. sample=c4.wav key=48 sample=d4.wav key=50 sample=f4.wav key=53 sample=g4.wav key=55 sample=a4.wav key=57 sample=c5.wav key=60 sample=d5.wav key=62 sample=f5.wav key=65 sample=g5.wav key=67 sample=a5.wav key=69 sample=c6.wav key=72 This would work similar as above, covering every pitch with the nearest available note. Whether to stretch up or down when there are two equally distant notes available is a judgment call. It might be worth trying both to see which sounds best. The below example goes up and doesn't extend the range beyond the highest or lowest available sample, only fills in the gaps. sample=c4.wav lokey=48 hikey=49 pitch_keycenter=48 sample=d4.wav lokey=50 hikey=51 pitch_keycenter=50 sample=f4.wav lokey=52 hikey=54 pitch_keycenter=53 sample=g4.wav lokey=55 hikey=56 pitch_keycenter=55 sample=a4.wav lokey=57 hikey=58 pitch_keycenter=57 sample=c5.wav lokey=59 hikey=61 pitch_keycenter=59 sample=d5.wav lokey=62 hikey=63 pitch_keycenter=62 sample=f5.wav lokey=64 hikey=66 pitch_keycenter=65 sample=g5.wav lokey=67 hikey=68 pitch_keycenter=67 sample=a5.wav lokey=69 hikey=70 pitch_keycenter=69 sample=c6.wav lokey=71 hikey=72 pitch_keycenter=72 Alternating several samples The above is good enough in a lot of cases, though it might become obviously audible that the entire top octave uses the same sample. We could use the top two or three samples instead, and alternate them like this: sample=c5.wav key=60 sample=bb4.wav lokey=61 hikey=61 pitch_keycenter=58 sample=b4.wav lokey=62 hikey=62 pitch_keycenter=59 sample=c5.wav lokey=63 hikey=63 pitch_keycenter=60 sample=bb4.wav lokey=64 hikey=64 pitch_keycenter=58 sample=b4.wav lokey=65 hikey=65 pitch_keycenter=59 sample=c5.wav lokey=66 hikey=66 pitch_keycenter=60 ...and so on, continuing to the highest desired note. Using different round robins However, in the above case, notes a minor third apart will still use the same sample, and there's a minor third interval in both minor and major triads. There might not be a good way to get around this with the sample set we have above, but if we have two round robins, we could do something like this: seq_length=2 sample=c4_rr1.wav key=48 sample=db4_rr1.wav key=49 sample=d4_rr1.wav key=50 sample=eb4_rr1.wav key=51 sample=e4_rr1.wav key=52 sample=f4_rr1.wav key=53 sample=gb4_rr1.wav key=54 sample=g4_rr1.wav key=55 sample=ab4_rr1.wav key=56 sample=a4_rr1.wav key=57 sample=bb4_rr1.wav key=58 sample=b4_rr1.wav key=59 sample=c5_rr1.wav key=60 sample=bb4_rr2.wav lokey=61 hikey=61 pitch_keycenter=58 sample=b4_rr2.wav lokey=62 hikey=62 pitch_keycenter=59 sample=c5_rr2.wav lokey=63 hikey=63 pitch_keycenter=60 sample=bb4_rr1.wav lokey=64 hikey=64 pitch_keycenter=58 sample=b4_rr1.wav lokey=65 hikey=65 pitch_keycenter=59 sample=c5_rr1.wav lokey=66 hikey=66 pitch_keycenter=60 sample=bb4_rr2.wav lokey=67 hikey=67 pitch_keycenter=58 sample=b4_rr2.wav lokey=68 hikey=68 pitch_keycenter=59 sample=c5_rr2.wav lokey=69 hikey=69 pitch_keycenter=60 sample=bb4_rr1.wav lokey=70 hikey=70 pitch_keycenter=58 sample=b4_rr1.wav lokey=71 hikey=71 pitch_keycenter=59 sample=c5_rr1.wav lokey=72 hikey=72 pitch_keycenter=60 seq_length=2 seq_position=2 sample=c4_rr2.wav key=48 sample=db4_rr2.wav key=49 sample=d4_rr2.wav key=50 sample=eb4_rr2.wav key=51 sample=e4_rr2.wav key=52 sample=f4_rr2.wav key=53 sample=gb4_rr2.wav key=54 sample=g4_rr2.wav key=55 sample=ab4_rr2.wav key=56 sample=a4_rr2.wav key=57 sample=bb4_rr2.wav key=58 sample=b4_rr2.wav key=59 sample=c5_rr2.wav key=60 sample=bb4_rr1.wav lokey=61 hikey=61 pitch_keycenter=58 sample=b4_rr1.wav lokey=62 hikey=62 pitch_keycenter=59 sample=c5_rr1.wav lokey=63 hikey=63 pitch_keycenter=60 sample=bb4_rr2.wav lokey=64 hikey=64 pitch_keycenter=58 sample=b4_rr2.wav lokey=65 hikey=65 pitch_keycenter=59 sample=c5_rr2.wav lokey=66 hikey=66 pitch_keycenter=60 sample=bb4_rr1.wav lokey=67 hikey=67 pitch_keycenter=58 sample=b4_rr1.wav lokey=68 hikey=68 pitch_keycenter=59 sample=c5_rr1.wav lokey=69 hikey=69 pitch_keycenter=60 sample=bb4_rr2.wav lokey=70 hikey=70 pitch_keycenter=58 sample=b4_rr2.wav lokey=71 hikey=71 pitch_keycenter=59 sample=c5_rr2.wav lokey=72 hikey=72 pitch_keycenter=60 This is obviously much more complicated than the simple version we started with, and the extra complexity might not be worth it in many cases, but if needed things can be done this way. Recording extra notes In cases where it's very important to avoid using the same sample too many times, it's possible to start addressing this at the recording stage, and record additional samples of the notes which will need to be stretched. Of course this could be more work than just recording the target pitches in the first place, but if the pitches are difficult to produce consistently (for example are notes that a singer can hit only with considerable strain) or just physically fall outside the range, it may be a viable option. True legato samples. Extending the range with true legato samples requires extending the range for both the previous note (the sw_previous values) and the new note (the lokey/hikey values). Here is a process which has worked in practice for extending the range of a legato instrument upwards by a major second: Copy regions with the key to be extended. Add the amount of shift (3 if taking the second-highest and third-lowest note and extending the range by a major second) to sw_previous, lokey and hikey to the copy. Copy regions with the sw_previous to be extended except those already copied in the previous step. Likewise add the amount of shift to sw_previous, lokey and hikey to the copy. Delete the regions with sw_previous above the new max range (or could try avoiding copying them in the first step, but this way is probably safer). Add in regions going from the bottom three values of sw_previous to the new notes. This is where some sort of defaults, as mentioned above, will be needed. Add regions going from the new extended notes to the bottom three pitches, as above. Note that there will be no legato samples covering the widest intervals from the extended notes to the farthest notes on the other side. If the instrument has legato samples only recorded within a certain range (for example only for intervals up to an octave), this isn't going to create any additional problems that didn't already have to be solved when making the non-extended legato instruments - so whether defaulting to the largest interval sampled, triggering a regular sustain or just producing no sound at all, just do the same when there's no interval wide enough for a leap to or from an extended note. If an instrument does have every possible note transition in its range sampled, however (quite possible for instruments with a small range, such as rebab), the same compromises are available for the missing intervals in the extended range.","title":"Range extension"},{"location":"tutorials/range_extension/#simple-extension-of-closest-avaialble-sample","text":"Let's say we have only one sampled violin section with the following map, and we want to be able to play the notes for another octave above the highest currently avaialble note. sample=c4.wav key=48 sample=db4.wav key=49 sample=d4.wav key=50 sample=eb4.wav key=51 sample=e4.wav key=52 sample=f4.wav key=53 sample=gb4.wav key=54 sample=g4.wav key=55 sample=ab4.wav key=56 sample=a4.wav key=57 sample=bb4.wav key=58 sample=b4.wav key=59 sample=c5.wav key=60 The simplest way is to just stretch the highest note. Using lokey, hikey and pitch_keycenter as separate opcodes is better than using key and transpose, as it allows one region to cover a wide range of pitches. sample=c5.wav lokey=60 hikey=72 pitch_keycenter=60 Note that ARIA will produce no sound if asked to transpose a sample more than four octaves up - if that is needed, create some extra copies of the samples and transpose them in an audio editor. This accounts for transposition, pitch bend and any other tuning adjustments, so if an octave of pitch bend is needed, the maximum effectively avaialable transpotition becomes an octave less. There is no similar limitation with downward transposition, though.","title":"Simple extension of closest avaialble sample"},{"location":"tutorials/range_extension/#filling-in-missing-pitches","text":"In the above case, the range is being stretched upwards, but the same principle applies if there are notes missing within the range, whether due to recording errors, or the limitations of instruments which can't produce all notes of the chromatic scale. Let's say we have a simple pentatonic xylophone. sample=c4.wav key=48 sample=d4.wav key=50 sample=f4.wav key=53 sample=g4.wav key=55 sample=a4.wav key=57 sample=c5.wav key=60 sample=d5.wav key=62 sample=f5.wav key=65 sample=g5.wav key=67 sample=a5.wav key=69 sample=c6.wav key=72 This would work similar as above, covering every pitch with the nearest available note. Whether to stretch up or down when there are two equally distant notes available is a judgment call. It might be worth trying both to see which sounds best. The below example goes up and doesn't extend the range beyond the highest or lowest available sample, only fills in the gaps. sample=c4.wav lokey=48 hikey=49 pitch_keycenter=48 sample=d4.wav lokey=50 hikey=51 pitch_keycenter=50 sample=f4.wav lokey=52 hikey=54 pitch_keycenter=53 sample=g4.wav lokey=55 hikey=56 pitch_keycenter=55 sample=a4.wav lokey=57 hikey=58 pitch_keycenter=57 sample=c5.wav lokey=59 hikey=61 pitch_keycenter=59 sample=d5.wav lokey=62 hikey=63 pitch_keycenter=62 sample=f5.wav lokey=64 hikey=66 pitch_keycenter=65 sample=g5.wav lokey=67 hikey=68 pitch_keycenter=67 sample=a5.wav lokey=69 hikey=70 pitch_keycenter=69 sample=c6.wav lokey=71 hikey=72 pitch_keycenter=72","title":"Filling in missing pitches"},{"location":"tutorials/range_extension/#alternating-several-samples","text":"The above is good enough in a lot of cases, though it might become obviously audible that the entire top octave uses the same sample. We could use the top two or three samples instead, and alternate them like this: sample=c5.wav key=60 sample=bb4.wav lokey=61 hikey=61 pitch_keycenter=58 sample=b4.wav lokey=62 hikey=62 pitch_keycenter=59 sample=c5.wav lokey=63 hikey=63 pitch_keycenter=60 sample=bb4.wav lokey=64 hikey=64 pitch_keycenter=58 sample=b4.wav lokey=65 hikey=65 pitch_keycenter=59 sample=c5.wav lokey=66 hikey=66 pitch_keycenter=60 ...and so on, continuing to the highest desired note.","title":"Alternating several samples"},{"location":"tutorials/range_extension/#using-different-round-robins","text":"However, in the above case, notes a minor third apart will still use the same sample, and there's a minor third interval in both minor and major triads. There might not be a good way to get around this with the sample set we have above, but if we have two round robins, we could do something like this: seq_length=2 sample=c4_rr1.wav key=48 sample=db4_rr1.wav key=49 sample=d4_rr1.wav key=50 sample=eb4_rr1.wav key=51 sample=e4_rr1.wav key=52 sample=f4_rr1.wav key=53 sample=gb4_rr1.wav key=54 sample=g4_rr1.wav key=55 sample=ab4_rr1.wav key=56 sample=a4_rr1.wav key=57 sample=bb4_rr1.wav key=58 sample=b4_rr1.wav key=59 sample=c5_rr1.wav key=60 sample=bb4_rr2.wav lokey=61 hikey=61 pitch_keycenter=58 sample=b4_rr2.wav lokey=62 hikey=62 pitch_keycenter=59 sample=c5_rr2.wav lokey=63 hikey=63 pitch_keycenter=60 sample=bb4_rr1.wav lokey=64 hikey=64 pitch_keycenter=58 sample=b4_rr1.wav lokey=65 hikey=65 pitch_keycenter=59 sample=c5_rr1.wav lokey=66 hikey=66 pitch_keycenter=60 sample=bb4_rr2.wav lokey=67 hikey=67 pitch_keycenter=58 sample=b4_rr2.wav lokey=68 hikey=68 pitch_keycenter=59 sample=c5_rr2.wav lokey=69 hikey=69 pitch_keycenter=60 sample=bb4_rr1.wav lokey=70 hikey=70 pitch_keycenter=58 sample=b4_rr1.wav lokey=71 hikey=71 pitch_keycenter=59 sample=c5_rr1.wav lokey=72 hikey=72 pitch_keycenter=60 seq_length=2 seq_position=2 sample=c4_rr2.wav key=48 sample=db4_rr2.wav key=49 sample=d4_rr2.wav key=50 sample=eb4_rr2.wav key=51 sample=e4_rr2.wav key=52 sample=f4_rr2.wav key=53 sample=gb4_rr2.wav key=54 sample=g4_rr2.wav key=55 sample=ab4_rr2.wav key=56 sample=a4_rr2.wav key=57 sample=bb4_rr2.wav key=58 sample=b4_rr2.wav key=59 sample=c5_rr2.wav key=60 sample=bb4_rr1.wav lokey=61 hikey=61 pitch_keycenter=58 sample=b4_rr1.wav lokey=62 hikey=62 pitch_keycenter=59 sample=c5_rr1.wav lokey=63 hikey=63 pitch_keycenter=60 sample=bb4_rr2.wav lokey=64 hikey=64 pitch_keycenter=58 sample=b4_rr2.wav lokey=65 hikey=65 pitch_keycenter=59 sample=c5_rr2.wav lokey=66 hikey=66 pitch_keycenter=60 sample=bb4_rr1.wav lokey=67 hikey=67 pitch_keycenter=58 sample=b4_rr1.wav lokey=68 hikey=68 pitch_keycenter=59 sample=c5_rr1.wav lokey=69 hikey=69 pitch_keycenter=60 sample=bb4_rr2.wav lokey=70 hikey=70 pitch_keycenter=58 sample=b4_rr2.wav lokey=71 hikey=71 pitch_keycenter=59 sample=c5_rr2.wav lokey=72 hikey=72 pitch_keycenter=60 This is obviously much more complicated than the simple version we started with, and the extra complexity might not be worth it in many cases, but if needed things can be done this way.","title":"Using different round robins"},{"location":"tutorials/range_extension/#recording-extra-notes","text":"In cases where it's very important to avoid using the same sample too many times, it's possible to start addressing this at the recording stage, and record additional samples of the notes which will need to be stretched. Of course this could be more work than just recording the target pitches in the first place, but if the pitches are difficult to produce consistently (for example are notes that a singer can hit only with considerable strain) or just physically fall outside the range, it may be a viable option.","title":"Recording extra notes"},{"location":"tutorials/range_extension/#true-legato-samples","text":"Extending the range with true legato samples requires extending the range for both the previous note (the sw_previous values) and the new note (the lokey/hikey values). Here is a process which has worked in practice for extending the range of a legato instrument upwards by a major second: Copy regions with the key to be extended. Add the amount of shift (3 if taking the second-highest and third-lowest note and extending the range by a major second) to sw_previous, lokey and hikey to the copy. Copy regions with the sw_previous to be extended except those already copied in the previous step. Likewise add the amount of shift to sw_previous, lokey and hikey to the copy. Delete the regions with sw_previous above the new max range (or could try avoiding copying them in the first step, but this way is probably safer). Add in regions going from the bottom three values of sw_previous to the new notes. This is where some sort of defaults, as mentioned above, will be needed. Add regions going from the new extended notes to the bottom three pitches, as above. Note that there will be no legato samples covering the widest intervals from the extended notes to the farthest notes on the other side. If the instrument has legato samples only recorded within a certain range (for example only for intervals up to an octave), this isn't going to create any additional problems that didn't already have to be solved when making the non-extended legato instruments - so whether defaulting to the largest interval sampled, triggering a regular sustain or just producing no sound at all, just do the same when there's no interval wide enough for a leap to or from an extended note. If an instrument does have every possible note transition in its range sampled, however (quite possible for instruments with a small range, such as rebab), the same compromises are available for the missing intervals in the extended range.","title":"True legato samples."},{"location":"tutorials/sfz1_modulations/","text":"The set of modulations available under the SFZ1 specification is fixed, and there's a dedicated opcode for every possible modulation, including fairly esoteric ones such as using note velocity to modulate the hold stage of the pitch envelope. Basic MIDI CC modulation A few opcodes can be modulated simply by MIDI CC, with the modulation adding to what the opcode would normally do. These are: offset and delay . For example, this would have a sample offset of 500 when the modulating CC is at 0, and a sample offset of 1000 when the modulating CC is at max: offset=500 offset_cc100=500 It's also possible to just specify the modulation, in which case the default value is what will be modulated. The defaults for offset, delay and EQ band gain are 0, so this would result in the offset being modulated between 0 and 1000: offset_cc100=1000 Modulating default values The three EQ bands' frequency , bandwidth and gain work similarly, but also add velocity tracking. The EQ bandwidth and center frequency also have non-zero defaults, for example eq2_freq is 500 if not specified. So, this would modulate the center frequency of the second EQ band between 500 and 1500 if eq2_freq is left at default: eq2_freqcc110=1000 Velocity tracking, keytracking and randomization EQ frequency and gain (but not bandwidth) can additionally be modulated by velocity. For example, if we want to make a sound brighter when the velocity is higher, we might use something like this: eq1_vel2gain=-6 eq2_vel2gain=12 eq2_vel2freq=500 The xfin / xfout CCs are also a way to fade sounds in and out using MIDI CC. An example of one note with two dynamic layers being crossfaded: sample=e4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127 sample=e4_ft_f.wav xfin_locc1=64 xfin_hicc1=127 In addition to MIDI CC, crossfades can also use MIDI note number and velocity as modulation sources, and the xf_cccurve , xf_keycurve and xf_velcurve give the choice of two curves for each of these modulations. More sophisticated modulations are possible with volume, pitch and filter cutoff . Volume and cutoff can be modulated by MIDI CC directly (pitch can't in SFZ1 - the tune_ccN modulation is an ARIA extension). All three can also have randomization applied and be modulated by MIDI note number and velocity. The nomenclature for volume is a little confusing, with gain_ccN using \"gain\" in the name, while the others are called amp_random , amp_keytrack and amp_veltrack . gain_cc80=-6 amp_random=3 amp_keytrack=-1.3 amp_veltrack=80 LFOs and envelopes Volume, filter and cutoff also each get an LFO and an envelope . The LFO rate and depth can be modulated by MIDI CC. Each LFO also has a simple envelope with delay and fade, but modulating the duration of these is not allowed under the SFZ1 spec (though it is with SFZ2 LFOs). Here's a typical pitch vibrato LFO: pitchlfo_freq=2 pitchlfo_freqcc50=10 pitchlfo_depthcc51=33 Each envelope parameter can also be modulated by CC, or by velocity. Here's a exmple setup for a synth-style ADSR volume envelope (hold is not specified so the default hold value of 0 is used) controlled by CCs and some initial minimum values set for attack and release, along with a default sustain of 0: ampeg_attack=0.001 ampeg_attack_oncc40=1 ampeg_decay_oncc41=4 ampeg_sustain=1 ampeg_sustain_oncc42=100 ampeg_release=0.1 ampeg_release_oncc43=0.9 Modulating envelope parameters with velocity allows, for example, setting up a filter on an acid bass which will sweep farther with higher velocity, and also sweep faster. cutoff=120 resonance=12 fileg_attack=0.5 fileg_decay=1 fileg_depth=500 fileg_vel2attack=-0.4 fileg_vel2decay=-0.8 fileg_vel2depth=4000 If something is not described above, then modulating it is not possible under the SFZ1 specification, and will require using SFZ2 or possibly some extension opcodes.","title":"SFZ1 modulations"},{"location":"tutorials/sfz1_modulations/#basic-midi-cc-modulation","text":"A few opcodes can be modulated simply by MIDI CC, with the modulation adding to what the opcode would normally do. These are: offset and delay . For example, this would have a sample offset of 500 when the modulating CC is at 0, and a sample offset of 1000 when the modulating CC is at max: offset=500 offset_cc100=500 It's also possible to just specify the modulation, in which case the default value is what will be modulated. The defaults for offset, delay and EQ band gain are 0, so this would result in the offset being modulated between 0 and 1000: offset_cc100=1000","title":"Basic MIDI CC modulation"},{"location":"tutorials/sfz1_modulations/#modulating-default-values","text":"The three EQ bands' frequency , bandwidth and gain work similarly, but also add velocity tracking. The EQ bandwidth and center frequency also have non-zero defaults, for example eq2_freq is 500 if not specified. So, this would modulate the center frequency of the second EQ band between 500 and 1500 if eq2_freq is left at default: eq2_freqcc110=1000","title":"Modulating default values"},{"location":"tutorials/sfz1_modulations/#velocity-tracking-keytracking-and-randomization","text":"EQ frequency and gain (but not bandwidth) can additionally be modulated by velocity. For example, if we want to make a sound brighter when the velocity is higher, we might use something like this: eq1_vel2gain=-6 eq2_vel2gain=12 eq2_vel2freq=500 The xfin / xfout CCs are also a way to fade sounds in and out using MIDI CC. An example of one note with two dynamic layers being crossfaded: sample=e4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127 sample=e4_ft_f.wav xfin_locc1=64 xfin_hicc1=127 In addition to MIDI CC, crossfades can also use MIDI note number and velocity as modulation sources, and the xf_cccurve , xf_keycurve and xf_velcurve give the choice of two curves for each of these modulations. More sophisticated modulations are possible with volume, pitch and filter cutoff . Volume and cutoff can be modulated by MIDI CC directly (pitch can't in SFZ1 - the tune_ccN modulation is an ARIA extension). All three can also have randomization applied and be modulated by MIDI note number and velocity. The nomenclature for volume is a little confusing, with gain_ccN using \"gain\" in the name, while the others are called amp_random , amp_keytrack and amp_veltrack . gain_cc80=-6 amp_random=3 amp_keytrack=-1.3 amp_veltrack=80","title":"Velocity tracking, keytracking and randomization"},{"location":"tutorials/sfz1_modulations/#lfos-and-envelopes","text":"Volume, filter and cutoff also each get an LFO and an envelope . The LFO rate and depth can be modulated by MIDI CC. Each LFO also has a simple envelope with delay and fade, but modulating the duration of these is not allowed under the SFZ1 spec (though it is with SFZ2 LFOs). Here's a typical pitch vibrato LFO: pitchlfo_freq=2 pitchlfo_freqcc50=10 pitchlfo_depthcc51=33 Each envelope parameter can also be modulated by CC, or by velocity. Here's a exmple setup for a synth-style ADSR volume envelope (hold is not specified so the default hold value of 0 is used) controlled by CCs and some initial minimum values set for attack and release, along with a default sustain of 0: ampeg_attack=0.001 ampeg_attack_oncc40=1 ampeg_decay_oncc41=4 ampeg_sustain=1 ampeg_sustain_oncc42=100 ampeg_release=0.1 ampeg_release_oncc43=0.9 Modulating envelope parameters with velocity allows, for example, setting up a filter on an acid bass which will sweep farther with higher velocity, and also sweep faster. cutoff=120 resonance=12 fileg_attack=0.5 fileg_decay=1 fileg_depth=500 fileg_vel2attack=-0.4 fileg_vel2decay=-0.8 fileg_vel2depth=4000 If something is not described above, then modulating it is not possible under the SFZ1 specification, and will require using SFZ2 or possibly some extension opcodes.","title":"LFOs and envelopes"},{"location":"tutorials/sfz2_modulations/","text":"The modulations available under SFZ2 are much more flexible than the fixed set specified by SFZ1 . All SFZ1 modulations are still available under the SFZ2 spec, and will often be easier to use in cases such as envelopes where the standard AHDSR shape is all that's needed. The basic difference is that SFZ1 has three envelopes - one assigned to volume, one to pitch, and one to filter cutoff. There are also three LFOs, one for each of those modulation targets. SFZ2 can have an arbitraty number of envelopes and LFOs, with the ability to specify one or more modulation targets from a list. It is even possible for LFOs to modulate other LFOs and envelopes to modulate LFOs (but not for LFOs to modulate envelopes). In addition, SFZ2 envelopes can have an arbitrary number of points. Additional MIDI CC modulation SFZ2 adds one more paramter which can be modulated with MIDI CC - stereo width . Also need to document pan_onccX and find out whether it's SFZ1 or SFZ2 - currently not sure, needs testing. LFOs For each LFO, an LFO number must be specified - lfo01, lfo02 etc. Each LFO has the following parameters: lfoN_wave lfoN_freq_onccX lfoN_freq_stepccX lfoN_delay_onccX lfoN_fade_onccX lfoN_phase_onccX Click on each link for a detailed description. Similarly to SFZ1 LFOs, there's a frequency, a delay and a fade-in time. In addition, the waveform shape and initial phase can be specified and the LFO can be configured to run for a limited number of counts. The frequency, delay, fade and initial phase can all be modulated by MIDI CC. There is no modulation for LFO depth - to control the depth of vibrato etc, use MIDI CC to modulate how much the LFO affects the desired target. Available LFO targets The available modulation targets for LFOs are These destinations are added as a suffix to 'lfoN_'. For example lfo01_pitch=100 makes LFO 01 affect pitch with a max depth of 100 cents. lfo03_freq_lfo01_oncc117=1.3 would make LFO 03 add up to 1.3 Hertz to the frequency of LFO 01, with the amount modulated by MIDI CC 117. The avaialble targets related to volume and stereo positioning are: volume volume_oncc volume_smoothcc volume_stepcc amplitude amplitude_oncc amplitude_smoothcc amplitude_stepcc pan pan_oncc pan_smoothcc pan_stepcc width width_oncc width_smoothcc width_stepcc The targets for pitch modulation are: pitch pitch_oncc pitch_smoothcc pitch_stepcc The targets for filter modulation are cutoff and resonance, for both the first and second filter: cutoff cutoff_oncc cutoff_smoothcc cutoff_stepcc resonance resonance_oncc resonance_smoothcc resonance_stepcc cutoff2 cutoff2_oncc cutoff2_smoothcc cutoff2_stepcc resonance2 resonance2_oncc resonance2_smoothcc resonance2_stepcc The modulations of the EQ bands are: eqNfreq eqNfreq_oncc eqNfreq_smoothcc eqNfreq_stepcc eqNbw eqNbw_oncc eq1bw_smoothcc eqNbw_stepcc eqNgain eqNgain_oncc eqNgain_smoothcc eqNgain_stepcc The following targets affect other LFOs: freq_lfoX depth_lfoX depthadd_lfoX Some Cakewalk instruments can also modulate the decim and bitred effects: decim decim_oncc decim_smoothcc decim_stepcc bitred bitred_oncc bitred_smoothcc bitred_stepcc LFO examples Here is an example of how one LFO could be used to control both pitch vibrato and volume vibrato (tremolo) with the rate, pitch vibrato depth, tremolo depth, delay and fade each controlled by a separate MIDI CC parameter: lfo01_pitch_oncc111=22 // Vibrato LFO lfo01_freq=2 lfo01_freq_oncc113=7 lfo01_delay_oncc114=0.500 lfo01_fade_oncc115=0.500 lfo01_volume=0 // This LFO also does tremolo lfo01_volume_oncc112=2 And an LFO which does just pitch vibrato, and has a second LFO modulating its rate to create some unsteadiness: lfo01_pitch_oncc111=22 // Vibrato LFO lfo01_freq=2 lfo01_freq_oncc113=7 lfo01_delay_oncc114=0.500 lfo01_fade_oncc115=0.500 lfo2_freq_lfo1_oncc116=3 //Affect the rate of the other LFO for unsteady vibrato lfo02_wave=1 lfo02_freq=0.1 lfo02_freq_oncc116=0.9 For randomized humanization, the extended MIDI CC 135 can be used to randomize the initial phase and speed of the second LFO. lfo01_pitch_oncc111=22 // Vibrato LFO lfo01_freq=2 lfo01_freq_oncc113=7 lfo01_delay_oncc114=0.500 lfo01_fade_oncc115=0.500 lfo2_freq_lfo1_oncc116=3 //Affect the rate of the other LFO for unsteady vibrato lfo02_wave=1 lfo02_freq=0.1 lfo02_freq_oncc116=0.8 lfo02_phase_oncc135=1 lfo02_freq_oncc135=0.2 Envelopes SFZ2 envelopes are numbered and can have an arbitrary number of points, with the level at each point and its modulation set separately. The opcodes used to create these envelopes are: egN_points egN_levelX egN_levelX_onccY egN_timeX egN_timeX_onccY egN_shapeX egN_curveX egN_sustain egN_loop Envelope targets Similarly to LFOs, envelopes have assignable modulation targets. These destinations are added as a suffix to \u2018egN_\u2019 - so, for example: eg01_pitch=2400 would have envelope 01 modulate pitch, with an envelope depth of 2400 cents. These are the available targets related to amplitude and stereo positioning: amplitude amplitude_oncc volume volume_oncc pan pan_oncc width width_oncc Targets for pitch: pitch pitch_oncc Targets for filters: cutoff cutoff_oncc resonance resonance_oncc cutoff2 cutoff2_oncc resonance2 resonance2_oncc Targets for EQ bands: eqNbw eqNbw_oncc eqNfreq eqNfreq_oncc eqNgain eqNgain_oncc Targets for modulating LFOs: depth_lfo depthadd_lfo freq_lfo These two need to be tested - are they for envelopes to modulate other envelopes? depth depth_oncc Targets for modulating decim and bitred do not appear to have been included in the specification. Example envelope Here is a simple pitch envelope which will start a note with a glide from up to an octave lower, with the depth and time modulated by MIDI CCs. The envelope will statt at a lower value at envelope point 0, and return the pitch to normal at envelope point 1. eg01_sustain=1 //Pitch envelope setup for slides eg01_level0=1 eg01_level1=0 eg01_time0=0 eg01_time1=0 eg01_pitch_oncc100=-1200 eg01_time1_oncc101=1 Using LFOs and envelopes together Here is an example of using both an envelope and an LFO to modulate pitch, with common depth and delay parameters. The goal here is asymmetrical pitch vibrato - vibrato which does not go up and down around the original pitch, but instead only goes below it. This is idiomatic with saxophones, and is also how vibrato with certain types of non-floating guitar bridges works (string-bending vibrato is similar, of course, but in the other direction). Shifting the phase of LFO01 will make the vibrato waveform start at the top. We also need to lower the pitch by the same amount as the vibrato depth. Using an envelope for this allows us to delay the onset of the vibrato (again, an important element of idiomatic saxophone vibrato) without a discontinuous jump in pitch. lfo01_pitch_oncc111=20 //Saxy vibrato LFO - goes down from the main pitch lfo01_freq=2 lfo01_freq_oncc112=8 lfo01_phase=0.25 //To make it start at the top lfo01_delay_oncc116=1 eg01_pitch_oncc111=20 eg01_sustain=1 eg01_level0=0 eg01_level1=0 eg01_level2=-1 eg01_time0=0 eg01_time1=0 eg01_time1_oncc116=1 eg01_time2=0 Using SFZ1 and SFZ2 modulations together Both SFZ1 and SFZ2 modulations may be mixed freely. Indeed, it may be simpler to accomplish the above using the SFZ1 pitch envelope, as it is sufficient in this case, with the SFZ2 LFO. Setting the initial phase and modulating the delay with MIDI CC would not be possible with the SFZ1 pitch LFO. lfo01_pitch_oncc111=20 //Saxy vibrato LFO - goes down from the main pitch lfo01_freq=2 lfo01_freq_oncc112=8 lfo01_phase=0.25 //To make it start at the top lfo01_delay_oncc116=1 pitcheg_delay_oncc116=1 //Pitch envelope to drop the central pitch when sax vibrato kicks in pitcheg_depth_oncc111=-20 SmoothccN and stepccN Most MIDI CC modulations, though not all, can have use smoothccN and stepccN . These work similarly to bend_smooth and bend_step . SmoothccN adds \"inertia\" to a modulation, so quickly changing the MIDI CC value has a slower effect on the modulation target than it would normally. StepccN causes the modulation to happen in a discrete number of steps. Setting the number of steps to 1 would make the modulation an all-or-nothing control. This is what's possible under the SFZ2 specification. There are some additional modulations available as ARIA extensions , with amplitude_onccN being a very useful one.","title":"SFZ2 modulations"},{"location":"tutorials/sfz2_modulations/#additional-midi-cc-modulation","text":"SFZ2 adds one more paramter which can be modulated with MIDI CC - stereo width . Also need to document pan_onccX and find out whether it's SFZ1 or SFZ2 - currently not sure, needs testing.","title":"Additional MIDI CC modulation"},{"location":"tutorials/sfz2_modulations/#lfos","text":"For each LFO, an LFO number must be specified - lfo01, lfo02 etc. Each LFO has the following parameters: lfoN_wave lfoN_freq_onccX lfoN_freq_stepccX lfoN_delay_onccX lfoN_fade_onccX lfoN_phase_onccX Click on each link for a detailed description. Similarly to SFZ1 LFOs, there's a frequency, a delay and a fade-in time. In addition, the waveform shape and initial phase can be specified and the LFO can be configured to run for a limited number of counts. The frequency, delay, fade and initial phase can all be modulated by MIDI CC. There is no modulation for LFO depth - to control the depth of vibrato etc, use MIDI CC to modulate how much the LFO affects the desired target.","title":"LFOs"},{"location":"tutorials/sfz2_modulations/#available-lfo-targets","text":"The available modulation targets for LFOs are These destinations are added as a suffix to 'lfoN_'. For example lfo01_pitch=100 makes LFO 01 affect pitch with a max depth of 100 cents. lfo03_freq_lfo01_oncc117=1.3 would make LFO 03 add up to 1.3 Hertz to the frequency of LFO 01, with the amount modulated by MIDI CC 117. The avaialble targets related to volume and stereo positioning are: volume volume_oncc volume_smoothcc volume_stepcc amplitude amplitude_oncc amplitude_smoothcc amplitude_stepcc pan pan_oncc pan_smoothcc pan_stepcc width width_oncc width_smoothcc width_stepcc The targets for pitch modulation are: pitch pitch_oncc pitch_smoothcc pitch_stepcc The targets for filter modulation are cutoff and resonance, for both the first and second filter: cutoff cutoff_oncc cutoff_smoothcc cutoff_stepcc resonance resonance_oncc resonance_smoothcc resonance_stepcc cutoff2 cutoff2_oncc cutoff2_smoothcc cutoff2_stepcc resonance2 resonance2_oncc resonance2_smoothcc resonance2_stepcc The modulations of the EQ bands are: eqNfreq eqNfreq_oncc eqNfreq_smoothcc eqNfreq_stepcc eqNbw eqNbw_oncc eq1bw_smoothcc eqNbw_stepcc eqNgain eqNgain_oncc eqNgain_smoothcc eqNgain_stepcc The following targets affect other LFOs: freq_lfoX depth_lfoX depthadd_lfoX Some Cakewalk instruments can also modulate the decim and bitred effects: decim decim_oncc decim_smoothcc decim_stepcc bitred bitred_oncc bitred_smoothcc bitred_stepcc","title":"Available LFO targets"},{"location":"tutorials/sfz2_modulations/#lfo-examples","text":"Here is an example of how one LFO could be used to control both pitch vibrato and volume vibrato (tremolo) with the rate, pitch vibrato depth, tremolo depth, delay and fade each controlled by a separate MIDI CC parameter: lfo01_pitch_oncc111=22 // Vibrato LFO lfo01_freq=2 lfo01_freq_oncc113=7 lfo01_delay_oncc114=0.500 lfo01_fade_oncc115=0.500 lfo01_volume=0 // This LFO also does tremolo lfo01_volume_oncc112=2 And an LFO which does just pitch vibrato, and has a second LFO modulating its rate to create some unsteadiness: lfo01_pitch_oncc111=22 // Vibrato LFO lfo01_freq=2 lfo01_freq_oncc113=7 lfo01_delay_oncc114=0.500 lfo01_fade_oncc115=0.500 lfo2_freq_lfo1_oncc116=3 //Affect the rate of the other LFO for unsteady vibrato lfo02_wave=1 lfo02_freq=0.1 lfo02_freq_oncc116=0.9 For randomized humanization, the extended MIDI CC 135 can be used to randomize the initial phase and speed of the second LFO. lfo01_pitch_oncc111=22 // Vibrato LFO lfo01_freq=2 lfo01_freq_oncc113=7 lfo01_delay_oncc114=0.500 lfo01_fade_oncc115=0.500 lfo2_freq_lfo1_oncc116=3 //Affect the rate of the other LFO for unsteady vibrato lfo02_wave=1 lfo02_freq=0.1 lfo02_freq_oncc116=0.8 lfo02_phase_oncc135=1 lfo02_freq_oncc135=0.2","title":"LFO examples"},{"location":"tutorials/sfz2_modulations/#envelopes","text":"SFZ2 envelopes are numbered and can have an arbitrary number of points, with the level at each point and its modulation set separately. The opcodes used to create these envelopes are: egN_points egN_levelX egN_levelX_onccY egN_timeX egN_timeX_onccY egN_shapeX egN_curveX egN_sustain egN_loop","title":"Envelopes"},{"location":"tutorials/sfz2_modulations/#envelope-targets","text":"Similarly to LFOs, envelopes have assignable modulation targets. These destinations are added as a suffix to \u2018egN_\u2019 - so, for example: eg01_pitch=2400 would have envelope 01 modulate pitch, with an envelope depth of 2400 cents. These are the available targets related to amplitude and stereo positioning: amplitude amplitude_oncc volume volume_oncc pan pan_oncc width width_oncc Targets for pitch: pitch pitch_oncc Targets for filters: cutoff cutoff_oncc resonance resonance_oncc cutoff2 cutoff2_oncc resonance2 resonance2_oncc Targets for EQ bands: eqNbw eqNbw_oncc eqNfreq eqNfreq_oncc eqNgain eqNgain_oncc Targets for modulating LFOs: depth_lfo depthadd_lfo freq_lfo These two need to be tested - are they for envelopes to modulate other envelopes? depth depth_oncc Targets for modulating decim and bitred do not appear to have been included in the specification.","title":"Envelope targets"},{"location":"tutorials/sfz2_modulations/#example-envelope","text":"Here is a simple pitch envelope which will start a note with a glide from up to an octave lower, with the depth and time modulated by MIDI CCs. The envelope will statt at a lower value at envelope point 0, and return the pitch to normal at envelope point 1. eg01_sustain=1 //Pitch envelope setup for slides eg01_level0=1 eg01_level1=0 eg01_time0=0 eg01_time1=0 eg01_pitch_oncc100=-1200 eg01_time1_oncc101=1","title":"Example envelope"},{"location":"tutorials/sfz2_modulations/#using-lfos-and-envelopes-together","text":"Here is an example of using both an envelope and an LFO to modulate pitch, with common depth and delay parameters. The goal here is asymmetrical pitch vibrato - vibrato which does not go up and down around the original pitch, but instead only goes below it. This is idiomatic with saxophones, and is also how vibrato with certain types of non-floating guitar bridges works (string-bending vibrato is similar, of course, but in the other direction). Shifting the phase of LFO01 will make the vibrato waveform start at the top. We also need to lower the pitch by the same amount as the vibrato depth. Using an envelope for this allows us to delay the onset of the vibrato (again, an important element of idiomatic saxophone vibrato) without a discontinuous jump in pitch. lfo01_pitch_oncc111=20 //Saxy vibrato LFO - goes down from the main pitch lfo01_freq=2 lfo01_freq_oncc112=8 lfo01_phase=0.25 //To make it start at the top lfo01_delay_oncc116=1 eg01_pitch_oncc111=20 eg01_sustain=1 eg01_level0=0 eg01_level1=0 eg01_level2=-1 eg01_time0=0 eg01_time1=0 eg01_time1_oncc116=1 eg01_time2=0","title":"Using LFOs and envelopes together"},{"location":"tutorials/sfz2_modulations/#using-sfz1-and-sfz2-modulations-together","text":"Both SFZ1 and SFZ2 modulations may be mixed freely. Indeed, it may be simpler to accomplish the above using the SFZ1 pitch envelope, as it is sufficient in this case, with the SFZ2 LFO. Setting the initial phase and modulating the delay with MIDI CC would not be possible with the SFZ1 pitch LFO. lfo01_pitch_oncc111=20 //Saxy vibrato LFO - goes down from the main pitch lfo01_freq=2 lfo01_freq_oncc112=8 lfo01_phase=0.25 //To make it start at the top lfo01_delay_oncc116=1 pitcheg_delay_oncc116=1 //Pitch envelope to drop the central pitch when sax vibrato kicks in pitcheg_depth_oncc111=-20","title":"Using SFZ1 and SFZ2 modulations together"},{"location":"tutorials/sfz2_modulations/#smoothccn-and-stepccn","text":"Most MIDI CC modulations, though not all, can have use smoothccN and stepccN . These work similarly to bend_smooth and bend_step . SmoothccN adds \"inertia\" to a modulation, so quickly changing the MIDI CC value has a slower effect on the modulation target than it would normally. StepccN causes the modulation to happen in a discrete number of steps. Setting the number of steps to 1 would make the modulation an all-or-nothing control. This is what's possible under the SFZ2 specification. There are some additional modulations available as ARIA extensions , with amplitude_onccN being a very useful one.","title":"SmoothccN and stepccN"},{"location":"tutorials/strum/","text":"Strumming can be difficult to produce with samples. SFZ does have some capabilities to make it a little easier. Creating a strum is basically triggering several single-string samples with some of them delayed slightly. Similar but even simpler is a drum flam, which is two drum hits in rapid succession. sample=snare1.wav delay=0.03 sample=snare2.wav Basic Guitar Chord Strum Here is how an open E major chord could be triggered with a single key: key=40 sample=e4.wav delay=0.02 sample=b4.wav delay=0.04 sample=e5.wav delay=0.06 sample=g#4.wav delay=0.08 sample=b4.wav delay=0.1 sample=e6.wav This is a downward strum - physically the lower strings on a guitar are located higher, so downward strums begin with the lowest notes. An upstroke would have the same samples but with the delays in reversed order, so it starts with the higest notes. key=40 sample=e4.wav delay=0.1 delay=0.08 sample=b4.wav delay=0.06 sample=e5.wav delay=0.04 sample=g#4.wav delay=0.02 sample=b4.wav sample=e6.wav Different Chord Types An E minor chord would be similar, only with a G instead of the G#. Leaving out the upward strum: sw_lokey=36 sw_hikey=37 sw_default=36 key=40 sample=e4.wav delay=0.02 sample=b4.wav delay=0.04 sample=e5.wav //Fourth string is different for major versus minor chords. sw_last=36 sw_label=Major delay=0.06 sample=g#4.wav sw_last=37 sw_label=Minor delay=0.06 sample=g4.wav delay=0.08 sample=b4.wav delay=0.1 sample=e6.wav Of course for non-barre chords, there could be differences in voicings for more than one string, but the principle remains the same. The free Emilyguitar instrument located at https://github.com/sfzinstruments/karoryfer.emilyguitar includes a simple strum patch with keyswitchable power chords, major barre chords and minor barre chords. It has downward strums only with a very short strum time. However, it is not well-organized and not at all commented, its patches being just output from sfzed. Somewhat more organized and including power chords (which are simply the lowest three strings of the barre chord), our E chord might look like this: sw_lokey=36 sw_hikey=38 sw_default=36 key=40 //Lowest three strings are the same regardless of keyswitch sample=e4.wav delay=0.02 sample=b4.wav delay=0.04 sample=e5.wav //In order to display the keyswitch label for power chords, //we need a placeholder key=40 sw_last=37 sw_label=Power sample=*silence ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 //Fourth string is different for major versus minor chords //It is not triggered at all for power chords key=40 sw_last=36 sw_label=Major delay=0.06 sample=g#4.wav sw_last=37 sw_label=Minor delay=0.06 sample=g4.wav //Top two strings are not triggered for power chords //Duplicated for major and minor keyswitches key=40 sw_last=36 sw_label=Major delay=0.08 sample=b4.wav delay=0.1 sample=e6.wav key=40 sw_last=37 sw_label=Minor delay=0.08 sample=b4.wav delay=0.1 sample=e6.wav For upwards strums, simply reversing the order of delay values would result in the power chords being delayed as the e5.wav region would be the first sample triggered, and it would have 0.006 seconds of delay. This would not be good. Therefore, if we want to add upwards strums on lower keyswitches, we might end up with something like this: sw_lokey=33 sw_hikey=38 sw_default=36 //Default is major chord, downward strum //Lower three strings for barre chords key=40 sw_last=35 sw_label=Major Up sample=e4.wav delay=0.1 delay=0.08 sample=b4.wav delay=0.06 sample=e5.wav key=40 sw_last=34 sw_label=Minor Up sample=e4.wav delay=0.1 delay=0.08 sample=b4.wav delay=0.06 sample=e5.wav //Lower three strings for power chords key=40 sw_last=33 sw_label=Power Up sample=e4.wav delay=0.04 delay=0.02 sample=b4.wav sample=e5.wav //Fourth string is different for major versus minor chords //It is not triggered at all for power chords key=40 sw_last=35 sw_label=Major Up delay=0.004 sample=g#4.wav sw_last=34 sw_label=Minor Up delay=0.004 sample=g4.wav //Top two strings are not triggered for power chords //Duplicated for major and minor keyswitches key=40 sw_last=35 sw_label=Major Up delay=0.02 sample=b4.wav sample=e6.wav key=40 sw_last=34 sw_label=Minor up delay=0.02 sample=b4.wav sample=e6.wav Depending on needs, this might not be worth implementing, as duplicaton of regions adds to the time required for many SFZ players (certainly ARIA/sforzando) to parse and open an instrument. It is, however, certainly possible. Adjusting Time The above strums all have a fixed duration. Adjusting strum time is easily done by replacing the fixed delay with a modulated one. Going back to the simple E major example for brevity's sake: key=40 sample=e4.wav delay_cc1=0.2 sample=b4.wav delay_cc1=0.4 sample=e5.wav delay_cc1=0.6 sample=g#4.wav delay_cc1=0.8 sample=b4.wav delay_cc1=1 sample=e6.wav It would also be easy to add a small random delay to each voice. However, because delay is not an available target for the var modulator, it is not possible to have an adjustable amount of randomization, or make the random amount smaller when the CC adjusting the non-random delay is low. This means adding a simple delay_random to each voice would create the risk of \"earlier\" notes actually sounding after \"later\" ones when the non-random delay is close to zero. However, making the delay partially fixed and partially adjustable avoids this. key=40 sample=e4.wav delay=0.01 delay_cc1=0.2 delay_random=0.01 sample=b4.wav delay=0.02 delay_cc1=0.4 delay_random=0.01 sample=e5.wav delay=0.03 delay_cc1=0.6 delay_random=0.01 sample=g#4.wav delay=0.04 delay_cc1=0.8 delay_random=0.01 sample=b4.wav delay=0.05 delay_cc1=1 delay_random=0.01 sample=e6.wav Ringing And Muting With the above examples, the samples will play until a note-off message, then follow the usual amp envelope release. In reality, the strings will often ring until the string is hit again, and it can be more convenient to have the samples always play in their entirety unless muted: loop_mode=one_shot key=40 sample=e4.wav group=6 off_by=6 delay_cc1=0.2 sample=b4.wav group=5 off_by=5 delay_cc1=0.4 sample=e5.wav group=4 off_by=4 delay_cc1=0.6 sample=g#4.wav group=3 off_by=3 delay_cc1=0.8 sample=b4.wav group=2 off_by=2 delay_cc1=1 sample=e6.wav group=1 off_by=1 Note that a new strum will mute all strings, without waiting for their delay for that specific string to be completed. There is currently elegant solution known for this. Using a longer off time or triggering a release sample could be possible workarounds to fill the sonic gap, though. On the positive side, a partial strum that does not hit all the strings would let the other strings keep ringing. If one shot mode is used, it's probably also useful to allow for quickly muting all strings when desired. That can be done with a placeholder region for each string, and combining those regions on another key, here one above the octave of the strums. key=60 ampeg_sustain=0 ampeg_release=0 sample=*silence group=6 off_by=6 sample=*silence group=5 off_by=5 sample=*silence group=4 off_by=4 sample=*silence group=3 off_by=3 sample=*silence group=2 off_by=2 sample=*silence group=1 off_by=1 Harp Glissandi Harp glissandi could be set up very similarly to a guitar strum, only with potentially a lot more notes. For simplicty's sake, let's consider just one octave. Speed is still controlled by CC1, and MIDI note 24 will trigger an upward glissando starting with the C4 note. key=24 sample=c4.wav sample=d4.wav delay_cc1=0.1 sample=e4.wav delay_cc1=0.2 sample=f4.wav delay_cc1=0.3 sample=g4.wav delay_cc1=0.4 sample=a4.wav delay_cc1=0.5 sample=b4.wav delay_cc1=0.6 sample=c5.wav delay_cc1=0.7 In order to make this more usable, we can add another control which will determine for how many notes the gliss keeps going before it stops. Let's use CC4. key=24 //First three notes are not affected by CC4, and are always played sample=c4.wav sample=d4.wav delay_cc1=0.1 sample=e4.wav delay_cc1=0.2 sample=f4.wav delay_cc1=0.3 locc4=1 sample=g4.wav delay_cc1=0.4 locc4=32 sample=a4.wav delay_cc1=0.5 locc4=64 sample=b4.wav delay_cc1=0.6 locc4=96 sample=c5.wav delay_cc1=0.7 locc4=127 This is essentially how a harp glissando on a folk harp operates. Concert harps have pedals which allow the retuning of strings to allow playing other scales, and this would need to be implemented, perhaps with a different MIDI CC for each pitch class. Strumming the drone strings on a Hungarian zither also works essentially as described here. Lyres And Zithers Many folk lyres, guslis etc. are tuned diatonically and chords on those are played by muting some strings, and strumming across both the open and muted strings. Keyswitches in another octave could be added to mute the strings, so that samples are only played when the switch matching that string is down. This basically works like a harp gliss, but the samples for the muted strings are not played. The keyswitches will not be displayed on the keyboard by most sfz players, so it will also likely be necessary to add some placeholder regions just to make them display. It's also common to strum across fewer than all the strings; this is basically what the power chord in the above guitar examples is. Instead of keyswitching, it is also possible to have partial strums on different keys (though this can easily require more keys than an 88-key keyboard), or selectable by CC, note velocity and possibly other variables as well. The below example uses CC4 to control how many strings are strummed. key=24 //First three notes are not affected by CC4 sample=c4.wav sw_down=36 sample=d4.wav delay_cc1=0.1 sw_down=38 sample=e4.wav delay_cc1=0.2 sw_down=40 sample=f4.wav delay_cc1=0.3 sw_down=41 locc4=1 sample=g4.wav delay_cc1=0.4 sw_down=43 locc4=32 sample=a4.wav delay_cc1=0.5 sw_down=45 locc4=64 sample=b4.wav delay_cc1=0.6 sw_down=47 locc4=96 sample=c5.wav delay_cc1=0.7 sw_down=48 locc4=127 //Placeholders to get the switch keys to be visible sample=*silence ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=36 key=38 key=40 key=41 key=43 key=45 key=47 key=48 For more realism, muted samples could be triggered for the strings which are not down. Although muting the strings for the keyswitches which are up and skipping the strings where the switch is down would be more analogous to the way the instruments are played in real life, this sort of \"negative space\" chord fingering is much more awkward for most users to play on a keyboard. It could easily be accomplished by merely switching the sw_up and sw_down opcodes in the below example. key=24 //Ringing strings //First three notes are not affected by CC4 sample=c4.wav sw_down=36 sample=d4.wav delay_cc1=0.1 sw_down=38 sample=e4.wav delay_cc1=0.2 sw_down=40 sample=f4.wav delay_cc1=0.3 sw_down=41 locc4=1 sample=g4.wav delay_cc1=0.4 sw_down=43 locc4=32 sample=a4.wav delay_cc1=0.5 sw_down=45 locc4=64 sample=b4.wav delay_cc1=0.6 sw_down=47 locc4=96 sample=c5.wav delay_cc1=0.7 sw_down=48 locc4=127 //Muted strings //First three notes are not affected by CC4 sample=c4_muted.wav sw_up=36 sample=d4_muted.wav delay_cc1=0.1 sw_up=38 sample=e4_muted.wav delay_cc1=0.2 sw_up=40 sample=f4_muted.wav delay_cc1=0.3 sw_up=41 locc4=1 sample=g4_muted.wav delay_cc1=0.4 sw_up=43 locc4=32 sample=a4_muted.wav delay_cc1=0.5 sw_up=45 locc4=64 sample=b4_muted.wav delay_cc1=0.6 sw_up=47 locc4=96 sample=c5_muted.wav delay_cc1=0.7 sw_up=48 locc4=127 //Placeholders to get the switch keys to be visible sample=*silence ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=36 key=38 key=40 key=41 key=43 key=45 key=47 key=48 Chromatic Strumming On Diatonic Instruments The cithara barbarica instrument at https://github.com/sfzinstruments/cithara-barbarica has a patch like this. It simply duplicates each string's regions to cover the \"missing\" pitches. This works fine as long as there are no muted samples used for the stopped strings, and having a muted string sound every half-step would not be idiomatic for instruments other than the very rare chromatic gusli. One way to have muted sounds while playing chromatically would be to always trigger a muted sound for whatever the \"real\" pitch of each string should be, but have it instantly muted if a pitch in that string's range is played. This is not great, as the muted sound would be a half-step off, but as the muted strings are shortened and produce a higher pitch anyway, it seems to work well enough. key=26 //Muted regions, each with its own group and off_by sample=d4_muted.wav group=11 off_by=21 sample=e4_muted.wav group=12 off_by=22 delay_cc1=0.100 sample=f4_muted.wav group=13 off_by=23 delay_cc1=0.200 //Non-muted regions, with groups that will mute the above regions if one of the keys covered by that sample is held down sample=d4_finger.wav sw_down=36 group=21 transpose=-2 sample=d4_finger.wav sw_down=37 group=21 transpose=-1 sample=d4_finger.wav sw_down=38 group=21 sample=e4_finger.wav sw_down=39 group=22 transpose=-1 delay_cc1=0.100 sample=e4_finger.wav sw_down=40 group=22 delay_cc1=0.100 sample=f4_finger.wav sw_down=41 group=23 delay_cc1=0.200 A more realistic way to handle this would be to have a MIDI CC for each string to set its tuning, so for example the C string could sound a B or C# note, like on a concert harp with pedals. However, this is probably not very convenient for most players who would rather hit a B note to sound a B. This, of course, would not actually be chromatic - but not limited to a single scale. Further Possibilities In reality, a strum will transfer force to the first strings it hits, and subsequent strings will be hit with a little less force, and the delay between strings might also be nonlinear. This tutorial is open source, so feel free to contribute.","title":"Strums"},{"location":"tutorials/strum/#basic-guitar-chord-strum","text":"Here is how an open E major chord could be triggered with a single key: key=40 sample=e4.wav delay=0.02 sample=b4.wav delay=0.04 sample=e5.wav delay=0.06 sample=g#4.wav delay=0.08 sample=b4.wav delay=0.1 sample=e6.wav This is a downward strum - physically the lower strings on a guitar are located higher, so downward strums begin with the lowest notes. An upstroke would have the same samples but with the delays in reversed order, so it starts with the higest notes. key=40 sample=e4.wav delay=0.1 delay=0.08 sample=b4.wav delay=0.06 sample=e5.wav delay=0.04 sample=g#4.wav delay=0.02 sample=b4.wav sample=e6.wav","title":"Basic Guitar Chord Strum"},{"location":"tutorials/strum/#different-chord-types","text":"An E minor chord would be similar, only with a G instead of the G#. Leaving out the upward strum: sw_lokey=36 sw_hikey=37 sw_default=36 key=40 sample=e4.wav delay=0.02 sample=b4.wav delay=0.04 sample=e5.wav //Fourth string is different for major versus minor chords. sw_last=36 sw_label=Major delay=0.06 sample=g#4.wav sw_last=37 sw_label=Minor delay=0.06 sample=g4.wav delay=0.08 sample=b4.wav delay=0.1 sample=e6.wav Of course for non-barre chords, there could be differences in voicings for more than one string, but the principle remains the same. The free Emilyguitar instrument located at https://github.com/sfzinstruments/karoryfer.emilyguitar includes a simple strum patch with keyswitchable power chords, major barre chords and minor barre chords. It has downward strums only with a very short strum time. However, it is not well-organized and not at all commented, its patches being just output from sfzed. Somewhat more organized and including power chords (which are simply the lowest three strings of the barre chord), our E chord might look like this: sw_lokey=36 sw_hikey=38 sw_default=36 key=40 //Lowest three strings are the same regardless of keyswitch sample=e4.wav delay=0.02 sample=b4.wav delay=0.04 sample=e5.wav //In order to display the keyswitch label for power chords, //we need a placeholder key=40 sw_last=37 sw_label=Power sample=*silence ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 //Fourth string is different for major versus minor chords //It is not triggered at all for power chords key=40 sw_last=36 sw_label=Major delay=0.06 sample=g#4.wav sw_last=37 sw_label=Minor delay=0.06 sample=g4.wav //Top two strings are not triggered for power chords //Duplicated for major and minor keyswitches key=40 sw_last=36 sw_label=Major delay=0.08 sample=b4.wav delay=0.1 sample=e6.wav key=40 sw_last=37 sw_label=Minor delay=0.08 sample=b4.wav delay=0.1 sample=e6.wav For upwards strums, simply reversing the order of delay values would result in the power chords being delayed as the e5.wav region would be the first sample triggered, and it would have 0.006 seconds of delay. This would not be good. Therefore, if we want to add upwards strums on lower keyswitches, we might end up with something like this: sw_lokey=33 sw_hikey=38 sw_default=36 //Default is major chord, downward strum //Lower three strings for barre chords key=40 sw_last=35 sw_label=Major Up sample=e4.wav delay=0.1 delay=0.08 sample=b4.wav delay=0.06 sample=e5.wav key=40 sw_last=34 sw_label=Minor Up sample=e4.wav delay=0.1 delay=0.08 sample=b4.wav delay=0.06 sample=e5.wav //Lower three strings for power chords key=40 sw_last=33 sw_label=Power Up sample=e4.wav delay=0.04 delay=0.02 sample=b4.wav sample=e5.wav //Fourth string is different for major versus minor chords //It is not triggered at all for power chords key=40 sw_last=35 sw_label=Major Up delay=0.004 sample=g#4.wav sw_last=34 sw_label=Minor Up delay=0.004 sample=g4.wav //Top two strings are not triggered for power chords //Duplicated for major and minor keyswitches key=40 sw_last=35 sw_label=Major Up delay=0.02 sample=b4.wav sample=e6.wav key=40 sw_last=34 sw_label=Minor up delay=0.02 sample=b4.wav sample=e6.wav Depending on needs, this might not be worth implementing, as duplicaton of regions adds to the time required for many SFZ players (certainly ARIA/sforzando) to parse and open an instrument. It is, however, certainly possible.","title":"Different Chord Types"},{"location":"tutorials/strum/#adjusting-time","text":"The above strums all have a fixed duration. Adjusting strum time is easily done by replacing the fixed delay with a modulated one. Going back to the simple E major example for brevity's sake: key=40 sample=e4.wav delay_cc1=0.2 sample=b4.wav delay_cc1=0.4 sample=e5.wav delay_cc1=0.6 sample=g#4.wav delay_cc1=0.8 sample=b4.wav delay_cc1=1 sample=e6.wav It would also be easy to add a small random delay to each voice. However, because delay is not an available target for the var modulator, it is not possible to have an adjustable amount of randomization, or make the random amount smaller when the CC adjusting the non-random delay is low. This means adding a simple delay_random to each voice would create the risk of \"earlier\" notes actually sounding after \"later\" ones when the non-random delay is close to zero. However, making the delay partially fixed and partially adjustable avoids this. key=40 sample=e4.wav delay=0.01 delay_cc1=0.2 delay_random=0.01 sample=b4.wav delay=0.02 delay_cc1=0.4 delay_random=0.01 sample=e5.wav delay=0.03 delay_cc1=0.6 delay_random=0.01 sample=g#4.wav delay=0.04 delay_cc1=0.8 delay_random=0.01 sample=b4.wav delay=0.05 delay_cc1=1 delay_random=0.01 sample=e6.wav","title":"Adjusting Time"},{"location":"tutorials/strum/#ringing-and-muting","text":"With the above examples, the samples will play until a note-off message, then follow the usual amp envelope release. In reality, the strings will often ring until the string is hit again, and it can be more convenient to have the samples always play in their entirety unless muted: loop_mode=one_shot key=40 sample=e4.wav group=6 off_by=6 delay_cc1=0.2 sample=b4.wav group=5 off_by=5 delay_cc1=0.4 sample=e5.wav group=4 off_by=4 delay_cc1=0.6 sample=g#4.wav group=3 off_by=3 delay_cc1=0.8 sample=b4.wav group=2 off_by=2 delay_cc1=1 sample=e6.wav group=1 off_by=1 Note that a new strum will mute all strings, without waiting for their delay for that specific string to be completed. There is currently elegant solution known for this. Using a longer off time or triggering a release sample could be possible workarounds to fill the sonic gap, though. On the positive side, a partial strum that does not hit all the strings would let the other strings keep ringing. If one shot mode is used, it's probably also useful to allow for quickly muting all strings when desired. That can be done with a placeholder region for each string, and combining those regions on another key, here one above the octave of the strums. key=60 ampeg_sustain=0 ampeg_release=0 sample=*silence group=6 off_by=6 sample=*silence group=5 off_by=5 sample=*silence group=4 off_by=4 sample=*silence group=3 off_by=3 sample=*silence group=2 off_by=2 sample=*silence group=1 off_by=1","title":"Ringing And Muting"},{"location":"tutorials/strum/#harp-glissandi","text":"Harp glissandi could be set up very similarly to a guitar strum, only with potentially a lot more notes. For simplicty's sake, let's consider just one octave. Speed is still controlled by CC1, and MIDI note 24 will trigger an upward glissando starting with the C4 note. key=24 sample=c4.wav sample=d4.wav delay_cc1=0.1 sample=e4.wav delay_cc1=0.2 sample=f4.wav delay_cc1=0.3 sample=g4.wav delay_cc1=0.4 sample=a4.wav delay_cc1=0.5 sample=b4.wav delay_cc1=0.6 sample=c5.wav delay_cc1=0.7 In order to make this more usable, we can add another control which will determine for how many notes the gliss keeps going before it stops. Let's use CC4. key=24 //First three notes are not affected by CC4, and are always played sample=c4.wav sample=d4.wav delay_cc1=0.1 sample=e4.wav delay_cc1=0.2 sample=f4.wav delay_cc1=0.3 locc4=1 sample=g4.wav delay_cc1=0.4 locc4=32 sample=a4.wav delay_cc1=0.5 locc4=64 sample=b4.wav delay_cc1=0.6 locc4=96 sample=c5.wav delay_cc1=0.7 locc4=127 This is essentially how a harp glissando on a folk harp operates. Concert harps have pedals which allow the retuning of strings to allow playing other scales, and this would need to be implemented, perhaps with a different MIDI CC for each pitch class. Strumming the drone strings on a Hungarian zither also works essentially as described here.","title":"Harp Glissandi"},{"location":"tutorials/strum/#lyres-and-zithers","text":"Many folk lyres, guslis etc. are tuned diatonically and chords on those are played by muting some strings, and strumming across both the open and muted strings. Keyswitches in another octave could be added to mute the strings, so that samples are only played when the switch matching that string is down. This basically works like a harp gliss, but the samples for the muted strings are not played. The keyswitches will not be displayed on the keyboard by most sfz players, so it will also likely be necessary to add some placeholder regions just to make them display. It's also common to strum across fewer than all the strings; this is basically what the power chord in the above guitar examples is. Instead of keyswitching, it is also possible to have partial strums on different keys (though this can easily require more keys than an 88-key keyboard), or selectable by CC, note velocity and possibly other variables as well. The below example uses CC4 to control how many strings are strummed. key=24 //First three notes are not affected by CC4 sample=c4.wav sw_down=36 sample=d4.wav delay_cc1=0.1 sw_down=38 sample=e4.wav delay_cc1=0.2 sw_down=40 sample=f4.wav delay_cc1=0.3 sw_down=41 locc4=1 sample=g4.wav delay_cc1=0.4 sw_down=43 locc4=32 sample=a4.wav delay_cc1=0.5 sw_down=45 locc4=64 sample=b4.wav delay_cc1=0.6 sw_down=47 locc4=96 sample=c5.wav delay_cc1=0.7 sw_down=48 locc4=127 //Placeholders to get the switch keys to be visible sample=*silence ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=36 key=38 key=40 key=41 key=43 key=45 key=47 key=48 For more realism, muted samples could be triggered for the strings which are not down. Although muting the strings for the keyswitches which are up and skipping the strings where the switch is down would be more analogous to the way the instruments are played in real life, this sort of \"negative space\" chord fingering is much more awkward for most users to play on a keyboard. It could easily be accomplished by merely switching the sw_up and sw_down opcodes in the below example. key=24 //Ringing strings //First three notes are not affected by CC4 sample=c4.wav sw_down=36 sample=d4.wav delay_cc1=0.1 sw_down=38 sample=e4.wav delay_cc1=0.2 sw_down=40 sample=f4.wav delay_cc1=0.3 sw_down=41 locc4=1 sample=g4.wav delay_cc1=0.4 sw_down=43 locc4=32 sample=a4.wav delay_cc1=0.5 sw_down=45 locc4=64 sample=b4.wav delay_cc1=0.6 sw_down=47 locc4=96 sample=c5.wav delay_cc1=0.7 sw_down=48 locc4=127 //Muted strings //First three notes are not affected by CC4 sample=c4_muted.wav sw_up=36 sample=d4_muted.wav delay_cc1=0.1 sw_up=38 sample=e4_muted.wav delay_cc1=0.2 sw_up=40 sample=f4_muted.wav delay_cc1=0.3 sw_up=41 locc4=1 sample=g4_muted.wav delay_cc1=0.4 sw_up=43 locc4=32 sample=a4_muted.wav delay_cc1=0.5 sw_up=45 locc4=64 sample=b4_muted.wav delay_cc1=0.6 sw_up=47 locc4=96 sample=c5_muted.wav delay_cc1=0.7 sw_up=48 locc4=127 //Placeholders to get the switch keys to be visible sample=*silence ampeg_decay=0 ampeg_sustain=0 ampeg_release=0 key=36 key=38 key=40 key=41 key=43 key=45 key=47 key=48","title":"Lyres And Zithers"},{"location":"tutorials/strum/#chromatic-strumming-on-diatonic-instruments","text":"The cithara barbarica instrument at https://github.com/sfzinstruments/cithara-barbarica has a patch like this. It simply duplicates each string's regions to cover the \"missing\" pitches. This works fine as long as there are no muted samples used for the stopped strings, and having a muted string sound every half-step would not be idiomatic for instruments other than the very rare chromatic gusli. One way to have muted sounds while playing chromatically would be to always trigger a muted sound for whatever the \"real\" pitch of each string should be, but have it instantly muted if a pitch in that string's range is played. This is not great, as the muted sound would be a half-step off, but as the muted strings are shortened and produce a higher pitch anyway, it seems to work well enough. key=26 //Muted regions, each with its own group and off_by sample=d4_muted.wav group=11 off_by=21 sample=e4_muted.wav group=12 off_by=22 delay_cc1=0.100 sample=f4_muted.wav group=13 off_by=23 delay_cc1=0.200 //Non-muted regions, with groups that will mute the above regions if one of the keys covered by that sample is held down sample=d4_finger.wav sw_down=36 group=21 transpose=-2 sample=d4_finger.wav sw_down=37 group=21 transpose=-1 sample=d4_finger.wav sw_down=38 group=21 sample=e4_finger.wav sw_down=39 group=22 transpose=-1 delay_cc1=0.100 sample=e4_finger.wav sw_down=40 group=22 delay_cc1=0.100 sample=f4_finger.wav sw_down=41 group=23 delay_cc1=0.200 A more realistic way to handle this would be to have a MIDI CC for each string to set its tuning, so for example the C string could sound a B or C# note, like on a concert harp with pedals. However, this is probably not very convenient for most players who would rather hit a B note to sound a B. This, of course, would not actually be chromatic - but not limited to a single scale.","title":"Chromatic Strumming On Diatonic Instruments"},{"location":"tutorials/strum/#further-possibilities","text":"In reality, a strum will transfer force to the first strings it hits, and subsequent strings will be hit with a little less force, and the delay between strings might also be nonlinear. This tutorial is open source, so feel free to contribute.","title":"Further Possibilities"},{"location":"tutorials/subtractive_synths/","text":"Introduction This tutorial describes implementing typical subtractive synthesizer modulations - filters, envelopes and LFOs - in SFZ. It uses the Caveman Cosmonaut instrument by Karoryfer Samples as an example. This does not cover all modulations used in classic hardware subtractive synths, but it's a start. Basic amplifier envelope Though subtractive synths get their name from having frequencies subtracted from the sound by filter, the volume envelope is probably the most fundamental modulation. Here is an AHDSR envelope including \u2039control\u203a parameter labels and defaults. label_cc100=Attack time label_cc101=Hold time label_cc102=Decay time label_cc103=Sustain level label_cc104=Release time set_cc102=63 set_cc103=51 set_cc104=31 //AHDSR ampeg_attack=0.002 ampeg_sustain=0 ampeg_release=0.002 ampeg_attack_oncc100=0.5 ampeg_hold_oncc101=1 ampeg_decay_oncc102=5 ampeg_sustain_oncc103=100 ampeg_release_oncc104=2 An ADSR envelope would simple leave out the hold stage control, leaving the default hold time of zero. Further envelope possibilities The above envelope will affect all sounds, as it's set at the global level. In many classic synths, it's possible to have separate envelopes modulating the volume of different oscillators, for example using a shorter envelope to turn a noise oscillator into a short transient. If more envelope stages are required, an SFZ2 envelope with an arbitrary amount of points can be used to modulate amplitude instead of the SFZ1 envelope above. In the ARIA SFZ player, amplifier envelope durations are calculated once on trigger, which means changing envelope parameters other than sustain and release while a note is playing will not change the sound. The ampeg_dynamic opcode could be set to 1 in order to recalculate envelope parameters every time one of the control parameters receives a MIDI message, which could be closer to the behavior of most analog synthesizer hardware. Caveman Cosmonaut has a more unusual parameter called Env Soften, which has no effect on some oscillators which have more high-frequency content, and adds to the release and decay times of the warmer-sounding oscillators. This is highly unusual, but can be musically useful for things such as plucks, as the warmer sounds linger longer. This is similar to the effect of release or decay on a lowpass filter cutoff, but perhaps a little more organic. That's set per oscillator, rather than globally, like this, with CC 18 selecting the oscillator, and CC 106 being the envelope soften: locc18=11 hicc18=20 ampeg_decay_oncc106=1.25 ampeg_release_oncc106=0.7 #include \"mappings/unitra_flutes.sfz\" locc18=21 hicc18=30 ampeg_decay_oncc106=1 ampeg_release_oncc106=0.4 #include \"mappings/unitra_clarinet.sfz\" locc18=31 hicc18=40 ampeg_decay_oncc106=1.5 ampeg_release_oncc106=0.6 #include \"mappings/unitra_trombone.sfz\" locc18=41 hicc18=50 ampeg_decay_oncc106=0.5 ampeg_release_oncc106=0.2 #include \"mappings/unitra_trompette.sfz\" locc18=51 hicc18=60 ampeg_decay_oncc106=1.25 ampeg_release_oncc106=0.5 #include \"mappings/unitra_violin.sfz\" locc18=61 hicc18=70 #include \"mappings/unitra_tremolo.sfz\" locc18=71 #include \"mappings/unitra_all.sfz\" Basic filter The filter in the example instrument is a single lowpass filter with cutoff and resonance controls, adjustable velocity tracking using var a two-stage filter cutoff envelope . label_cc120=Filter cutoff label_cc121=Resonance label_cc124=Veltrack label_cc125=Pluck label_cc126=Filter attack label_cc127=Filter decay set_cc120=127 set_cc127=40 //Lowpass filter cutoff=250 cutoff_cc120=9600 fil_keytrack=100 resonance=0 resonance_cc121=18 var01_cutoff=6000 //Velocity track var01_mod=mult var01_oncc131=1 var01_oncc124=1 cutoff_cc124=-3000 //Pluck envelope fileg_depth=0 fileg_depthcc125=8400 fileg_sustain=0 fileg_attack=0 fileg_attackcc126=0.5 fileg_decay=0.001 fileg_decaycc127=2 Filter keytracking Making the filter cutoff keytrack is a simple matter of setting the fil_keytrack to 100; however, things get more complicated if filter keytracking is not desired. Although fil_keytrack can be set to 0 and the base filter cutoff will then not keytrack, the filter cutoff modulation in SFZ is specified in cents, not Hertz. This means the amount of the cutoff which is modulated will keytrack, regardless of what fil_keytrack is set to. This isn't a big issue with most synthesizers, but when trying to make an adjustable highpass filter for all pieces of a drum kit except the kick, for example, it can make things complicated. Adjusting keytracking for the modulated amount requires using var and the extended CC 133 (MIDI key number). Var and extended CCs are already used above for the velocity tracking on the filter cutoff. The example instrument has a somewhat convoluted and unusual configuration for the filter keytracking, where when CC 120 has a very high value, the cutoff will be slightly above 22.05 kHz for all keys in the instrument's range, while the cutoff when CC 120 is at zero has 70% keytracking. This is not at all standard, and means the base cutoff has moderate positive keytracking while the cutoff modulation has negative keytracking. //By default, cutoff modulation is measured in cents //To make the modulation not keytrack, we make a kludge //Using var cutoff=250 var02_cutoff=9000 var02_mod=mult var02_oncc120=1 var02_curvecc120=0 var02_oncc133=1 var02_curvecc133=11 fil_keytrack=70 At the end of the SFZ file, the \u2039curve\u203a is then specified: curve_index=11 v000=1 v024=1 v084=0.63 v127=0.25 More filter possibilities It would be easy to have more filter envelope stages; only attack and decay are used above to keep things simple, as those parameters are enough to create basic plucks (zero attack, moderate decay) and 303 style basses (slightly longer attack, moderate decay). Using fil2_type and cutoff2 allows two filters in series, for example a lowpass and highpass filter. Fil_type can also be used to choose different filter types, perhaps with locc/hicc . Modulating the filter cutoff with LFOs is added below, in the vibrato section. Vibrato Vibrato can affect pitch, volume (for tremolo) and filter cutoff (for wobble). Here is a typical setup using one LFO to modulate all three. label_cc111=Vibrato to pitch label_cc112=Vibrato speed label_cc113=Vibrato to cutoff label_cc114=Vibrato to volume label_cc115=Vibrato delay label_cc116=Vibrato fade set_cc112=40 lfo01_pitch_oncc111=22 //Vibrato LFO lfo01_freq=0.1 lfo01_freq_oncc112=9.9 lfo01_delay_oncc115=0.500 lfo01_fade_oncc116=0.500 lfo01_volume_oncc114=6 //Wobble lfo01_cutoff=0 lfo01_cutoff_oncc113=3600 Humanized vibrato Humanization is obviously not a standard feature of synthesizers. Technically, though, it's not difficult to implement. The example instrument adds CC 117 for controlling the amount of randomization of the vibrato LFOs. This is similar to the humanization described in the vibrato tutorial , but using CC 135 to generate a true random number for each voice, which means any unison voices' vibrato will drift out of sync with those belonging to other voices. This is musically useful for creating more complex pads, for example. Similar principles could also be used to emulate analog oscillators' much more subtle pitch drift. label_cc111=Vibrato to pitch label_cc112=Vibrato speed label_cc113=Vibrato to cutoff label_cc114=Vibrato to volume label_cc115=Vibrato delay label_cc116=Vibrato fade label_cc117=Vibrato humanize set_cc112=40 //Vibrato and humanization setup lfo01_pitch_oncc111=22 //Vibrato LFO lfo01_freq=0.1 lfo01_freq_oncc112=9.9 lfo01_delay_oncc115=0.500 lfo01_fade_oncc116=0.500 lfo01_volume_oncc114=6 //Wobble lfo01_cutoff=0 lfo01_cutoff_oncc113=3600 lfo02_wave=1 //Second LFO to make things wobblier lfo02_phase=0 lfo02_phase_oncc135=1 //Phase randomized lfo02_freq=0.01 //Basically no movement at very slow speeds, just randomization lfo02_freq_oncc117=1 //Max rate is not very high, so it doesn't sound too obvious lfo02_pitch_oncc117=6 //Slight pitch wobbliness lfo02_freq_lfo01_oncc117=0.5 //Affect the rate of the other LFO for unsteady vibrato lfo02_freq_lfo01_oncc112=2.5 //Faster when the first LFO is going faster lfo03_wave=1 //And a third LFO for secondhand complex wobbliness lfo03_phase=0.4 lfo03_phase_oncc135=0.179 //Different phase response to random than the second LFO lfo03_freq=0.5 lfo03_freq_oncc117=-0.4 lfo03_freq_lfo2_oncc117=1 lfo03_pitch_oncc117=-4 lfo04_wave=1 //Fourth LFO for slowly changing the oscillator mix lfo04_phase_oncc135=1 lfo04_freq=0.01 lfo04_freq_oncc135=0.25 //Randomly from almost not moving at all to still pretty slow lfo04_volume_oncc117=1.5 //Slight volume changes Unison and detune Unison is a simple matter of triggering multiple regions with one MIDI note. If using a simple sound source such as a saw oscillators, all regions will sound identical so the only result will be additional volume. Making the unison more interesting requires some of: using different samples for each voice, detuning the voices, and shifting the phase of the voices. The example instrument uses many sets of samples from an analog keyboard, with every key producing a slightly different timbre, and transposed versions of those sounds used for unison. The detune and width amounts vary for each of the three oscillators, but here is a simplified version assuming there is only one oscillator. Note that although there is a width opcodes for use with stereo samples, in this case the left channel and right are separate mono samples, so pan is used to spread them in stereo - not width. As the samples here are quite long, offset_random is applied globally to effecitvely randomize each voice's phase. With true single-cycle waveforms, the max offset would have to be set to match each voice's max sample length. label_cc25=Unison label_cc26=Width label_cc27=Detune set_cc26=63 set_cc27=63 //Randomizing the start points of the samples to randomize phase offset_random=1000 //Center voice #include \"sample_map_basic.sfz\" //Left voice amplitude_cc25=100 amplitude_cc25=100 locc25=1 pan_cc26=-100 tune_cc27=-33 #include \"sample_map_transposed_1.sfz\" //Right voice amplitude_cc25=100 locc25=1 pan_cc26=100 tune_cc27=33 amplitude_cc25=100 #include \"sample_map_transposed_2.sfz\" More complex detune Another highly unsual feature of Caveman Cosmonaut, though, is that the detune doesn't have to be fixed. There are additional detune controls which detune the additional voices more at the start of the note, and then drift towards a common pitch over time, using pitch envelopes . This is definitely not part of any typical hardware analog synthesizer's feature set, but it does have something in common with the way real world choirs or instrumental ensembles find a commmon pitch. label_cc25=Unison label_cc26=Width label_cc27=Detune label_cc28=Extra detune amt label_cc29=Extra detune time set_cc26=63 set_cc27=63 set_cc29=16 //Randomizing the start points of the samples to randomize phase offset_random=1000 //Pitch envelope defaults for the fancy detune pitcheg_sustain=0 pitcheg_decay_shape=-2 //Center voice #include \"sample_map_basic.sfz\" //Left voice amplitude_cc25=100 locc25=1 pan_cc26=-100 tune_cc27=-33 pitcheg_depth_oncc28=-150 pitcheg_decay_oncc29=5 #include \"sample_map_transposed_1.sfz\" //Right voice amplitude_cc25=100 locc25=1 pan_cc26=100 tune_cc27=33 pitcheg_depth_oncc28=150 pitcheg_decay_oncc29=5 #include \"sample_map_transposed_2.sfz\" Waveform selection and oscillator mixing This is just locc/hicc for selection, and amplitude for volume controls. Mono mode and portamento This is implemented similarly to any non-synth - see our legato tutorial . Putting it all together This is the main file for the example instrument. The unison and detune settings, along with oscillator selection and mixing, are inside SFZ files added via the #include directives. label_cc15=Bass Osc Vol label_cc16=Bass Osc Sel label_cc17=Osc 1 Vol label_cc18=Osc 1 Sel label_cc19=Osc 2 Vol label_cc20=Osc 2 Sel label_cc21=Osc 3 Vol label_cc22=Osc 3 Sel label_cc25=Unison label_cc26=Width label_cc27=Detune label_cc28=Extra detune amt label_cc29=Extra detune time label_cc100=Attack time label_cc101=Hold time label_cc102=Decay time label_cc103=Sustain level label_cc104=Release time label_cc106=Env soften label_cc108=Legato switch label_cc109=Porta time label_cc111=Vibrato to pitch label_cc112=Vibrato speed label_cc113=Vibrato to cutoff label_cc114=Vibrato to volume label_cc115=Vibrato delay label_cc116=Vibrato fade label_cc117=Unsteadiness label_cc120=Filter cutoff label_cc121=Resonance label_cc124=Veltrack label_cc125=Pluck label_cc126=Filter attack label_cc127=Filter decay set_cc15=100 set_cc16=15 set_cc17=127 set_cc18=63 set_cc19=100 set_cc20=15 set_cc21=100 set_cc22=44 set_cc26=63 set_cc27=63 set_cc29=16 set_cc102=63 set_cc103=51 set_cc104=31 set_cc109=31 set_cc112=40 set_cc120=127 set_cc127=40 bend_down=-2400 bend_up=2400 off_mode=normal loop_mode=continuous offset=10000 offset_random=1000 //AHDSR ampeg_attack=0.002 ampeg_sustain=0 ampeg_release=0.002 ampeg_attack_oncc100=0.5 ampeg_hold_oncc101=1 ampeg_decay_oncc102=5 ampeg_sustain_oncc103=100 ampeg_release_oncc104=2 //Decay and release are affected by the soften parameter also //This is set separately for each oscillator //Filter //Lowpass filter //By default, cutoff modulation is measured in cents //To make the modulation not keytrack, we make a kludge //Using var cutoff=250 var02_cutoff=9000 var02_mod=mult var02_oncc120=1 var02_curvecc120=0 var02_oncc133=1 var02_curvecc133=11 fil_keytrack=70 resonance=0 resonance_cc121=18 var01_cutoff=6000 //Velocity track var01_mod=mult var01_oncc131=1 var01_oncc124=1 cutoff_cc124=-3000 //Pluck envelope fileg_depth=0 fileg_depthcc125=8400 fileg_sustain=0 fileg_attack=0 fileg_attackcc126=0.5 fileg_decay=0.001 fileg_decaycc127=2 //Vibrato and humanization setup lfo01_pitch_oncc111=22 //Vibrato LFO lfo01_freq=0.1 lfo01_freq_oncc112=9.9 lfo01_delay_oncc115=0.500 lfo01_fade_oncc116=0.500 lfo01_volume_oncc114=6 //Wobble lfo01_cutoff=0 lfo01_cutoff_oncc113=3600 lfo02_wave=1 //Second LFO to make things wobblier lfo02_phase=0 lfo02_phase_oncc135=1 //Phase randomized lfo02_freq=0.01 //Basically no movement at very slow speeds, just randomization lfo02_freq_oncc117=1 //Max rate is not very high, so it doesn't sound too obvious lfo02_pitch_oncc117=6 //Slight pitch wobbliness lfo02_freq_lfo01_oncc117=0.5 //Affect the rate of the other LFO for unsteady vibrato lfo02_freq_lfo01_oncc112=2.5 //Faster when the first LFO is going faster lfo03_wave=1 //And a third LFO for secondhand complex wobbliness lfo03_phase=0.4 lfo03_phase_oncc135=0.179 //Different phase response to random than the second LFO lfo03_freq=0.5 lfo03_freq_oncc117=-0.4 lfo03_freq_lfo2_oncc117=1 lfo03_pitch_oncc117=-4 lfo04_wave=1 //Fourth LFO for slowly changing the oscillator mix lfo04_phase_oncc135=1 lfo04_freq=0.01 lfo04_freq_oncc135=0.25 //Randomly from almost not moving at all to still pretty slow lfo04_volume_oncc117=1.5 //Slight volume changes //Some defaults for the fancy detune stuff pitcheg_sustain=0 pitcheg_decay_shape=-2 //And here come the oscillator mappings //First polyphonic mode #include \"mappings/poly_map.sfz\" #include \"mappings/mono_first_map.sfz\" #include \"mappings/mono_legato_map.sfz\" curve_index=11 v000=1 v024=1 v084=0.63 v127=0.25","title":"Subtractive synthesizers"},{"location":"tutorials/subtractive_synths/#introduction","text":"This tutorial describes implementing typical subtractive synthesizer modulations - filters, envelopes and LFOs - in SFZ. It uses the Caveman Cosmonaut instrument by Karoryfer Samples as an example. This does not cover all modulations used in classic hardware subtractive synths, but it's a start.","title":"Introduction"},{"location":"tutorials/subtractive_synths/#basic-amplifier-envelope","text":"Though subtractive synths get their name from having frequencies subtracted from the sound by filter, the volume envelope is probably the most fundamental modulation. Here is an AHDSR envelope including \u2039control\u203a parameter labels and defaults. label_cc100=Attack time label_cc101=Hold time label_cc102=Decay time label_cc103=Sustain level label_cc104=Release time set_cc102=63 set_cc103=51 set_cc104=31 //AHDSR ampeg_attack=0.002 ampeg_sustain=0 ampeg_release=0.002 ampeg_attack_oncc100=0.5 ampeg_hold_oncc101=1 ampeg_decay_oncc102=5 ampeg_sustain_oncc103=100 ampeg_release_oncc104=2 An ADSR envelope would simple leave out the hold stage control, leaving the default hold time of zero.","title":"Basic amplifier envelope"},{"location":"tutorials/subtractive_synths/#further-envelope-possibilities","text":"The above envelope will affect all sounds, as it's set at the global level. In many classic synths, it's possible to have separate envelopes modulating the volume of different oscillators, for example using a shorter envelope to turn a noise oscillator into a short transient. If more envelope stages are required, an SFZ2 envelope with an arbitrary amount of points can be used to modulate amplitude instead of the SFZ1 envelope above. In the ARIA SFZ player, amplifier envelope durations are calculated once on trigger, which means changing envelope parameters other than sustain and release while a note is playing will not change the sound. The ampeg_dynamic opcode could be set to 1 in order to recalculate envelope parameters every time one of the control parameters receives a MIDI message, which could be closer to the behavior of most analog synthesizer hardware. Caveman Cosmonaut has a more unusual parameter called Env Soften, which has no effect on some oscillators which have more high-frequency content, and adds to the release and decay times of the warmer-sounding oscillators. This is highly unusual, but can be musically useful for things such as plucks, as the warmer sounds linger longer. This is similar to the effect of release or decay on a lowpass filter cutoff, but perhaps a little more organic. That's set per oscillator, rather than globally, like this, with CC 18 selecting the oscillator, and CC 106 being the envelope soften: locc18=11 hicc18=20 ampeg_decay_oncc106=1.25 ampeg_release_oncc106=0.7 #include \"mappings/unitra_flutes.sfz\" locc18=21 hicc18=30 ampeg_decay_oncc106=1 ampeg_release_oncc106=0.4 #include \"mappings/unitra_clarinet.sfz\" locc18=31 hicc18=40 ampeg_decay_oncc106=1.5 ampeg_release_oncc106=0.6 #include \"mappings/unitra_trombone.sfz\" locc18=41 hicc18=50 ampeg_decay_oncc106=0.5 ampeg_release_oncc106=0.2 #include \"mappings/unitra_trompette.sfz\" locc18=51 hicc18=60 ampeg_decay_oncc106=1.25 ampeg_release_oncc106=0.5 #include \"mappings/unitra_violin.sfz\" locc18=61 hicc18=70 #include \"mappings/unitra_tremolo.sfz\" locc18=71 #include \"mappings/unitra_all.sfz\"","title":"Further envelope possibilities"},{"location":"tutorials/subtractive_synths/#basic-filter","text":"The filter in the example instrument is a single lowpass filter with cutoff and resonance controls, adjustable velocity tracking using var a two-stage filter cutoff envelope . label_cc120=Filter cutoff label_cc121=Resonance label_cc124=Veltrack label_cc125=Pluck label_cc126=Filter attack label_cc127=Filter decay set_cc120=127 set_cc127=40 //Lowpass filter cutoff=250 cutoff_cc120=9600 fil_keytrack=100 resonance=0 resonance_cc121=18 var01_cutoff=6000 //Velocity track var01_mod=mult var01_oncc131=1 var01_oncc124=1 cutoff_cc124=-3000 //Pluck envelope fileg_depth=0 fileg_depthcc125=8400 fileg_sustain=0 fileg_attack=0 fileg_attackcc126=0.5 fileg_decay=0.001 fileg_decaycc127=2","title":"Basic filter"},{"location":"tutorials/subtractive_synths/#filter-keytracking","text":"Making the filter cutoff keytrack is a simple matter of setting the fil_keytrack to 100; however, things get more complicated if filter keytracking is not desired. Although fil_keytrack can be set to 0 and the base filter cutoff will then not keytrack, the filter cutoff modulation in SFZ is specified in cents, not Hertz. This means the amount of the cutoff which is modulated will keytrack, regardless of what fil_keytrack is set to. This isn't a big issue with most synthesizers, but when trying to make an adjustable highpass filter for all pieces of a drum kit except the kick, for example, it can make things complicated. Adjusting keytracking for the modulated amount requires using var and the extended CC 133 (MIDI key number). Var and extended CCs are already used above for the velocity tracking on the filter cutoff. The example instrument has a somewhat convoluted and unusual configuration for the filter keytracking, where when CC 120 has a very high value, the cutoff will be slightly above 22.05 kHz for all keys in the instrument's range, while the cutoff when CC 120 is at zero has 70% keytracking. This is not at all standard, and means the base cutoff has moderate positive keytracking while the cutoff modulation has negative keytracking. //By default, cutoff modulation is measured in cents //To make the modulation not keytrack, we make a kludge //Using var cutoff=250 var02_cutoff=9000 var02_mod=mult var02_oncc120=1 var02_curvecc120=0 var02_oncc133=1 var02_curvecc133=11 fil_keytrack=70 At the end of the SFZ file, the \u2039curve\u203a is then specified: curve_index=11 v000=1 v024=1 v084=0.63 v127=0.25","title":"Filter keytracking"},{"location":"tutorials/subtractive_synths/#more-filter-possibilities","text":"It would be easy to have more filter envelope stages; only attack and decay are used above to keep things simple, as those parameters are enough to create basic plucks (zero attack, moderate decay) and 303 style basses (slightly longer attack, moderate decay). Using fil2_type and cutoff2 allows two filters in series, for example a lowpass and highpass filter. Fil_type can also be used to choose different filter types, perhaps with locc/hicc . Modulating the filter cutoff with LFOs is added below, in the vibrato section.","title":"More filter possibilities"},{"location":"tutorials/subtractive_synths/#vibrato","text":"Vibrato can affect pitch, volume (for tremolo) and filter cutoff (for wobble). Here is a typical setup using one LFO to modulate all three. label_cc111=Vibrato to pitch label_cc112=Vibrato speed label_cc113=Vibrato to cutoff label_cc114=Vibrato to volume label_cc115=Vibrato delay label_cc116=Vibrato fade set_cc112=40 lfo01_pitch_oncc111=22 //Vibrato LFO lfo01_freq=0.1 lfo01_freq_oncc112=9.9 lfo01_delay_oncc115=0.500 lfo01_fade_oncc116=0.500 lfo01_volume_oncc114=6 //Wobble lfo01_cutoff=0 lfo01_cutoff_oncc113=3600","title":"Vibrato"},{"location":"tutorials/subtractive_synths/#humanized-vibrato","text":"Humanization is obviously not a standard feature of synthesizers. Technically, though, it's not difficult to implement. The example instrument adds CC 117 for controlling the amount of randomization of the vibrato LFOs. This is similar to the humanization described in the vibrato tutorial , but using CC 135 to generate a true random number for each voice, which means any unison voices' vibrato will drift out of sync with those belonging to other voices. This is musically useful for creating more complex pads, for example. Similar principles could also be used to emulate analog oscillators' much more subtle pitch drift. label_cc111=Vibrato to pitch label_cc112=Vibrato speed label_cc113=Vibrato to cutoff label_cc114=Vibrato to volume label_cc115=Vibrato delay label_cc116=Vibrato fade label_cc117=Vibrato humanize set_cc112=40 //Vibrato and humanization setup lfo01_pitch_oncc111=22 //Vibrato LFO lfo01_freq=0.1 lfo01_freq_oncc112=9.9 lfo01_delay_oncc115=0.500 lfo01_fade_oncc116=0.500 lfo01_volume_oncc114=6 //Wobble lfo01_cutoff=0 lfo01_cutoff_oncc113=3600 lfo02_wave=1 //Second LFO to make things wobblier lfo02_phase=0 lfo02_phase_oncc135=1 //Phase randomized lfo02_freq=0.01 //Basically no movement at very slow speeds, just randomization lfo02_freq_oncc117=1 //Max rate is not very high, so it doesn't sound too obvious lfo02_pitch_oncc117=6 //Slight pitch wobbliness lfo02_freq_lfo01_oncc117=0.5 //Affect the rate of the other LFO for unsteady vibrato lfo02_freq_lfo01_oncc112=2.5 //Faster when the first LFO is going faster lfo03_wave=1 //And a third LFO for secondhand complex wobbliness lfo03_phase=0.4 lfo03_phase_oncc135=0.179 //Different phase response to random than the second LFO lfo03_freq=0.5 lfo03_freq_oncc117=-0.4 lfo03_freq_lfo2_oncc117=1 lfo03_pitch_oncc117=-4 lfo04_wave=1 //Fourth LFO for slowly changing the oscillator mix lfo04_phase_oncc135=1 lfo04_freq=0.01 lfo04_freq_oncc135=0.25 //Randomly from almost not moving at all to still pretty slow lfo04_volume_oncc117=1.5 //Slight volume changes","title":"Humanized vibrato"},{"location":"tutorials/subtractive_synths/#unison-and-detune","text":"Unison is a simple matter of triggering multiple regions with one MIDI note. If using a simple sound source such as a saw oscillators, all regions will sound identical so the only result will be additional volume. Making the unison more interesting requires some of: using different samples for each voice, detuning the voices, and shifting the phase of the voices. The example instrument uses many sets of samples from an analog keyboard, with every key producing a slightly different timbre, and transposed versions of those sounds used for unison. The detune and width amounts vary for each of the three oscillators, but here is a simplified version assuming there is only one oscillator. Note that although there is a width opcodes for use with stereo samples, in this case the left channel and right are separate mono samples, so pan is used to spread them in stereo - not width. As the samples here are quite long, offset_random is applied globally to effecitvely randomize each voice's phase. With true single-cycle waveforms, the max offset would have to be set to match each voice's max sample length. label_cc25=Unison label_cc26=Width label_cc27=Detune set_cc26=63 set_cc27=63 //Randomizing the start points of the samples to randomize phase offset_random=1000 //Center voice #include \"sample_map_basic.sfz\" //Left voice amplitude_cc25=100 amplitude_cc25=100 locc25=1 pan_cc26=-100 tune_cc27=-33 #include \"sample_map_transposed_1.sfz\" //Right voice amplitude_cc25=100 locc25=1 pan_cc26=100 tune_cc27=33 amplitude_cc25=100 #include \"sample_map_transposed_2.sfz\"","title":"Unison and detune"},{"location":"tutorials/subtractive_synths/#more-complex-detune","text":"Another highly unsual feature of Caveman Cosmonaut, though, is that the detune doesn't have to be fixed. There are additional detune controls which detune the additional voices more at the start of the note, and then drift towards a common pitch over time, using pitch envelopes . This is definitely not part of any typical hardware analog synthesizer's feature set, but it does have something in common with the way real world choirs or instrumental ensembles find a commmon pitch. label_cc25=Unison label_cc26=Width label_cc27=Detune label_cc28=Extra detune amt label_cc29=Extra detune time set_cc26=63 set_cc27=63 set_cc29=16 //Randomizing the start points of the samples to randomize phase offset_random=1000 //Pitch envelope defaults for the fancy detune pitcheg_sustain=0 pitcheg_decay_shape=-2 //Center voice #include \"sample_map_basic.sfz\" //Left voice amplitude_cc25=100 locc25=1 pan_cc26=-100 tune_cc27=-33 pitcheg_depth_oncc28=-150 pitcheg_decay_oncc29=5 #include \"sample_map_transposed_1.sfz\" //Right voice amplitude_cc25=100 locc25=1 pan_cc26=100 tune_cc27=33 pitcheg_depth_oncc28=150 pitcheg_decay_oncc29=5 #include \"sample_map_transposed_2.sfz\"","title":"More complex detune"},{"location":"tutorials/subtractive_synths/#waveform-selection-and-oscillator-mixing","text":"This is just locc/hicc for selection, and amplitude for volume controls.","title":"Waveform selection and oscillator mixing"},{"location":"tutorials/subtractive_synths/#mono-mode-and-portamento","text":"This is implemented similarly to any non-synth - see our legato tutorial .","title":"Mono mode and portamento"},{"location":"tutorials/subtractive_synths/#putting-it-all-together","text":"This is the main file for the example instrument. The unison and detune settings, along with oscillator selection and mixing, are inside SFZ files added via the #include directives. label_cc15=Bass Osc Vol label_cc16=Bass Osc Sel label_cc17=Osc 1 Vol label_cc18=Osc 1 Sel label_cc19=Osc 2 Vol label_cc20=Osc 2 Sel label_cc21=Osc 3 Vol label_cc22=Osc 3 Sel label_cc25=Unison label_cc26=Width label_cc27=Detune label_cc28=Extra detune amt label_cc29=Extra detune time label_cc100=Attack time label_cc101=Hold time label_cc102=Decay time label_cc103=Sustain level label_cc104=Release time label_cc106=Env soften label_cc108=Legato switch label_cc109=Porta time label_cc111=Vibrato to pitch label_cc112=Vibrato speed label_cc113=Vibrato to cutoff label_cc114=Vibrato to volume label_cc115=Vibrato delay label_cc116=Vibrato fade label_cc117=Unsteadiness label_cc120=Filter cutoff label_cc121=Resonance label_cc124=Veltrack label_cc125=Pluck label_cc126=Filter attack label_cc127=Filter decay set_cc15=100 set_cc16=15 set_cc17=127 set_cc18=63 set_cc19=100 set_cc20=15 set_cc21=100 set_cc22=44 set_cc26=63 set_cc27=63 set_cc29=16 set_cc102=63 set_cc103=51 set_cc104=31 set_cc109=31 set_cc112=40 set_cc120=127 set_cc127=40 bend_down=-2400 bend_up=2400 off_mode=normal loop_mode=continuous offset=10000 offset_random=1000 //AHDSR ampeg_attack=0.002 ampeg_sustain=0 ampeg_release=0.002 ampeg_attack_oncc100=0.5 ampeg_hold_oncc101=1 ampeg_decay_oncc102=5 ampeg_sustain_oncc103=100 ampeg_release_oncc104=2 //Decay and release are affected by the soften parameter also //This is set separately for each oscillator //Filter //Lowpass filter //By default, cutoff modulation is measured in cents //To make the modulation not keytrack, we make a kludge //Using var cutoff=250 var02_cutoff=9000 var02_mod=mult var02_oncc120=1 var02_curvecc120=0 var02_oncc133=1 var02_curvecc133=11 fil_keytrack=70 resonance=0 resonance_cc121=18 var01_cutoff=6000 //Velocity track var01_mod=mult var01_oncc131=1 var01_oncc124=1 cutoff_cc124=-3000 //Pluck envelope fileg_depth=0 fileg_depthcc125=8400 fileg_sustain=0 fileg_attack=0 fileg_attackcc126=0.5 fileg_decay=0.001 fileg_decaycc127=2 //Vibrato and humanization setup lfo01_pitch_oncc111=22 //Vibrato LFO lfo01_freq=0.1 lfo01_freq_oncc112=9.9 lfo01_delay_oncc115=0.500 lfo01_fade_oncc116=0.500 lfo01_volume_oncc114=6 //Wobble lfo01_cutoff=0 lfo01_cutoff_oncc113=3600 lfo02_wave=1 //Second LFO to make things wobblier lfo02_phase=0 lfo02_phase_oncc135=1 //Phase randomized lfo02_freq=0.01 //Basically no movement at very slow speeds, just randomization lfo02_freq_oncc117=1 //Max rate is not very high, so it doesn't sound too obvious lfo02_pitch_oncc117=6 //Slight pitch wobbliness lfo02_freq_lfo01_oncc117=0.5 //Affect the rate of the other LFO for unsteady vibrato lfo02_freq_lfo01_oncc112=2.5 //Faster when the first LFO is going faster lfo03_wave=1 //And a third LFO for secondhand complex wobbliness lfo03_phase=0.4 lfo03_phase_oncc135=0.179 //Different phase response to random than the second LFO lfo03_freq=0.5 lfo03_freq_oncc117=-0.4 lfo03_freq_lfo2_oncc117=1 lfo03_pitch_oncc117=-4 lfo04_wave=1 //Fourth LFO for slowly changing the oscillator mix lfo04_phase_oncc135=1 lfo04_freq=0.01 lfo04_freq_oncc135=0.25 //Randomly from almost not moving at all to still pretty slow lfo04_volume_oncc117=1.5 //Slight volume changes //Some defaults for the fancy detune stuff pitcheg_sustain=0 pitcheg_decay_shape=-2 //And here come the oscillator mappings //First polyphonic mode #include \"mappings/poly_map.sfz\" #include \"mappings/mono_first_map.sfz\" #include \"mappings/mono_legato_map.sfz\" curve_index=11 v000=1 v024=1 v084=0.63 v127=0.25","title":"Putting it all together"},{"location":"tutorials/sustained_note_basics/","text":"We've covered the basic opcodes required to map simple drum instruments on another page , and here we are going to apply that knowledge to pitched instruments, plus add more opcodes. Let's say we want to sample a folk flute whose lowest note is a D. If the lowest five notes are D, E, F#, G and A, and there is one sample available for each note, they could be mapped like this: key=50 sample=d4.wav key=52 sample=e4.wav key=54 sample=f#4.wav key=55 sample=g4.wav key=57 sample=a4.wav This would work well enough to make a sound when a MIDI note corresponding to one of the sampled pitches is played. However, playing notes inbetween the D and E, or E and F#, would mean no sound. We can \"stretch\" one of the neighboring notes to cover that D# and that F using the lokey / hikey and pitch_keycenter opcodes instead of key. If a sample does not need to cover multiple notes, it can still use key. Whether to use the D or E sample to cover the D# in our example is a judgment call - which sounds better? lokey=50 hikey=51 pitch_keycenter=50 sample=d4.wav lokey=52 hikey=53 pitch_keycenter=52 sample=e4.wav key=54 sample=f#4.wav lokey=55 hikey=55 pitch_keycenter=56 sample=g4.wav key=57 sample=a4.wav The samples will play as long as a note is held, but when the note is released, they will end suddenly, which is probably not realistic for a flute sound, or indeed most other instruments. We'll need to apply a volume envelope with a release time set, which can be applied to all regions. The ampeg_release opcode accomplishes this. ampeg_release=0.3 lokey=50 hikey=51 pitch_keycenter=50 sample=d4.wav lokey=52 hikey=53 pitch_keycenter=52 sample=e4.wav key=54 sample=f#4.wav key=55 sample=g4.wav If we have samples at various dynamics, such as quiet and loud, we could use note velocity to choose which sample is played - however, while this makes perfect sense for drum hits or piano notes, with instruments such as flute or violin, it's possible for the player to vary the dynamic level while a note is being sustained. This can be simulated with the xfin_loccN / xfin_hiccN and xfout_loccN / xfout_hiccN opcodes. Using only the D4 and E4 samples as an example, and controlling the dynamics with CC1 (mod wheel). The amp_veltrack opcode is set to 0, so that velocity does not affect volume. ampeg_release=0.3 amp_veltrack=0 lokey=50 hikey=51 pitch_keycenter=50 sample=d4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85 sample=d4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127 sample=d4_f.wav xfin_locc1=86 xfin_hicc1=127 lokey=52 hikey=53 pitch_keycenter=52 sample=e4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85 sample=e4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127 sample=e4_f.wav xfin_locc1=86 xfin_hicc1=127 Now, CC1 would first fade in the quiet sample when it was between 0 and 42. From 43 to 85, the quiet sample is faded out and the medium sample faded in. From 86 to the max value of 127, the medium sample is faded out while the loud sample fades in. If we have multiple techniques or articulation sampled, for example regular sustains and fluttertongue sustains, we need a way to switch between them. Each could be its own independent and complete SFZ file, and we could just load the desired file into the player, but for convenience, especially in live performance, it's good to load both at once and have a way of switching between them. One way is loccN / hiccN where which sample is triggered for a particular note depends on the value of a MIDI CC - let's use MIDI CC 11. Notice that the fluttertongue samples in this example have fewer dynamic layers than the main sustain samples - it's common for the \"core\" articulations of an instrument to be sampled in more detail, and the SFZ format is flexible enough to allow this, or even allow different amounts of dynamic layers or round robins for different notes within the same articulation. ampeg_release=0.3 amp_veltrack=0 lokey=50 hikey=51 pitch_keycenter=50 hicc11=63 sample=d4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85 sample=d4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127 sample=d4_f.wav xfin_locc1=86 xfin_hicc1=127 lokey=52 hikey=53 pitch_keycenter=52 hicc11=63 sample=e4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85 sample=e4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127 sample=e4_f.wav xfin_locc1=86 xfin_hicc1=127 lokey=50 hikey=51 pitch_keycenter=50 locc11=64 sample=d4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127 sample=d4_ft_f.wav xfin_locc1=64 xfin_hicc1=127 lokey=52 hikey=53 pitch_keycenter=52 locc11=64 sample=e4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127 sample=e4_ft_f.wav xfin_locc1=64 xfin_hicc1=127 Another, probably more common, way is to use keyswitches. If we define the keyswitch range as the C and C# below our lowest D using sw_lokey / sw_hikey , we can then use sw_last to select articulations. ampeg_release=0.3 amp_veltrack=0 sw_lokey=48 sw_hikey=49 lokey=50 hikey=51 pitch_keycenter=50 sw_last=48 sample=d4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85 sample=d4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127 sample=d4_f.wav xfin_locc1=86 xfin_hicc1=127 lokey=52 hikey=53 pitch_keycenter=52 sw_last=48 sample=e4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85 sample=e4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127 sample=e4_f.wav xfin_locc1=86 xfin_hicc1=127 lokey=50 hikey=51 pitch_keycenter=50 sw_last=49 sample=d4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127 sample=d4_ft_f.wav xfin_locc1=64 xfin_hicc1=127 lokey=52 hikey=53 pitch_keycenter=52 sw_last=49 sample=e4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127 sample=e4_ft_f.wav xfin_locc1=64 xfin_hicc1=127 There are other possibilities - for example, since velocity is not needed to control dynamics, we could use that to select articulations using lovel / hivel , for example. However, it' is quite common, especially with string instruments, to use a MIDI CC to control the dynamics of sustained articulations, and velocity to control the dynamics of short articulations such as staccato. In those cases, the short articulations could use amp_veltrack set to 100 instead of 0, and generally be mapped in the same way as the drums we've discussed before . The flute is a monophonic instrument in reality - you can't play chords on it, while you can using our SFZ here. For more realism, playing a note on this flute should mute any previously playing notes. To make an instrument which can only play one note at a time, the group and off_by opcodes can be used. Although these can be used in more complex scenarios, for a monophonic instrument with no multiple microphone positions sampled, it's enough to put all samples in the same group, and have that group muted whenever a new note from that group is played. ampeg_release=0.3 amp_veltrack=0 sw_lokey=48 sw_hikey=49 group=1 off_by=1 lokey=50 hikey=51 pitch_keycenter=50 sw_last=48 sample=d4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85 sample=d4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127 sample=d4_f.wav xfin_locc1=86 xfin_hicc1=127 lokey=52 hikey=53 pitch_keycenter=52 sw_last=48 sample=e4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85 sample=e4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127 sample=e4_f.wav xfin_locc1=86 xfin_hicc1=127 lokey=50 hikey=51 pitch_keycenter=50 sw_last=49 sample=d4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127 sample=d4_ft_f.wav xfin_locc1=64 xfin_hicc1=127 lokey=52 hikey=53 pitch_keycenter=52 sw_last=49 sample=e4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127 sample=e4_ft_f.wav xfin_locc1=64 xfin_hicc1=127 However, this cuts off the note suddenly, creating a gap before the next note can reach full volume. That problem can be fixed by setting off_mode to normal, which will make the notes being muted fade out gradually over the duration previously specified with the ampeg_release opcode. ampeg_release=0.3 amp_veltrack=0 sw_lokey=48 sw_hikey=49 group=1 off_by=1 off_mode=normal lokey=50 hikey=51 pitch_keycenter=50 sw_last=48 sample=d4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85 sample=d4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127 sample=d4_f.wav xfin_locc1=86 xfin_hicc1=127 lokey=52 hikey=53 pitch_keycenter=52 sw_last=48 sample=e4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85 sample=e4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127 sample=e4_f.wav xfin_locc1=86 xfin_hicc1=127 lokey=50 hikey=51 pitch_keycenter=50 sw_last=49 sample=d4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127 sample=d4_ft_f.wav xfin_locc1=64 xfin_hicc1=127 lokey=52 hikey=53 pitch_keycenter=52 sw_last=49 sample=e4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127 sample=e4_ft_f.wav xfin_locc1=64 xfin_hicc1=127 This is enough to make a basic monophonic wind instrument, vocal, or other monophonic instrument. There are more possibilities - better legato, vibrato emulation, multiple microphone positions etc. - which we'll describe later in another part of this guide. Together with the information covered in drum basics earlier, this should also be enough to make a basic sampled piano or guitar.","title":"Sustained note basics"},{"location":"tutorials/unison/","text":"This tutorial describes various methods of using one set of samples to emulate the sound of larger numbers of instruments - making a small ensemble sound larger, using one set of samples for both first and second violins, automatically multitracking guitars, synthesizer oscillator unison etc. Transposition Let's say we have only one sampled violin section, and need to use both first and second violins. Using just one octave of range for simplicity, this is our first violins example: sample=c4.wav key=48 sample=db4.wav key=49 sample=d4.wav key=50 sample=eb4.wav key=51 sample=e4.wav key=52 sample=f4.wav key=53 sample=gb4.wav key=54 sample=g4.wav key=55 sample=ab4.wav key=56 sample=a4.wav key=57 sample=bb4.wav key=58 sample=b4.wav key=59 sample=c5.wav key=60 Using this for both first and second violins will result in two identical-sounding sections with the same timbre, but it's easily possible to use the same samples transposed, and get a different timbre. Instead of using the C4 sample to play C4, use the Db4 sample transposed down a half step to play C4. This can be done by using lokey, hikey and pitch_keycenter opcodes instead of just key. sample=c4.wav lokey=47 hikey=47 pitch_keycenter=48 sample=db4.wav lokey=48 hikey=48 pitch_keycenter=49 sample=d4.wav lokey=49 hikey=49 pitch_keycenter=50 sample=eb4.wav lokey=50 hikey=50 pitch_keycenter=51 sample=e4.wav lokey=51 hikey=51 pitch_keycenter=52 sample=f4.wav lokey=52 hikey=52 pitch_keycenter=53 sample=gb4.wav lokey=53 hikey=53 pitch_keycenter=54 sample=g4.wav lokey=54 hikey=54 pitch_keycenter=55 sample=ab4.wav lokey=55 hikey=55 pitch_keycenter=56 sample=a4.wav lokey=56 hikey=56 pitch_keycenter=57 sample=bb4.wav lokey=57 hikey=57 pitch_keycenter=58 sample=b4.wav lokey=58 hikey=58 pitch_keycenter=59 sample=c5.wav lokey=59 hikey=59 pitch_keycenter=60 Howerver, in most cases it's easier to use the key and transpose opcodes instead, and set the transpose amount for all the transposed regions at once. transpose=-1 sample=c4.wav key=47 sample=db4.wav key=48 sample=d4.wav key=49 sample=eb4.wav key=50 sample=e4.wav key=51 sample=f4.wav key=52 sample=gb4.wav key=53 sample=g4.wav key=54 sample=ab4.wav key=55 sample=a4.wav key=56 sample=bb4.wav key=57 sample=b4.wav key=58 sample=c5.wav key=59 This still requires changing the key opcode for every region, however. Doing this editing manually on large sample sets would be time-consuming, but the old tool sfzed allows easily adding, subtracting or multiplying current parameter values to regions, which becomes very useful when doing this with thousands of samples. This shifts the entire range of the instrument down by a half-step, though. In order to preserve the correct range, we can remove the transposed notes which got moved below the lowest pitch the instrument is capable of. That's easy. The top range is more tricky - if we extend the highest note to cover its original pitch as well, but then the same sample would be used for the same pitch by both sections. So, we can instead use the next-to-highest note, transposed up. This might not sound very consistent with the rest, but under these limitations, it can be a reasonable compromise. transpose=-1 sample=db4.wav key=48 sample=d4.wav key=49 sample=eb4.wav key=50 sample=e4.wav key=51 sample=f4.wav key=52 sample=gb4.wav key=53 sample=g4.wav key=54 sample=ab4.wav key=55 sample=a4.wav key=56 sample=bb4.wav key=57 sample=b4.wav key=58 sample=c5.wav key=59 sample=b4.wav key=60 transpose=1 Transposition Values In general, transposing downwards will result in a warmer sound, and transposing upwards will make the sound brighter and thinner. Transposing by more than a half step can be a good idea. In general, transposing by a minor third is a common way to create a big change in timbre. Transposing by much more than a minor third doesn't seem common outside of sound design not intended to be a realistic instrument emulation. Transposing down by a minor third while preserving the range in our example, and filling in the lost top of the range by transposing upwards might look like this: transpose=-3 sample=eb4.wav key=48 sample=e4.wav key=49 sample=f4.wav key=50 sample=gb4.wav key=51 sample=g4.wav key=52 sample=ab4.wav key=53 sample=a4.wav key=54 sample=bb4.wav key=55 sample=b4.wav key=56 sample=c5.wav key=57 sample=a4.wav key=58 transpose=1 sample=bb4.wav key=59 transpose=1 sample=b4.wav key=60 transpose=1 Note that all of the above assumes the instrument is sampled chromatically; for instruments which are sampled at wholetone intervals or diatonically, transposition by at least a whole step will be necessary to avoid using the same samples for a note. Instruments which are sampled every minor third will need an interval of at least a minor third etc. Unison By Transposition If we put both the original and transposed samples in the same SFZ file, each MIDI note will trigger two regions, and we now will have the sound of an ensemble which is twice as large as what was actually sampled. sample=c4.wav key=48 sample=db4.wav key=49 sample=d4.wav key=50 sample=eb4.wav key=51 sample=e4.wav key=52 sample=f4.wav key=53 sample=gb4.wav key=54 sample=g4.wav key=55 sample=ab4.wav key=56 sample=a4.wav key=57 sample=bb4.wav key=58 sample=b4.wav key=59 sample=c5.wav key=60 transpose=-1 sample=db4.wav key=48 sample=d4.wav key=49 sample=eb4.wav key=50 sample=e4.wav key=51 sample=f4.wav key=52 sample=gb4.wav key=53 sample=g4.wav key=54 sample=ab4.wav key=55 sample=a4.wav key=56 sample=bb4.wav key=57 sample=b4.wav key=58 sample=c5.wav key=59 sample=b4.wav key=60 transpose=1 Unison By Round Robin For cases where the goal is to emulate overdubbed copies of the same instrument with the same timbre, rather than different instruments with different timbres, it's still necessary to avoid triggering the same samples. For example, is how guitar multitracking is typically emulated. This approach also works for instruments which are not pitched but it makes sense to layer them, for example handclaps. In such cases, unison can be implemented by using different round robin samples for each simultaneously playing sample. Using one note with four round robins as an example: seq_length=4 key=48 sample=c4_rr1.wav seq_position=1 sample=c4_rr2.wav seq_position=2 sample=c4_rr3.wav seq_position=3 sample=c4_rr4.wav seq_position=4 We can create two by offsetting the round robins like this: seq_length=4 key=48 sample=c4_rr1.wav seq_position=1 sample=c4_rr2.wav seq_position=2 sample=c4_rr3.wav seq_position=3 sample=c4_rr4.wav seq_position=4 seq_length=4 key=48 sample=c4_rr1.wav seq_position=4 sample=c4_rr2.wav seq_position=1 sample=c4_rr3.wav seq_position=2 sample=c4_rr4.wav seq_position=3 The group headers aren't necessary and everything could be under one group, but for organizational purposes, they can make things easier. Or three, or a maximum of four: seq_length=4 key=48 sample=c4_rr1.wav seq_position=1 sample=c4_rr2.wav seq_position=2 sample=c4_rr3.wav seq_position=3 sample=c4_rr4.wav seq_position=4 seq_length=4 key=48 sample=c4_rr1.wav seq_position=4 sample=c4_rr2.wav seq_position=1 sample=c4_rr3.wav seq_position=2 sample=c4_rr4.wav seq_position=3 seq_length=4 key=48 sample=c4_rr1.wav seq_position=3 sample=c4_rr2.wav seq_position=4 sample=c4_rr3.wav seq_position=1 sample=c4_rr4.wav seq_position=2 seq_length=4 key=48 sample=c4_rr1.wav seq_position=2 sample=c4_rr2.wav seq_position=3 sample=c4_rr3.wav seq_position=4 sample=c4_rr4.wav seq_position=1 Note that this will not work well with random round robins, as it's possible that the same sample will be randomly selected for multiple regions. Width And Detune Multitracked guitars will often be spread in stereo, as will unison voices in synthesizers etc. Spreading the above quad-tracked guitar in stereo is simple: seq_length=4 key=48 pan=-100 sample=c4_rr1.wav seq_position=1 sample=c4_rr2.wav seq_position=2 sample=c4_rr3.wav seq_position=3 sample=c4_rr4.wav seq_position=4 seq_length=4 key=48 pan=100 sample=c4_rr1.wav seq_position=4 sample=c4_rr2.wav seq_position=1 sample=c4_rr3.wav seq_position=2 sample=c4_rr4.wav seq_position=3 seq_length=4 key=48 pan=-50 sample=c4_rr1.wav seq_position=3 sample=c4_rr2.wav seq_position=4 sample=c4_rr3.wav seq_position=1 sample=c4_rr4.wav seq_position=2 seq_length=4 key=48 pan=50 sample=c4_rr1.wav seq_position=2 sample=c4_rr2.wav seq_position=3 sample=c4_rr3.wav seq_position=4 sample=c4_rr4.wav seq_position=1 It's also possible to apply slight detuning to each voice. That's probably not common with guitars, and unnecessary with section recordings where natural tuning differences will already be captured in the recordings, but it is very common in synthesizers, and can also be helpful when trying to turn solo instrument samples into a small section. Detune can even be used by itself to create multiple voices, and this is an especially viable approach for synthesizers. The amount of detune, as well as width, can be modulated. Here is an example of a saw oscillator with seven voices. sample=*saw pitch_oncc100=20 pan_oncc101=100 sample=*saw pitch_oncc100=-20 pan_oncc101=-100 sample=*saw pitch_oncc100=30 pan_oncc101=67 sample=*saw pitch_oncc100=-30 pan_oncc101=-67 sample=*saw pitch_oncc100=40 pan_oncc101=33 sample=*saw pitch_oncc100=-40 pan_oncc101=-33 sample=*saw Legato When self-muting is implemented, each set of unison samples will need to have its own polyphony groups, same as would be needed with multiple microphone positions. If there are true legato samples, that adds considerable complexity to the transposition trick. The below steps are not a universal set of instructions, but have worked successfully for at least one instrument. Create an extended-range map extending the range by the largest transposition amount in the direction opposite of the transposition. For example, if there are four transposed voices and are to be transposed down by a half-step, a full step, a minor third and a major third, add a major third of range to the top of the extended map. See the range extension tutorial for details. Make copies of this extended map to create the to-be-transposed maps. In each map, add the aomount of shift for the particular map (for example -1) to lokey, hikey and sw_previous. Delete any regions with lokey or hikey above or below the final desired range, which might be both at the top and bottom of a map. Delete any regions with sw_previous above or below the final desired range. This isn't strictly necessary as those regions \"should\" never be played, but will reduce parsing time and prevent weirdness when a note slightly outside the range is held by mistake and a note inside the range is pressed. Humanization When trying to emulate the sound of a larger section of instruments, especially when trying to turn a solo instrument into an emulated section, it can be useful to create small differences between each voice, especially when vibrato and legato are also emulated. This is probably not that important with sampled ensembles, such as emulating second violins, but with solo instruments it becomes crucial. Without independent per-voice humanization, emulated vibrato and legato can sound more like a solo instrument run through a chorus or other doubling effect, rather than separate performances. Aspects of the sound which can be humanized or randomized include timing, smoothing, phase, pitch, vibrato speed and vibrato depth. Here is a rather lengthy example, adapted from a real instrument, where each voice has separate pan settings for stereo spread and separate polyphony groups - these are basic features of unison, and not related to humanization, of course. The humanizing differences between the voices are differences in bend smoothing, in maximum vibrato depth, in the initial phase of the vibrato humanization LFOs, and in the fade times of the legato regions. The shallower vibrato and slower legato of the transposed regions emulate less confident, more hesitant players. //Basic global stuff shared by all voices ampeg_release=0.25 ampeg_attack_oncc106=1 ampeg_release_oncc107=1.25 off_mode=normal bend_down=-1200 bend_up=1200 //Pitch bend smoothing is set separately for each voice amplitude_oncc100=100 amplitude_smoothcc1=100 locc100=1 amp_veltrack=0 loop_mode=loop_continuous //Vibrato //Pitch LFO depth is set separately for each voice lfo01_freq=2 //Any slower than this sounds really lousy lfo01_freq_oncc112=6 //8 Hz is about as fast as vibrato on cello can go lfo01_delay_oncc115=0.500 lfo01_fade_oncc116=0.500 //This LFO also does tremolo lfo01_volume_oncc21=1 //Not much - just a subtle effect on volume eq1_freq=2200 //EQ band for vibrato eq1_bw=2 lfo01_eq1gain_oncc21=3 //Again, pretty subtle lfo02_wave=1 //Second LFO to make things wobblier //Initial phase is set separately for each voice lfo02_phase_oncc131=0.7 //Phase affected by velocity, to pseudo-randomize while keeping both mics' LFOs in sync lfo02_freq=0.01 //Basically no movement at very slow speeds, just randomization lfo02_freq_oncc117=1 //Max rate is not very high, so it doesn't sound too obvious lfo02_pitch_oncc117=6 //Slight pitch wobbliness lfo02_freq_lfo01_oncc117=0.2 lfo02_freq_lfo01_oncc112=0.8 //Affect the rate of the other LFO for unsteady vibrato lfo03_wave=1 //And a third LFO for secondhand complex wobbliness //Initial phase is set separately for each voice lfo03_phase_oncc131=0.479 //Different phase response to velocity than the second LFO lfo03_freq=0.5 lfo03_freq_oncc117=-0.4 lfo03_freq_lfo2_oncc117=1 lfo03_pitch_oncc117=-4 //Central voice bend_smooth=80 lfo01_pitch_oncc21=29 lfo02_phase=0 lfo03_phase=0.4 group=1 off_by=1 //Sustains legato trigger=first #include \"mappings/ord_sus_map.sfz\" trigger=legato offset=5000 offset_random=500 ampeg_attack=0.5 ampeg_vel2attack=-0.35 #include \"mappings/ord_sus_map.sfz\" //Left voice using sample maps transposed by a half-step //Pan control not used in the central voice pan_oncc101=-100 //Values different than the central voice, for humanization purposes bend_smooth=91 lfo01_pitch_oncc21=17 lfo02_phase=0.05 lfo03_phase=0.3 group=2 off_by=2 //Sustains legato trigger=first #include \"mappings/t1/ord_sus_map.sfz\" trigger=legato offset=5000 offset_random=500 //Values different than the central voice, for humanization purposes ampeg_attack=0.55 ampeg_vel2attack=-0.4 #include \"mappings/t1/ord_sus_map.sfz\" //Right voice using sample maps transposed by a whole step //Pan control not used in the central voice pan_oncc101=100 //Values different than the central voice, for humanization purposes bend_smooth=87 lfo01_pitch_oncc21=19 lfo02_phase=0.02 lfo03_phase=0.28 group=3 off_by=3 //Sustains legato trigger=first #include \"mappings/t2/ord_sus_map.sfz\" trigger=legato offset=5000 offset_random=500 //Values different than the central voice, for humanization purposes ampeg_attack=0.58 ampeg_vel2attack=-0.43 #include \"mappings/t2/ord_sus_map.sfz\" Releases Implementing release samples with unison requires a little extra effort. It's easiest to simply implement releases for the center voice only, but even then it's necessary to be careful to avoid triggering too many release samples. At least in ARIA and Sforzando, a note-on event which triggers multiple regions (for example a multimic instrument, or one with simulated unison) will have multiple corresponding regions for the release region, causing the release region to be triggered multiple times. With seven mics and a separate release for each mic, this would mean a key release would trigger a total of 49 samples if not controlled with note_polyphony. However, setting note_polyphony=1 and giving each mic a different group number solves this. There's no need tu use off_by with the release groups. An example with releases only for the center voice: //Basic global stuff shared by all voices ampeg_release=0.25 off_mode=normal //Center voice //Sustains #include \"mappings/ord_sus_map.sfz\" //Releases trigger=release group=501 note_polyphony=1 #include \"mappings/ord_rel_map.sfz\" //Left voice using sample maps transposed by a half-step //Pan control not used in the central voice pan_oncc101=-100 //Sustains #include \"mappings/t1/ord_sus_map.sfz\" //Right voice using sample maps transposed by a whole step //Pan control not used in the central voice pan_oncc101=100 //Sustains #include \"mappings/t2/ord_sus_map.sfz\" With releases for all voices, just use a different group number for each voice's releases, like this example: //Basic global stuff shared by all voices ampeg_release=0.25 off_mode=normal //Center voice //Sustains #include \"mappings/ord_sus_map.sfz\" //Releases trigger=release group=501 note_polyphony=1 #include \"mappings/ord_rel_map.sfz\" //Left voice using sample maps transposed by a half-step //Pan control not used in the central voice pan_oncc101=-100 //Sustains #include \"mappings/t1/ord_sus_map.sfz\" //Releases trigger=release group=502 note_polyphony=1 #include \"mappings/t1/ord_rel_map.sfz\" //Right voice using sample maps transposed by a whole step //Pan control not used in the central voice pan_oncc101=100 //Sustains #include \"mappings/t2/ord_sus_map.sfz\" //Releases trigger=release group=503 note_polyphony=1 #include \"mappings/t2/ord_rel_map.sfz\" When using releases with round robins, it can be tricky to make the release sample round robin counter advance correctly. When there are 2 \"matching\" samples playing, ARIA appears to advance the counter for the releases by 2, and if there are 4 release round robins, only 2 of them will actually be used. One workaround for that is triggering an extra region of silence to make the round robin counter advance by 3, but this will only work if the number of regions is consistent and predictable. With instruments that have release samples with a number of microphone positions or organ stops, any of which could be on or off, the total number of matching regions is very difficult to assess, and it's far easier to use lorand/hirand to select the release samples instead. Round Robin Neighbor Borrowing Although not a method of achieving unison, round robin neighbor borrowing is another use of transposition, which likewise milks more out of a limited set of samples - specifically, emulating round robins where there are none, or increasing the amonut of available round robins. This works with either sequential round robin and random round robin approaches, or both at once. Let's use sequential round robins for this example, with a very small note range and three round robins sampled. seq_length=3 seq_position=1 sample=c5_rr1.wav key=60 sample=c#5_rr1.wav key=61 sample=d5_rr1.wav key=62 seq_position=2 sample=c5_rr2.wav key=60 sample=c#5_rr2.wav key=61 sample=d5_rr2.wav key=62 seq_position=3 sample=c5_rr3.wav key=60 sample=c#5_rr3.wav key=61 sample=d5_rr3.wav key=62 We can double the amount of round robins by using a transposed sample from a neighboring note for every other note in the sequence. This means every other note repeat has a slightly different timbre, but it should sound more acceptable than using untransposed notes for the first three sequence positions and transposed notes for positions four through six. So, we increase the sequence length to six, and alternate between transposed and untransposed samples like this: seq_length=6 seq_position=1 sample=c5_rr1.wav key=60 sample=c#5_rr1.wav key=61 sample=d5_rr1.wav key=62 seq_position=2 sample=c#5_rr1.wav key=60 transpose=-1 sample=d5_rr1.wav key=61 transpose=-1 sample=c#5_rr1.wav key=62 transpose=1 seq_position=3 sample=c5_rr2.wav key=60 sample=c#5_rr2.wav key=61 sample=d5_rr2.wav key=62 seq_position=4 sample=c#5_rr2.wav key=60 transpose=-1 sample=d5_rr2.wav key=61 transpose=-1 sample=c#5_rr2.wav key=62 transpose=1 seq_position=5 sample=c5_rr3.wav key=60 sample=c#5_rr3.wav key=61 sample=d5_rr3.wav key=62 seq_position=6 sample=c#5_rr3.wav key=60 transpose=-1 sample=d5_rr3.wav key=61 transpose=-1 sample=c#5_rr3.wav key=62 transpose=1 It's also possible to triple the amount of round robins by borrowing neighbors in both upwards and downwards direction for each note (except the lowest and highest note in the range, of course). In general, transposing by more than a half-step is not a good idea, as the timbral differences grow larger with larger transposition, but with some instruments it can be possible to get away with it. If there are many dynamic layers available, it's also possible to borrow from nearby dynamic layers, especially in the case of drums.","title":"Unison"},{"location":"tutorials/unison/#transposition","text":"Let's say we have only one sampled violin section, and need to use both first and second violins. Using just one octave of range for simplicity, this is our first violins example: sample=c4.wav key=48 sample=db4.wav key=49 sample=d4.wav key=50 sample=eb4.wav key=51 sample=e4.wav key=52 sample=f4.wav key=53 sample=gb4.wav key=54 sample=g4.wav key=55 sample=ab4.wav key=56 sample=a4.wav key=57 sample=bb4.wav key=58 sample=b4.wav key=59 sample=c5.wav key=60 Using this for both first and second violins will result in two identical-sounding sections with the same timbre, but it's easily possible to use the same samples transposed, and get a different timbre. Instead of using the C4 sample to play C4, use the Db4 sample transposed down a half step to play C4. This can be done by using lokey, hikey and pitch_keycenter opcodes instead of just key. sample=c4.wav lokey=47 hikey=47 pitch_keycenter=48 sample=db4.wav lokey=48 hikey=48 pitch_keycenter=49 sample=d4.wav lokey=49 hikey=49 pitch_keycenter=50 sample=eb4.wav lokey=50 hikey=50 pitch_keycenter=51 sample=e4.wav lokey=51 hikey=51 pitch_keycenter=52 sample=f4.wav lokey=52 hikey=52 pitch_keycenter=53 sample=gb4.wav lokey=53 hikey=53 pitch_keycenter=54 sample=g4.wav lokey=54 hikey=54 pitch_keycenter=55 sample=ab4.wav lokey=55 hikey=55 pitch_keycenter=56 sample=a4.wav lokey=56 hikey=56 pitch_keycenter=57 sample=bb4.wav lokey=57 hikey=57 pitch_keycenter=58 sample=b4.wav lokey=58 hikey=58 pitch_keycenter=59 sample=c5.wav lokey=59 hikey=59 pitch_keycenter=60 Howerver, in most cases it's easier to use the key and transpose opcodes instead, and set the transpose amount for all the transposed regions at once. transpose=-1 sample=c4.wav key=47 sample=db4.wav key=48 sample=d4.wav key=49 sample=eb4.wav key=50 sample=e4.wav key=51 sample=f4.wav key=52 sample=gb4.wav key=53 sample=g4.wav key=54 sample=ab4.wav key=55 sample=a4.wav key=56 sample=bb4.wav key=57 sample=b4.wav key=58 sample=c5.wav key=59 This still requires changing the key opcode for every region, however. Doing this editing manually on large sample sets would be time-consuming, but the old tool sfzed allows easily adding, subtracting or multiplying current parameter values to regions, which becomes very useful when doing this with thousands of samples. This shifts the entire range of the instrument down by a half-step, though. In order to preserve the correct range, we can remove the transposed notes which got moved below the lowest pitch the instrument is capable of. That's easy. The top range is more tricky - if we extend the highest note to cover its original pitch as well, but then the same sample would be used for the same pitch by both sections. So, we can instead use the next-to-highest note, transposed up. This might not sound very consistent with the rest, but under these limitations, it can be a reasonable compromise. transpose=-1 sample=db4.wav key=48 sample=d4.wav key=49 sample=eb4.wav key=50 sample=e4.wav key=51 sample=f4.wav key=52 sample=gb4.wav key=53 sample=g4.wav key=54 sample=ab4.wav key=55 sample=a4.wav key=56 sample=bb4.wav key=57 sample=b4.wav key=58 sample=c5.wav key=59 sample=b4.wav key=60 transpose=1","title":"Transposition"},{"location":"tutorials/unison/#transposition-values","text":"In general, transposing downwards will result in a warmer sound, and transposing upwards will make the sound brighter and thinner. Transposing by more than a half step can be a good idea. In general, transposing by a minor third is a common way to create a big change in timbre. Transposing by much more than a minor third doesn't seem common outside of sound design not intended to be a realistic instrument emulation. Transposing down by a minor third while preserving the range in our example, and filling in the lost top of the range by transposing upwards might look like this: transpose=-3 sample=eb4.wav key=48 sample=e4.wav key=49 sample=f4.wav key=50 sample=gb4.wav key=51 sample=g4.wav key=52 sample=ab4.wav key=53 sample=a4.wav key=54 sample=bb4.wav key=55 sample=b4.wav key=56 sample=c5.wav key=57 sample=a4.wav key=58 transpose=1 sample=bb4.wav key=59 transpose=1 sample=b4.wav key=60 transpose=1 Note that all of the above assumes the instrument is sampled chromatically; for instruments which are sampled at wholetone intervals or diatonically, transposition by at least a whole step will be necessary to avoid using the same samples for a note. Instruments which are sampled every minor third will need an interval of at least a minor third etc.","title":"Transposition Values"},{"location":"tutorials/unison/#unison-by-transposition","text":"If we put both the original and transposed samples in the same SFZ file, each MIDI note will trigger two regions, and we now will have the sound of an ensemble which is twice as large as what was actually sampled. sample=c4.wav key=48 sample=db4.wav key=49 sample=d4.wav key=50 sample=eb4.wav key=51 sample=e4.wav key=52 sample=f4.wav key=53 sample=gb4.wav key=54 sample=g4.wav key=55 sample=ab4.wav key=56 sample=a4.wav key=57 sample=bb4.wav key=58 sample=b4.wav key=59 sample=c5.wav key=60 transpose=-1 sample=db4.wav key=48 sample=d4.wav key=49 sample=eb4.wav key=50 sample=e4.wav key=51 sample=f4.wav key=52 sample=gb4.wav key=53 sample=g4.wav key=54 sample=ab4.wav key=55 sample=a4.wav key=56 sample=bb4.wav key=57 sample=b4.wav key=58 sample=c5.wav key=59 sample=b4.wav key=60 transpose=1","title":"Unison By Transposition"},{"location":"tutorials/unison/#unison-by-round-robin","text":"For cases where the goal is to emulate overdubbed copies of the same instrument with the same timbre, rather than different instruments with different timbres, it's still necessary to avoid triggering the same samples. For example, is how guitar multitracking is typically emulated. This approach also works for instruments which are not pitched but it makes sense to layer them, for example handclaps. In such cases, unison can be implemented by using different round robin samples for each simultaneously playing sample. Using one note with four round robins as an example: seq_length=4 key=48 sample=c4_rr1.wav seq_position=1 sample=c4_rr2.wav seq_position=2 sample=c4_rr3.wav seq_position=3 sample=c4_rr4.wav seq_position=4 We can create two by offsetting the round robins like this: seq_length=4 key=48 sample=c4_rr1.wav seq_position=1 sample=c4_rr2.wav seq_position=2 sample=c4_rr3.wav seq_position=3 sample=c4_rr4.wav seq_position=4 seq_length=4 key=48 sample=c4_rr1.wav seq_position=4 sample=c4_rr2.wav seq_position=1 sample=c4_rr3.wav seq_position=2 sample=c4_rr4.wav seq_position=3 The group headers aren't necessary and everything could be under one group, but for organizational purposes, they can make things easier. Or three, or a maximum of four: seq_length=4 key=48 sample=c4_rr1.wav seq_position=1 sample=c4_rr2.wav seq_position=2 sample=c4_rr3.wav seq_position=3 sample=c4_rr4.wav seq_position=4 seq_length=4 key=48 sample=c4_rr1.wav seq_position=4 sample=c4_rr2.wav seq_position=1 sample=c4_rr3.wav seq_position=2 sample=c4_rr4.wav seq_position=3 seq_length=4 key=48 sample=c4_rr1.wav seq_position=3 sample=c4_rr2.wav seq_position=4 sample=c4_rr3.wav seq_position=1 sample=c4_rr4.wav seq_position=2 seq_length=4 key=48 sample=c4_rr1.wav seq_position=2 sample=c4_rr2.wav seq_position=3 sample=c4_rr3.wav seq_position=4 sample=c4_rr4.wav seq_position=1 Note that this will not work well with random round robins, as it's possible that the same sample will be randomly selected for multiple regions.","title":"Unison By Round Robin"},{"location":"tutorials/unison/#width-and-detune","text":"Multitracked guitars will often be spread in stereo, as will unison voices in synthesizers etc. Spreading the above quad-tracked guitar in stereo is simple: seq_length=4 key=48 pan=-100 sample=c4_rr1.wav seq_position=1 sample=c4_rr2.wav seq_position=2 sample=c4_rr3.wav seq_position=3 sample=c4_rr4.wav seq_position=4 seq_length=4 key=48 pan=100 sample=c4_rr1.wav seq_position=4 sample=c4_rr2.wav seq_position=1 sample=c4_rr3.wav seq_position=2 sample=c4_rr4.wav seq_position=3 seq_length=4 key=48 pan=-50 sample=c4_rr1.wav seq_position=3 sample=c4_rr2.wav seq_position=4 sample=c4_rr3.wav seq_position=1 sample=c4_rr4.wav seq_position=2 seq_length=4 key=48 pan=50 sample=c4_rr1.wav seq_position=2 sample=c4_rr2.wav seq_position=3 sample=c4_rr3.wav seq_position=4 sample=c4_rr4.wav seq_position=1 It's also possible to apply slight detuning to each voice. That's probably not common with guitars, and unnecessary with section recordings where natural tuning differences will already be captured in the recordings, but it is very common in synthesizers, and can also be helpful when trying to turn solo instrument samples into a small section. Detune can even be used by itself to create multiple voices, and this is an especially viable approach for synthesizers. The amount of detune, as well as width, can be modulated. Here is an example of a saw oscillator with seven voices. sample=*saw pitch_oncc100=20 pan_oncc101=100 sample=*saw pitch_oncc100=-20 pan_oncc101=-100 sample=*saw pitch_oncc100=30 pan_oncc101=67 sample=*saw pitch_oncc100=-30 pan_oncc101=-67 sample=*saw pitch_oncc100=40 pan_oncc101=33 sample=*saw pitch_oncc100=-40 pan_oncc101=-33 sample=*saw","title":"Width And Detune"},{"location":"tutorials/unison/#legato","text":"When self-muting is implemented, each set of unison samples will need to have its own polyphony groups, same as would be needed with multiple microphone positions. If there are true legato samples, that adds considerable complexity to the transposition trick. The below steps are not a universal set of instructions, but have worked successfully for at least one instrument. Create an extended-range map extending the range by the largest transposition amount in the direction opposite of the transposition. For example, if there are four transposed voices and are to be transposed down by a half-step, a full step, a minor third and a major third, add a major third of range to the top of the extended map. See the range extension tutorial for details. Make copies of this extended map to create the to-be-transposed maps. In each map, add the aomount of shift for the particular map (for example -1) to lokey, hikey and sw_previous. Delete any regions with lokey or hikey above or below the final desired range, which might be both at the top and bottom of a map. Delete any regions with sw_previous above or below the final desired range. This isn't strictly necessary as those regions \"should\" never be played, but will reduce parsing time and prevent weirdness when a note slightly outside the range is held by mistake and a note inside the range is pressed.","title":"Legato"},{"location":"tutorials/unison/#humanization","text":"When trying to emulate the sound of a larger section of instruments, especially when trying to turn a solo instrument into an emulated section, it can be useful to create small differences between each voice, especially when vibrato and legato are also emulated. This is probably not that important with sampled ensembles, such as emulating second violins, but with solo instruments it becomes crucial. Without independent per-voice humanization, emulated vibrato and legato can sound more like a solo instrument run through a chorus or other doubling effect, rather than separate performances. Aspects of the sound which can be humanized or randomized include timing, smoothing, phase, pitch, vibrato speed and vibrato depth. Here is a rather lengthy example, adapted from a real instrument, where each voice has separate pan settings for stereo spread and separate polyphony groups - these are basic features of unison, and not related to humanization, of course. The humanizing differences between the voices are differences in bend smoothing, in maximum vibrato depth, in the initial phase of the vibrato humanization LFOs, and in the fade times of the legato regions. The shallower vibrato and slower legato of the transposed regions emulate less confident, more hesitant players. //Basic global stuff shared by all voices ampeg_release=0.25 ampeg_attack_oncc106=1 ampeg_release_oncc107=1.25 off_mode=normal bend_down=-1200 bend_up=1200 //Pitch bend smoothing is set separately for each voice amplitude_oncc100=100 amplitude_smoothcc1=100 locc100=1 amp_veltrack=0 loop_mode=loop_continuous //Vibrato //Pitch LFO depth is set separately for each voice lfo01_freq=2 //Any slower than this sounds really lousy lfo01_freq_oncc112=6 //8 Hz is about as fast as vibrato on cello can go lfo01_delay_oncc115=0.500 lfo01_fade_oncc116=0.500 //This LFO also does tremolo lfo01_volume_oncc21=1 //Not much - just a subtle effect on volume eq1_freq=2200 //EQ band for vibrato eq1_bw=2 lfo01_eq1gain_oncc21=3 //Again, pretty subtle lfo02_wave=1 //Second LFO to make things wobblier //Initial phase is set separately for each voice lfo02_phase_oncc131=0.7 //Phase affected by velocity, to pseudo-randomize while keeping both mics' LFOs in sync lfo02_freq=0.01 //Basically no movement at very slow speeds, just randomization lfo02_freq_oncc117=1 //Max rate is not very high, so it doesn't sound too obvious lfo02_pitch_oncc117=6 //Slight pitch wobbliness lfo02_freq_lfo01_oncc117=0.2 lfo02_freq_lfo01_oncc112=0.8 //Affect the rate of the other LFO for unsteady vibrato lfo03_wave=1 //And a third LFO for secondhand complex wobbliness //Initial phase is set separately for each voice lfo03_phase_oncc131=0.479 //Different phase response to velocity than the second LFO lfo03_freq=0.5 lfo03_freq_oncc117=-0.4 lfo03_freq_lfo2_oncc117=1 lfo03_pitch_oncc117=-4 //Central voice bend_smooth=80 lfo01_pitch_oncc21=29 lfo02_phase=0 lfo03_phase=0.4 group=1 off_by=1 //Sustains legato trigger=first #include \"mappings/ord_sus_map.sfz\" trigger=legato offset=5000 offset_random=500 ampeg_attack=0.5 ampeg_vel2attack=-0.35 #include \"mappings/ord_sus_map.sfz\" //Left voice using sample maps transposed by a half-step //Pan control not used in the central voice pan_oncc101=-100 //Values different than the central voice, for humanization purposes bend_smooth=91 lfo01_pitch_oncc21=17 lfo02_phase=0.05 lfo03_phase=0.3 group=2 off_by=2 //Sustains legato trigger=first #include \"mappings/t1/ord_sus_map.sfz\" trigger=legato offset=5000 offset_random=500 //Values different than the central voice, for humanization purposes ampeg_attack=0.55 ampeg_vel2attack=-0.4 #include \"mappings/t1/ord_sus_map.sfz\" //Right voice using sample maps transposed by a whole step //Pan control not used in the central voice pan_oncc101=100 //Values different than the central voice, for humanization purposes bend_smooth=87 lfo01_pitch_oncc21=19 lfo02_phase=0.02 lfo03_phase=0.28 group=3 off_by=3 //Sustains legato trigger=first #include \"mappings/t2/ord_sus_map.sfz\" trigger=legato offset=5000 offset_random=500 //Values different than the central voice, for humanization purposes ampeg_attack=0.58 ampeg_vel2attack=-0.43 #include \"mappings/t2/ord_sus_map.sfz\"","title":"Humanization"},{"location":"tutorials/unison/#releases","text":"Implementing release samples with unison requires a little extra effort. It's easiest to simply implement releases for the center voice only, but even then it's necessary to be careful to avoid triggering too many release samples. At least in ARIA and Sforzando, a note-on event which triggers multiple regions (for example a multimic instrument, or one with simulated unison) will have multiple corresponding regions for the release region, causing the release region to be triggered multiple times. With seven mics and a separate release for each mic, this would mean a key release would trigger a total of 49 samples if not controlled with note_polyphony. However, setting note_polyphony=1 and giving each mic a different group number solves this. There's no need tu use off_by with the release groups. An example with releases only for the center voice: //Basic global stuff shared by all voices ampeg_release=0.25 off_mode=normal //Center voice //Sustains #include \"mappings/ord_sus_map.sfz\" //Releases trigger=release group=501 note_polyphony=1 #include \"mappings/ord_rel_map.sfz\" //Left voice using sample maps transposed by a half-step //Pan control not used in the central voice pan_oncc101=-100 //Sustains #include \"mappings/t1/ord_sus_map.sfz\" //Right voice using sample maps transposed by a whole step //Pan control not used in the central voice pan_oncc101=100 //Sustains #include \"mappings/t2/ord_sus_map.sfz\" With releases for all voices, just use a different group number for each voice's releases, like this example: //Basic global stuff shared by all voices ampeg_release=0.25 off_mode=normal //Center voice //Sustains #include \"mappings/ord_sus_map.sfz\" //Releases trigger=release group=501 note_polyphony=1 #include \"mappings/ord_rel_map.sfz\" //Left voice using sample maps transposed by a half-step //Pan control not used in the central voice pan_oncc101=-100 //Sustains #include \"mappings/t1/ord_sus_map.sfz\" //Releases trigger=release group=502 note_polyphony=1 #include \"mappings/t1/ord_rel_map.sfz\" //Right voice using sample maps transposed by a whole step //Pan control not used in the central voice pan_oncc101=100 //Sustains #include \"mappings/t2/ord_sus_map.sfz\" //Releases trigger=release group=503 note_polyphony=1 #include \"mappings/t2/ord_rel_map.sfz\" When using releases with round robins, it can be tricky to make the release sample round robin counter advance correctly. When there are 2 \"matching\" samples playing, ARIA appears to advance the counter for the releases by 2, and if there are 4 release round robins, only 2 of them will actually be used. One workaround for that is triggering an extra region of silence to make the round robin counter advance by 3, but this will only work if the number of regions is consistent and predictable. With instruments that have release samples with a number of microphone positions or organ stops, any of which could be on or off, the total number of matching regions is very difficult to assess, and it's far easier to use lorand/hirand to select the release samples instead.","title":"Releases"},{"location":"tutorials/unison/#round-robin-neighbor-borrowing","text":"Although not a method of achieving unison, round robin neighbor borrowing is another use of transposition, which likewise milks more out of a limited set of samples - specifically, emulating round robins where there are none, or increasing the amonut of available round robins. This works with either sequential round robin and random round robin approaches, or both at once. Let's use sequential round robins for this example, with a very small note range and three round robins sampled. seq_length=3 seq_position=1 sample=c5_rr1.wav key=60 sample=c#5_rr1.wav key=61 sample=d5_rr1.wav key=62 seq_position=2 sample=c5_rr2.wav key=60 sample=c#5_rr2.wav key=61 sample=d5_rr2.wav key=62 seq_position=3 sample=c5_rr3.wav key=60 sample=c#5_rr3.wav key=61 sample=d5_rr3.wav key=62 We can double the amount of round robins by using a transposed sample from a neighboring note for every other note in the sequence. This means every other note repeat has a slightly different timbre, but it should sound more acceptable than using untransposed notes for the first three sequence positions and transposed notes for positions four through six. So, we increase the sequence length to six, and alternate between transposed and untransposed samples like this: seq_length=6 seq_position=1 sample=c5_rr1.wav key=60 sample=c#5_rr1.wav key=61 sample=d5_rr1.wav key=62 seq_position=2 sample=c#5_rr1.wav key=60 transpose=-1 sample=d5_rr1.wav key=61 transpose=-1 sample=c#5_rr1.wav key=62 transpose=1 seq_position=3 sample=c5_rr2.wav key=60 sample=c#5_rr2.wav key=61 sample=d5_rr2.wav key=62 seq_position=4 sample=c#5_rr2.wav key=60 transpose=-1 sample=d5_rr2.wav key=61 transpose=-1 sample=c#5_rr2.wav key=62 transpose=1 seq_position=5 sample=c5_rr3.wav key=60 sample=c#5_rr3.wav key=61 sample=d5_rr3.wav key=62 seq_position=6 sample=c#5_rr3.wav key=60 transpose=-1 sample=d5_rr3.wav key=61 transpose=-1 sample=c#5_rr3.wav key=62 transpose=1 It's also possible to triple the amount of round robins by borrowing neighbors in both upwards and downwards direction for each note (except the lowest and highest note in the range, of course). In general, transposing by more than a half-step is not a good idea, as the timbral differences grow larger with larger transposition, but with some instruments it can be possible to get away with it. If there are many dynamic layers available, it's also possible to borrow from nearby dynamic layers, especially in the case of drums.","title":"Round Robin Neighbor Borrowing"},{"location":"tutorials/vibrato/","text":"Basic LFO vibrato Emulating vibrato for solo instruments or voices with LFOs is not difficult. The challenges are understanding the key aspects of vibrato on the real instrument, and keeping the number of parameters from growing too large to be easy to use. The examples here use SFZ 2 spec numbered LFOs , rather than the dedicated pitch, volume and filter LFOs and envelopes of SFZ 1. A lot of this can be done under the SFZ 1 specification as well, but there are some limitations. The most basic, typical vibrato is pitch vibrato - just an LFO modulating pitch. Making the minimum and maximum rates and depths that would be used by players in real life is important, of course. The numbers here are examples which would be decent for bowed strings - it has a rate of 2-10 Hz and a maximum depth of 35 cents. Wider and slower are certainly possible on real instruments, but isn't commonly used in performance. lfo01_pitch_oncc111=35 lfo01_freq=2 lfo01_freq_oncc112=8 Additional parameters In real life, however, players and singers will often start a note without vibrato, and add vibrato a fraction of a second later. This is where modulating the LFO delay parameter becomes useful, and possibly LFO fade as well. Delay seems like enough for most wind instruments and vocals, but having both delay and fade seems effective with bowed strings. lfo01_pitch_oncc111=35 lfo01_freq=2 lfo01_freq_oncc112=8 lfo01_delay_oncc115=0.500 lfo01_fade_oncc116=0.500 Vibrato on many instruments doesn't just affect pitch; on bowed strings, it seems to have a subtle effect on volume and timbre as well. We can have the same MIDI CC parameter control how much the vibrato LFO affects pitch, volume, and an EQ band, with the latter two being quite subtle. This is a good a time as any to note that not all vibrato is equal - it's not really practical to add vibrato to the lowest note playable on a cello, for example, or to a natural harmonic. With pizzicato, vibrato is possible, but probably should not affect the EQ band, and either only affect pitch or pitch plus a subtle effect on volume. The below will work reasonably for most bowed notes, however. lfo01_pitch_oncc111=35 lfo01_volume_oncc111=1 lfo01_freq=2 lfo01_freq_oncc112=8 lfo01_delay_oncc115=0.500 lfo01_fade_oncc116=0.500 eq1_freq=2000 eq1_bw=2 lfo01_eq1gain_oncc111=2 lfo01_eq1freq_oncc111=500 Humanization Vibrato can also be humanized, by varying the rate of the vibrato LFO. This can be done by modulating the rate of the vibrato LFO with another LFO. The ARIA sample & hold waveform can be used here, and the modulation depth controlled by MIDI CC, so when that's at zero, no humanization happens. lfo02_freq=1 lfo02_wave=12 //Sample & hold LFO waveform number lfo02_freq_lfo01_oncc117=1 Or, to stay in the SFZ 2 spec and not use ARIA extensions, a sine wave with randomized starting phase will also work: lfo02_freq=1 lfo02_phase_oncc135=1 lfo02_freq_lfo01_oncc117=1 However, when playing multiple layers, such as sustain samples with crossfaded dynamics or multiple mic positions, this can cause each layer's vibrato to drift out of sync and sound like separate instruments. This is generally not desirable, so it is possible to pseudo-randomize the starting phase using a non-random CC, such as velocity (which is often otherwise unused in sustain sounds with crossfaded dynamics). If the SFZ player can have a global sample and hold LFO which does not retrigger for each note, this would also be a solution, though ARIA does not allow this. lfo02_freq=1 lfo02_phase_oncc132=0.7 lfo02_freq_lfo01_oncc117=1 This will vary the rate of the vibrato, but the depth will be constant. It is possible to have an LFO modulate the depth of another LFO, measured as a percentage, for example 120% for 20% variation: lfo02_freq=1 lfo02_phase_oncc132=0.7 lfo02_freq_lfo01_oncc117=1 lfo02_depth_lfo01=120 For additional complexity, it's also possible to have the random LFO itself modulate pitch, which will create some pitch drift, and have more than two LFOs involved. Here is a fairly sophisticated example. //Vibrato lfo01_pitch_oncc21=29 //Vibrato LFO lfo01_freq=2 //Any slower than this sounds really lousy lfo01_freq_oncc112=6 //8 Hz is about as fast as vibrato on cello can go lfo01_delay_oncc115=0.500 lfo01_fade_oncc116=0.500 //This LFO also does tremolo lfo01_volume_oncc21=1 //Not much - just a subtle effect on volume eq1_freq=2200 //EQ band for vibrato eq1_bw=2 lfo01_eq1gain_oncc21=3 //Again, pretty subtle lfo02_wave=1 //Second LFO to make things wobblier lfo02_phase=0 lfo02_phase_oncc131=0.7 //Phase affected by velocity, to pseudo-randomize while keeping both mics' LFOs in sync lfo02_freq=0.01 //Basically no movement at very slow speeds, just randomization lfo02_freq_oncc117=1 //Max rate is not very high, so it doesn't sound too obvious lfo02_pitch_oncc117=6 //Slight pitch wobbliness lfo02_freq_lfo01_oncc117=1 //Affect the rate of the other LFO for unsteady vibrato lfo03_wave=1 //And a third LFO for secondhand complex wobbliness lfo03_phase=0.4 lfo03_phase_oncc131=0.479 //Different phase response to velocity than the second LFO lfo03_freq=0.5 lfo03_freq_oncc117=-0.4 lfo03_freq_lfo02_oncc117=1 lfo03_pitch_oncc117=-4 However, note that the depth modulation is fixed, and not modulated by cc117 like the frequency modulation is. This is because having a CC modulate the depth modulation does not appear to be implemented in ARIA. It is, however, possible to modulate the depth of a flex envelope with MIDI CC, and then have that envelope depth modulate the depth of the secondary LFO. This is, admittedly, very much a kludge, but it appears to work. lfo02_freq=1 lfo02_phase_oncc132=0.7 lfo02_freq_lfo01_oncc117=1 lfo02_depth_lfo01=120 eg1_level0_oncc117=1 eg1_level1_oncc117=1 eg1_depth_lfo02=100 However, when the depth of lfo02 is zero, this will effectively also make lfo01's depth zero, so there will be no vibrato at all unless cc117 is turned up. Getting around this requires another kludge, which is leaving lfo01 with fixed depth and creating yet another LFO for the variable part of the depth. //Vibrato lfo01_pitch_oncc21=29 //Vibrato LFO lfo01_freq=2 //Any slower than this sounds really lousy lfo01_freq_oncc112=6 //8 Hz is about as fast as vibrato on cello can go lfo01_delay_oncc115=0.500 lfo01_fade_oncc116=0.500 //This LFO also does tremolo lfo01_volume_oncc21=1 //Not much - just a subtle effect on volume eq1_freq=2200 //EQ band for vibrato eq1_bw=2 lfo01_eq1gain_oncc21=3 //Again, pretty subtle lfo02_pitch_oncc21=19 //Extra LFO for variable depth, shallower than main and pitch only lfo02_freq=2 //Same timing as first LFO lfo02_freq_oncc112=6 lfo02_delay_oncc115=0.500 lfo02_fade_oncc116=0.500 lfo03_wave=1 //Third LFO to make the flrst two LFOs wobblier lfo03_phase=0 lfo03_phase_oncc131=0.7 //Phase affected by velocity, to pseudo-randomize while keeping both mics' LFOs in sync lfo03_freq=0.01 //Basically no movement at very slow speeds, just randomization lfo03_freq_oncc117=1 //Max rate is not very high, so it doesn't sound too obvious lfo03_pitch=6 //Slight pitch wobbliness lfo03_freq_lfo01=1 lfo03_freq_lfo02=1 //Affect the rate of the vibrato LFOs for unsteady vibrato lfo04_wave=1 //And a fourth LFO for secondhand complex wobbliness lfo04_phase=0.4 lfo04_phase_oncc131=0.479 //Different phase response to velocity than the second LFO lfo04_freq=0.5 lfo04_freq_oncc117=-0.4 lfo04_freq_lfo03=1 lfo04_pitch=-4 lfo03_depth_lfo02=100 lfo04_depth_lfo02=100 eg1_level0_oncc117=1 eg1_level1_oncc117=1 eg1_depth_lfo03=100 eg1_depth_lfo04=100 Asymmetrical vibrato Something similar to the above will work fairly well for a range of strings and voices. However, there are cases where vibrato should only go in one direction - for example, bending guitar strings only moves the pitch upwards, while on saxophone it's possible to play vibrato centered around the pitch, but most of the time players will go only below the pitch. Let's use saxophone vibrato as an example. To keep it simple, let's just go back to a simple, non-humanized vibrato with only depth and rate paremeters. To have vibrato which will go below the main pitch is simple - the LFO phase can be set so the wave starts at the top, and the note tuned down by the vibrato depth amount. lfo01_pitch_oncc111=20 lfo01_phase=0.25 lfo01_freq=1.5 lfo01_freq_oncc112=6 pitch_oncc111=-20 This will work fine, as long as we don't try to apply delay or fade to the LFO, which would result in the note starting out flat with no vibrato. To solve that problem, we can combine the LFO with a pitch envelope . Here is an example with just delay: lfo01_pitch_oncc111=20 lfo01_freq=1.5 lfo01_freq_oncc112=6 lfo01_phase=0.25 lfo01_delay_oncc116=1 pitcheg_delay_oncc116=1 pitcheg_depth_oncc111=-20 To have the choice of idiomatic sax vibrato and violin-style vibrato centered around the pitch can be done separate LFOs and separate depth controls. It's also possible to duplicate all the regions and use loccN/hiccN to select between ones with different styles of vibrato. lfo01_pitch_oncc111=20 //Sax vibrato LFO - goes down from the main pitch lfo01_freq=1.5 lfo01_freq_oncc112=6 lfo01_phase=0.25 //Starts at top lfo01_delay_oncc116=1 pitcheg_delay_oncc116=1 //Pitch envelope to drop the central pitch when sax vibrato kicks in pitcheg_depth_oncc111=-20 lfo02_pitch_oncc114=20 //Violin vibrato LFO - goes below and above main pitch lfo02_freq=1.5 lfo02_freq_oncc112=6 //Same rate as the first LFO lfo02_phase=0.5 //Starts in the middle, goes down first before going up lfo02_delay_oncc116=1 //Same delay, too This covers jaw vibrato, but sax players also use diaphragm vibrato, which changes volume and has no effect on pitch, which means there are now three vibrato depths. Having the volume modulated by the second LFO is a little easier, as the phase setting of the first LFO would mean having to apply a volume envelope as well. lfo01_pitch_oncc111=20 //Sax vibrato LFO - goes down from the main pitch lfo01_freq=1.5 lfo01_freq_oncc112=6 lfo01_phase=0.25 //Starts at top lfo01_delay_oncc116=1 pitcheg_delay_oncc116=1 //Pitch envelope to drop the central pitch when sax vibrato kicks in pitcheg_depth_oncc111=-20 lfo02_pitch_oncc114=20 //Violin vibrato LFO - goes below and above main pitch lfo02_freq=1.5 lfo02_freq_oncc112=6 //Same rate as the first LFO lfo02_delay_oncc116=1 //Same delay, too lfo02_phase=0.5 //Starts in the middle, goes down first before going up lfo02_volume=0 //This LFO also does tremolo lfo02_volume_oncc113=3 There is one additional consideration with diaphragm vibrato - when the volume of the note drops down, the breath noise can become more prominent, especially on quiet notes or when using the subtone technique. If the volume of the breath noise can be modulated separately, the noise regions should not be affected by pitch vibrato, and be affected by the diaphragm vibrato in an opposite direction to the notes. So, if the above vibrato settings are set under a \u2039global\u203a header, the breath noise sample regions could have settings similar to this. lfo01_pitch_oncc111=0 //LFOs do not affect pitch pitcheg_depth_oncc111=0 lfo02_pitch_oncc114=0 lfo02_volume_oncc113=-3 //Diaphragm vibrato affects volume in the opposite direction Humanization and having the diaphragm vibrato affect timbre can be done similarly as with the strings above, ensuring both LFOs are humanized in sync with each other, so they do not drift apart. More special cases Some instruments will have vibrato types which require special treatment, for example guitar tremolo bridges will bend each string's pitch by a different amount when playing chords. This requires different pitch modulation depths for each string. Vibrato can also be used to modulate filter cutoffs , which is commonly used in synthesizers to create evolving pads or wobble basses. This is not difficult to implement. Here is an example of a synthesizer style vibrato with a typical lowpass filter, and vibrato which can affect pitch, volume or filter cutoff. //Filter //Lowpass filter cutoff=120 cutoff_cc120=13200 fil_keytrack=100 resonance=0 resonance_cc121=12 //Vibrato lfo01_freq=1 lfo01_freq_oncc112=11 lfo01_delay_oncc115=0.500 lfo01_fade_oncc116=0.500 lfo01_pitch_oncc111=22 //Vibrato LFO affects pitch lfo01_volume_oncc114=6 //Volume tremolo lfo01_cutoff=0 //Filter wobble lfo01_cutoff_oncc113=3600 An unusual use of extremely deep vibrato and tremolo plus humanization is emulating vinyl scratching. Pitch sweeps of 2+ octaves with strongly humanized LFO rate can resemble vinyl scratching, though unlike real scratching, these LFOs are not controllable, and therefore rhythmic scratching is not an option. //Extreme vibrato that can resemble vinyl scratching //The depths are high but will be made even higher by the modulation of the LFO depth lfo01_pitch_oncc21=1333 //Extremely deep vibrato for vinyl emulation lfo01_freq=1 lfo01_freq_oncc112=9 //No delay but there is fade lfo01_fade_oncc116=0.5 //This LFO also does tremolo lfo01_volume_oncc21=7 //Again very heavy lfo02_wave=1 //Second LFO to make things wobblier lfo02_phase=0 lfo02_phase_oncc135=1 //Random lfo02_freq=0.01 //Basically no movement at very slow speeds, just randomization lfo02_freq_oncc117=1 //Max rate is not very high, so it doesn't sound too obvious lfo02_freq_lfo01_oncc117=1 //Affect the rate of the other LFO for unsteady vibrato lfo03_wave=1 //And a third LFO for secondhand complex wobbliness lfo03_phase=0.4 lfo03_phase_oncc135=0.479 //Different phase response to velocity than the second LFO lfo03_freq=0.5 lfo03_freq_oncc117=-0.4 lfo03_freq_lfo2_oncc117=1 lfo03_depth_lfo01=200 lfo02_depth_lfo01=233 eg1_level0_oncc117=1 eg1_level1_oncc117=1 eg1_depth_lfo2=100 eg1_depth_lfo3=100 This by no means exhausts all the possibilties of vibrato. It does provide a decent combination of control and realism for a lot of common instrument types, as well as some wild possibilities.","title":"Vibrato"},{"location":"tutorials/vibrato/#basic-lfo-vibrato","text":"Emulating vibrato for solo instruments or voices with LFOs is not difficult. The challenges are understanding the key aspects of vibrato on the real instrument, and keeping the number of parameters from growing too large to be easy to use. The examples here use SFZ 2 spec numbered LFOs , rather than the dedicated pitch, volume and filter LFOs and envelopes of SFZ 1. A lot of this can be done under the SFZ 1 specification as well, but there are some limitations. The most basic, typical vibrato is pitch vibrato - just an LFO modulating pitch. Making the minimum and maximum rates and depths that would be used by players in real life is important, of course. The numbers here are examples which would be decent for bowed strings - it has a rate of 2-10 Hz and a maximum depth of 35 cents. Wider and slower are certainly possible on real instruments, but isn't commonly used in performance. lfo01_pitch_oncc111=35 lfo01_freq=2 lfo01_freq_oncc112=8","title":"Basic LFO vibrato"},{"location":"tutorials/vibrato/#additional-parameters","text":"In real life, however, players and singers will often start a note without vibrato, and add vibrato a fraction of a second later. This is where modulating the LFO delay parameter becomes useful, and possibly LFO fade as well. Delay seems like enough for most wind instruments and vocals, but having both delay and fade seems effective with bowed strings. lfo01_pitch_oncc111=35 lfo01_freq=2 lfo01_freq_oncc112=8 lfo01_delay_oncc115=0.500 lfo01_fade_oncc116=0.500 Vibrato on many instruments doesn't just affect pitch; on bowed strings, it seems to have a subtle effect on volume and timbre as well. We can have the same MIDI CC parameter control how much the vibrato LFO affects pitch, volume, and an EQ band, with the latter two being quite subtle. This is a good a time as any to note that not all vibrato is equal - it's not really practical to add vibrato to the lowest note playable on a cello, for example, or to a natural harmonic. With pizzicato, vibrato is possible, but probably should not affect the EQ band, and either only affect pitch or pitch plus a subtle effect on volume. The below will work reasonably for most bowed notes, however. lfo01_pitch_oncc111=35 lfo01_volume_oncc111=1 lfo01_freq=2 lfo01_freq_oncc112=8 lfo01_delay_oncc115=0.500 lfo01_fade_oncc116=0.500 eq1_freq=2000 eq1_bw=2 lfo01_eq1gain_oncc111=2 lfo01_eq1freq_oncc111=500","title":"Additional parameters"},{"location":"tutorials/vibrato/#humanization","text":"Vibrato can also be humanized, by varying the rate of the vibrato LFO. This can be done by modulating the rate of the vibrato LFO with another LFO. The ARIA sample & hold waveform can be used here, and the modulation depth controlled by MIDI CC, so when that's at zero, no humanization happens. lfo02_freq=1 lfo02_wave=12 //Sample & hold LFO waveform number lfo02_freq_lfo01_oncc117=1 Or, to stay in the SFZ 2 spec and not use ARIA extensions, a sine wave with randomized starting phase will also work: lfo02_freq=1 lfo02_phase_oncc135=1 lfo02_freq_lfo01_oncc117=1 However, when playing multiple layers, such as sustain samples with crossfaded dynamics or multiple mic positions, this can cause each layer's vibrato to drift out of sync and sound like separate instruments. This is generally not desirable, so it is possible to pseudo-randomize the starting phase using a non-random CC, such as velocity (which is often otherwise unused in sustain sounds with crossfaded dynamics). If the SFZ player can have a global sample and hold LFO which does not retrigger for each note, this would also be a solution, though ARIA does not allow this. lfo02_freq=1 lfo02_phase_oncc132=0.7 lfo02_freq_lfo01_oncc117=1 This will vary the rate of the vibrato, but the depth will be constant. It is possible to have an LFO modulate the depth of another LFO, measured as a percentage, for example 120% for 20% variation: lfo02_freq=1 lfo02_phase_oncc132=0.7 lfo02_freq_lfo01_oncc117=1 lfo02_depth_lfo01=120 For additional complexity, it's also possible to have the random LFO itself modulate pitch, which will create some pitch drift, and have more than two LFOs involved. Here is a fairly sophisticated example. //Vibrato lfo01_pitch_oncc21=29 //Vibrato LFO lfo01_freq=2 //Any slower than this sounds really lousy lfo01_freq_oncc112=6 //8 Hz is about as fast as vibrato on cello can go lfo01_delay_oncc115=0.500 lfo01_fade_oncc116=0.500 //This LFO also does tremolo lfo01_volume_oncc21=1 //Not much - just a subtle effect on volume eq1_freq=2200 //EQ band for vibrato eq1_bw=2 lfo01_eq1gain_oncc21=3 //Again, pretty subtle lfo02_wave=1 //Second LFO to make things wobblier lfo02_phase=0 lfo02_phase_oncc131=0.7 //Phase affected by velocity, to pseudo-randomize while keeping both mics' LFOs in sync lfo02_freq=0.01 //Basically no movement at very slow speeds, just randomization lfo02_freq_oncc117=1 //Max rate is not very high, so it doesn't sound too obvious lfo02_pitch_oncc117=6 //Slight pitch wobbliness lfo02_freq_lfo01_oncc117=1 //Affect the rate of the other LFO for unsteady vibrato lfo03_wave=1 //And a third LFO for secondhand complex wobbliness lfo03_phase=0.4 lfo03_phase_oncc131=0.479 //Different phase response to velocity than the second LFO lfo03_freq=0.5 lfo03_freq_oncc117=-0.4 lfo03_freq_lfo02_oncc117=1 lfo03_pitch_oncc117=-4 However, note that the depth modulation is fixed, and not modulated by cc117 like the frequency modulation is. This is because having a CC modulate the depth modulation does not appear to be implemented in ARIA. It is, however, possible to modulate the depth of a flex envelope with MIDI CC, and then have that envelope depth modulate the depth of the secondary LFO. This is, admittedly, very much a kludge, but it appears to work. lfo02_freq=1 lfo02_phase_oncc132=0.7 lfo02_freq_lfo01_oncc117=1 lfo02_depth_lfo01=120 eg1_level0_oncc117=1 eg1_level1_oncc117=1 eg1_depth_lfo02=100 However, when the depth of lfo02 is zero, this will effectively also make lfo01's depth zero, so there will be no vibrato at all unless cc117 is turned up. Getting around this requires another kludge, which is leaving lfo01 with fixed depth and creating yet another LFO for the variable part of the depth. //Vibrato lfo01_pitch_oncc21=29 //Vibrato LFO lfo01_freq=2 //Any slower than this sounds really lousy lfo01_freq_oncc112=6 //8 Hz is about as fast as vibrato on cello can go lfo01_delay_oncc115=0.500 lfo01_fade_oncc116=0.500 //This LFO also does tremolo lfo01_volume_oncc21=1 //Not much - just a subtle effect on volume eq1_freq=2200 //EQ band for vibrato eq1_bw=2 lfo01_eq1gain_oncc21=3 //Again, pretty subtle lfo02_pitch_oncc21=19 //Extra LFO for variable depth, shallower than main and pitch only lfo02_freq=2 //Same timing as first LFO lfo02_freq_oncc112=6 lfo02_delay_oncc115=0.500 lfo02_fade_oncc116=0.500 lfo03_wave=1 //Third LFO to make the flrst two LFOs wobblier lfo03_phase=0 lfo03_phase_oncc131=0.7 //Phase affected by velocity, to pseudo-randomize while keeping both mics' LFOs in sync lfo03_freq=0.01 //Basically no movement at very slow speeds, just randomization lfo03_freq_oncc117=1 //Max rate is not very high, so it doesn't sound too obvious lfo03_pitch=6 //Slight pitch wobbliness lfo03_freq_lfo01=1 lfo03_freq_lfo02=1 //Affect the rate of the vibrato LFOs for unsteady vibrato lfo04_wave=1 //And a fourth LFO for secondhand complex wobbliness lfo04_phase=0.4 lfo04_phase_oncc131=0.479 //Different phase response to velocity than the second LFO lfo04_freq=0.5 lfo04_freq_oncc117=-0.4 lfo04_freq_lfo03=1 lfo04_pitch=-4 lfo03_depth_lfo02=100 lfo04_depth_lfo02=100 eg1_level0_oncc117=1 eg1_level1_oncc117=1 eg1_depth_lfo03=100 eg1_depth_lfo04=100","title":"Humanization"},{"location":"tutorials/vibrato/#asymmetrical-vibrato","text":"Something similar to the above will work fairly well for a range of strings and voices. However, there are cases where vibrato should only go in one direction - for example, bending guitar strings only moves the pitch upwards, while on saxophone it's possible to play vibrato centered around the pitch, but most of the time players will go only below the pitch. Let's use saxophone vibrato as an example. To keep it simple, let's just go back to a simple, non-humanized vibrato with only depth and rate paremeters. To have vibrato which will go below the main pitch is simple - the LFO phase can be set so the wave starts at the top, and the note tuned down by the vibrato depth amount. lfo01_pitch_oncc111=20 lfo01_phase=0.25 lfo01_freq=1.5 lfo01_freq_oncc112=6 pitch_oncc111=-20 This will work fine, as long as we don't try to apply delay or fade to the LFO, which would result in the note starting out flat with no vibrato. To solve that problem, we can combine the LFO with a pitch envelope . Here is an example with just delay: lfo01_pitch_oncc111=20 lfo01_freq=1.5 lfo01_freq_oncc112=6 lfo01_phase=0.25 lfo01_delay_oncc116=1 pitcheg_delay_oncc116=1 pitcheg_depth_oncc111=-20 To have the choice of idiomatic sax vibrato and violin-style vibrato centered around the pitch can be done separate LFOs and separate depth controls. It's also possible to duplicate all the regions and use loccN/hiccN to select between ones with different styles of vibrato. lfo01_pitch_oncc111=20 //Sax vibrato LFO - goes down from the main pitch lfo01_freq=1.5 lfo01_freq_oncc112=6 lfo01_phase=0.25 //Starts at top lfo01_delay_oncc116=1 pitcheg_delay_oncc116=1 //Pitch envelope to drop the central pitch when sax vibrato kicks in pitcheg_depth_oncc111=-20 lfo02_pitch_oncc114=20 //Violin vibrato LFO - goes below and above main pitch lfo02_freq=1.5 lfo02_freq_oncc112=6 //Same rate as the first LFO lfo02_phase=0.5 //Starts in the middle, goes down first before going up lfo02_delay_oncc116=1 //Same delay, too This covers jaw vibrato, but sax players also use diaphragm vibrato, which changes volume and has no effect on pitch, which means there are now three vibrato depths. Having the volume modulated by the second LFO is a little easier, as the phase setting of the first LFO would mean having to apply a volume envelope as well. lfo01_pitch_oncc111=20 //Sax vibrato LFO - goes down from the main pitch lfo01_freq=1.5 lfo01_freq_oncc112=6 lfo01_phase=0.25 //Starts at top lfo01_delay_oncc116=1 pitcheg_delay_oncc116=1 //Pitch envelope to drop the central pitch when sax vibrato kicks in pitcheg_depth_oncc111=-20 lfo02_pitch_oncc114=20 //Violin vibrato LFO - goes below and above main pitch lfo02_freq=1.5 lfo02_freq_oncc112=6 //Same rate as the first LFO lfo02_delay_oncc116=1 //Same delay, too lfo02_phase=0.5 //Starts in the middle, goes down first before going up lfo02_volume=0 //This LFO also does tremolo lfo02_volume_oncc113=3 There is one additional consideration with diaphragm vibrato - when the volume of the note drops down, the breath noise can become more prominent, especially on quiet notes or when using the subtone technique. If the volume of the breath noise can be modulated separately, the noise regions should not be affected by pitch vibrato, and be affected by the diaphragm vibrato in an opposite direction to the notes. So, if the above vibrato settings are set under a \u2039global\u203a header, the breath noise sample regions could have settings similar to this. lfo01_pitch_oncc111=0 //LFOs do not affect pitch pitcheg_depth_oncc111=0 lfo02_pitch_oncc114=0 lfo02_volume_oncc113=-3 //Diaphragm vibrato affects volume in the opposite direction Humanization and having the diaphragm vibrato affect timbre can be done similarly as with the strings above, ensuring both LFOs are humanized in sync with each other, so they do not drift apart.","title":"Asymmetrical vibrato"},{"location":"tutorials/vibrato/#more-special-cases","text":"Some instruments will have vibrato types which require special treatment, for example guitar tremolo bridges will bend each string's pitch by a different amount when playing chords. This requires different pitch modulation depths for each string. Vibrato can also be used to modulate filter cutoffs , which is commonly used in synthesizers to create evolving pads or wobble basses. This is not difficult to implement. Here is an example of a synthesizer style vibrato with a typical lowpass filter, and vibrato which can affect pitch, volume or filter cutoff. //Filter //Lowpass filter cutoff=120 cutoff_cc120=13200 fil_keytrack=100 resonance=0 resonance_cc121=12 //Vibrato lfo01_freq=1 lfo01_freq_oncc112=11 lfo01_delay_oncc115=0.500 lfo01_fade_oncc116=0.500 lfo01_pitch_oncc111=22 //Vibrato LFO affects pitch lfo01_volume_oncc114=6 //Volume tremolo lfo01_cutoff=0 //Filter wobble lfo01_cutoff_oncc113=3600 An unusual use of extremely deep vibrato and tremolo plus humanization is emulating vinyl scratching. Pitch sweeps of 2+ octaves with strongly humanized LFO rate can resemble vinyl scratching, though unlike real scratching, these LFOs are not controllable, and therefore rhythmic scratching is not an option. //Extreme vibrato that can resemble vinyl scratching //The depths are high but will be made even higher by the modulation of the LFO depth lfo01_pitch_oncc21=1333 //Extremely deep vibrato for vinyl emulation lfo01_freq=1 lfo01_freq_oncc112=9 //No delay but there is fade lfo01_fade_oncc116=0.5 //This LFO also does tremolo lfo01_volume_oncc21=7 //Again very heavy lfo02_wave=1 //Second LFO to make things wobblier lfo02_phase=0 lfo02_phase_oncc135=1 //Random lfo02_freq=0.01 //Basically no movement at very slow speeds, just randomization lfo02_freq_oncc117=1 //Max rate is not very high, so it doesn't sound too obvious lfo02_freq_lfo01_oncc117=1 //Affect the rate of the other LFO for unsteady vibrato lfo03_wave=1 //And a third LFO for secondhand complex wobbliness lfo03_phase=0.4 lfo03_phase_oncc135=0.479 //Different phase response to velocity than the second LFO lfo03_freq=0.5 lfo03_freq_oncc117=-0.4 lfo03_freq_lfo2_oncc117=1 lfo03_depth_lfo01=200 lfo02_depth_lfo01=233 eg1_level0_oncc117=1 eg1_level1_oncc117=1 eg1_depth_lfo2=100 eg1_depth_lfo3=100 This by no means exhausts all the possibilties of vibrato. It does provide a decent combination of control and realism for a lot of common instrument types, as well as some wild possibilities.","title":"More special cases"},{"location":"tutorials/videos/","text":"Here are a couple of videos to help you get started with SFZ SFZ Tutorial Part 1 : Hello World! by David Viens SFZ Tutorial Part 2 : Generators, transpose and ADSR by David Viens VSCO 2: Community Edition - SFZ Tutorial by Versilian Studios How to use our Free SFZ Instruments by Versilian Studios Folder to SFZ Converter / Automapper by Sam Gossner Sforzando introduction and overview by PatchArena Getting Started with SFZ by David Hilowitz Music How to make TRUE legato sample libraries in SFZ by David Hilowitz Music Recording samples using Ardour and LinuxSampler by Sonoj Convention","title":"SFZ Programming Video Tutorials"},{"location":"tutorials/volume/","text":"The SFZ format allows many different ways of controlling volume. There's the modulation of volume by opcodes, there's velocity tracking, and there's also modualtion by envelopes and LFOs. This is currently a work in progress, collecting information in tutorial form, though it might be turned into another type of page eventually. Opcodes affecting playback volume The relevant opcodes are: volume , amplitude , xfin / xfout , amp_veltrack , amp_keytrack , amp_velcurve_N . There are also envelope and LFO modulation sources: ampeg , amplfo , and volume-related targets for egN and lfoN . Some of them will have multiple stages, points, CCs etc, so the volume of one sample can be affected by many different things at once. Velocity tracking This is affected by amp_veltrack and amp_velcurve_N. In addition, vel2 modulations can affect amp envelope durations as well as the sustain level (though not the peak level at the end of the attack phase) and in ARIA extended CC 131 can also modulate things which affect volume, for example egN levels. Remember that amp_veltrack is 100 by default, so if dynamics are to be controlled by things other than velocity and dynamics should be controlled, for examle, by mod wheel, then set amp_veltrack to 0, as in the code example in the next section. When using velocity layers, remember that a quiet velocity layer will have a certain max velocity, for example if a region has hivel set to 31, it will never be triggered by velocities higher than 31, and therefore should usually either have amp_velcurve_31 set to 1, or amp_veltrack should be set to 0. hivel=42 amp_velcurve_42=1 #include \"quiet_layer.sfz\" lovel=43 hivel=84 amp_velcurve_84=1 #include \"middle_layer.sfz\" lovel=85 #include \"loud_layer.sfz\" Volume, amplitude and crossfade Volume, amplitude, and crossfade generally affect the playback volume of the entire region, beginning to end. \"Generally\" because amplitude and volume can be modulated by CCs while the sample is playing. Volume is additive and measured in decibels, so volume=6 adds 6 dB to the sample's playback volume. Amplitude is multiplicative, and is a percentage of full amplitude, so amplitude=6 would mean the sample is played at 6% amplitude. Xfin and xfout are intended for cross-fading dynamic layers, and set the CC values for zero amplitude and full amplitude. One limitation here is that it's not possible to have a layer which has more than zero amplitude at the start of the fade-in. This is important for instruments such as bowed strings, which have a certain minimum practical playable loudness. These will often have dynamics linked to CC1 or some other CC, and need to have some small amount of audible volume even at the lowest CC level. Here, amplitude with curveccN can be used to fade in the lowest layer. It's still possible to use xfout to fade the layer out at higher CC values as the next layer fades in, though it may be simpler to just use amplitude for all layers, for example like this: amp_veltrack=0 amplitude_oncc1=100 amplitude_curvecc1=11 #include \"quiet_layer.sfz\" amplitude_oncc1=100 amplitude_curvecc1=12 #include \"loud_layer.sfz\" curve_index=11 v000=0.4 v063=1 v127=0 curve_index=12 v000=0 v063=0 v127=1 Envelopes and LFOs Both the ampeg envelope and one or more egN flex envelopes can be used in parallel. The same is true of amplfo and lfoN flex LFOs. These affect the volume of the region differently across time, obviously. Randomization amp_random and its alias gain_random work like volume/gain and are measured in decibels. In ARIA and Cakewalk, amp_random is unipolar. In the rgc sfz player, amp_random is bipolar. In ARIA, CC135 (unipolar random) and 136 (bipolar random) can also be used by various opcodes which modulate volume. Stacking mutliple modulations It is possible to have multiple CCs modulating the same opcode for the same region. This can make sense with multiple mic positions, for example. There can be a release samples volume control affecting release sample amplitude for all mics, and individual mic controls with the amplitude for all samples recorded through that mic. The effect with amplitude would be multiplicative - so with either control at 0, there would be no sound. amplitude_oncc80=100 //Close mic volume #include \"close_notes.sfz\" trigger=release amplitude_oncc82=100 //Release noise volume #include \"close_releases.sfz\" amplitude_oncc81=100 //Far mic volume #include \"far_notes.sfz\" trigger=release amplitude_oncc82=100 //Release noise volume #include \"far_releases.sfz\"","title":"Control of volume"},{"location":"tutorials/volume/#opcodes-affecting-playback-volume","text":"The relevant opcodes are: volume , amplitude , xfin / xfout , amp_veltrack , amp_keytrack , amp_velcurve_N . There are also envelope and LFO modulation sources: ampeg , amplfo , and volume-related targets for egN and lfoN . Some of them will have multiple stages, points, CCs etc, so the volume of one sample can be affected by many different things at once.","title":"Opcodes affecting playback volume"},{"location":"tutorials/volume/#velocity-tracking","text":"This is affected by amp_veltrack and amp_velcurve_N. In addition, vel2 modulations can affect amp envelope durations as well as the sustain level (though not the peak level at the end of the attack phase) and in ARIA extended CC 131 can also modulate things which affect volume, for example egN levels. Remember that amp_veltrack is 100 by default, so if dynamics are to be controlled by things other than velocity and dynamics should be controlled, for examle, by mod wheel, then set amp_veltrack to 0, as in the code example in the next section. When using velocity layers, remember that a quiet velocity layer will have a certain max velocity, for example if a region has hivel set to 31, it will never be triggered by velocities higher than 31, and therefore should usually either have amp_velcurve_31 set to 1, or amp_veltrack should be set to 0. hivel=42 amp_velcurve_42=1 #include \"quiet_layer.sfz\" lovel=43 hivel=84 amp_velcurve_84=1 #include \"middle_layer.sfz\" lovel=85 #include \"loud_layer.sfz\"","title":"Velocity tracking"},{"location":"tutorials/volume/#volume-amplitude-and-crossfade","text":"Volume, amplitude, and crossfade generally affect the playback volume of the entire region, beginning to end. \"Generally\" because amplitude and volume can be modulated by CCs while the sample is playing. Volume is additive and measured in decibels, so volume=6 adds 6 dB to the sample's playback volume. Amplitude is multiplicative, and is a percentage of full amplitude, so amplitude=6 would mean the sample is played at 6% amplitude. Xfin and xfout are intended for cross-fading dynamic layers, and set the CC values for zero amplitude and full amplitude. One limitation here is that it's not possible to have a layer which has more than zero amplitude at the start of the fade-in. This is important for instruments such as bowed strings, which have a certain minimum practical playable loudness. These will often have dynamics linked to CC1 or some other CC, and need to have some small amount of audible volume even at the lowest CC level. Here, amplitude with curveccN can be used to fade in the lowest layer. It's still possible to use xfout to fade the layer out at higher CC values as the next layer fades in, though it may be simpler to just use amplitude for all layers, for example like this: amp_veltrack=0 amplitude_oncc1=100 amplitude_curvecc1=11 #include \"quiet_layer.sfz\" amplitude_oncc1=100 amplitude_curvecc1=12 #include \"loud_layer.sfz\" curve_index=11 v000=0.4 v063=1 v127=0 curve_index=12 v000=0 v063=0 v127=1","title":"Volume, amplitude and crossfade"},{"location":"tutorials/volume/#envelopes-and-lfos","text":"Both the ampeg envelope and one or more egN flex envelopes can be used in parallel. The same is true of amplfo and lfoN flex LFOs. These affect the volume of the region differently across time, obviously.","title":"Envelopes and LFOs"},{"location":"tutorials/volume/#randomization","text":"amp_random and its alias gain_random work like volume/gain and are measured in decibels. In ARIA and Cakewalk, amp_random is unipolar. In the rgc sfz player, amp_random is bipolar. In ARIA, CC135 (unipolar random) and 136 (bipolar random) can also be used by various opcodes which modulate volume.","title":"Randomization"},{"location":"tutorials/volume/#stacking-mutliple-modulations","text":"It is possible to have multiple CCs modulating the same opcode for the same region. This can make sense with multiple mic positions, for example. There can be a release samples volume control affecting release sample amplitude for all mics, and individual mic controls with the amplitude for all samples recorded through that mic. The effect with amplitude would be multiplicative - so with either control at 0, there would be no sound. amplitude_oncc80=100 //Close mic volume #include \"close_notes.sfz\" trigger=release amplitude_oncc82=100 //Release noise volume #include \"close_releases.sfz\" amplitude_oncc81=100 //Far mic volume #include \"far_notes.sfz\" trigger=release amplitude_oncc82=100 //Release noise volume #include \"far_releases.sfz\"","title":"Stacking mutliple modulations"}]} \ No newline at end of file diff --git a/search/worker.js b/search/worker.js new file mode 100644 index 000000000..8628dbce9 --- /dev/null +++ b/search/worker.js @@ -0,0 +1,133 @@ +var base_path = 'function' === typeof importScripts ? '.' : '/search/'; +var allowSearch = false; +var index; +var documents = {}; +var lang = ['en']; +var data; + +function getScript(script, callback) { + console.log('Loading script: ' + script); + $.getScript(base_path + script).done(function () { + callback(); + }).fail(function (jqxhr, settings, exception) { + console.log('Error: ' + exception); + }); +} + +function getScriptsInOrder(scripts, callback) { + if (scripts.length === 0) { + callback(); + return; + } + getScript(scripts[0], function() { + getScriptsInOrder(scripts.slice(1), callback); + }); +} + +function loadScripts(urls, callback) { + if( 'function' === typeof importScripts ) { + importScripts.apply(null, urls); + callback(); + } else { + getScriptsInOrder(urls, callback); + } +} + +function onJSONLoaded () { + data = JSON.parse(this.responseText); + var scriptsToLoad = ['lunr.js']; + if (data.config && data.config.lang && data.config.lang.length) { + lang = data.config.lang; + } + if (lang.length > 1 || lang[0] !== "en") { + scriptsToLoad.push('lunr.stemmer.support.js'); + if (lang.length > 1) { + scriptsToLoad.push('lunr.multi.js'); + } + if (lang.includes("ja") || lang.includes("jp")) { + scriptsToLoad.push('tinyseg.js'); + } + for (var i=0; i < lang.length; i++) { + if (lang[i] != 'en') { + scriptsToLoad.push(['lunr', lang[i], 'js'].join('.')); + } + } + } + loadScripts(scriptsToLoad, onScriptsLoaded); +} + +function onScriptsLoaded () { + console.log('All search scripts loaded, building Lunr index...'); + if (data.config && data.config.separator && data.config.separator.length) { + lunr.tokenizer.separator = new RegExp(data.config.separator); + } + + if (data.index) { + index = lunr.Index.load(data.index); + data.docs.forEach(function (doc) { + documents[doc.location] = doc; + }); + console.log('Lunr pre-built index loaded, search ready'); + } else { + index = lunr(function () { + if (lang.length === 1 && lang[0] !== "en" && lunr[lang[0]]) { + this.use(lunr[lang[0]]); + } else if (lang.length > 1) { + this.use(lunr.multiLanguage.apply(null, lang)); // spread operator not supported in all browsers: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator#Browser_compatibility + } + this.field('title'); + this.field('text'); + this.ref('location'); + + for (var i=0; i < data.docs.length; i++) { + var doc = data.docs[i]; + this.add(doc); + documents[doc.location] = doc; + } + }); + console.log('Lunr index built, search ready'); + } + allowSearch = true; + postMessage({config: data.config}); + postMessage({allowSearch: allowSearch}); +} + +function init () { + var oReq = new XMLHttpRequest(); + oReq.addEventListener("load", onJSONLoaded); + var index_path = base_path + '/search_index.json'; + if( 'function' === typeof importScripts ){ + index_path = 'search_index.json'; + } + oReq.open("GET", index_path); + oReq.send(); +} + +function search (query) { + if (!allowSearch) { + console.error('Assets for search still loading'); + return; + } + + var resultDocuments = []; + var results = index.search(query); + for (var i=0; i < results.length; i++){ + var result = results[i]; + doc = documents[result.ref]; + doc.summary = doc.text.substring(0, 200); + resultDocuments.push(doc); + } + return resultDocuments; +} + +if( 'function' === typeof importScripts ) { + onmessage = function (e) { + if (e.data.init) { + init(); + } else if (e.data.query) { + postMessage({ results: search(e.data.query) }); + } else { + console.error("Worker - Unrecognized message: " + e); + } + }; +} diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 000000000..f8aad2d11 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,4583 @@ + + + + https://sfz.github.io/ + 2024-03-12 + daily + + + https://sfz.github.io/versions/ + 2024-03-12 + daily + + + https://sfz.github.io/extensions/midi_ccs/ + 2024-03-12 + daily + + + https://sfz.github.io/extensions/aria/xml_instrument_bank/ + 2024-03-12 + daily + + + https://sfz.github.io/headers/ + 2024-03-12 + daily + + + https://sfz.github.io/headers/control/ + 2024-03-12 + daily + + + https://sfz.github.io/headers/curve/ + 2024-03-12 + daily + + + https://sfz.github.io/headers/effect/ + 2024-03-12 + daily + + + https://sfz.github.io/headers/global/ + 2024-03-12 + daily + + + https://sfz.github.io/headers/group/ + 2024-03-12 + daily + + + https://sfz.github.io/headers/master/ + 2024-03-12 + daily + + + https://sfz.github.io/headers/midi/ + 2024-03-12 + daily + + + https://sfz.github.io/headers/region/ + 2024-03-12 + daily + + + https://sfz.github.io/headers/sample/ + 2024-03-12 + daily + + + https://sfz.github.io/misc/all_opcodes/ + 2024-03-12 + daily + + + https://sfz.github.io/misc/amp_velcurve_N_gen/ + 2024-03-12 + daily + + + https://sfz.github.io/misc/aria/ + 2024-03-12 + daily + + + https://sfz.github.io/misc/categories/ + 2024-03-12 + daily + + + https://sfz.github.io/misc/sfz1/ + 2024-03-12 + daily + + + https://sfz.github.io/misc/sfz2/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/envelope_generators/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/icurveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/lfo/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/smoothccN/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/stepccN/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/vel2/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/moved/ampeg_vel2attack/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/moved/ampeg_vel2decay/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/moved/ampeg_vel2delay/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/moved/ampeg_vel2hold/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/moved/ampeg_vel2release/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/moved/ampeg_vel2sustain/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/moved/amplfo_depthchanaft/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/moved/amplfo_depthpolyaft/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/moved/amplfo_freqchanaft/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/moved/amplfo_freqpolyaft/ + 2024-03-12 + daily + + + https://sfz.github.io/modulations/moved/eqN_vel2freq/ + 2024-03-12 + daily + + + https://sfz.github.io/news/ + 2024-03-12 + daily + + + https://sfz.github.io/news/posts/2019-04-23-new-website-launched/ + 2024-03-12 + daily + + + https://sfz.github.io/news/posts/2019-07-25-new-tutorial/ + 2024-03-12 + daily + + + https://sfz.github.io/news/posts/2019-08-01-modulation_explained/ + 2024-03-12 + daily + + + https://sfz.github.io/news/posts/2019-09-16-sfz-page-on-italian-wikipedia/ + 2024-03-12 + daily + + + https://sfz.github.io/news/posts/2019-11-16-new-players-and-tutorial/ + 2024-03-12 + daily + + + https://sfz.github.io/news/posts/2019-11-21-legato-tutorial/ + 2024-03-12 + daily + + + https://sfz.github.io/news/posts/2019-12-29-happy-new-year/ + 2024-03-12 + daily + + + https://sfz.github.io/news/posts/2020-01-31-new-year-new-work-in-progress/ + 2024-03-12 + daily + + + https://sfz.github.io/news/posts/2020-03-17-new-tutorial-and-opcode-additions/ + 2024-03-12 + daily + + + https://sfz.github.io/news/posts/2020-10-16-opcodes-page-update/ + 2024-03-12 + daily + + + https://sfz.github.io/news/posts/2023-06-03-bootstrap-530-with-color-modes/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/_mod/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_attack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_decay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_delay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_hold/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_keycenter/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_keytrack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_random/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_release/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_sustain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_vel2attack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_vel2decay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_vel2delay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_vel2hold/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_vel2release/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_vel2sustain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_velcurve_N/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_veltrack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_veltrack_ccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_veltrack_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_veltrack_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amp_veltrack_random/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_attack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_attack_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_attack_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_attack_shape/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_attackccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_decay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_decay_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_decay_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_decay_shape/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_decay_zero/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_decayccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_delay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_delay_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_delay_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_delayccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_dynamic/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_hold/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_hold_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_hold_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_holdccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_release/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_release_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_release_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_release_shape/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_release_zero/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_releaseccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_start/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_start_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_start_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_startccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_sustain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_sustain_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_sustain_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_sustainccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_vel2attack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_vel2decay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_vel2delay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_vel2hold/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_vel2release/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/ampeg_vel2sustain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amplfo_delay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amplfo_depth/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amplfo_depth_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amplfo_depthccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amplfo_depthchanaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amplfo_depthpolyaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amplfo_fade/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amplfo_freq/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amplfo_freqccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amplfo_freqchanaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amplfo_freqpolyaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amplitude/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amplitude_ccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amplitude_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amplitude_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/amplitude_smoothccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/apan_depth/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/apan_depth_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/apan_dry/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/apan_dry_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/apan_freq/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/apan_freq_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/apan_phase/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/apan_phase_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/apan_waveform/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/apan_wet/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/apan_wet_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/bend_down/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/bend_smooth/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/bend_step/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/bend_stepdown/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/bend_stepup/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/bend_up/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/benddown/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/bendstep/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/bendup/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/bitred/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/bitred_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/bitred_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/bitred_smoothccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/bitred_stepccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/bus/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/bypass_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/comp_attack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/comp_gain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/comp_ratio/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/comp_release/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/comp_stlink/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/comp_threshold/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/count/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/curve_index/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/cutoff/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/cutoff2/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/cutoff2_ccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/cutoff2_chanaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/cutoff2_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/cutoff2_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/cutoff2_polyaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/cutoff2_random/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/cutoff2_smoothccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/cutoff2_stepccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/cutoff_ccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/cutoff_chanaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/cutoff_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/cutoff_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/cutoff_polyaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/cutoff_random/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/cutoff_smoothccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/cutoff_stepccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/decim/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/decim_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/decim_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/decim_smoothccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/decim_stepccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/default_path/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/define/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_beats/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_beats_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_beats_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_beats_random/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_ccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_cutoff/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_cutoff_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_damphi/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_damphi_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_damplo/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_damplo_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_dry/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_dry_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_feedback/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_feedback_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_filter/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_input/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_input_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_levelc/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_levell/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_levelr/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_lfofreq/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_lfofreq_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_moddepth/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_moddepth_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_mode/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_panc/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_panc_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_panl/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_panl_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_panr/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_panr_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_random/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_resonance/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_resonance_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_samples/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_samples_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_spread/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_spread_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_syncc_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_syncl_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_syncr_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_time_tap/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_timec/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_timec_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_timel/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_timel_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_timer/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_timer_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_wet/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/delay_wet_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/direction/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/directtomain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/disto_depth/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/disto_depth_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/disto_dry/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/disto_dry_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/disto_stages/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/disto_tone/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/disto_tone_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/disto_wet/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/disto_wet_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/dsp_order/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/effect1/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/effect2/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/effect3/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/effect4/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_ampeg/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_amplitude/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_amplitude_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_bitred/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_bitred_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_curveX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_cutoff/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_cutoff2/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_cutoff2_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_cutoff_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_decim/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_decim_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_depth_lfoX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_depthadd_lfoX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_driveshape/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_driveshape_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_dynamic/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_eqXbw/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_eqXbw_onccY/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_eqXfreq/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_eqXfreq_onccY/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_eqXgain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_eqXgain_onccY/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_freq_lfoX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_levelX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_levelX_onccY/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_loop/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_loop_count/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_noiselevel/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_noiselevel_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_noisestep/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_noisestep_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_noisetone/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_noisetone_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_pan/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_pan_curve/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_pan_curveccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_pan_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_pitch/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_pitch_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_points/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_rectify/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_rectify_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_resonance/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_resonance2/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_resonance2_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_resonance_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_ringmod/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_ringmod_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_shapeX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_sustain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_timeX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_timeX_onccY/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_volume/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_volume_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_width/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/egN_width_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/end/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eqN_bw/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eqN_bw_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eqN_bwccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eqN_freq/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eqN_freq_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eqN_freqccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eqN_gain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eqN_gain_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eqN_gainccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eqN_type/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eqN_vel2freq/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eqN_vel2gain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eq_bw/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eq_bw_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eq_freq/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eq_freq_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eq_gain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eq_gain_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/eq_type/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil2_gain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil2_gain_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil2_keycenter/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil2_keytrack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil2_type/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil2_veltrack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_attack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_decay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_delay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_depth/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_gain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_gain_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_hold/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_keycenter/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_keytrack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_random/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_release/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_sustain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_type/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_vel2attack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_vel2decay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_vel2delay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_vel2depth/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_vel2hold/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_vel2release/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_vel2sustain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fil_veltrack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_attack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_attack_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_attack_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_attack_shape/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_attackccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_decay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_decay_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_decay_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_decay_shape/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_decay_zero/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_decayccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_delay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_delay_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_delay_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_delayccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_depth/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_depth_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_depth_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_depthccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_dynamic/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_hold/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_hold_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_hold_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_holdccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_release/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_release_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_release_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_release_shape/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_release_zero/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_releaseccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_start/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_start_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_start_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_startccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_sustain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_sustain_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_sustain_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_sustainccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_vel2attack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_vel2decay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_vel2delay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_vel2depth/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_vel2hold/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_vel2release/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fileg_vel2sustain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fillfo_delay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fillfo_depth/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fillfo_depth_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fillfo_depthccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fillfo_depthchanaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fillfo_depthpolyaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fillfo_fade/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fillfo_freq/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fillfo_freqccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fillfo_freqchanaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fillfo_freqpolyaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/filter_cutoff/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/filter_cutoff_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/filter_resonance/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/filter_resonance_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/filter_type/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/filtype/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fxNtomain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/fxNtomix/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/gain_ccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/gain_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/gain_random/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/gate_attack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/gate_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/gate_release/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/gate_stlink/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/gate_threshold/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/global_amplitude/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/global_label/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/global_tune/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/global_volume/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/group/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/group_amplitude/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/group_label/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/group_tune/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/group_volume/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/hibend/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/hibpm/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/hiccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/hichan/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/hichanaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/hihdccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/hikey/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/hint_/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/hipolyaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/hiprog/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/hirand/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/hitimer/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/hivel/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/image/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/include/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/internal/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/key/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/label_ccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/label_keyN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/label_outputN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_amplitude/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_amplitude_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_amplitude_smoothccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_amplitude_stepccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_bitred/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_bitred_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_bitred_smoothccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_bitred_stepccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_count/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_cutoff/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_cutoff2/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_cutoff2_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_cutoff2_smoothccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_cutoff2_stepccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_cutoff_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_cutoff_smoothccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_cutoff_stepccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_decim/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_decim_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_decim_smoothccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_decim_stepccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_delay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_delay_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_depth_lfoX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_depthadd_lfoX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_drive/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_drive_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_drive_smoothccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_drive_stepccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_eqXbw/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_eqXbw_onccY/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_eqXbw_smoothccY/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_eqXbw_stepccY/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_eqXfreq/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_eqXfreq_onccY/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_eqXfreq_smoothccY/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_eqXfreq_stepccY/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_eqXgain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_eqXgain_onccY/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_eqXgain_smoothccY/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_eqXgain_stepccY/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_fade/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_fade_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_freq/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_freq_lfoX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_freq_lfoX_onccY/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_freq_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_freq_smoothccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_freq_stepccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_noiselevel/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_noiselevel_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_noiselevel_smoothccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_noiselevel_stepccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_noisestep/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_noisestep_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_noisestep_smoothccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_noisestep_stepccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_noisetone/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_noisetone_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_noisetone_smoothccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_noisetone_stepccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_offset/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_offsetX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_pan/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_pan_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_pan_smoothccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_pan_stepccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_phase/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_phase_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_pitch/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_pitch_curveccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_pitch_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_pitch_smoothccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_pitch_stepccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_ratio/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_ratioX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_resonance/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_resonance2/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_resonance2_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_resonance2_smoothccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_resonance2_stepccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_resonance_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_resonance_smoothccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_resonance_stepccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_sample_dyn_paramX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_sample_dyn_paramX_onccY/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_scale/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_scaleX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_smooth/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_smooth_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_stepX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_stepX_onccY/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_steps/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_volume/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_volume_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_volume_smoothccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_volume_stepccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_wave/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_waveX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_wave_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_width/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_width_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_width_smoothccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lfoN_width_stepccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/load_end/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/load_mode/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/load_start/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lobend/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lobpm/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/loccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lochan/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lochanaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lohdccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lokey/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/loop_count/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/loop_crossfade/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/loop_end/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/loop_length_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/loop_lengthccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/loop_mode/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/loop_start/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/loop_start_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/loop_startccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/loop_tune/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/loop_type/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/loopcount/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/loopend/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/loopmode/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/loopstart/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/looptune/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/looptype/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lopolyaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/loprog/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lorand/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lotimer/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/lovel/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/master_amplitude/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/master_label/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/master_tune/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/master_volume/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/md5/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/noise_filter/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/noise_level/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/noise_level_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/noise_level_smoothccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/noise_step/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/noise_step_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/noise_stereo/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/noise_tone/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/noise_tone_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/note_offset/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/note_polyphony/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/note_selfmask/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/octave_offset/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/off_by/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/off_curve/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/off_mode/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/off_shape/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/off_time/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/offby/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/offset/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/offset_ccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/offset_mode/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/offset_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/offset_random/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/on_hiccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/on_hihdccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/on_loccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/on_lohdccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/oscillator/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/oscillator_detune/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/oscillator_detune_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/oscillator_mod_depth/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/oscillator_mod_depth_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/oscillator_mod_smoothccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/oscillator_mode/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/oscillator_multi/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/oscillator_phase/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/oscillator_quality/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/oscillator_table_size/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/output/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pan/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pan_ccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pan_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pan_keycenter/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pan_keytrack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pan_law/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pan_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pan_random/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pan_smoothccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pan_stepccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pan_veltrack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/param_offset/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/phase/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/phaser_depth/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/phaser_depth_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/phaser_feedback/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/phaser_feedback_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/phaser_freq/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/phaser_freq_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/phaser_phase_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/phaser_stages/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/phaser_waveform/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/phaser_wet/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/phaser_wet_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_attack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_decay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_delay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_depth/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_hold/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_keycenter/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_keytrack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_random/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_release/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_smoothccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_stepccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_sustain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_vel2attack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_vel2decay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_vel2delay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_vel2depth/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_vel2hold/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_vel2release/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_vel2sustain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitch_veltrack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_attack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_attack_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_attack_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_attack_shape/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_decay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_decay_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_decay_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_decay_shape/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_decay_zero/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_delay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_delay_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_delay_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_depth/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_depth_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_depth_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_depthccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_dynamic/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_hold/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_hold_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_hold_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_release/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_release_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_release_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_release_shape/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_release_zero/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_start/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_start_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_start_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_sustain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_sustain_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_sustain_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_vel2attack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_vel2decay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_vel2delay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_vel2depth/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_vel2hold/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_vel2release/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitcheg_vel2sustain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitchlfo_delay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitchlfo_depth/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitchlfo_depth_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitchlfo_depthccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitchlfo_depthchanaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitchlfo_depthpolyaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitchlfo_fade/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitchlfo_freq/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitchlfo_freqccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitchlfo_freqchanaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/pitchlfo_freqpolyaft/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/polyphony/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/polyphony_group/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/polyphony_stealing/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/position/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/position_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/position_keycenter/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/position_keytrack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/position_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/position_random/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/position_smoothccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/position_stepccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/position_veltrack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/region_label/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/resonance/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/resonance2/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/resonance2_ccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/resonance2_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/resonance2_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/resonance2_smoothccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/resonance2_stepccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/resonance_ccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/resonance_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/resonance_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/resonance_random/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/resonance_smoothccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/resonance_stepccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/reverb_damp/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/reverb_damp_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/reverb_dry/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/reverb_dry_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/reverb_input/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/reverb_input_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/reverb_predelay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/reverb_predelay_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/reverb_size/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/reverb_size_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/reverb_tone/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/reverb_tone_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/reverb_type/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/reverb_wet/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/reverb_wet_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/reverse_hiccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/reverse_loccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/rt_dead/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/rt_decay/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/rt_decayN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/rt_decayN_time/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sample/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sample_dyn_paramN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sample_dyn_paramN_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sample_fadeout/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sample_quality/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/script/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/seq_length/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/seq_position/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/set_ccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/set_hdccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/set_realccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sostenuto_cc/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sostenuto_lo/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sostenuto_sw/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/start_hiccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/start_hihdccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/start_loccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/start_lohdccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/static_cyclic_level/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/static_cyclic_time/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/static_filter/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/static_level/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/static_level_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/static_random_level/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/static_random_maxtime/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/static_random_mintime/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/static_stereo/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/static_tone/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/stop_beats/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/stop_hiccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/stop_hihdccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/stop_loccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/stop_lohdccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/strings_number/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/strings_wet_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sustain_cc/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sustain_lo/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sustain_sw/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sw_default/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sw_down/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sw_hikey/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sw_hilast/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sw_label/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sw_last/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sw_lokey/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sw_lolast/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sw_note_offset/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sw_octave_offset/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sw_previous/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sw_up/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sw_vel/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sync_beats/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/sync_offset/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/tdfir_dry/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/tdfir_dry_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/tdfir_gain/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/tdfir_impulse/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/tdfir_wet/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/tdfir_wet_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/transpose/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/trigger/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/tune/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/tune_ccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/tune_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/tune_keytrack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/tune_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/tune_random/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/tune_smoothccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/tune_stepccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/tune_veltrack/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/type/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/vN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/vNNN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/varNN_/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/varNN_curveccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/varNN_mod/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/varNN_onccX/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/vendor_specific/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/volume/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/volume_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/volume_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/volume_smoothccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/volume_stepccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/waveguide/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/width/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/width_curveccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/width_onccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/width_smoothccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/width_stepccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/xf_cccurve/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/xf_keycurve/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/xf_velcurve/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/xfin_hiccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/xfin_hikey/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/xfin_hivel/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/xfin_loccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/xfin_lokey/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/xfin_lovel/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/xfout_hiccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/xfout_hikey/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/xfout_hivel/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/xfout_loccN/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/xfout_lokey/ + 2024-03-12 + daily + + + https://sfz.github.io/opcodes/xfout_lovel/ + 2024-03-12 + daily + + + https://sfz.github.io/software/engines/ + 2024-03-12 + daily + + + https://sfz.github.io/software/players/ + 2024-03-12 + daily + + + https://sfz.github.io/software/tools/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/basic_sfz_file/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/basics/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/brush_stirs/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/cymbal_muting/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/drum_basics/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/envelope_generators/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/epic_drums/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/legato/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/lfo/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/modular_instruments/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/range_extension/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/sfz1_modulations/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/sfz2_modulations/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/strum/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/subtractive_synths/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/sustained_note_basics/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/unison/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/vibrato/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/videos/ + 2024-03-12 + daily + + + https://sfz.github.io/tutorials/volume/ + 2024-03-12 + daily + + \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..dc4d380d6d66e0a9ddc7bb477bb7900e067b846c GIT binary patch literal 4662 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 + + + + + + + + Engines sample formats support - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Engines sample formats support

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameAIFFFLACMP3OggWAVWavPack
ARIA
Calfbox
sfizz
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/software/players/index.html b/software/players/index.html new file mode 100644 index 000000000..3e4e1c157 --- /dev/null +++ b/software/players/index.html @@ -0,0 +1,945 @@ + + + + + + + + + SFZ Players - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

SFZ Players

There are several SFZ players, which are used to play samples as defined in SFZ +files.

+

Sforzando currently offers the most complete SFZ standard support, including +ARIA extensions, but SFZ files which only use the SFZ v1 or SFZ v2 standard +will work with multiple SFZ players.

+

We use "Free and Open Source" (FOSS) as defined by the OSI +as "software to be freely used, modified, and shared."

+

Supported Opcodes

+

Below are the known links to the various lists of supported opcodes:\ +BassMIDI, Bitwig, HISE, LinuxSampler, liquidsfz, +OpenMPT, sfizz, zerberus (MuseScore <= v3.6.2) or else in our Wiki.

+

Players

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameLicenseLinuxmacOSWindowsDescription
CalfboxGPL-3.0-or-laterC library and Python module to build audio applications like MIDI sequencers or samplers (SFZ or SF2 via Fluidsynth).
Carla (SFZero)GPL-2.0-or-laterFully-featured audio plugin host, with support for many audio drivers and plugin formats.
GraceMITXX
liquidsfzLGPL-2.1XXSFZ sampler library with LV2 and JACK support.
sfizzBSD-2-ClauseSFZ library, AU/LV2/VST3 plugin with JACK support.
SFZeroFOSSAn SFZ (and SF2) player and Juce module.
ZerberusFOSSMuseScore SFZ synthesizer.
LinuxSamplerCustom
BassMIDI VSTiFreewareXXExtension to the BASS audio library, enabling the playing of MIDI files and custom event sequences, using SF2 soundfonts and/or SFZ to provide the sounds. MIDI input is also supported.
HighLifeFreewareA sampler with integrated effects and wave editor, with support for WAV, MP3, OGG, RAW, FLAC, SND (Akai MPC 2000) and even AKP (Akai S5000/S6000) audio formats.
sforzandoFreewareXA free, highly SFZ 2.0 compliant sample player. Supports almost all SFZ v1 and v2 opcodes, plus ARIA extensions.
TX16Wx SamplerFreewareX
ZamplerFreewareXSynth-based sample player using SFZ format as its sound generator. It supports very minimal SFZ v1 opcodes, only for key-range and velocity-range mapping.
ARIAOEMXAn audio sampling and synthesis Engine based on the SFZ 1.0 / SFZ 2.0 open file formats for instrument programming and the Scala open file format to define scales and temperaments.
Bliss SamplerCommercialAn UI themable sampler and wave editor in VST2/3 and AU audio plugin format with selectable high quality interpolation and integrated effects.
SamplelordCommercialXXSample player as standalone or VSTi plugin for Windows 32-bit OS that can load different sounds in different formats. Has basic parameter controls, supports only SFZ v1 opcodes.
TAL-SamplerCommercial
UnifyCommercialX
FalconCommercialX
Wusik 8008, Wusik One, Wusik EVE V5CommercialXX
sfz-web-playerCC0-1.0TypeScript/JavaScript SFZ player using the Web Audio API.
+

Import from SFZ

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameLicenseLinuxmacOSWindowsDescription
Bitwig StudioCommercialSampler device supports the import of SFZ. Also via drag & drop.
HISEGPL-3.0
MSoundFactoryCommercialXSampler module imports/exports SFZ.
OpenMPTBSD-3-ClauseXX
PoiseFreewareXXSimple 16 drum pads percussion sampler, 8 layers. Very limited SFZ support.
Renoise (Redux)Commercial
+ +

No longer available

+
    +
  • Alchemy (Camel Audio was acquired by Apple, + and the current incarnation of Alchemy no longer supports SFZ.)
  • +
  • Cakewalk sfz (backup on web.archive.org)
  • +
  • Equator 2 (per Equator 2 FAQ, "SFZ import is not currently supported")
  • +
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/software/tools/index.html b/software/tools/index.html new file mode 100644 index 000000000..2f0ebb3bc --- /dev/null +++ b/software/tools/index.html @@ -0,0 +1,1031 @@ + + + + + + + + + SFZ Creation Tools - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

SFZ Creation Tools

Although SFZ files can be created with any text editor, and some users have also +created SFZ with spreadsheets, there are some dedicated tools which can make +mapping large amounts of samples easier. As SFZ instruments can quickly grow to +thousands of samples, efficiency in creating the mappings becomes important. +One way of creating SFZ files is to use one of these tools to create the initial +maps with keys, dynamic layers, round robins etc. defined, +then add controls etc. using a text editor.

+

Automappers

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameLicenseLinuxmacOSWindowsDescription
SFZ Python AutomapperPublic Domain
Folder-to-SFZ converterFreeware
Bjoerns Sample MapperFreewareX
soundmapGPL-3.0Online automapper. Can create .sfz and .dspreset
+

Converters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameLicenseLinuxmacOSWindowsDescription
ConvertWithMoss (Java)LGPL-3.0-onlyConverts multisamples in a specific source format to a different destination format.
exs2sfz (Python)ISCEXS24 to SFZ sample library metadata converter.
SFZ to HISE ConverterMITParses and translates/converts SFZ instruments to HISE samplemaps and extracts SFZ opcode data to a JS/JSON object. Runs in a web browser.
EXS2SFZFreewareXImports sample mapping information from EXS24 instruments and generates SFZ files from it.
TX2SFZFreewareXXConverts sample mapping information from TX16WX sampler to SFZ.
Awave StudioCommercialXXMulti-purpose audio tool that reads a veritable host of audio carrying file formats from different platforms, synthesizers, trackers, mobile phones. It can be used in a variety of ways; as a file format converter, as an audio editor, or as a synth instrument editor.
Chicken Systems TranslatorCommercialX
Extreme Sample ConverterCommercialXX
sfz-tools-cliCC0-1.0Command line interface comprised of several tools to read, convert and parse SFZ and audio files.
+

Editors

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameLicenseLinuxmacOSWindowsDescription
PolyphoneGPL-3.0An open-source soundfont editor for creating musical instruments. Note: being a soundfont editor (sf2) it has limited sfz support when exporting.
sfZedFreewareXXAn editor for the SFZ format used by certain VST instruments. It will also convert Soundfont SF2 to SFZ and works with a midi keyboard to allow you to play and set values, including mapping drum samples.
+

Loop Editors

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameLicenseLinuxmacOSWindowsDescription
LoopAuditioneerGPL-3.0-or-laterXSoftware for evaluating, creating and manipulating loops and cues and other properties of wav file metadata.
EdisonCommercialXFully integrated audio editing and recording tool in FL Studio.
Endless WAVFreewareXSoftware to create sustain loops in WAV files (8, 16 and 24 bit) with loop mix, auto loop, realtime crossfade, fade and cut functions.
WavosaurFreewareXXSoftware for editing, processing and recording sounds, wav and mp3 files. Wavosaur has all the features to edit audio (cut, copy, paste, etc.) produce music loops, analyze, record, batch convert. Supports VST plugins, ASIO driver, multichannel wav files, real time effect processing.
+

Misc

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameLicenseLinuxmacOSWindowsDescription
Freepats-toolsGPL-3.0Tools to manage, create and convert sound fonts, collections of sampled musical instruments and sound banks. Originally created for the FreePats project.
sfzlintMITLinter and parser for .sfz files.
sfz-tools-coreCC0-1.0TypeScript/JavaScript library to read, convert and parse SFZ and audio files.
+

Syntax Highlighting

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameLicenseLinuxmacOSWindowsDescription
CudaText EditorMPL-2.0
SFZ major mode for GNU EmacsMIT
for GeanyFOSS
for geditFOSS
for KateMIT
for Sublime TextFOSS
for VSCodeMIT
for Notepad++FOSSXX
for Notepad++FOSSXX
SFZ Tools for UltraEditFOSS
+ +

Some Windows only software can be used under other Unix based operating systems +using Wine / CrossOver or in a virtual machine software like VirtualBox.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/basic_sfz_file/index.html b/tutorials/basic_sfz_file/index.html new file mode 100644 index 000000000..89da5d625 --- /dev/null +++ b/tutorials/basic_sfz_file/index.html @@ -0,0 +1,729 @@ + + + + + + + + + Basic SFZ file - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Basic SFZ file

Just copy the following in your preferred text editor. +We also have a section in the tools page listing some text editor's +SFZ syntax highlighting add-ons. +Fill in the blanks and save as an SFZ:

+
//------------------------------------------------------------------------------
+// A basic sfz template
+//------------------------------------------------------------------------------
+<control>
+default_path= // relative path of your samples
+
+<global>
+// parameters that affect the whole instrument go here.
+
+// *****************************************************************************
+// Your mapping starts here
+// *****************************************************************************
+
+<group> // 1
+
+// Parameters that affect multiple regions go here
+
+  fil_type=         // One of the many filter types available
+  cutoff=           // freq in hertz
+  cutoff_onccX=     // variation in cents
+  resonance=        // value in db
+  resonance_onccX=  // variation in db
+
+  trigger=attack    // or release or first or legato
+  loop_mode=no_loop // or loop_continuous or one_shot or loop_sustain
+
+<region> sample=/*wav or flac file*/ key=// or lokey= hikey= pitch_keycenter=
+<region> sample= key=
+<region> sample= key=
+<region> sample= key=
+<region> sample= key=
+<region> sample= key=
+<region> sample= key=
+<region> sample= key=
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/basics/index.html b/tutorials/basics/index.html new file mode 100644 index 000000000..b26fc5c8f --- /dev/null +++ b/tutorials/basics/index.html @@ -0,0 +1,1105 @@ + + + + + + + + + Intro to SFZ - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Intro to SFZ

A SFZ file is a set of plain text, computer-readable instructions, which +accompany a sample set and define how the sampler should load and work with +those samples. If the samples are the strings of a piano or pipes of an organ, +the SFZ file is the mechanism that connects the key to the hammer which strikes +the strings or the air and signals to the pipes of the organ.

+

SFZ files can be opened, edited, and created in any text editor application, +even the default 'Notepad' in Windows. No external software is necessary +to create or modify a SFZ file, though there are some pieces of software +or scripts out there which greatly ease the creation or editing process. +An example of this is an automapper, which is a script or application that takes +a sample set and uses the names of the samples or actual audio content +to determine how to map those samples.

+

The SFZ file's role is a simple, two-part operation: +1. Explain how to filter or sort the incoming MIDI data and determine which sample(s), if any, should sound in response. +2. Instruct the Sampler how to modulate, or adapt, those samples, such as make them quieter or apply a filter.

+
+graph LR
+A(Incoming MIDI Data) --> B(Sampler)
+B --> C(Audio Output)
+B --> D(SFZ File)
+D --> E(Sample1.wav)
+D --> F(Sample2.wav)
+D --> G(Sample3.wav)
+E --> H(Modulation)
+F --> H
+G --> H
+H --> C
+
+ +

Opcodes

+

The primary component of any SFZ file is the opcode. Opcodes essentially define +'thing=value'. For example, the opcode 'volume=6' defines the volume +of the sample as +6 decibels relative to normal.

+

Opcodes functionally perform two different roles: (1) defining performance parameters, +or (2) restricting the conditions under which that sound may be used. For example, +volume=6 defines a performance property: the sample will sound 6 decibels louder. +On the other hand, lokey=36 hikey=38 limits what condition +the sound may play: the key to trigger the sound must be in the range 36 through 38.

+

You can think of your SFZ file as a giant conditional filter, which systematically takes a MIDI message and attempts to perform a specific action in response. At the most basic level, if you simply type

+
<region>
+sample=piano.wav
+
+

Then that sample will be mapped to MIDI key 60 (middle C), and be available at ALL velocity ranges, ALL key ranges, and under ALL continuous controller values (i.e. regardless of if sustain pedal is held down or not, for example).

+

If we add lokey=58 hikey=62 pitch_keycenter=60 to the region, then our piano note will ONLY respond if a key within the range 58-62 (Bb to D on either side of middle C) is played. We are restricting the conditions under which that specific sample will be played.

+

We can restrict whether or not a specific sample will play by a very wide range of parameters, including which keys are pressed, at what velocity, and what MIDI continuous controller (CC) values are currently present. For example, we can have a piano sample for when the sustain pedal is down AND velocity is less than 20 AND the key pressed is between 58 and 62 as follows:

+
<region>
+sample=piano.wav
+
+pitch_keycenter=60 //here we define the real "concert" pitch of the sample, MIDI note 60 or middle C
+lokey=58 //here we set the range of pitches the region will play on
+hikey=62
+
+lovel=1 //here we set the range of key velocities that the region will play on
+hivel=20
+
+locc64=64 //here we set that the sustain pedal, cc64, must be on for the region to play
+hicc64=127
+
+

If for any reason the MIDI signal DOES NOT meet ALL of the conditions, that sample will not play. That is the basic underlying framework on how SFZ files are organized.

+

Headers

+

Headers serve to organize and separate opcodes, and are marked with < > +on either side. There are three primary headers: <region>, <group>, +and <global>, from most to least restrictive. A region, for example, +may only contain a single sample. A group is comprised of a series of regions, +each containing a single sample. A global is comprised of a series of groups, +each containing a series of regions, etc.

+

<control> is a special purpose header used for a few special opcodes +such as default_path.

+

Generally SFZ instruments are not indented, but if they were, +they would appear as such:

+
<control>
+<global>
+    <group>
+        <region>
+            sample=
+        <region>
+            sample=
+    <group>
+        <region>
+            sample=
+        <region>
+            sample=
+
+

Inheriting

+

Note that if you entered an opcode between a <group> and its first <region>, +that opcode would be inherited by the <region>s within the group. +The same can be done for <global> as well, with <global> affecting all of the +<group>s within it, and that being passed down to each of the <region>s within +those groups as welll, allowing the parameters of dozens, +hundreds, or thousands of samples to be altered with a single line. This massively +cuts down on file size, as you do not need to repeat the same text in each item.

+
<group>
+lovel=64 // enter stuff here if you want to apply it to all regions
+hivel=127
+
+<region>
+sample=Trumpet_C4_v2.wav
+key=60
+
+<region>
+sample=Trumpet_C#4_v2.wav
+key=61
+
+<region>
+sample=Trumpet_D4_v2.wav
+key=62
+
+

is the same as:

+
<region>
+sample=Trumpet_C4_v2.wav
+key=60
+lovel=64
+hivel=127
+
+<region>
+sample=Trumpet_C#4_v2.wav
+key=61
+lovel=64
+hivel=127
+
+<region>
+sample=Trumpet_D4_v2.wav
+key=62
+lovel=64
+hivel=127
+
+

This behavior can be overriden if that same opcode is specified within +the lesser header with a different value. For example:

+
<global>
+    volume=6 //this value will be inherited by everything, unless overriden below
+
+    <group> //Group A
+        volume=5
+
+        <region> //Region 1
+            volume=4
+
+        <region> //Region 2
+
+    <group> //Group B
+
+        <region> //Region 3
+            volume=2
+
+        <region> //Region 4
+
+

(indented for clarity; SFZ is not usually indented)

+

Here's what's going on here:

+
    +
  • Region 1's volume is 4, as it has volume defined.
  • +
  • Region 2's volume is 5, as it doesn't have volume defined, + so it inherits from Group A, as Group A has volume defined.
  • +
  • Region 3's volume is 2, as it has volume defined.
  • +
  • Region 4's volume is 6 as it doesn't have volume defined, nor does Group B, + so it inherits from the Global volume setting which is 6.
  • +
+

Always look for opportunities to use inheriting to keep your scripts tidy +by removing duplicate code.

+

Header Nesting

+

Unlike many popular scripting or programming languages or markup languages like HTML, XML, JSON, etc. there is no such concept as nesting in SFZ. Nesting is when a header of the same type can exist within another header of the same type. Nesting is very useful, but it can add a lot of complexity and layers to a language, and is a common source of bugs or mistakes as well as a slight impediment of speed. The downside to the lack of nesting is that the number of layers is restricted severely rather than infinite. That is why there is both <group> and <global>, and the ARIA Player/Sforzando will also use an intermediate between the two, <master> to provide one more layer.

+

In SFZ format, a header ends when the next header of that type is started. For example, if I put a <region> after another <region>, it will end the first region automatically at the start of declaring the next.

+

Keep in mind that group, global, and master are merely macros to reduce duplicate code. When compiled (in most SFZ players), the SFZ file will run as if everything is inside the regions themselves.

+

Organization of Opcodes within Headers

+

Opcodes may be listed in a row OR one per line, unofficially known as 'condensed' and 'expanded' view:

+
<region>
+sample=piano_D4_vl1.wav
+lokey=62
+hikey=63
+pitch_keycenter=62
+lovel=1
+hivel=50
+
+

is equal to:

+
<region> sample=piano_D4_vl1.wav lokey=62 hikey=63 pitch_keycenter=62 lovel=1 hivel=50
+
+

You can see how much space is saved in the latter case, and it allows bulk adjustments to be done easier and makes debugging slightly easier, e.g.:

+
<region> sample=piano_D4_vl1.wav lokey=62 hikey=63 pitch_keycenter=62 lovel=1 hivel=50
+<region> sample=piano_E4_vl1.wav lokey=64 hikey=65 pitch_keycenter=64 lovel=1 hivel=50
+<region> sample=piano_F#4_vl1.wav lokey=66 hikey=67 pitch_keycenter=66 lovel=11 hivel=50
+<region> sample=piano_G#4_vl1.wav lokey=68 hikey=69 pitch_keycenter=68 lovel=1 hivel=50
+
+

You can see there is something wrong with the third region, a typo of lovel=11 instaed of lovel=1.

+

These four lines would replace over 20 lines, making files much more manageable. It is possible to swap between the two by using a find-and-replace operation in your text editor (e.g. Notepad++ or equivalent) to replace new line character with a space (this can be done by selecting a blank line by clicking and dragging down on a blank so that one line is highlighted, THEN open the find/replace dialog and it will be auto-filled in the 'find' field; put a single space in the 'replace with' field. Try executing and see if it works; see the video below for a visual representation of the process).

+

https://youtu.be/Lr7_qS2iV30

+

Pitch

+

If using a pitch based instrument, you will most likely be working heavily with +three opcodes: lokey, hikey, and pitch_keycenter. These opcodes define the range +of MIDI note numbers or note names that will allow the note to play. +It is highly recommended that you use MIDI note numbers, as pitch naming +conventions are poorly standardized at best.

+

You can remember the MIDI note numbers for the C's as follows, +using International Pitch Notation, which states C4=MIDI note number 60:

+
C1:24
+C2: 36 (this is the C below bass clef)
+C3: 48 (this is the C in bass clef)
+C4: 60 (this is Middle C)
+C5: 72 (this is the C in treble clef)
+C6: 84 (this is the C above treble clef)
+C7: 96
+
+

(note that many, many samplers use a different standard of C3=60, +in which case all numbers are shifted down one; in fact, this is probably much more commonly found)

+

You'll notice each value is exactly 12 notes apart from the others. +It's not too difficult to calculate notes between the C's, or keep a chart +on your wall or desk with the note names and MIDI numbers listed out. +Many hours have been saved debugging and mapping for me in this way.

+

Velocity Layers

+

For most instruments, it is possible to perform notes of varying intensity. For classically trained musicians, this might be called dynamics (such as piano, forte, mezzo-forte, etc.). For a piano, when a key is struck with minimal force versus a great deal of force, a rather different tone is emitted, with harder strikes having more higher frequency content present.

+

In the MIDI world, we refer to this as Velocity, borrowing the term from the world of physics. In the original MIDI spec, velocity has a range of 1-127 (aside: a velocity value of '0' is actually an alias of 'note off' signal, so the actual range is 1-127, not 0-127).

+

So, to make a realistic piano (or really most any instrument), it is necessary to sample the tone of the instrument at several different dynamic levels or velocities. We collectively refer to these sets of levels as Velocity Layers or Dynamic Layers.

+

For example, let us say we record a piano with three such velocity layers. The softest layer might be what a classically trained pianist might call piano or pianissimo (p or pp marking). The moderate layer might be mezzo-forte (mf), and the hardest layer fortissimo (ff).

+

In SFZ, we would assign each layer to a velocity range from the 1-127 range. For example, the lowest layer might get the range of 1-50, the medium from 51-100, and the loudest from 101-127.

+

We express this in SFZ using lovel and hivel, for example:

+
<region>
+sample=piano_C4_vl1.wav
+lovel=1
+hivel=50
+
+<region>
+sample=piano_C4_vl2.wav
+lovel=51
+hivel=100
+
+<region>
+sample=piano_C4_vl3.wav
+lovel=101
+hivel=127
+
+

We would of course also add our lokey, hikey, and pitch_keycenter to these as well if we recorded multiple tones on the instrument.

+

Using Velocity with Groups & Inheriting

+

To simplify our lives and keep our SFZ files from being huge, we can also use the <group> header to organize our velocity layers, for example.

+

Any <region> within a <group> will of course inherit whatever is listed in that <group>, so if we group our samples as shown below, we can significantly cut down on the amount of space needed in the file:

+
<group> //velocity layer 1 (pp)
+lovel=1
+hivel=50
+
+<region> //C4
+sample=piano_C4_vl1.wav
+lokey=60
+hikey=61
+pitch_keycenter=60
+
+<region> //D4
+sample=piano_D4_vl1.wav
+lokey=62
+hikey=63
+pitch_keycenter=62
+
+<region> //E4
+sample=piano_E4_vl1.wav
+lokey=64
+hikey=64
+pitch_keycenter=64
+
+<region> //F4
+sample=piano_F4_vl1.wav
+lokey=65
+hikey=66
+pitch_keycenter=65
+
+<group> //velocity layer 2 (mf)
+lovel=51
+hivel=100
+
+<region> //C4
+sample=piano_C4_vl2.wav
+lokey=60
+hikey=61
+pitch_keycenter=60
+
+<region> //D4
+sample=piano_D4_vl2.wav
+lokey=62
+hikey=63
+pitch_keycenter=62
+
+<region> //E4
+sample=piano_E4_vl2.wav
+lokey=64
+hikey=64
+pitch_keycenter=64
+
+<region> //F4
+sample=piano_F4_vl2.wav
+lokey=65
+hikey=66
+pitch_keycenter=65
+
+<group> //velocity layer 3 (ff)
+lovel=101
+hivel=127
+
+<region> //C4
+sample=piano_C4_vl3.wav
+lokey=60
+hikey=61
+pitch_keycenter=60
+
+<region> //D4
+sample=piano_D4_vl3.wav
+lokey=62
+hikey=63
+pitch_keycenter=62
+
+<region> //E4
+sample=piano_E4_vl3.wav
+lokey=64
+hikey=64
+pitch_keycenter=64
+
+<region> //F4
+sample=piano_F4_vl3.wav
+lokey=65
+hikey=66
+pitch_keycenter=65
+
+

Keep in mind of course that we can always override the inheriting behavior here, such as in the case of a sample for which only two velocity layers were recorded. This might happen in the case of a mistake, or in the case where time was running short in the session, or in some cases where the instrument physically has less distinction between its quietest and loudest sounds and it was desirable to save some time.

+

You can also use group, master, and global to organize other things than velocity layers, such as keys, sustain pedal state, round robins, mic positions, and more. Just be careful as in some cases you might run out of headers to use if the file gets too complex, such as if you are using multiple mic positions, round robins, and grouping your velocity layers as well.

+

Includes

+

One final more advanced topic to discuss is Includes. Perhaps the dark magic of SFZ, #include allows you to take the contents of one SFZ file and import them into your current file. This allows another layer of organiziation to take place, with, for example, all of the samples for each drum in a drum kit to exist in a separate .sfz file without an assigned key range, and a single master .sfz file to inherit each of those into a <group> where their key range is assigned (see Virtuosity Drums as a good example of this process). This might also be useful for an acoustic instrument to organize by mic position or articulation.

+

This allows you to keep an extremely tidy workflow, creating easily-managed main files where you can rapidly change key ranges and other control values to get the controls you need.

+ + +
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/brush_stirs/index.html b/tutorials/brush_stirs/index.html new file mode 100644 index 000000000..83892072f --- /dev/null +++ b/tutorials/brush_stirs/index.html @@ -0,0 +1,1069 @@ + + + + + + + + + Brush stirs - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Brush stirs

Not all drum sounds are hits which can be used in the usual way described in our +drum basics article. One major exception are brush techniques which involve +scraping the brush across a drum head, often in a circle. If you are not sure what +this looks or sounds like, this video is a good guide. +These techniques are called swirls or stirs, and for the purpose of this article +we'll call them stirs. As the sound changes in intensity, and the duration +of the scrapes needs to fit the tempo and rhythm of the song, sampling them +requires a different approach to the usual drum hits. The two common approaches +are to completely ignore this technique and not sample it at all, and to record +loops to fit various tempos.

+

This article describes another approach. The key principle here +is that stirs are a noisy, nonlinear sound with a lot of randomness, which +makes them very easy to crossfade or loop with no phase issues. Therefore, +instead of trying to record stirs performed in a realistic way, we propose +recording long, unrealistically steady stirs with no perceptible rhythm or +expression, and then using those samples as source material for building up +a musical stir.

+

Recording the source material

+

For the purposes of this example, let's assume the source stirs are recorded +at four speeds, with 1 being the slowest and 4 being the fastest. Speed 1 is +slow enough that a full circle around the head of the drum is completed in +more than 4 seconds. That's enough to fill a measure at 60 bpm and still have +some sound left, so the user can start the next stir before the previous one +ends, and thus achieve a continuous sound. Speed 4 is several circles per +second, to match the speed at which the brush would be moving during the peak +of an aggressive stir. Making the sound steady at this speed is a challenge.

+

As for how long the recordings need to be, speed 1 needs to be long enough +for the longest stir we want to be able to make. However, if tuning controls +are to be applied, it's important to remember that pitching a sample up +shortens it, so if the tuning range is to extend to one octave up, then a +10-second sample is the minimum to make a 5-second stir. Speeds 3 and 4 +are not used thorughout the duration of a stir but only for peaks, and for +the purposes of this example they can be half the length of speed 1.

+

Simple stir model

+

We can make a very simple stir using speed 1 by playing the sample with +loop_mode set to one_shot, like we normally would set it for a +drum hit, and using a simple volume envelope to fade this sample +in over a time, and then fade it out.

+
<region>key=26 loop_mode=one_shot
+sample=snare_stir_speed_1.wav
+ampeg_attack=1.0 ampeg_decay=1.0 ampeg_sustain=0
+
+

The resulting volume envelope will look something like this. The illustrations are +not precise, only general shapes.

+

Simple stir envelope

+

This is a good start, and we can add expression and realism by layering a +faster speed on top of it near the stir's peak, with half the duration +of the base layer. We use ampeg_delay to delay the start of the second +layer by the same amount, so the peaks of both layers align in time.

+
<region>key=26 loop_mode=one_shot
+sample=snare_stir_speed_1.wav
+ampeg_attack=1.0 ampeg_decay=1.0 ampeg_sustain=0
+<region>key=26 loop_mode=one_shot
+sample=snare_stir_speed_3.wav
+ampeg_delay=0.5 ampeg_attack=0.5 ampeg_decay=0.5 ampeg_sustain=0
+
+

Two layer stir envelopes

+

Modulating stir duration

+

This has a fixed duration and is not flexible, but the stir length can +easily be modulated by a single CC parameter changing all the +envelope durations. Extremely short stirs, lasting only a small fraction +of a second, are obviously not going to sound realistic, so we can use +a minimum value to prevent that. Let's use CC1 (standard mod wheel).

+
<region>key=26 loop_mode=one_shot
+sample=snare_stir_speed_1.wav
+ampeg_attack=0.1 ampeg_decay=0.1 ampeg_sustain=0
+ampeg_attackcc1=0.4 ampeg_decaycc1=0.4
+<region>key=26 loop_mode=one_shot
+sample=snare_stir_speed_3.wav
+ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0
+ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25
+
+

Making the shape more realistic

+

Drummers testing the above model have asked for some adjustments to +make it sound more realistic. One is to make the first half of the base +layer steadier. This can be done very easily by shortening the attack +and adding a hold time to the envelope, ensuring that they still add up +to the same amount of time that the faster layer's delay and attack, +so the peak will remain aligned at all values of the modulation +parameter. The attack stage should generally be shorter than the hold +stage.

+
<region>key=26 loop_mode=one_shot
+sample=snare_stir_speed_1.wav
+ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4
+<region>key=26 loop_mode=one_shot
+sample=snare_stir_speed_3.wav
+ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0
+ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25
+
+

Stir envelopes using hold in base layer

+

Also, the peak should be sharper and more accented than it is +with linear envelopes. Changing the envelope curves accomplishes this, +though the initial attack envelope of the base layer can remain +linear. The below values seem like a decent start.

+
<region>key=26 loop_mode=one_shot
+sample=snare_stir_speed_1.wav
+ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4
+ampeg_attack_shape=0.0 ampeg_decay_shape=-1.4
+<region>key=26 loop_mode=one_shot
+sample=snare_stir_speed_3.wav
+ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0
+ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25
+ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4
+
+

Stir envelopes with curves

+

Adjusting the envelope shapes

+

The above fixed envelope shapes are good for medium tempos and energy levels, +but for slow tempos the flat envelope shapes actually work quite well, and +more energetic tracks might sound better with even sharper envelope peaks. It +would be nice to adjust the envelope curve shapes with MIDI CC, but it is not +currently possible to do this. It's possible to work around this by crossfading +sharp-envelope and flat-envelope regions, or use locc/hicc to select between +several pre-baked envelope shapes. Here's an example of the latter method.

+
<group>key=26 loop_mode=one_shot
+
+<region>hicc100=42
+sample=snare_stir_speed_1.wav
+ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4
+ampeg_attack_shape=0.0 ampeg_decay_shape=0.0
+<region>hicc100=42
+sample=snare_stir_speed_3.wav
+ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0
+ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25
+ampeg_attack_shape=0.0 ampeg_decay_shape=0.0
+
+<region>locc100=43 hicc100=86
+sample=snare_stir_speed_1.wav
+ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4
+ampeg_attack_shape=0.0 ampeg_decay_shape=-1.4
+<region>locc100=43 hicc100=86
+sample=snare_stir_speed_3.wav
+ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0
+ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25
+ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4
+
+<region>locc100=87
+sample=snare_stir_speed_1.wav
+ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4
+ampeg_attack_shape=0.0 ampeg_decay_shape=-3.5
+<region>locc100=87
+sample=snare_stir_speed_3.wav
+ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0
+ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25
+ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5
+
+

Adding ornaments

+

So far, we have a stir with adjustable duration and shape which peaks +halfway through. More complex patterns can have more than one peak, +though. A simple way to emulate that is to use a differnet MIDI note +to trigger short ornaments which will add a brief extra sound to the +stir, thus emulating a momentary acceleration of the brush. We can use +one of the higher stir speeds for this.

+
<group>key=27 loop_mode=one_shot sample=snare_stir_speed_2.wav
+ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0
+ampeg_attackcc1=0.2 ampeg_decaycc1=0.2
+
+<region>hicc100=42
+ampeg_attack_shape=0.0 ampeg_decay_shape=0.0
+
+<region>hicc100=42
+ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4
+
+<region>hicc100=42
+ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5
+
+

Accents

+

We can also create accents, which are similar to the typical stir but peak much +more quickly and use faster speeds. In pracitce, they can be used either as +short, aggressive stirs, or added on top of basic stirs to create more complex +patterns. The difference in the SFZ here is that the attack curve shape can be applied to +the attack portion as well, and there is no hold stage in the envelope.

+
<group>key=28 loop_mode=one_shot
+
+<region>hicc100=42
+sample=snare_stir_speed_2.wav
+ampeg_attack=0.05 ampeg_decay=0.1 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_decaycc1=0.4
+ampeg_attack_shape=0.0 ampeg_decay_shape=0.0
+<region>hicc100=42
+sample=snare_stir_speed_4.wav
+ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_decaycc1=0.2
+ampeg_attack_shape=0.0 ampeg_decay_shape=0.0
+
+<region>locc100=43 hicc100=86
+sample=snare_stir_speed_2.wav
+ampeg_attack=0.05 ampeg_decay=0.1 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_decaycc1=0.4
+ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4
+<region>locc100=43 hicc100=86
+sample=snare_stir_speed_4.wav
+ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_decaycc1=0.2
+ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4
+
+<region>locc100=87
+sample=snare_stir_speed_2.wav
+ampeg_attack=0.05 ampeg_decay=0.1 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_decaycc1=0.4
+ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5
+<region>locc100=87
+sample=snare_stir_speed_4.wav
+ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_decaycc1=0.2
+ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5
+
+

Muting

+

As all the above sounds have loop_mode set to one_shot, triggering a note causes +the sound to play until the volume envelope drops to zero. If ending a stir +earlier than that is required, we can use polyphony groups. The group +and off_by opcodes are the key ones here. We can use them to make stirs +self-mute, so that triggering a new stir will mute any previously playing stirs, +as well as add a key which produces no sound, using silence instead of a sample, +but +is in the same mute groups, so triggering this key will mute any stir or accent +currently playing. This key can be used to stop stirs early.

+

Note that, as usual, separate groups are needed for +layers which are to play simultaneously, and if there are multiple microphone +positions then those would need separate groups as well. In the below example we +also have stirs mute accents, and vice versa, although the ornaments are left +out of the mute groups and can be layered on top of other sounds without muting them. +For a more sophisticated use of mute groups with other pieces of the drum kit, +please see cymbal muting.

+
<global>loop_mode=one_shot off_mode=normal
+ampeg_release=0.1 ampeg_releasecc1=0.2
+
+<group>key=26
+
+<region>hicc100=42
+sample=snare_stir_speed_1.wav
+ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4
+ampeg_attack_shape=0.0 ampeg_decay_shape=0.0
+group=1 off_by=1
+<region>hicc100=42
+sample=snare_stir_speed_3.wav
+ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0
+ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25
+ampeg_attack_shape=0.0 ampeg_decay_shape=0.0
+group=2 off_by=2
+
+<region>locc100=43 hicc100=86
+sample=snare_stir_speed_1.wav
+ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4
+ampeg_attack_shape=0.0 ampeg_decay_shape=-1.4
+group=1 off_by=1
+<region>locc100=43 hicc100=86
+sample=snare_stir_speed_3.wav
+ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0
+ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25
+ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4
+group=2 off_by=2
+
+<region>locc100=87
+sample=snare_stir_speed_1.wav
+ampeg_attack=0.05 ampeg_hold=0.05 ampeg_decay=0.1 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_holdcc1=0.35 ampeg_decaycc1=0.4
+ampeg_attack_shape=0.0 ampeg_decay_shape=-3.5
+group=1 off_by=1
+<region>locc100=87
+sample=snare_stir_speed_3.wav
+ampeg_delay=0.05 ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0
+ampeg_delaycc1=0.25 ampeg_attackcc1=0.25 ampeg_decaycc1=0.25
+ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5
+group=2 off_by=2
+
+<group>key=27 sample=snare_stir_speed_2.wav
+ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0
+ampeg_attackcc1=0.2 ampeg_decaycc1=0.2
+
+<region>hicc100=42
+ampeg_attack_shape=0.0 ampeg_decay_shape=0.0
+
+<region>hicc100=42
+ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4
+
+<region>hicc100=42
+ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5
+
+<group>key=28
+
+<region>hicc100=42
+sample=snare_stir_speed_2.wav
+ampeg_attack=0.05 ampeg_decay=0.1 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_decaycc1=0.4
+ampeg_attack_shape=0.0 ampeg_decay_shape=0.0
+group=1 off_by=1
+<region>hicc100=42
+sample=snare_stir_speed_4.wav
+ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_decaycc1=0.2
+ampeg_attack_shape=0.0 ampeg_decay_shape=0.0
+group=2 off_by=2
+
+<region>locc100=43 hicc100=86
+sample=snare_stir_speed_2.wav
+ampeg_attack=0.05 ampeg_decay=0.1 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_decaycc1=0.4
+ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4
+group=1 off_by=1
+<region>locc100=43 hicc100=86
+sample=snare_stir_speed_4.wav
+ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_decaycc1=0.2
+ampeg_attack_shape=3.5 ampeg_decay_shape=-1.4
+group=2 off_by=2
+
+<region>locc100=87
+sample=snare_stir_speed_2.wav
+ampeg_attack=0.05 ampeg_decay=0.1 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_decaycc1=0.4
+ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5
+group=1 off_by=1
+<region>locc100=87
+sample=snare_stir_speed_4.wav
+ampeg_attack=0.05 ampeg_decay=0.05 ampeg_sustain=0
+ampeg_attackcc1=0.05 ampeg_decaycc1=0.2
+ampeg_attack_shape=5.2 ampeg_decay_shape=-3.5
+group=2 off_by=2
+
+<group>key=29 sample=*silence
+
+<region>group=1 off_by=1
+<region>group=2 off_by=2
+
+

It is, of course, possible to apply round robins and dynamic layers +to this, just like any other drum sound. That is left as an exercise to the reader.

+

Alternative approach

+

The above approach was developed to be playable from an electronic drum kit +controller. For keyboard controllers or sequencing, another approach is possible +where instead of using a MIDI note to trigger a new stir every time the drummer +would complete a circle, we hold down a long note for as long as we want to produce +stirs (so, possibly for several measures, or even the entire duration of a song). +We then use MIDI CC to crossfade between the layers to +modulate the speed of the stir in order to create realism and rhythmic interest. +In order to be able to do this, the samples will have to be looped, but as stated +at the beginning, looping or crossfading noisy samples is very easy as there are +no phase issues. We also set the loop_mode opcode to continuous +instead of the one_shot setting used in the earlier approach.

+
<group>key=26 loop_mode=continuous ampeg_release=0.25
+<region>sample=snare_stir_speed_1.wav xfin_locc1=0 xfin_hicc1=31 xfout_locc1=32 xfout_hicc1=63
+<region>sample=snare_stir_speed_2.wav xfin_locc1=32 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=95
+<region>sample=snare_stir_speed_3.wav xfin_locc1=64 xfin_hicc1=95 xfout_locc1=96 xfout_hicc1=127
+<region>sample=snare_stir_speed_4.wav xfin_locc1=96 xfin_hicc1=127
+
+

In practice, this approach has proven more difficult to use, with it being easy +to sound obviously unrealistic by moving the MIDI CC parameter too quickly or +staying at high values for too long. With care, however, it can produce realistic +results, and it is extremely flexible.

+

Further possibilities

+

The brush flutter technique can be treated similarly to the base layer of the stirs. +There is no need to layer faster and slower flutters. In theory, this approach +could also be extended to other noisy, highly nonlinear sounds which can vary +in duration - perhaps shakers. The main challenge there would be to record shakers +shaking smoothly for an extended duration.

+

It is also certainly possible to further improve the above model with more realism +and playablity.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/cymbal_muting/index.html b/tutorials/cymbal_muting/index.html new file mode 100644 index 000000000..534a98b47 --- /dev/null +++ b/tutorials/cymbal_muting/index.html @@ -0,0 +1,1626 @@ + + + + + + + + + Cymbal muting - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Cymbal muting

A lot of the information in this article deals with implementing sampled hi-hats +and cymbals in general, and although the code examples are in SFZ, the principles +should also apply to other samplers, or even synthesized cymbals. +Muting previously played notes is important with monophonic instruments, such as +flutes or trumpets. With hi-hats, it is also crucial to sounding like a hi-hat - +an open hi-hat hit will be muted in real life when the hi-hat pedal is closed. +Let's start with a simple hi-hat with closed hit, foot chik, half-open and open +samples, with the latter two on the same key and degree of openness selected by +MIDI CC 4 - the common hi-hat pedal assignment in electronic drum kits.

+
<region>key=42 sample=hh_closed.wav
+<region>key=44 sample=hh_chik.wav
+<region>key=46 sample=hh_half_open.wav hicc4=63
+<region>key=46 sample=hh_open.wav locc4=64
+
+

Simple self-muting

+

The above hi-hat has no muting implemented, so playing +a closed hit after an open one would result in the open hit unrealistically +continuing to ring. The simplest way to take care of that is to put all the +regions in the same ‹group› and use off_by to make that group mute itself - +that will mean any hi-hat hit will mute any currently playing hi-hat hit. +Setting off_mode to normal and using ampeg_release +or off_time to set the time it takes for the previous sample to fade out +also helps this sound a bit more natural.

+
<group>
+off_mode=normal
+ampeg_release=0.07
+<region>key=42 sample=hh_closed.wav group=1 off_by=1
+<region>key=44 sample=hh_chik.wav group=1 off_by=1
+<region>key=46 sample=hh_half_open.wav hicc4=63 group=1 off_by=1
+<region>key=46 sample=hh_open.wav locc4=64 group=1 off_by=1
+
+

Hierarchical self-muting

+

This is the way many virtual drum kits work, but it is not fully satisfactory if, +for example, playing a ride pattern on an open hi-hat. Things do start getting more +complicated here, though, and many developers feel that it's enough to stop here, just +implement the above rules, and have a reasonably working virtual hi-hat. For those +who want more, however, Peter L. Jones has developed a hierarchy of muting, where +hits which are more closed mute hits that are more open, but hits which are +more open do not mute hits which are more closed. Hits also don't mute hits with +the same degree of openness.

+

So, chiks mute all hits, closed hits mute any partially open hits but not chiks +or closed hits etc. With this amount of degrees of openness, half-open hits would +mute open hits, and open hits would mute nothing. So, we need to put each hi-hat +articulation in a different group. This, however, means we need a group which +mutes several other groups, and regions in a group cannot have multiple or +varying off_by values. So, what we have to do is use silence - either the silence* +setting of sample ARIA extension, or an actual file of a short silence. +Note that the silence samples also have to have off_by settings +the same as the hi-hat samples in their mute group. Also, since group 1 doesn't +mute anything, we don't need to add any silence regions to that group. +Note that the group opcode used here and the ‹group› +header are completely separate concepts - "group" for the remainder of this +article refers to the opcode, not the header, though group headers are also used +in the code examples.

+
<group>
+// Here are the hi-hat samples
+off_mode=normal
+ampeg_release=0.07
+
+<region>key=42 sample=hh_closed.wav group=3 off_by=4
+<region>key=44 sample=hh_chik.wav group=4
+<region>key=46 sample=hh_half_open.wav hicc4=63 group=2 off_by=3
+<region>key=46 sample=hh_open.wav locc4=64 group=1 off_by=2
+
+<group>group=2 off_by=3
+// The range which mutes open hi-hats - that is, everything except open
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+<region> key=42
+<region> key=44
+<region> key=46 hicc4=63
+
+<group>group=3 off_by=4
+// The range which mutes half-open and open hi-hats - that is, closed and chik
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+<region> key=42
+<region> key=44
+
+<group>group=4
+// The range which mutes closed, half-open and open hi-hats - that is, just chik
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+<region> key=44
+
+

Special treatment of foot splashes

+

The above isn't perfect - for example, fully opening up a hi-hat after playing +a hard half-open hit in the real world would stop the clashes between the top +and bottom, effectively stopping a half-open sound and replacing it with quieter +open ringing - but it is a reasonable compromise covering various degrees of +openness. Also, the more degrees of openness there are, the more groups will be needed.

+

There are, however, more hi-hat articulations possible. One which has special +behavior when it comes to muting is the foot splash - closing the hi-hat with +the pedal, then quickly reopening it. This articulation needs to mute itself, +because playing one foot splash after another involves closing the hi-hat, which +will mute the ringing.

+

Whether the splash should mute other types of hits is an open question, however. +Splashes, especially gentler ones, involve only momentary contact of the cymbal +edges and not complete closure. Whether an open hi-hat hit followed by a splash +sounds better when the splash mutes the open hit is left as a decision to the +reader.

+

The below example has the splash muting everything else, except for pedal chiks, +because it invovles closing the hi-hat fully. So, if a +kit has foot splash samples (for which there is no standard general MIDI note +assignment, so let's use 54 here - an octave above the chik, though in general +MIDI that's supposed to be the cowbell note), we'd need to set up one more group, +and have that mute itself. It will also need to be muted by all other types of +hi-hat hits, except for fully open hits.

+
<group>
+//Here are the hi-hat samples
+off_mode=normal
+ampeg_release=0.07
+
+<region>key=42 sample=hh_closed.wav group=4 off_by=5
+<region>key=44 sample=hh_chik.wav group=5
+<region>key=46 sample=hh_half_open.wav hicc4=63 group=3 off_by=4
+<region>key=46 sample=hh_open.wav locc4=64 group=2 off_by=3
+<region>key=54 sample=hh_splash.wav group=1 off_by=1
+
+<group>group=1 off_by=1
+//The range which mutes foot splashes - everything except open and foot splash
+//Foot splash mutes itself, but this group does not include the foot splash key
+//That's because the foot splash samples themselves are in the same group
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+<region> key=42
+<region> key=44
+<region> key=46
+
+<group>group=3 off_by=4
+//The range which mutes open hi-hats - that is, everything except open
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+<region> key=42
+<region> key=44
+<region> key=46 hicc4=63
+<region> key=54
+
+<group>group=4 off_by=5
+//The range which mutes half-open and open hi-hats - that is, closed, chik and foot splash
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+<region> key=42
+<region> key=44
+<region> key=54
+
+<group>group=5
+//The range which mutes closed, half-open and open hi-hats - that is, just chik and foot splash
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+<region> key=44
+<region> key=54
+
+

Limiting polyphony

+

This works reasonably well. Another potential refinement is to also avoid +excessive buildup when the more open articulations (which with some hi-hat pairs +can ring for upwards of 20 seconds), while still allowing enough for ride +patterns on an open hi-hat to sound right. We can do this by using the polyphony +opcode to put a limit on the number of polyphony voices used by a specific group. +Note this must be set for the silence regions, also, so that every region in a +group will have the same off_by and polyphony as all the other regions in that +group. Polyphony of 4 for the open hi-hats and 3 for the half-open are judgment +calls. Drier cymbals and articulations with less sustain will generally sound +realistic with lower numbers here, and brushes might need a lower number than +sticks. Limiting the polyphony for the more closed articulations is not necessary +in practice, unless playing unrealistically dense trap hi-hat patterns, because +they don't ring very long anyway. Limiting the polyphony for the foot splash is +not necessary at all, because it mutes itself.

+
<group>
+//Here are the hi-hat samples
+off_mode=normal
+ampeg_release=0.07
+
+<region>key=42 sample=hh_closed.wav group=4 off_by=5
+<region>key=44 sample=hh_chik.wav group=5
+<region>key=46 sample=hh_half_open.wav hicc4=63 group=3 off_by=4 polyphony=3
+<region>key=46 sample=hh_open.wav locc4=64 group=2 off_by=3 polyphony=4
+<region>key=54 sample=hh_splash.wav group=1 off_by=1
+
+<group>group=1 off_by=1
+//The range which mutes foot splashes
+//All sounds except open mute foot splashes, but this group does not include the foot splash key
+//That's because the foot splash samples are in the same group, and will mute anything else
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+<region> key=42
+<region> key=44
+<region> key=46 hicc4=63
+
+<group>group=3 off_by=4 polyphony=3
+//The range which mutes open hi-hats - that is, everything except open and foot splash
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+<region> key=42
+<region> key=44
+<region> key=46 hicc4=63
+<region> key=54
+
+<group>group=4 off_by=5
+//The range which mutes half-open and open hi-hats - that is, closed, chik and foot splash
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+<region> key=42
+<region> key=44
+<region> key=54
+
+<group>group=5
+//The range which mutes closed, half-open and open hi-hats - that is, just chik and foot splash
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+<region> key=44
+
+

Edge cases

+

The above can sound strange when a hard hi-hat hit is being muted by a much quieter one. If +the hit doing the muting is both quiet and short, it can be practically inaudible, and the +resulting sound seems to only be the open hit, suddenly fading out. This is especially risky +if using amp_veltrack set to 100, which will make hits with very low velocity extremely quiet, +or if the lowest dynamic layers of more closed hits and foot chiks are recorded very quietly.

+

Lowering amp_veltrack for the lowest velocity layers is one potential way to reduce this +problem, as is setting amp_velcurve_1 to some value around 0.2 to 0.5 (higher values if there +are more dynamic layers).

+

In real life, however, a hard open hi-hat hit would have reduced in volume before the start +of the soft closed hit, as the pedal needs to be closed before a closed hit can be made. +This would, of course, cause many edge clashes along the way, which we do not have a way +to emulate. However, it is possible to use the pedal's MIDI CC to make the open sample quieter +outside of the range where the open hi-hat sample would be triggered. This can be done by modulating +the hi-hat's amplitude, and applying a ‹curve› which will +keep the amplitude at 100% unless the pedal is a good deal more closed than it was when the sample was triggered.

+
<group>
+//Here are the hi-hat samples
+off_mode=normal
+ampeg_release=0.07
+
+<region>key=42 sample=hh_closed.wav group=4 off_by=5
+<region>key=44 sample=hh_chik.wav group=5
+<region>key=46 sample=hh_half_open.wav hicc4=63 group=3 off_by=4 amplitude_cc4=100 amplitude_curvecc4=21 amplitude_smoothcc4=150
+<region>key=46 sample=hh_open.wav locc4=64 group=2 off_by=3 amplitude_cc4=100 amplitude_curvecc4=21 amplitude_smoothcc4=150
+<region>key=54 sample=hh_splash.wav group=1 off_by=1
+
+<curve>curve_index=21
+v000=0.13
+v037=0.8
+v077=1
+v127=1
+
+<curve>curve_index=22
+v000=0.1
+v037=0.7
+v077=1
+v127=1
+
+

Using smoothing on the amplitude modulation helps avoid sudden jumps, though playing an +open hit, closing the hi-hat pedal most of the way and then reopening it will still +result in obviously unrealistic volume fluctuations. So, this is not a perfect solution +by any means.

+

It's probably better to do this by using a volume envelope and using CC4 to modulate its +decay time, with the sustain set to a low level. and the ampeg_dynamic opcode +set to 1 so that moving the pedal will cause the decay time to be recalculated. +However, that has not been tested yet, as the author's test kit was already using envelopes +on the hi-hat to emulate drier cymbals.

+

Also, applying this to splash samples, which involve the pedal starting closed and opening +rapidly, is another problem which requires a solution.

+

Multimic samples

+

So far, each hi-hat articulation has only one sample, which will obviously not +be the case in most virtual drum kits. This does not add much complexity, though, +as the samples for each degree of openness simply need to all be in the same group. +All half-open samples, for example, including all round robins, all velocity layers, +can share the same group.

+

If there are separate articulations for each degree of openness, such as shank, +tip and bell, those can also all be on the same group. Brushes, sticks and +mallets can often also share the same groups, unless the brushes need lower +polyphony numbers. However, if there are separate samples for different +microphones and the groups are self-muting, they will need to be in different +groups. In the current example, only the footsplash is self-muting, but if using +the simpler rules where all hi-hat articulations mute all others, all groups are +self-muting. So, having separate close hi-hat mic and a stereo overhead pair +would mean twice as many of those groups (assuming the stereo overheads are in +the L and R channel of the same sample), and close hi-hat, stereo overheads, +close room and far room would mean four times as many. The polyphony numbers for +groups which have polyphony will also have to be multiplied by the same factor. +Here is an example with close and overhead, with slightly longer fadeout times +for the more distant overhead mics:

+
<group>
+//Here are the hi-hat samples
+off_mode=normal
+
+<region>key=42 sample=hh_closed_close.wav group=4 off_by=5 ampeg_release=0.12
+<region>key=42 sample=hh_closed_oh.wav group=4 off_by=5 ampeg_release=0.2
+<region>key=44 sample=hh_chik_close.wav group=5 ampeg_release=0.12
+<region>key=44 sample=hh_chik_oh.wav group=5 ampeg_release=0.2
+<region>key=46 sample=hh_half_open_close.wav hicc4=63 group=3 off_by=4 polyphony=6 ampeg_release=0.12
+<region>key=46 sample=hh_half_open_oh.wav hicc4=63 group=3 off_by=4 polyphony=6 ampeg_release=0.2
+<region>key=46 sample=hh_open_close.wav locc4=64 group=2 off_by=3 polyphony=8 ampeg_release=0.12
+<region>key=46 sample=hh_open_oh.wav locc4=64 group=2 off_by=3 polyphony=8 ampeg_release=0.2
+<region>key=54 sample=hh_splash_close.wav group=1 off_by=1 ampeg_release=0.12
+<region>key=54 sample=hh_splash_oh.wav group=11 off_by=11 ampeg_release=0.2
+
+<group>group=1 off_by=1
+//The range which mutes foot splashes for the close mic
+//All sounds except open mute foot splashes, but this group does not include the foot splash key
+//That's because the foot splash samples are in the same group, and will mute anything else
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+<region> key=42
+<region> key=44
+<region> key=46 hicc4=63
+
+<group>group=11 off_by=11
+//The range which mutes foot splashes for the overhead mics
+//All sounds mute foot splashes, but this group does not include the foot splash key
+//That's because the foot splash samples are in the same group, and will mute anything else
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+<region> key=42
+<region> key=44
+<region> key=46 hicc4=63
+
+<group>group=3 off_by=4 polyphony=3
+//The range which mutes open hi-hats for both close and overhead mics - that is, everything except open
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+<region> key=42
+<region> key=44
+<region> key=46 hicc4=63
+<region> key=54
+
+<group>group=4 off_by=5
+//The range which mutes half-open and open hi-hats - that is, closed, chik and foot splash
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+<region> key=42
+<region> key=44
+<region> key=54
+
+<group>group=5
+//The range which mutes closed, half-open and open hi-hats - that is, just chik
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+<region> key=44
+
+

Header organization

+

That is as complex as it gets, though there are a few minor points to be aware of. +Many drum kits with round robins will set seq_length +at the ‹global› level, and in those cases, the silence regions +would only trigger for the first hit in the round robin sequence, unless they +have seq_length set to 1 to override the global setting. Also, the ‹master› +header level and #include statement are useful ARIA +extensions for keeping deeply sampled hi-hat mappings organized.

+

Cymbals other than hi-hats

+

Cymbals other than hi-hats are simpler, but there are +two considerations when muting those. One is limiting polyphony, which is +especially important with cymbals intended for playing rolls, and with jazz ride +cymbals (rock/metal rides which primarily use the bell articulation, not as much). +The other is that it's also possible to record separate choke samples, and have +those mute everything else. A ride with bell, bow and edge articulations, choke +samples and overhead and room mics might be set up like below. Note that while +each articulation has its own groups and different polyphony limits, all +articulations for each mic have the same off_by value, which is the group value +of the choke samples for that mic. It would not be necessary to have this many +groups to implement muting, but this setup would also allow a mapping using only +the overhead mics and no room mic to be created without breaking anything, as +each mic's samples have separate groups. Having different polyphony numbers for +different mics can result in an inconsistent sound, so it is not recommended.

+
<group>
+off_mode=normal
+
+//Bow hits
+<region>
+key=51 group=30 off_by=33 polyphony=5 ampeg_release=0.3
+sample=ride_bow_oh.wav
+<region>
+key=51 group=40 off_by=43 polyphony=5 ampeg_release=0.4
+sample=ride_bow_rm.wav
+
+//Bell hits
+<region>
+key=53 group=31 off_by=33 polyphony=4 ampeg_release=0.3
+sample=ride_bell_oh.wav
+<region>
+key=53 group=41 off_by=43 polyphony=4 ampeg_release=0.4
+sample=ride_bell_rm.wav
+
+//Edge hits (crashes)
+<region>
+key=59 group=32 off_by=33 polyphony=6 ampeg_release=0.3
+sample=ride_edge_oh.wav
+<region>
+key=59 group=42 off_by=43 polyphony=6 ampeg_release=0.4
+sample=ride_edge_rm.wav
+
+//Edge chokes
+<region>
+key=71 ampeg_attack=0.15 group=33
+sample=ride_choke_oh.wav
+<region>
+key=71 ampeg_attack=0.15 group=43
+sample=ride_choke_rm.wav
+
+

It is also possible to use note_polyphony here, which +has the advantage of allowing note_selfmask to be used. This is good when +a hard hit is followed by several lighter ones on the same cymbal - using +polyphony, the quieter hits will mute the loud one when the polyphony +limit is reached, which can result in the louder hit's sustain suddenly and unrealistically +vanishing. However, this can cause problems with hi-hats where one MIDI note needs to +trigger several silence groups as well. This is why Virtuosity Drums has the +hi-hat regions set with note_polyphony=MAX, though there might be a better way.

+

Note_polyphony is also separated by keys; while the polyphony limit under a +group can be tracked together for several keys under one group, note_polyphony +is tracked separately for each MIDI note value.

+

The above example modified to use note_polyphony instead of polyphony would look +like this:

+
<group>
+off_mode=normal
+
+//Bow hits
+<region>
+key=51 group=30 off_by=33 note_polyphony=5 ampeg_release=0.3
+sample=ride_bow_oh.wav
+<region>
+key=51 group=40 off_by=43 note_polyphony=5 ampeg_release=0.4
+sample=ride_bow_rm.wav
+
+//Bell hits
+<region>
+key=53 group=31 off_by=33 note_polyphony=4 ampeg_release=0.3
+sample=ride_bell_oh.wav
+<region>
+key=53 group=41 off_by=43 note_polyphony=4 ampeg_release=0.4
+sample=ride_bell_rm.wav
+
+//Edge hits (crashes)
+<region>
+key=59 group=32 off_by=33 note_polyphony=6 ampeg_release=0.3
+sample=ride_edge_oh.wav
+<region>
+key=59 group=42 off_by=43 note_polyphony=6 ampeg_release=0.4
+sample=ride_edge_rm.wav
+
+//Edge chokes
+<region>
+key=71 ampeg_attack=0.15 group=33
+sample=ride_choke_oh.wav
+<region>
+key=71 ampeg_attack=0.15 group=43
+sample=ride_choke_rm.wav
+
+

Another approach to limiting polyphony

+

If there is no need have a choke group, it's possible to limit the polyphony of +a cymbal in a way which is more controllable, by having it self-mute but making +the fadeout time of the previous samples long. This cannot be done when chokes +are required, because chokes need a fast fadeout, but it is another option which +allows how much dense patterns on a cymbal will build up to be controlled with a +MIDI CC parameter - the polyphony opcode cannot be modulated by MIDI CC, but +ampeg_release can. Here is how that might work using CC 100 to modulate the time, +with different maximum times for different articulations, as in general edge hits +will build up the most and bell hits the least. Of course, it's not very possible +to modulate the buildup of a cymbal in the real world, but that doesn't mean it +can't be useful in the sampled world.

+
<group>
+off_mode=normal
+ampeg_release=0.1
+
+//Bow hits
+<region>
+key=51 group=30 off_by=30
+ampeg_release_oncc100=5
+sample=ride_bow_oh.wav
+<region>
+key=51 group=40 off_by=40
+ampeg_release_oncc100=5.7
+sample=ride_bow_rm.wav
+
+//Bell hits
+<region>
+key=53 group=31 off_by=31
+ampeg_release_oncc100=3
+sample=ride_bell_oh.wav
+<region>
+key=53 group=41 off_by=41
+ampeg_release_oncc100=3.5
+sample=ride_bell_rm.wav
+
+//Edge hits (crashes)
+<region>
+key=59 group=32 off_by=32
+ampeg_release_oncc100=7
+sample=ride_edge_oh.wav
+<region>
+key=59 group=42 off_by=42
+ampeg_release_oncc100=8
+sample=ride_edge_rm.wav
+
+

Deep-sampled hi-hat example

+

Putting most of the above knowledge together into a complex example can result +in long SFZ files, but the principles themselves remain the same. The mapping +for a deeply sampled hi-hat with tightly closed, closed, loosely closed, quarter +open, half open, open, foot chik, foot splash and pedal return samples, with +separate shank and tip hits for tightly closed, closed, loosely closed and +quarter open might look like this:

+
<control>
+//Key assignments - hi-hat
+#define $htclstkey 42
+#define $htchkkey 44
+#define $htvartkey 46
+#define $htclsskey 54
+#define $htsplkey 56
+#define $htvarskey 58
+#define $htretkey 68
+
+//Hi-hat CC ranges - order for keyboard/sequencing use
+//E-kit pedal should be backwards
+#define $ht_lo_hi_init 127
+#define $ht_cl_lo 0
+#define $ht_cl_hi 25
+#define $ht_lc_lo 26
+#define $ht_lc_hi 51
+#define $ht_qo_lo 52
+#define $ht_qo_hi 76
+#define $ht_ho_lo 77
+#define $ht_ho_hi 102
+#define $ht_open_lo 103
+#define $ht_open_hi 127
+
+#define $mg_open_lo 0
+#define $mg_open_hi 102
+#define $mg_ho_lo 0
+#define $mg_ho_hi 76
+#define $mg_qo_lo 0
+#define $mg_qo_hi 51
+#define $mg_lc_lo 0
+#define $mg_lc_hi 25
+
+label_cc4=Hi-hat position
+label_cc100=Hi-hat close
+label_cc101=Hi-hat OH
+
+set_cc4=$ht_lo_hi_init
+set_cc100=40
+set_cc101=100
+
+<global> loop_mode=one_shot
+seq_length=4
+ampeg_release=0.12
+amp_velcurve_1=0.4
+
+//Foot chiks
+
+<master> key=$htchkkey amplitude_cc100=100
+#include "mappings/hihat_14/ht_chik_cl.sfz"
+
+<master> key=$htchkkey amplitude_cc101=100
+#include "mappings/hihat_14/ht_chik_oh.sfz"
+
+//Stick tip hits
+
+<master> key=$htclstkey amplitude_cc100=100 group=11 off_by=10
+#include "mappings/hihat_14/ht_tc_cl.sfz"
+
+<master> key=$htclstkey amplitude_cc101=100 group=21 off_by=20 ampeg_release=0.2
+#include "mappings/hihat_14/ht_tc_oh.sfz"
+
+<master> key=$htvartkey amplitude_cc100=100 group=12 off_by=11
+locc4=$ht_cl_lo hicc4=$ht_cl_hi
+#include "mappings/hihat_14/ht_cl_cl.sfz"
+
+<master> key=$htvartkey amplitude_cc101=100 group=22 off_by=21 ampeg_release=0.2
+locc4=$ht_cl_lo hicc4=$ht_cl_hi
+#include "mappings/hihat_14/ht_cl_oh.sfz"
+
+<master> key=$htvartkey amplitude_cc100=100 group=13 off_by=12
+locc4=$ht_lc_lo hicc4=$ht_lc_hi
+#include "mappings/hihat_14/ht_lc_cl.sfz"
+
+<master> key=$htvartkey amplitude_cc101=100 group=23 off_by=22 ampeg_release=0.2
+locc4=$ht_lc_lo hicc4=$ht_lc_hi
+#include "mappings/hihat_14/ht_lc_oh.sfz"
+
+<master> key=$htvartkey amplitude_cc100=100 group=14 off_by=13
+locc4=$ht_qo_lo hicc4=$ht_qo_hi
+#include "mappings/hihat_14/ht_qo_cl.sfz"
+
+<master> key=$htvartkey amplitude_cc101=100 group=24 off_by=23 ampeg_release=0.2
+locc4=$ht_qo_lo hicc4=$ht_qo_hi
+#include "mappings/hihat_14/ht_qo_oh.sfz"
+
+<master> key=$htvartkey amplitude_cc100=100 group=15 off_by=14
+amplitude_oncc4=100 amplitude_curvecc4=21 amplitude_smoothcc4=150
+locc4=$ht_ho_lo hicc4=$ht_ho_hi
+#include "mappings/hihat_14/ht_ho_cl.sfz"
+
+<master> key=$htvartkey amplitude_cc101=100 group=25 off_by=24 ampeg_release=0.2
+amplitude_oncc4=100 amplitude_curvecc4=21 amplitude_smoothcc4=150
+locc4=$ht_ho_lo hicc4=$ht_ho_hi
+#include "mappings/hihat_14/ht_ho_oh.sfz"
+
+<master> key=$htvartkey amplitude_cc100=100 group=16 off_by=15
+amplitude_oncc4=100 amplitude_curvecc4=22 amplitude_smoothcc4=150
+locc4=$ht_open_lo hicc4=$ht_open_hi
+#include "mappings/hihat_14/ht_open_cl.sfz"
+
+<master> key=$htvartkey amplitude_cc101=100 group=26 off_by=25 ampeg_release=0.2
+amplitude_oncc4=100 amplitude_curvecc4=22 amplitude_smoothcc4=150
+locc4=$ht_open_lo hicc4=$ht_open_hi
+#include "mappings/hihat_14/ht_open_oh.sfz"
+
+//Stick shank hits
+
+<master> key=$htclsskey amplitude_cc100=100 group=11 off_by=10
+#include "mappings/hihat_14/ht_tc_s_cl.sfz"
+
+<master> key=$htclsskey amplitude_cc101=100 group=21 off_by=20 ampeg_release=0.2
+#include "mappings/hihat_14/ht_tc_s_oh.sfz"
+
+<master> key=$htvarskey amplitude_cc100=100 group=12 off_by=11
+locc4=$ht_cl_lo hicc4=$ht_cl_hi
+#include "mappings/hihat_14/ht_cl_s_cl.sfz"
+
+<master> key=$htvarskey amplitude_cc101=100 group=22 off_by=21 ampeg_release=0.2
+locc4=$ht_cl_lo hicc4=$ht_cl_hi
+#include "mappings/hihat_14/ht_cl_s_oh.sfz"
+
+<master> key=$htvarskey amplitude_cc100=100 group=13 off_by=12
+locc4=$ht_lc_lo hicc4=$ht_lc_hi
+#include "mappings/hihat_14/ht_lc_s_cl.sfz"
+
+<master> key=$htvarskey amplitude_cc101=10 group=23 off_by=22 ampeg_release=0.2
+locc4=$ht_lc_lo hicc4=$ht_lc_hi
+#include "mappings/hihat_14/ht_lc_s_oh.sfz"
+
+<master> key=$htvarskey amplitude_cc100=100 group=14 off_by=13
+locc4=$ht_qo_lo hicc4=$ht_qo_hi
+#include "mappings/hihat_14/ht_qo_s_cl.sfz"
+
+<master> key=$htvarskey amplitude_cc101=100 group=24 off_by=23 ampeg_release=0.2
+locc4=$ht_qo_lo hicc4=$ht_qo_hi
+#include "mappings/hihat_14/ht_qo_s_oh.sfz"
+
+<master> key=$htvarskey amplitude_cc100=100 group=15 off_by=14
+amplitude_oncc4=100 amplitude_curvecc4=21 amplitude_smoothcc4=150
+locc4=$ht_ho_lo hicc4=$ht_ho_hi
+#include "mappings/hihat_14/ht_ho_cl.sfz"
+
+<master> key=$htvarskey amplitude_cc101=100 group=25 off_by=24 ampeg_release=0.2
+amplitude_oncc4=100 amplitude_curvecc4=21 amplitude_smoothcc4=150
+locc4=$ht_ho_lo hicc4=$ht_ho_hi
+#include "mappings/hihat_14/ht_ho_oh.sfz"
+
+<master> key=$htvarskey amplitude_cc100=100 group=16 off_by=15
+amplitude_oncc4=100 amplitude_curvecc4=22 amplitude_smoothcc4=150
+locc4=$ht_open_lo hicc4=$ht_open_hi
+#include "mappings/hihat_14/ht_open_cl.sfz"
+
+<master> key=$htvarskey amplitude_cc101=100 group=26 off_by=25 ampeg_release=0.2
+amplitude_oncc4=100 amplitude_curvecc4=22 amplitude_smoothcc4=150
+locc4=$ht_open_lo hicc4=$ht_open_hi
+#include "mappings/hihat_14/ht_open_oh.sfz"
+
+//Footsplashes are the only self-muting group
+
+<master> key=$htsplkey amplitude_cc100=100 group=17 off_by=17
+#include "mappings/hihat_14/ht_footspl_cl.sfz"
+
+<master> key=$htsplkey amplitude_cc101=100 group=27 off_by=27 ampeg_release=0.2
+#include "mappings/hihat_14/ht_footspl_oh.sfz"
+
+//Stick hits on the shaft, not involved in muting
+
+<master> key=$htperckey amplitude_cc100=100
+#include "mappings/hihat_14/ht_perc_cl.sfz"
+
+<master> key=$htperckey amplitude_cc101=100
+#include "mappings/hihat_14/ht_perc_oh.sfz"
+
+//Hi hat pedal return noises, muted by anything else
+
+<master> key=$htretkey amplitude_cc100=100 group=18 off_by=17
+#include "mappings/hihat_14/ht_return_cl.sfz"
+
+<master> key=$htretkey amplitude_cc101=100 group=28 off_by=27 ampeg_release=0.2
+#include "mappings/hihat_14/ht_return_oh.sfz"
+
+//Hat mute silence groups
+<master> seq_length=1
+
+<group> group=18
+//The range which mutes hi-hat pedal return noises
+//Everything except themselves
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+off_by=17
+<region> key=$htclstkey
+<region> key=$htchkkey
+<region> key=$htvartkey
+<region> key=$htclsskey
+<region> key=$htvarskey
+<region> key=$htsplkey
+
+<group> group=17
+//The range which mutes footsplashes
+//Everything except pedal return noises and open
+//Footsplashes are the only articulation which mutes itself
+//Splash also mutes splash, but key=$htsplkey is not part of this silence group
+//Instead splash regions themselves are marked with group=17 also
+//Kind of a kludge, but keeps the silence from instantly muting the splash
+//while allowing a subsequent splash to mute the current splash
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+off_by=17
+<region> key=$htclstkey
+<region> key=$htchkkey
+<region> key=$htvartkey locc4=$mg_open_lo hicc4=$mg_open_hi
+<region> key=$htclsskey
+<region> key=$htvarskey locc4=$mg_open_lo hicc4=$mg_open_hi
+
+<group> group=15
+//The range which mutes open hi-hats
+//Everything except pedal return noises and open
+//Just like the footsplash mute group, except the footsplash key is in this too
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+off_by=14
+<region> key=$htclstkey
+<region> key=$htchkkey
+<region> key=$htvartkey locc4=$mg_open_lo hicc4=$mg_open_hi
+<region> key=$htclsskey
+<region> key=$htvarskey locc4=$mg_open_lo hicc4=$mg_open_hi
+<region> key=$htsplkey
+<region> key=$htsplkey
+
+<group> group=14
+//The range which mutes half open hi-hats
+//Everything except open and half-open
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+off_by=13
+<region> key=$htclstkey
+<region> key=$htchkkey
+<region> key=$htvartkey locc4=$mg_ho_lo hicc4=$mg_ho_hi
+<region> key=$htclsskey
+<region> key=$htvarskey locc4=$mg_ho_lo hicc4=$mg_ho_hi
+<region> key=$htsplkey
+
+<group> group=13
+//The range which mutes quarter open hi-hats
+//Everything except open, half-open and quarter open
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+off_by=12
+<region> key=$htclstkey
+<region> key=$htchkkey
+<region> key=$htvartkey locc4=$mg_qo_lo hicc4=$mg_qo_hi
+<region> key=$htclsskey
+<region> key=$htvarskey locc4=$mg_qo_lo hicc4=$mg_qo_hi
+<region> key=$htsplkey
+
+<group> group=12
+//The range which mutes loosely closed hi-hats
+//Everything except open, half-open, quarter open and loosely closed
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+off_by=11
+<region> key=$htclstkey
+<region> key=$htchkkey
+<region> key=$htvartkey locc4=$mg_lc_lo hicc4=$mg_lc_hi
+<region> key=$htclsskey
+<region> key=$htvarskey locc4=$mg_lc_lo hicc4=$mg_lc_hi
+<region> key=$htsplkey
+
+<group> group=11
+//The range which mutes regular closed hi-hats
+//Just foot chik, tightly closed and footsplash
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+off_by=10
+<region> key=$htclstkey
+<region> key=$htchkkey
+<region> key=$htclsskey
+<region> key=$htsplkey
+
+<group> group=10
+//The range which mutes tightly closed hi-hats - just foot chik and footsplash
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+<region> key=$htchkkey
+<region> key=$htsplkey
+
+<group> group=28
+//The range which mutes hi-hat pedal return noises
+//Everything except themselves
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+off_by=27
+<region> key=$htclstkey
+<region> key=$htchkkey
+<region> key=$htvartkey
+<region> key=$htclsskey
+<region> key=$htvarskey
+<region> key=$htsplkey
+
+<group> group=27
+//The range which mutes footsplashes
+//Everything except pedal return noises and open
+//Footsplashes are the only articulation which mutes itself
+//Splash also mutes splash, but key=$htsplkey is not part of this silence group
+//Instead splash regions themselves are marked with group=27 also
+//Kind of a kludge, but keeps the silence from instantly muting the splash
+//while allowing a subsequent splash to mute the current splash
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+off_by=27
+<region> key=$htclstkey
+<region> key=$htchkkey
+<region> key=$htvartkey locc4=$mg_open_lo hicc4=$mg_open_hi
+<region> key=$htclsskey
+<region> key=$htvarskey locc4=$mg_open_lo hicc4=$mg_open_hi
+
+<group> group=25
+//The range which mutes open hi-hats
+//Everything except pedal return noises and open
+//Just like the footsplash mute group, except the footsplash key is in this too
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+off_by=24
+<region> key=$htclstkey
+<region> key=$htchkkey
+<region> key=$htvartkey locc4=$mg_open_lo hicc4=$mg_open_hi
+<region> key=$htclsskey
+<region> key=$htvarskey locc4=$mg_open_lo hicc4=$mg_open_hi
+<region> key=$htsplkey
+<region> key=$htsplkey
+
+<group> group=24
+//The range which mutes half open hi-hats
+//Everything except open and half-open
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+off_by=23
+<region> key=$htclstkey
+<region> key=$htchkkey
+<region> key=$htvartkey locc4=$mg_ho_lo hicc4=$mg_ho_hi
+<region> key=$htclsskey
+<region> key=$htvarskey locc4=$mg_ho_lo hicc4=$mg_ho_hi
+<region> key=$htsplkey
+
+<group> group=23
+//The range which mutes quarter open hi-hats
+//Everything except open, half-open and quarter open
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+off_by=22
+<region> key=$htclstkey
+<region> key=$htchkkey
+<region> key=$htvartkey locc4=$mg_qo_lo hicc4=$mg_qo_hi
+<region> key=$htclsskey
+<region> key=$htvarskey locc4=$mg_qo_lo hicc4=$mg_qo_hi
+<region> key=$htsplkey
+
+<group> group=22
+//The range which mutes loosely closed hi-hats
+//Everything except open, half-open, quarter open and loosely closed
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+off_by=21
+<region> key=$htclstkey
+<region> key=$htchkkey
+<region> key=$htvartkey locc4=$mg_lc_lo hicc4=$mg_lc_hi
+<region> key=$htclsskey
+<region> key=$htvarskey locc4=$mg_lc_lo hicc4=$mg_lc_hi
+<region> key=$htsplkey
+
+<group> group=21
+//The range which mutes regular closed hi-hats
+//Just foot chik, tightly closed and footsplash
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+off_by=20
+<region> key=$htclstkey
+<region> key=$htchkkey
+<region> key=$htclsskey
+<region> key=$htsplkey
+
+<group> group=20
+//The range which mutes tightly closed hi-hats - just foot chik and footsplash
+sample=*silence
+loop_mode=loop_continuous off_mode=fast
+ampeg_attack=0 ampeg_decay=0 ampeg_sustain=0 ampeg_release=0
+<region> key=$htchkkey
+<region> key=$htsplkey
+
+<curve>curve_index=21
+v000=0.13
+v037=0.8
+v077=1
+v127=1
+
+<curve>curve_index=22
+v000=0.1
+v037=0.7
+v077=1
+v127=1
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/drum_basics/index.html b/tutorials/drum_basics/index.html new file mode 100644 index 000000000..85a5c3436 --- /dev/null +++ b/tutorials/drum_basics/index.html @@ -0,0 +1,904 @@ + + + + + + + + + Drum basics - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Drum basics

SFZ has a lot of opcodes. No instrument uses all of them, though, and even highly +complicated instruments with thousands of samples will usually only use a dozen +or two different opcodes.

+

In this guide, we'll talk about the opcodes needed to make a simple drum kit. +If you have some drum samples, a text editor and an SFZ player, this should be +all the knowledge you need to make a working SFZ mapping for those samples. +Most of them will apply to most other instrument types as well. Later, we'll +apply this knowledge to instruments such as piano, guitar, violin and flute.

+

A very simple instrument to make would be an electronic drum kit with one sample +for each sound. A functional mapping for an entire sampled drum machine using +one-shot samples could be made using only the region header, and two opcodes +sample and key. With kick, snare +and hi-hat samples on their standard General MIDI notes, this could be the +entire SFZ file:

+
<region>key=36 sample=kick.wav
+<region>key=38 sample=snare.wav
+<region>key=42 sample=closedhat.wav
+
+

This would work. Load this into an SFZ player, hit the C on MIDI note 36, and +you get the kick sample playing. However, each sound would play only while a +note is held. With drums it's usually a good idea to play the entire sample, so +a very short note will result in a complete drum hit sounding. We can do that +with the loop_mode opcode, which is also used for +looping (as the name implies), but loop_mode=one_shot causes the sampler to +play the entire sample from start to end, ignoring note off.

+
<region>key=36 loop_mode=one_shot sample=kick.wav
+<region>key=38 loop_mode=one_shot sample=snare.wav
+<region>key=42 loop_mode=one_shot sample=closedhat.wav
+
+

There's no need to set the one_shot for each region, though. We can simplify +our life by using the ‹global› header like this:

+
<global>loop_mode=one_shot
+
+<region>key=36 sample=kick.wav
+<region>key=38 sample=snare.wav
+<region>key=42 sample=closedhat.wav
+
+

This is basically all that's required to take, for example, some of +Wave Alchemy's very nice free samples of TR-808 or Tanzbar drum machines, +and make a working SFZ mapping for them.

+

Let's say what we have isn't drum machine samples, but acoustic drum samples. +These sounds will have natural variation between hits - some depending on hit +location, a lot depending on dynamics (how hard the drum is hit), and some just +plain random. Let's ignore controlling hit location for now (drum samples mostly +do ignore it), and focus on the other two. Dynamic variation can be captured by +recording hits of various intensity, and organizing them into dynamic layers, +also called velocity layers.

+

If we have an acoustic kick drum sampled at four dynamics - quiet, kind of quiet, +kind of loud and loud - we have four dynamic layers. Let's say the files for +these layers are named like this:

+
kick_vl1.wav
+kick_vl2.wav
+kick_vl3.wav
+kick_vl4.wav
+
+

To trigger the quiet sample at low MIDI note velocities, we'd use the +lovel and hivel opcodes like this:

+
<region>key=36 lovel=0 hivel=31 sample=kick_vl1.wav
+
+

All four hits with velocity ranges assigned, evenly splitting the full 0 to 127 +velocity range into four, would look like this:

+
<region>key=36
+lovel=0 hivel=31
+sample=kick_vl1.wav
+<region>key=36
+lovel=32 hivel=63
+sample=kick_vl2.wav
+<region>key=36
+lovel=64 hivel=95
+sample=kick_vl3.wav
+<region>key=36
+lovel=96 hivel=127
+sample=kick_vl4.wav
+
+

This can, again, be simplified. The defalut value for lovel is 0, and for hivel +it's 127, so we don't need to specify setting them to those numbers. Also, we +can use a ‹group› header to make the key opcode the same +across all four regions:

+
<global>loop_mode=one_shot
+
+<group>key=36
+<region>hivel=31 sample=kick_vl1.wav
+<region>lovel=32 hivel=63 sample=kick_vl2.wav
+<region>lovel=64 hivel=95 sample=kick_vl3.wav
+<region>lovel=96 sample=kick_vl4.wav
+
+

However, the quiet samples will play quieter than they should - because of +standard velocity tracking, each sample would play at full volume if the +velocity was 127, but we actually need each sample to play at full volume at the +velocity which is equal to its hivel value. This can be done in various ways, +and the way we recommend is the amp_velcurve_N opcode, like this:

+
<global>loop_mode=one_shot
+
+<group>key=36
+<region>hivel=31 amp_velcurve_31=1 sample=kick_vl1.wav
+<region>lovel=32 hivel=63 amp_velcurve_63=1 sample=kick_vl2.wav
+<region>lovel=64 hivel=95 amp_velcurve_95=1 sample=kick_vl3.wav
+<region>lovel=96 sample=kick_vl4.wav
+
+

Let's say that each dynamic layer also contains four round robins - four samples +with roughly the same dynamic. This allows us to include some variation, and +sound more natural - fast parts won't sound like a "machine gun". There are two +basic ways to put round robins to use. One is to use the seq_length +and seq_position opcodes, like this:

+
<global>loop_mode=one_shot
+
+<group>key=36 hivel=31 amp_velcurve_31=1 seq_length=4
+<region>seq_position=1 sample=kick_vl1_rr1.wav
+<region>seq_position=2 sample=kick_vl1_rr2.wav
+<region>seq_position=3 sample=kick_vl1_rr3.wav
+<region>seq_position=4 sample=kick_vl1_rr4.wav
+<group>key=36 lovel=32 hivel=63 amp_velcurve_63=1 seq_length=4
+<region>seq_position=1 sample=kick_vl2_rr1.wav
+<region>seq_position=2 sample=kick_vl2_rr2.wav
+<region>seq_position=3 sample=kick_vl2_rr3.wav
+<region>seq_position=4 sample=kick_vl2_rr4.wav
+<group>key=36 lovel=64 hivel=95 amp_velcurve_95=1 seq_length=4
+<region>seq_position=1 sample=kick_vl3_rr1.wav
+<region>seq_position=2 sample=kick_vl3_rr2.wav
+<region>seq_position=3 sample=kick_vl3_rr3.wav
+<region>seq_position=4 sample=kick_vl3_rr4.wav
+<group>key=36 lovel=96 seq_length=4
+<region>seq_position=1 sample=kick_vl4_rr1.wav
+<region>seq_position=2 sample=kick_vl4_rr2.wav
+<region>seq_position=3 sample=kick_vl4_rr3.wav
+<region>seq_position=4 sample=kick_vl4_rr4.wav
+
+

That's a kick drum with four dynamic layers and four sequential round robins. +As you might have noticed, we're repeating the key=36 and seq_length=4 opcodes +in every group. Those two opcodes could be moved to the global level if all we +wanted was a kick drum, but as we're going to have other instruments with other +keys and possibly different numbers of round robins, we kept them at the group +level. The other way to use round robins is randomized, using the +lorand and hirand opcodes. This will make the sample +player generate a random number, then play the region whose lorand to hirand +range includes that random number. Whether robins should be used in this random +way or the above sequential way, the answer is "it depends". It seems that more +instruments use sequential, though. This is how random round robins would be +set up for our kick drum samples:

+
<global>loop_mode=one_shot
+
+<group>key=36 hivel=31 amp_velcurve_31=1
+<region>hirand=0.25 sample=kick_vl1_rr1.wav
+<region>lorand=0.25 hirand=0.5 sample=kick_vl1_rr2.wav
+<region>lorand=0.5 hirand=0.75 sample=kick_vl1_rr3.wav
+<region>lorand=0.75 sample=kick_vl1_rr4.wav
+<group>key=36 lovel=32 hivel=63 amp_velcurve_63=1
+<region>hirand=0.25 sample=kick_vl2_rr1.wav
+<region>lorand=0.25 hirand=0.5 sample=kick_vl2_rr2.wav
+<region>lorand=0.5 hirand=0.75 sample=kick_vl2_rr3.wav
+<region>lorand=0.75 sample=kick_vl2_rr4.wav
+<group>key=36 lovel=64 hivel=95 amp_velcurve_95=1
+<region>hirand=0.25 sample=kick_vl3_rr1.wav
+<region>lorand=0.25 hirand=0.5 sample=kick_vl3_rr2.wav
+<region>lorand=0.5 hirand=0.75 sample=kick_vl3_rr3.wav
+<region>lorand=0.75 sample=kick_vl3_rr4.wav
+<group>key=36 lovel=96
+<region>hirand=0.25 sample=kick_vl4_rr1.wav
+<region>lorand=0.25 hirand=0.5 sample=kick_vl4_rr2.wav
+<region>lorand=0.5 hirand=0.75 sample=kick_vl4_rr3.wav
+<region>lorand=0.75 sample=kick_vl4_rr4.wav
+
+

If we go back to sequential round robins and add a snare with only +three round robins, plus a few comments, the resulting SFZ would look like this:

+
// This is an example of a basic drum kit mapping
+// All samples set to play in their entirety when a note is received
+
+<global>loop_mode=one_shot
+
+// This is the kick, on MIDI note 36, with four dynamic layers and four round robins
+
+<group>key=36 hivel=31 amp_velcurve_31=1 seq_length=4
+<region>seq_position=1 sample=kick_vl1_rr1.wav
+<region>seq_position=2 sample=kick_vl1_rr2.wav
+<region>seq_position=3 sample=kick_vl1_rr3.wav
+<region>seq_position=4 sample=kick_vl1_rr4.wav
+<group>key=36 lovel=32 hivel=63 amp_velcurve_63=1 seq_length=4
+<region>seq_position=1 sample=kick_vl2_rr1.wav
+<region>seq_position=2 sample=kick_vl2_rr2.wav
+<region>seq_position=3 sample=kick_vl2_rr3.wav
+<region>seq_position=4 sample=kick_vl2_rr4.wav
+<group>key=36 lovel=64 hivel=95 amp_velcurve_95=1 seq_length=4
+<region>seq_position=1 sample=kick_vl3_rr1.wav
+<region>seq_position=2 sample=kick_vl3_rr2.wav
+<region>seq_position=3 sample=kick_vl3_rr3.wav
+<region>seq_position=4 sample=kick_vl3_rr4.wav
+<group>key=36 lovel=96 seq_length=4
+<region>seq_position=1 sample=kick_vl4_rr1.wav
+<region>seq_position=2 sample=kick_vl4_rr2.wav
+<region>seq_position=3 sample=kick_vl4_rr3.wav
+<region>seq_position=4 sample=kick_vl4_rr4.wav
+
+// Here is the snare, on MIDI note 38, with four dynamic layers and three round robins
+
+<group>key=38 hivel=31 amp_velcurve_31=1 seq_length=3
+<region>seq_position=1 sample=snare_vl1_rr1.wav
+<region>seq_position=2 sample=snare_vl1_rr2.wav
+<region>seq_position=3 sample=snare_vl1_rr3.wav
+<group>key=38 lovel=32 hivel=63 amp_velcurve_63=1 seq_length=3
+<region>seq_position=1 sample=snare_vl2_rr1.wav
+<region>seq_position=2 sample=snare_vl2_rr2.wav
+<region>seq_position=3 sample=snare_vl2_rr3.wav
+<group>key=38 lovel=64 hivel=95 amp_velcurve_95=1 seq_length=3
+<region>seq_position=1 sample=snare_vl3_rr1.wav
+<region>seq_position=2 sample=snare_vl3_rr2.wav
+<region>seq_position=3 sample=snare_vl3_rr3.wav
+<group>key=38 lovel=96 seq_length=3
+<region>seq_position=1 sample=snare_vl4_rr1.wav
+<region>seq_position=2 sample=snare_vl4_rr2.wav
+<region>seq_position=3 sample=snare_vl4_rr3.wav
+
+

This is almost all the information needed to map basic drum kits in SFZ. Almost, +because well-sampled hi-hats will have many different articulations, and that +creates some additional considerations, which we will describe on another page.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/envelope_generators/index.html b/tutorials/envelope_generators/index.html new file mode 100644 index 000000000..cd18046ba --- /dev/null +++ b/tutorials/envelope_generators/index.html @@ -0,0 +1,814 @@ + + + + + + + + + Envelope Generators - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Envelope Generators

Envelope generators (EGs) are used to control the profile of the volume, filter, + pitch, or other parameter, based on the timing of the key press and release +(including sustain / sostenuto pedal release.) These are often called "ADSRs", +after the four parameters (Attack, Decay, Sustain, Release) that were used +to control envelopes in early synthesizers (and many current ones as well.)

+

See SFZ1 Modulations to see examples of how these can be applied.

+

SFZ has two types of EGs: SFZ1 and SFZ2.

+

SFZ1: DSAHDSR

+

SFZ1 envelopes are sometimes called DSAHDSR after the 7 controls of the envelope, +which are applied in the order given below. An EG can control a variety of parameters, +but to help understand, you can imagine it controlling the volume, in which case you +can substitute "volume" for "EG" below.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterSuffixDescription
Delay time (s)_delaytime to wait after key is depressed until the EG starts
Start level (%)_startlevel at which to start
Attack time (s)_attacktime from note start (at start level) to 100% level
Hold time (s)_holdtime the volume is held at 100% level
Decay time1 (s)_decaytime3 for the volume to decrease from 100% to the sustain level
Sustain level (%)_sustainthe % level at which the EG remains while the key is down or the sustain pedal is down
Release time2_releasetime3 for the EG to decrease to zero. This begins when both key and sustain pedal are released, even if the prior stages have not completed.
+

Here is a screenshot of an audio file created using Sforzando, +showing the ampeg envelope shape and its stages. +Note that this image assumes the Start level is 0. +If it were nonzero, the tip of the left-pointing arrow would look chopped off vertically.

+

DAHDSR envelope shape image

+

Here's a play-by-play explanation, when using the EG for volume (ampeg_xxx). +When the key is depressed, Delay time elapses and then the note starts +(at Start level, which above is the default of 0.) +The volume increases (at a constant dB/sec rate) for the Attack time and then +reaches the peak level for that note +(which is controlled by the velocity and possibly other parameters.) +The volume stays at that level for the Hold time, after which it falls off +for the Decay time until it reaches the Sustain level. +It remains at that level until the key and sustain pedal are both released, +when it takes the Release time to fall off to silence.

+

Note that when using an envelope generator to control volume, +it is usually not necessary to adjust release or decay times based on velocity: +that will happen naturally. That is, if I configure ampeg_release=1 +and play a very loud note, that note will decay with a rate +so that one second later it will be about 90 dB quieter than when it started. +If I play a very soft note, that note will also decay with the same rate, +so that 1 second later it will be 90 dB quieter when it started. +That's pretty close to how most natural instruments behave.

+

Another note when using an envelope to control volume: +if you're playing a sample that already has a natural envelope, +such as the pluck of a harp string, you normally don't have to configure +the envelope because it's already in the sample, +which has a natural attack and decay. +However, you'll still probably want to configure a release, +so that if the key is released before the sample is finished, +it doesn't end abruptly. With most natural instruments, +this release rate varies with pitch, but not velocity.

+

SFZ2

+

The SFZ2 standard has a more flexible generator that can be used in addition to +the above. This is briefly described in SFZ2 Modulations:Envelopes.

+

References

+ + +
+
+
    +
  1. +

    Decay time is actually a constant decay rate that is specified + as the time for the EG to go from 100% to 0%. + However, this can be changed by setting xxx_decay_zero=0 + to instead mean to decay from 100% to sustain level in the given time, + from the actual sustain level. 

    +
  2. +
  3. +

    Release time is actually a constant decay rate that is specified + as the time for the EG to go from the sustain level to zero. + However, this can be changed setting by xxx_release_zero=1 + to instead mean to decay from 100% to zero in the given time. 

    +
  4. +
  5. +

    When using an amp envelope generator, "0%" means "silence" + but it's actually interpreted as -90dBFS for Aria, or -80dBFS for original sfz. + This adjustment is needed because volume is contolled in dB, + and silence in dB is negative infinity, which complicates the math. 

    +
  6. +
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/epic_drums/index.html b/tutorials/epic_drums/index.html new file mode 100644 index 000000000..be0385e59 --- /dev/null +++ b/tutorials/epic_drums/index.html @@ -0,0 +1,749 @@ + + + + + + + + + Epic Drums - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Epic Drums

Basic Concept

+

Epic percussion in media music is commonly created by recording large ensembles of large, low-tuned drums (for example taikos) in large, naturally reverberant spaces. The Virtuosity Drums kit includes an "Epic" knob which makes the small, high-tuned jazz kit recorded in a music store sound surprisingly, well, epic. This tutorial explains how that trick works.

+

Using drum samples at pitches lower than the original recording makes them sound bigger in several ways. One, obviously, the pitch is lower. Two, slowing down the playback +also slows down attack times and lengthens decay tails. This includes any reverb tails captured by the microphones, which means pitching a sound down makes it sound as if +it was recorded in a larger space. However, pitching sounds down also takes away the high end and reduces definition.

+

Playing a sound at both its original pitch and tuned down an octave is a way to get both at the same time - a large, deep sound with reverb tails twice the length of the +real recording, and the clarity and definition of the originally pitched sample. +This could be done using the tune opcode, though transpose is likely +more convenient.Here is a very simple example using a single floor tom sample:

+
<region>
+sample=Rack_Tom.wav
+
+<region>
+transpose=-12
+sample=Rack_Tom.wav
+
+

If the sample maps are modularized using #include statements, +it becomes very simple to set up a volume control, and also use locc so that +the transposed samples don't use up polyphony voices when their volume is at zero.

+
<master>
+amplitude_oncc101=100
+locc101=1
+#include "sample_maps/rack_tom.sfz"
+
+<master>
+amplitude_oncc102=100
+locc102=1
+transpose=-12
+#include "sample_maps/rack_tom.sfz"
+
+

Some Pitfalls

+

This does not work as well with close mics, which don't have much room reverb in the recording. This is why in Virtuosity Drums, the kick and snare mics aren't used with +the Epic control. With kicks and other low drums, there's also a point of diminishing returns with having a lot of low frequencies, which is one more reason to not apply +this to kick close mics.

+

Although sample maps can often be reused, as in the above example, instruments which have self-muting behavior, such as hi-hats, or instruments with polyphony limitations +will need separate polyphony group numbers for the transposed regions, just as if the transposed regions were separate microphone positions. With complex muting scenarios this will result in very large numbers of groups which can be difficult to keep track of, but with simple self-muting it could look like this:

+
<master>
+amplitude_oncc101=100
+locc101=1
+group=1
+off_by=1
+#include "sample_maps/hi_hat.sfz"
+
+<master>
+amplitude_oncc102=100
+locc102=1
+group=11
+off_by=11
+transpose=-12
+#include "sample_maps/hi_hat.sfz"
+
+

If the samples include any preroll before the hit, which more distant microphone samples naturally will, transposing down an octave will double the length of that preroll. +This is usually not a problem, but in extreme cases it may be necessary to use offset +to reduce the preroll to avoid a flam sound. In Virtuosity Drums, this is done for the hi-hat pedal articulations.

+

On the topic of flams, this does not work well with flams, buzz rolls and other sounds which do not consist of a single distinct hit. Long rolls and partially +closed hi-hats seem to work fairly well, however. Tambourines, shakers etc. will usually sound quite unnatural with the transposed and untransposed sound appearing as separate entities, but sometimes this can be musically useful.

+

Other Uses

+

Applying this trick to a snare bottom mic usually results in a sound which is not epic, but can be very industrial.

+

Beyond drums, this could work reasonably well with other instruments. Sounds with fast, distinct attacks will behave more similarly to drums, though at least on principle this could be used with sounds such as sustained bowed strings also. Of course, pitched instruments can be doubled with another note an octave lower without transposition, as long as the lower note also falls in their range. However, transposition an octave down does make the reverb tails twice as long.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/legato/index.html b/tutorials/legato/index.html new file mode 100644 index 000000000..2cfac8f69 --- /dev/null +++ b/tutorials/legato/index.html @@ -0,0 +1,938 @@ + + + + + + + + + Legato - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Legato

Basic monophony

+

In the basic sustained instruments +tutorial, we have the below example of a monophonic flute, which uses the +group and off_by opcodes to allow only one be played at a time, +and the off_mode together with ampeg_release make the fadeout of the previous +note a little smoother. This is a starting point for implementing legato.

+

If only group and off_by are specified, the resulting sound will probably be quite bad, as +this will use default values for off_mode, ampeg_attack and ampeg_release. This means the note being +muted will drop off extremely quickly, which will probably leave an audible drop in levels during the +transition, unless the next note has an extremely fast attack. Therefore, at least ampeg_release +will need to be specified in most cases - though most instruments will need to specify that even +if not using legato.

+
<global>ampeg_release=0.3 amp_veltrack=0 sw_lokey=48 sw_hikey=49
+
+group=1 off_by=1 off_mode=normal
+<group>lokey=50 hikey=51 pitch_keycenter=50 sw_last=48
+<region>sample=d4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85
+<region>sample=d4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127
+<region>sample=d4_f.wav xfin_locc1=86 xfin_hicc1=127
+<group>lokey=52 hikey=53 pitch_keycenter=52 sw_last=48
+<region>sample=e4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85
+<region>sample=e4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127
+<region>sample=e4_f.wav xfin_locc1=86 xfin_hicc1=127
+<group>lokey=50 hikey=51 pitch_keycenter=50 sw_last=49
+<region>sample=d4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127
+<region>sample=d4_ft_f.wav xfin_locc1=64 xfin_hicc1=127
+<group>lokey=52 hikey=53 pitch_keycenter=52 sw_last=49
+<region>sample=e4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127
+<region>sample=e4_ft_f.wav xfin_locc1=64 xfin_hicc1=127
+
+

Legato regions

+

The above will allow only one note to sound at a time, with a quick crossfade between +the old and new note. In many cases, though, it makes sense to treat the legato notes +differently than the notes which start a phrase when no other note is playing. The +trigger opcode is used to separate regions into initial and legato. For +sustained sounds, it can make sense to use the offset opcode to skip the start +of the sample for legato regions. It's also probably a good idea to use offset_attack +in these cases, which both makes the transition sound smoother and avoids clicks and +pops in cases where the offset does not fall on a zero crossing. Here are the relevant +opcodes from the Hadziha choir.

+

An offset of 6000 samples is enough to skip the fraction of a second when the singers +are starting the note, but not enough to skip the part of the sample when they're still +settling on a common pitch, so it works well for this particular choir. The crossfade +times with an off time of 1 second and legato note attack time of 0.4 seconds are +probably much longer than would be needed for most solo instruments or voices, or +ensembles intended for fast legato, but could be a good range for other types of +ensembles playing slowly.

+

Note that the samples are not all in the same group - the initial note regions are in +polyphony group 1, which is muted by group 2. The legato regions are in polyphony +group 2, which mutes itself. Having everything in group 1 should also work, though. +This was done this was to allow the use of additional syllable start samples, which +would then be group 3 and also be muted by group 2. As with hi-hat muting, if there +are multiple mic positions in separate files, each mic position will need its own +polyphony groups.

+
<global>off_mode=time
+off_time=1
+amp_veltrack=0
+
+<master>trigger=first
+group=1
+off_by=2
+//Sample map goes here
+#include "mappings/6_a_map.sfz"
+
+<master>trigger=legato
+offset=6000
+ampeg_attack=0.4
+group=2
+off_by=2
+//Sample map goes here
+#include "mappings/6_a_map.sfz"
+
+

As this does not use velocity to control note volume, that frees up velocity for +something else, so in this specific case velocity is repurposed to shorten the +attack time on the legato notes, which makes the patch more intuitively playable.

+
<global>off_mode=time
+off_time=1
+amp_veltrack=0
+
+<master>trigger=first
+group=1
+off_by=3
+//Sample map goes here
+#include "mappings/6_a_map.sfz"
+
+<master>trigger=legato
+offset=6000
+ampeg_attack=1
+ampeg_vel2attack=-0.8
+group=3
+off_by=3
+//Sample map goes here
+#include "mappings/6_a_map.sfz"
+
+

Portamento

+

Another possibility is portamento, or having a pitch glide implemented on the +legato regions. Here are the relevant opcodes from Karoryfer Samples +Meatbass, which has both legato and portamento. The portamento is +very obviously fake for slow glides across long intervals, but as long as the +interval is no more than a third or fourth, it can be convincing. Of course, the +narrower the interval and the shorter the time, the easier it is to sound +convincing. With the portamento time at zero, this is effectively the same as +non-portamento legato in the above example.

+

In the below setup, MIDI CC109 controls the glide time and an SFZ2 envelope +is used to make the pitch change happen. CC140 is the ARIA extension CC for pitch +delta, and being the difference in pitch between the previous note and the +current note, it sets the depth of the glide envelope.

+
<global>eg06_sustain=1 //Pitch envelope setup for legato slides
+eg06_level0=-1 //Envelope starts away from the note pitch
+eg06_time0=0
+eg06_pitch_oncc140=100 //This is the pitch depth
+eg06_time1=0
+eg06_level1=0 //At the end of the envelope, return to base pitch
+//eg06_time1_oncc109 needs to be set for the legato regions - but we don't want
+//it on for all regions so the default is 0
+//At zero envelope duration the pitch goes to base pitch immediately so there
+//is no glide
+
+//Typical stuff for monophonic instruments
+off_mode=normal
+ampeg_release_oncc104=2
+
+

All the sample regions are then basically duplicated in non-legato and legato +versions. Here's an example non-legato region with trigger +set to first and no eg06_time_oncc109 set. The group and off_by work just like +in the above examples.

+
<group>
+trigger=first
+off_mode=normal
+group=1
+off_by=1
+
+<region>
+sample=..\Samples\arco_looped\c4_sustain.wav
+pitch_keycenter=48
+
+

And the corresponding legato region with trigger set to legato, the eg06 glide +envelope time control, and also an attack time, to let the note fade in +more gradually, with this controlled by CC100 rather than velocity, as the +example above. This is another option.

+
<group>
+trigger=legato
+off_mode=normal
+group=1
+off_by=1
+eg06_time1_oncc109=0.3
+ampeg_attack_oncc100=0.5
+
+<region>
+sample=..\Samples\arco_looped\c4_sustain.wav
+pitch_keycenter=48
+
+

True sampled legato

+

Here are examples from a simple flute test by MatFluor. The trigger=first regions +work similarly as all the above examples, and the sw_previous opcode can be used +to choose which sample plays for the legato regions. If the samples would include +both the legato transition and the complete sustain of the following note, things +would be very simple:

+
<group>
+// Legato transitions and the complete sustain of the next note both in the same sample
+trigger=legato
+group=2
+off_by=1
+ampeg_attack=0.05 ampeg_release=0.2
+off_mode=normal
+
+// Leg transitions up
+<region> sample=legatovib_g4_a4.wav key=A4 sw_previous=G4
+<region> sample=legatovib_g4_c5.wav key=C5 sw_previous=G4
+<region> sample=legatovib_a4_c5.wav key=C5 sw_previous=A4
+// Leg transitions down
+<region> sample=legatovib_c5_a4.wav key=A4 sw_previous=C5
+<region> sample=legatovib_c5_g4.wav key=G4 sw_previous=C5
+
+

Recording the full sustain after every transition adds greatly to the recording +time, diskspace and RAM use, however. It may be necessary in some cases, such as +solo vocals, but in other cases it's possible to use transition samples which +are short, then fade in the regular sustain sample.

+
<group>
+// Legato transitions in one sample, crossfaded into standard sustain in another sample
+trigger=legato
+group=2
+off_by=1
+ampeg_attack=0.05 ampeg_release=0.2
+off_mode=normal
+
+// Leg transitions up
+<region> sample=legatovib_g4_a4.wav key=A4 sw_previous=G4 ampeg_hold=0.25 ampeg_decay=0.2 ampeg_sustain=0 offset=45000 ampeg_decay_shape=-1.4
+<region> sample=legatovib_g4_c5.wav key=C5 sw_previous=G4 ampeg_hold=0.25 ampeg_decay=0.2 ampeg_sustain=0 offset=45000 ampeg_decay_shape=-1.4
+<region> sample=legatovib_a4_c5.wav key=C5 sw_previous=A4 ampeg_hold=0.25 ampeg_decay=0.2 ampeg_sustain=0 offset=45000 ampeg_decay_shape=-1.4
+// Leg transitions down
+<region> sample=legatovib_c5_a4.wav key=A4 sw_previous=C5 ampeg_hold=0.25 ampeg_decay=0.2 ampeg_sustain=0 offset=45000 ampeg_decay_shape=-1.4
+<region> sample=legatovib_c5_g4.wav key=G4 sw_previous=C5 ampeg_hold=0.25 ampeg_decay=0.2 ampeg_sustain=0 offset=45000 ampeg_decay_shape=-1.4
+<region> sample=legatovib_a4_g4.wav key=G4 sw_previous=A4 ampeg_hold=0.25 ampeg_decay=0.2 ampeg_sustain=0 offset=43000 ampeg_decay_shape=-1.4
+// Leg sustains
+<region> sample=sustainvib_c5.wav key=C5 ampeg_attack=0.3 offset=5000 ampeg_attack_shape=3.8
+<region> sample=sustainvib_a4.wav key=A4 ampeg_attack=0.3 offset=5000 ampeg_attack_shape=3.8
+<region> sample=sustainvib_g4.wav key=G4 ampeg_attack=0.3 offset=5000 ampeg_attack_shape=3.8
+
+

Another consideration is that for instruments with a wide range, it may not be worthwhile +to record every possible transition, and only record transitions of up to one octave, for +example. The extended CCs do not always behave quite like other CCs, +necessitating using hdcc in ARIA, but the below works for a legato vocal with a range of +less than two octaves.

+
<global>
+off_mode=time
+off_time=0.4
+ampeg_release=0.3
+
+<group>
+trigger=first
+group=1
+off_by=1
+#include "modules/vowel_sustain_a.sfz"
+
+<group>
+trigger=legato
+group=1
+off_by=1
+ampeg_attack=0.1
+ampeg_hold=0.3
+ampeg_decay=0.6
+ampeg_sustain=0
+hihdcc141=12.1
+#include "modules/vowel_transition_a.sfz"
+
+<group>
+trigger=legato
+group=2
+off_by=1
+delay=0.3
+ampeg_attack=0.2
+offset=40000
+hihdcc141=12.1
+#include "modules/vowel_sustain_a.sfz"
+
+<group>
+trigger=legato
+group=1
+off_by=1
+ampeg_attack=0.1
+lohdcc141=12.9
+hihdcc141=24
+offset=12000
+#include "modules/vowel_sustain_a.sfz"
+
+

It would also be possible to use CC 140 in a similar way in an instrument which, +for example, had legato transitions recorded ascending but not descending.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/lfo/index.html b/tutorials/lfo/index.html new file mode 100644 index 000000000..7e222dc31 --- /dev/null +++ b/tutorials/lfo/index.html @@ -0,0 +1,720 @@ + + + + + + + + + Pitch LFO Examples - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Pitch LFO Examples

Just copy the following in your preferred text editor. +We also have a section in the tools page listing some text editor's +SFZ syntax highlighting add-ons. +Add to your own SFZ to spice up your instruments:

+
// **********************************************************************
+// SFZ1 Pitch LFO Example
+//
+//
+// **********************************************************************
+<global>
+
+ pitchlfo_freq=4
+ pitchlfo_depth=0 //default setting
+ pitchlfo_depth_oncc1=200  //pitch variation in cents using the mod wheel
+
+<region> sample=*sine
+
+
// **********************************************************************
+// SFZ2 Pitch LFO Example
+//
+//
+// **********************************************************************
+<global>
+
+ lfo06_freq=4
+ lfo06_pitch=0 //default setting
+ lfo06_pitch_oncc1=200  //pitch variation in cents using the mod wheel
+
+<region> sample=*sine
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/modular_instruments/index.html b/tutorials/modular_instruments/index.html new file mode 100644 index 000000000..d5fe75ba9 --- /dev/null +++ b/tutorials/modular_instruments/index.html @@ -0,0 +1,968 @@ + + + + + + + + + Modular SFZ Instruments - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Modular SFZ Instruments

The Include Statement

+

SFZ is not a programming language, and has a structure based on a hierarchy of headers. There are no procedure or function calls which would allow the same block of code to be called from various places in an SFZ file. This can lead to a lot of repetition in large SFZ instruments. As a simple example, here's a polyphony switch in an instrument causing duplication of the sample map.

+
<group>
+hicc100=63
+<region>key=48 sample=c4.wav
+<region>key=49 sample=db4.wav
+<region>key=50 sample=d4.wav
+<region>key=51 sample=eb4.wav
+<region>key=52 sample=e4.wav
+<region>key=53 sample=f4.wav
+<region>key=54 sample=gb4.wav
+<region>key=55 sample=g4.wav
+<region>key=56 sample=ab4.wav
+<region>key=57 sample=a4.wav
+<region>key=58 sample=bb4.wav
+<region>key=59 sample=b4.wav
+<region>key=60 sample=c5.wav
+
+<group>
+locc100=64
+group=1
+off_by=1
+<region>key=48 sample=c4.wav
+<region>key=49 sample=db4.wav
+<region>key=50 sample=d4.wav
+<region>key=51 sample=eb4.wav
+<region>key=52 sample=e4.wav
+<region>key=53 sample=f4.wav
+<region>key=54 sample=gb4.wav
+<region>key=55 sample=g4.wav
+<region>key=56 sample=ab4.wav
+<region>key=57 sample=a4.wav
+<region>key=58 sample=bb4.wav
+<region>key=59 sample=b4.wav
+<region>key=60 sample=c5.wav
+
+

If we create an SFZ file called sample_map.sfz with the following content:

+
<region>key=48 sample=c4.wav
+<region>key=49 sample=db4.wav
+<region>key=50 sample=d4.wav
+<region>key=51 sample=eb4.wav
+<region>key=52 sample=e4.wav
+<region>key=53 sample=f4.wav
+<region>key=54 sample=gb4.wav
+<region>key=55 sample=g4.wav
+<region>key=56 sample=ab4.wav
+<region>key=57 sample=a4.wav
+<region>key=58 sample=bb4.wav
+<region>key=59 sample=b4.wav
+<region>key=60 sample=c5.wav
+
+

Then the sample map becomes a reusable module which can be "called" using +an #include statement. +The instrument can be decluttered to this:

+
<group>
+hicc100=63
+#include "sample_map.sfz"
+
+<group>
+locc100=64
+group=1
+off_by=1
+#include "sample_map.sfz"
+
+

Include And File Paths

+

With large instruments which would be broken down into many files, the included files can be placed in a different +folder or in a subfolder of the folder containing the instruments. Regardless of which file folder the included +files are in, the sample file paths and include file paths will be calculated starting with the folder which contains +the instrument file.

+

So, if our above example instrument has the main SFZ file, called main.sfz, in a Programs folder under the instrument +root, samples in a Samples folder under that, and the sample_map.sfz is in Programs/mappings, then main.sfz should contain:

+
<group>
+hicc100=63
+#include "mappings/sample_map.sfz"
+
+<group>
+locc100=64
+group=1
+off_by=1
+#include "mappings/sample_map.sfz"
+
+

The sample_map.sfz file in mappings should have the following contents:

+
<region>key=48 sample=../Samples/c4.wav
+<region>key=49 sample=../Samples/db4.wav
+<region>key=50 sample=../Samples/d4.wav
+<region>key=51 sample=../Samples/eb4.wav
+<region>key=52 sample=../Samples/e4.wav
+<region>key=53 sample=../Samples/f4.wav
+<region>key=54 sample=../Samples/gb4.wav
+<region>key=55 sample=../Samples/g4.wav
+<region>key=56 sample=../Samples/ab4.wav
+<region>key=57 sample=../Samples/a4.wav
+<region>key=58 sample=../Samples/bb4.wav
+<region>key=59 sample=../Samples/b4.wav
+<region>key=60 sample=../Samples/c5.wav
+
+

This means that opening the main.sfz file will work, but trying to open sample_map.sfz directly would not, as it would +try to locate the samples in a relative path of ../Samples, which exists when starting from Programs, but does not exist +when starting from Programs/modules. This can make testing sample maps somewhat messy, as they need to be moved out of +their "proper" folder if the map needs to be tested by itself, without the rest of the SFZ.

+

Include And Nesting

+

Included files can, themselves, include files. This is not a problem, just avoid circular recursion.

+

Other Use Cases For Include

+

In addition to sample maps, modulations can also be reused. For example, a common set of vibrato controls can be included +for violin samples which need them, but left out for samples which don't, such as harmonics, percussive noises and legato +transitions. Different dynamics controls for long vs. short bowed articulations are also candidates for such treatment.

+
<master>
+sw_last=34
+sw_label=Sustain
+#include "modules/vibrato.sfz"
+#include "modules/long_dynamics.sfz"
+#include "mappings/sustain.sfz"
+
+<master>
+sw_last=33
+sw_label=Staccato
+#include "modules/vibrato.sfz"
+#include "modules/short_dynamics.sfz"
+#include "mappings/staccato.sfz"
+
+<master>
+sw_last=32
+sw_label=Natural harmonics
+#include "modules/long_dynamics.sfz"
+#include "mappings/harmonics.sfz"
+
+<master>
+sw_last=31
+sw_label=Percussive noises
+#include "modules/short_dynamics.sfz"
+#include "mappings/noises.sfz"
+
+

The same file can also be included in multiple instruments, for example a violin spiccato articulation map can +be used in both a spiccato-only instrument and in a keyswitch instrument which contains other articulations as +well.

+

Putting each set of round robins inside its own file without defining seq_position +inside that file can also be useful for emulating double-tracking. +If the basic non-doubletracked instrument is set up like this:

+
<global>
+seq_length=4
+
+<group>
+seq_position=1
+#include "mappings/palm_mute_rr1_map.sfz"
+<group>
+seq_position=2
+#include "mappings/palm_mute_rr2_map.sfz"
+<group>
+seq_position=3
+#include "mappings/palm_mute_rr3_map.sfz"
+<group>
+seq_position=4
+#include "mappings/palm_mute_rr4_map.sfz"
+
+

It then becomes very simple to make a doubletracked instrument which uses differnt round robins in the left and right channels:

+
<global>
+seq_length=4
+
+<group>
+pan=100
+seq_position=1
+#include "mappings/palm_mute_rr1_map.sfz"
+<group>
+pan=100
+seq_position=2
+#include "mappings/palm_mute_rr2_map.sfz"
+<group>
+pan=100
+seq_position=3
+#include "mappings/palm_mute_rr3_map.sfz"
+<group>
+pan=100
+seq_position=4
+#include "mappings/palm_mute_rr4_map.sfz"
+
+<group>
+pan=-100
+seq_position=1
+#include "mappings/palm_mute_rr2_map.sfz"
+<group>
+pan=-100
+seq_position=2
+#include "mappings/palm_mute_rr3_map.sfz"
+<group>
+pan=-100
+seq_position=3
+#include "mappings/palm_mute_rr4_map.sfz"
+<group>
+pan=-100
+seq_position=4
+#include "mappings/palm_mute_rr1_map.sfz"
+
+

Include And Headers

+

When including files, it's common to put lower levels of header organization, +such as region and group in the included file, and put higher levels in the main file. +However, this is not necessary, and any levels of headers can be included. +It is important to keep in mind that included files are essentially just concatenated to make the SFZ file which +the SFZ instrument actually parses. Although an included file is a little like a procedure in a programming language, it +isn't really one, and the end of the included file is not meaningful when

+

SFZ opcodes set under headers within an included file will be in effect until encountering another header of the same or +higher level. For example, let's say a snare drum sample map contains one-shot samples under <region> headers and also +multisampled hits under a <group> header later in the file, and this file is called snare_map.sfz.

+
<region>
+key=37
+sample=Sidestick.wav
+<region>
+key=39
+sample=Off_center.wav
+<region>
+key=40
+sample=Rimshot.wav
+<group>
+key=38
+seq_length=4
+<region>
+seq_position=1
+sample=Center_rr1.wav
+<region>
+seq_position=2
+sample=Center_rr2.wav
+<region>
+seq_position=3
+sample=Center_rr3.wav
+<region>
+seq_position=4
+sample=Center_rr4.wav
+
+

If we want to put snare controls which apply to all those, this would work:

+
<master>
+amplitude_oncc100=100
+tune_oncc101=1200
+tune_curvecc101=1
+#include "snare_map.sfz"
+
+

This, however, would make the controls affect the sidesticks, off-center hits and rimshot, but not the center hits:

+
<group>
+amplitude_oncc100=100
+tune_oncc101=1200
+tune_curvecc101=1
+#include "snare_map.sfz"
+
+

That is because the opcodes set under the <group> header would only be active until the <group> header for the center +hits is reached. If a <master> header is used, they remain in force until another <master> header is encountered. When +the headers are not immediately visible because they're in an included file, it is easy to fall into this kind of trap.

+

The Define Statement

+

In addition to include, #define is the other statement which is very useful +in making instruments more modular.

+

Define and include can be used together. For example, user-editable parameters, such as MIDI note assignments for drum kits +and CC ranges, can also be placed in a separate file such as the below.

+
#define $KICKKEY 36
+#define $SIDESTICKKEY 37
+#define $SNAREKEY 38
+
+

The defined variables can then be used throughout the instrument, and an end user who wants to change the keymap can edit the +file containing the defined numbers without having to search through the entire instrument. In the specific implementation of ARIA, +anything which uses the defined variables also needs to be placed in the main SFZ file using include, because of the way ARIA +parses SFZ files, described in more detail under the opcode page.

+

Using define as a constant with a single value thorughout an instrument works easily. Defining the same variable to have multiple +values at different points in the same instrument, however, requires care. Using #define to set the same variable to different +values at one point in the same SFZ file does not work well at least in ARIA/Sforzando when loading an instrument. However, a +workaround there is to use include to put each set of define statements with different values in a separate file. In simple +tests, that has been successful.

+

Sometimes copying large chunks of SFZ code and performing search-replace within them is easier than redefining variables comes into +play. There's a balance of when to use include statements and when to just copy some files and use search-replace.

+

Multiple defined variables can be used in the same line.

+
#define $MIC_NAME Room
+#define $MIC_MIX_CC 32
+<control>
+label_cc$MIC_MIX_CC=$MIC_NAME
+
+

One thing to keep in mind is that each variable name should be unique. This is good:

+
#define $SNARE_KEY 38
+#define $SNARE_RIMSHOT_KEY 40
+
+

This will fail in at least some SFZ players, because the complete name of one variable is also the start of another variable's name:

+
#define $SNARE 38
+#define $SNARE_RIMSHOT 40
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/range_extension/index.html b/tutorials/range_extension/index.html new file mode 100644 index 000000000..0ac9b2ae1 --- /dev/null +++ b/tutorials/range_extension/index.html @@ -0,0 +1,882 @@ + + + + + + + + + Range extension - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Range extension

This tutorial describes how to extend the range of an instrument which does not +have samples for all notes in the desired range. This is not complicated, but +there are some downsides to doing it the simple way. Things work the same way +when extending up or down. When there are intermediate pitches missing, for +example when an instrument is sampled every minor third or every octave, there +won't be much choice, though if round robins are available the last approach +can prove useful.

+

Simple extension of closest avaialble sample

+

Let's say we have only one sampled violin section with the following map, and +we want to be able to play the notes for another octave above the highest +currently avaialble note.

+
<region>sample=c4.wav key=48
+<region>sample=db4.wav key=49
+<region>sample=d4.wav key=50
+<region>sample=eb4.wav key=51
+<region>sample=e4.wav key=52
+<region>sample=f4.wav key=53
+<region>sample=gb4.wav key=54
+<region>sample=g4.wav key=55
+<region>sample=ab4.wav key=56
+<region>sample=a4.wav key=57
+<region>sample=bb4.wav key=58
+<region>sample=b4.wav key=59
+<region>sample=c5.wav key=60
+
+

The simplest way is to just stretch the highest note. Using +lokey, hikey and pitch_keycenter as separate opcodes is +better than using key and transpose, as it allows one region +to cover a wide range of pitches.

+
<region>sample=c5.wav lokey=60 hikey=72 pitch_keycenter=60
+
+

Note that ARIA will produce no sound if asked to transpose +a sample more than four octaves up - if that is needed, +create some extra copies of the samples and transpose them +in an audio editor. This accounts for transposition, pitch +bend and any other tuning adjustments, so if an octave of +pitch bend is needed, the maximum effectively avaialable +transpotition becomes an octave less. There is no similar +limitation with downward transposition, though.

+

Filling in missing pitches

+

In the above case, the range is being stretched upwards, but +the same principle applies if there are notes missing within +the range, whether due to recording errors, or the limitations +of instruments which can't produce all notes of the chromatic +scale.

+

Let's say we have a simple pentatonic xylophone.

+
<region>sample=c4.wav key=48
+<region>sample=d4.wav key=50
+<region>sample=f4.wav key=53
+<region>sample=g4.wav key=55
+<region>sample=a4.wav key=57
+<region>sample=c5.wav key=60
+<region>sample=d5.wav key=62
+<region>sample=f5.wav key=65
+<region>sample=g5.wav key=67
+<region>sample=a5.wav key=69
+<region>sample=c6.wav key=72
+
+

This would work similar as above, covering every +pitch with the nearest available note. Whether +to stretch up or down when there are two equally +distant notes available is a judgment call. It might +be worth trying both to see which sounds best. +The below example goes up and doesn't extend the range +beyond the highest or lowest available sample, only +fills in the gaps.

+
<region>sample=c4.wav lokey=48 hikey=49 pitch_keycenter=48
+<region>sample=d4.wav lokey=50 hikey=51 pitch_keycenter=50
+<region>sample=f4.wav lokey=52 hikey=54 pitch_keycenter=53
+<region>sample=g4.wav lokey=55 hikey=56 pitch_keycenter=55
+<region>sample=a4.wav lokey=57 hikey=58 pitch_keycenter=57
+<region>sample=c5.wav lokey=59 hikey=61 pitch_keycenter=59
+<region>sample=d5.wav lokey=62 hikey=63 pitch_keycenter=62
+<region>sample=f5.wav lokey=64 hikey=66 pitch_keycenter=65
+<region>sample=g5.wav lokey=67 hikey=68 pitch_keycenter=67
+<region>sample=a5.wav lokey=69 hikey=70 pitch_keycenter=69
+<region>sample=c6.wav lokey=71 hikey=72 pitch_keycenter=72
+
+

Alternating several samples

+

The above is good enough in a lot of cases, though it might +become obviously audible that the entire top octave uses +the same sample. We could use the top two or three samples +instead, and alternate them like this:

+
<region>sample=c5.wav key=60
+<region>sample=bb4.wav lokey=61 hikey=61 pitch_keycenter=58
+<region>sample=b4.wav lokey=62 hikey=62 pitch_keycenter=59
+<region>sample=c5.wav lokey=63 hikey=63 pitch_keycenter=60
+<region>sample=bb4.wav lokey=64 hikey=64 pitch_keycenter=58
+<region>sample=b4.wav lokey=65 hikey=65 pitch_keycenter=59
+<region>sample=c5.wav lokey=66 hikey=66 pitch_keycenter=60
+
+

...and so on, continuing to the highest desired note.

+

Using different round robins

+

However, in the above case, notes a minor third apart will +still use the same sample, and there's a minor third interval +in both minor and major triads. There might not be a good way +to get around this with the sample set we have above, but if we +have two round robins, we could do something like this:

+
<group>
+seq_length=2
+<region>sample=c4_rr1.wav key=48
+<region>sample=db4_rr1.wav key=49
+<region>sample=d4_rr1.wav key=50
+<region>sample=eb4_rr1.wav key=51
+<region>sample=e4_rr1.wav key=52
+<region>sample=f4_rr1.wav key=53
+<region>sample=gb4_rr1.wav key=54
+<region>sample=g4_rr1.wav key=55
+<region>sample=ab4_rr1.wav key=56
+<region>sample=a4_rr1.wav key=57
+<region>sample=bb4_rr1.wav key=58
+<region>sample=b4_rr1.wav key=59
+<region>sample=c5_rr1.wav key=60
+<region>sample=bb4_rr2.wav lokey=61 hikey=61 pitch_keycenter=58
+<region>sample=b4_rr2.wav lokey=62 hikey=62 pitch_keycenter=59
+<region>sample=c5_rr2.wav lokey=63 hikey=63 pitch_keycenter=60
+<region>sample=bb4_rr1.wav lokey=64 hikey=64 pitch_keycenter=58
+<region>sample=b4_rr1.wav lokey=65 hikey=65 pitch_keycenter=59
+<region>sample=c5_rr1.wav lokey=66 hikey=66 pitch_keycenter=60
+<region>sample=bb4_rr2.wav lokey=67 hikey=67 pitch_keycenter=58
+<region>sample=b4_rr2.wav lokey=68 hikey=68 pitch_keycenter=59
+<region>sample=c5_rr2.wav lokey=69 hikey=69 pitch_keycenter=60
+<region>sample=bb4_rr1.wav lokey=70 hikey=70 pitch_keycenter=58
+<region>sample=b4_rr1.wav lokey=71 hikey=71 pitch_keycenter=59
+<region>sample=c5_rr1.wav lokey=72 hikey=72 pitch_keycenter=60
+
+<group>
+seq_length=2
+seq_position=2
+<region>sample=c4_rr2.wav key=48
+<region>sample=db4_rr2.wav key=49
+<region>sample=d4_rr2.wav key=50
+<region>sample=eb4_rr2.wav key=51
+<region>sample=e4_rr2.wav key=52
+<region>sample=f4_rr2.wav key=53
+<region>sample=gb4_rr2.wav key=54
+<region>sample=g4_rr2.wav key=55
+<region>sample=ab4_rr2.wav key=56
+<region>sample=a4_rr2.wav key=57
+<region>sample=bb4_rr2.wav key=58
+<region>sample=b4_rr2.wav key=59
+<region>sample=c5_rr2.wav key=60
+<region>sample=bb4_rr1.wav lokey=61 hikey=61 pitch_keycenter=58
+<region>sample=b4_rr1.wav lokey=62 hikey=62 pitch_keycenter=59
+<region>sample=c5_rr1.wav lokey=63 hikey=63 pitch_keycenter=60
+<region>sample=bb4_rr2.wav lokey=64 hikey=64 pitch_keycenter=58
+<region>sample=b4_rr2.wav lokey=65 hikey=65 pitch_keycenter=59
+<region>sample=c5_rr2.wav lokey=66 hikey=66 pitch_keycenter=60
+<region>sample=bb4_rr1.wav lokey=67 hikey=67 pitch_keycenter=58
+<region>sample=b4_rr1.wav lokey=68 hikey=68 pitch_keycenter=59
+<region>sample=c5_rr1.wav lokey=69 hikey=69 pitch_keycenter=60
+<region>sample=bb4_rr2.wav lokey=70 hikey=70 pitch_keycenter=58
+<region>sample=b4_rr2.wav lokey=71 hikey=71 pitch_keycenter=59
+<region>sample=c5_rr2.wav lokey=72 hikey=72 pitch_keycenter=60
+
+

This is obviously much more complicated than the simple version +we started with, and the extra complexity might not be worth it +in many cases, but if needed things can be done this way.

+

Recording extra notes

+

In cases where it's very important to avoid using the same +sample too many times, it's possible to start addressing this +at the recording stage, and record additional samples of the notes +which will need to be stretched. Of course this could be more +work than just recording the target pitches in the first place, +but if the pitches are difficult to produce consistently (for +example are notes that a singer can hit only with considerable +strain) or just physically fall outside the range, it may be a +viable option.

+

True legato samples.

+

Extending the range with true legato samples requires extending the range +for both the previous note (the sw_previous values) and the new note +(the lokey/hikey values). Here is a process which has worked in practice +for extending the range of a legato instrument upwards by a major second:

+
    +
  • Copy regions with the key to be extended. Add the amount of shift (3 if taking the second-highest and third-lowest note and extending the range by a major second) to sw_previous, lokey and hikey to the copy.
  • +
  • Copy regions with the sw_previous to be extended except those already copied in the previous step. Likewise add the amount of shift to sw_previous, lokey and hikey to the copy.
  • +
  • Delete the regions with sw_previous above the new max range (or could try avoiding copying them in the first step, but this way is probably safer).
  • +
  • Add in regions going from the bottom three values of sw_previous to the new notes. This is where some sort of defaults, as mentioned above, will be needed.
  • +
  • Add regions going from the new extended notes to the bottom three pitches, as above.
  • +
+

Note that there will be no legato samples covering the widest intervals +from the extended notes to the farthest notes on the other side. If the +instrument has legato samples only recorded within a certain range (for +example only for intervals up to an octave), this isn't going to create +any additional problems that didn't already have to be solved when making +the non-extended legato instruments - so whether defaulting to the +largest interval sampled, triggering a regular sustain or just producing +no sound at all, just do the same when there's no interval wide enough +for a leap to or from an extended note. If an instrument does have every +possible note transition in its range sampled, however (quite possible +for instruments with a small range, such as rebab), the same +compromises are available for the missing intervals in the extended range.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/sfz1_modulations/index.html b/tutorials/sfz1_modulations/index.html new file mode 100644 index 000000000..2c21c36e1 --- /dev/null +++ b/tutorials/sfz1_modulations/index.html @@ -0,0 +1,779 @@ + + + + + + + + + SFZ1 modulations - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

SFZ1 modulations

The set of modulations available under the SFZ1 specification is fixed, and +there's a dedicated opcode for every possible modulation, including fairly +esoteric ones such as using note velocity to modulate the hold stage of the +pitch envelope.

+

Basic MIDI CC modulation

+

A few opcodes can be modulated simply by MIDI CC, with the modulation adding +to what the opcode would normally do. These are: offset and delay.

+

For example, this would have a sample offset of 500 when the modulating CC is +at 0, and a sample offset of 1000 when the modulating CC is at max:

+
offset=500
+offset_cc100=500
+
+

It's also possible to just specify the modulation, in which case the +default value is what will be modulated. The defaults for offset, delay and +EQ band gain are 0, so this would result in the offset being modulated between +0 and 1000:

+
offset_cc100=1000
+
+

Modulating default values

+

The three EQ bands' frequency, bandwidth and gain work similarly, +but also add velocity tracking. The EQ bandwidth and center frequency also have +non-zero defaults, +for example eq2_freq is 500 if not specified. So, this would modulate the center +frequency of the second EQ band between 500 and 1500 if eq2_freq is left at default:

+
eq2_freqcc110=1000
+
+

Velocity tracking, keytracking and randomization

+

EQ frequency and gain (but not bandwidth) can additionally be modulated by velocity. +For example, if we want to make a sound brighter when the velocity is higher, +we might use something like this:

+
eq1_vel2gain=-6
+eq2_vel2gain=12
+eq2_vel2freq=500
+
+

The xfin/xfout CCs are also a way to fade sounds in and out using MIDI CC. +An example of one note with two dynamic layers being crossfaded:

+
<region>sample=e4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127
+<region>sample=e4_ft_f.wav xfin_locc1=64 xfin_hicc1=127
+
+

In addition to MIDI CC, crossfades can also use MIDI note number and velocity as +modulation sources, and the xf_cccurve, xf_keycurve and xf_velcurve +give the choice of two curves for each of these modulations.

+

More sophisticated modulations are possible with volume, +pitch and filter cutoff. Volume and cutoff can be modulated by MIDI CC directly +(pitch can't in SFZ1 - the tune_ccN modulation is an ARIA extension). All three +can also have randomization applied and be modulated by MIDI note number and +velocity. The nomenclature for volume is a little confusing, with gain_ccN using +"gain" in the name, while the others are called amp_random, +amp_keytrack and amp_veltrack.

+
gain_cc80=-6
+amp_random=3
+amp_keytrack=-1.3
+amp_veltrack=80
+
+

LFOs and envelopes

+

Volume, filter and cutoff also each get an LFO and an envelope. +The LFO rate and depth can be modulated by MIDI CC. +Each LFO also has a simple envelope with delay and fade, +but modulating the duration of these is not allowed under the SFZ1 spec +(though it is with SFZ2 LFOs). Here's a typical pitch vibrato LFO:

+
pitchlfo_freq=2
+pitchlfo_freqcc50=10
+pitchlfo_depthcc51=33
+
+

Each envelope parameter can also be modulated by CC, or by velocity. Here's a +exmple setup for a synth-style ADSR volume envelope (hold is not specified so the +default hold value of 0 is used) controlled by CCs and some initial +minimum values set for attack and release, along with a default sustain of 0:

+
ampeg_attack=0.001
+ampeg_attack_oncc40=1
+ampeg_decay_oncc41=4
+ampeg_sustain=1
+ampeg_sustain_oncc42=100
+ampeg_release=0.1
+ampeg_release_oncc43=0.9
+
+

Modulating envelope parameters with velocity allows, for example, setting up a filter +on an acid bass which will sweep farther with higher velocity, and also sweep faster.

+
cutoff=120
+resonance=12
+fileg_attack=0.5
+fileg_decay=1
+fileg_depth=500
+fileg_vel2attack=-0.4
+fileg_vel2decay=-0.8
+fileg_vel2depth=4000
+
+

If something is not described above, then modulating it is not possible under the +SFZ1 specification, and will require using SFZ2 or possibly some extension opcodes.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/sfz2_modulations/index.html b/tutorials/sfz2_modulations/index.html new file mode 100644 index 000000000..9ab5a2842 --- /dev/null +++ b/tutorials/sfz2_modulations/index.html @@ -0,0 +1,979 @@ + + + + + + + + + SFZ2 modulations - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

SFZ2 modulations

The modulations available under SFZ2 are much more flexible than the fixed set +specified by SFZ1. All SFZ1 modulations are still available under the SFZ2 spec, +and will often be easier to use in cases such as envelopes where the standard +AHDSR shape is all that's needed.

+

The basic difference is that SFZ1 has three envelopes - one assigned to +volume, one to pitch, and one to filter cutoff. There are also three LFOs, +one for each of those modulation targets. SFZ2 can have an arbitraty number +of envelopes and LFOs, with the ability to specify one or more modulation +targets from a list. It is even possible for LFOs to modulate other LFOs +and envelopes to modulate LFOs (but not for LFOs to modulate envelopes). +In addition, SFZ2 envelopes can have an arbitrary number of points.

+

Additional MIDI CC modulation

+

SFZ2 adds one more paramter which can be modulated with MIDI CC - stereo width. +Also need to document pan_onccX and find out whether it's SFZ1 or SFZ2 - currently +not sure, needs testing.

+

LFOs

+

For each LFO, an LFO number must be specified - lfo01, lfo02 etc. Each +LFO has the following parameters:

+

lfoN_wave +lfoN_freq_onccX +lfoN_freq_stepccX +lfoN_delay_onccX +lfoN_fade_onccX +lfoN_phase_onccX

+

Click on each link for a detailed description. Similarly to SFZ1 LFOs, +there's a frequency, a delay and a fade-in time. In addition, the +waveform shape and initial phase can be specified and the LFO can +be configured to run for a limited number of counts.

+

The frequency, delay, fade and initial phase can all be modulated by +MIDI CC. There is no modulation for LFO depth - to control the depth +of vibrato etc, use MIDI CC to modulate how much the LFO affects the +desired target.

+

Available LFO targets

+

The available modulation targets for LFOs are These destinations are +added as a suffix to 'lfoN_'. For example

+
lfo01_pitch=100
+
+

makes LFO 01 affect pitch with a max depth of 100 cents.

+
lfo03_freq_lfo01_oncc117=1.3
+
+

would make LFO 03 add up to 1.3 Hertz to +the frequency of LFO 01, with the amount modulated by MIDI CC 117.

+

The avaialble targets related to volume and stereo positioning are:

+
    +
  • volume
  • +
  • volume_oncc
  • +
  • volume_smoothcc
  • +
  • volume_stepcc
  • +
  • amplitude
  • +
  • amplitude_oncc
  • +
  • amplitude_smoothcc
  • +
  • amplitude_stepcc
  • +
  • pan
  • +
  • pan_oncc
  • +
  • pan_smoothcc
  • +
  • pan_stepcc
  • +
  • width
  • +
  • width_oncc
  • +
  • width_smoothcc
  • +
  • width_stepcc
  • +
+

The targets for pitch modulation are:

+
    +
  • pitch
  • +
  • pitch_oncc
  • +
  • pitch_smoothcc
  • +
  • pitch_stepcc
  • +
+

The targets for filter modulation are cutoff and resonance, for both +the first and second filter:

+
    +
  • cutoff
  • +
  • cutoff_oncc
  • +
  • cutoff_smoothcc
  • +
  • cutoff_stepcc
  • +
  • resonance
  • +
  • resonance_oncc
  • +
  • resonance_smoothcc
  • +
  • resonance_stepcc
  • +
  • cutoff2
  • +
  • cutoff2_oncc
  • +
  • cutoff2_smoothcc
  • +
  • cutoff2_stepcc
  • +
  • resonance2
  • +
  • resonance2_oncc
  • +
  • resonance2_smoothcc
  • +
  • resonance2_stepcc
  • +
+

The modulations of the EQ bands are:

+
    +
  • eqNfreq
  • +
  • eqNfreq_oncc
  • +
  • eqNfreq_smoothcc
  • +
  • eqNfreq_stepcc
  • +
  • eqNbw
  • +
  • eqNbw_oncc
  • +
  • eq1bw_smoothcc
  • +
  • eqNbw_stepcc
  • +
  • eqNgain
  • +
  • eqNgain_oncc
  • +
  • eqNgain_smoothcc
  • +
  • eqNgain_stepcc
  • +
+

The following targets affect other LFOs:

+
    +
  • freq_lfoX
  • +
  • depth_lfoX
  • +
  • depthadd_lfoX
  • +
+

Some Cakewalk instruments can also modulate the decim and bitred effects:

+
    +
  • decim
  • +
  • decim_oncc
  • +
  • decim_smoothcc
  • +
  • decim_stepcc
  • +
  • bitred
  • +
  • bitred_oncc
  • +
  • bitred_smoothcc
  • +
  • bitred_stepcc
  • +
+

LFO examples

+

Here is an example of how one LFO could be used to control both pitch vibrato +and volume vibrato (tremolo) with the rate, pitch vibrato depth, tremolo +depth, delay and fade each controlled by a separate MIDI CC parameter:

+
lfo01_pitch_oncc111=22 // Vibrato LFO
+lfo01_freq=2
+lfo01_freq_oncc113=7
+lfo01_delay_oncc114=0.500
+lfo01_fade_oncc115=0.500
+lfo01_volume=0 // This LFO also does tremolo
+lfo01_volume_oncc112=2
+
+

And an LFO which does just pitch vibrato, and has a second LFO modulating its +rate to create some unsteadiness:

+
lfo01_pitch_oncc111=22 // Vibrato LFO
+lfo01_freq=2
+lfo01_freq_oncc113=7
+lfo01_delay_oncc114=0.500
+lfo01_fade_oncc115=0.500
+
+lfo2_freq_lfo1_oncc116=3   //Affect the rate of the other LFO for unsteady vibrato
+lfo02_wave=1
+lfo02_freq=0.1
+lfo02_freq_oncc116=0.9
+
+

For randomized humanization, the extended MIDI CC 135 can be used to randomize the +initial phase and speed of the second LFO.

+
lfo01_pitch_oncc111=22 // Vibrato LFO
+lfo01_freq=2
+lfo01_freq_oncc113=7
+lfo01_delay_oncc114=0.500
+lfo01_fade_oncc115=0.500
+
+lfo2_freq_lfo1_oncc116=3   //Affect the rate of the other LFO for unsteady vibrato
+lfo02_wave=1
+lfo02_freq=0.1
+lfo02_freq_oncc116=0.8
+lfo02_phase_oncc135=1
+lfo02_freq_oncc135=0.2
+
+

Envelopes

+

SFZ2 envelopes are numbered and can have an arbitrary number of points, with +the level at each point and its modulation set separately. The opcodes used +to create these envelopes are:

+ +

Envelope targets

+

Similarly to LFOs, envelopes have assignable modulation targets. These +destinations are added as a suffix to ‘egN_’ - so, for example:

+
eg01_pitch=2400
+
+

would have envelope 01 modulate pitch, with an envelope depth of 2400 cents.

+

These are the available targets related to amplitude and stereo positioning:

+
    +
  • amplitude
  • +
  • amplitude_oncc
  • +
  • volume
  • +
  • volume_oncc
  • +
  • pan
  • +
  • pan_oncc
  • +
  • width
  • +
  • width_oncc
  • +
+

Targets for pitch:

+
    +
  • pitch
  • +
  • pitch_oncc
  • +
+

Targets for filters:

+
    +
  • cutoff
  • +
  • cutoff_oncc
  • +
  • resonance
  • +
  • resonance_oncc
  • +
  • cutoff2
  • +
  • cutoff2_oncc
  • +
  • resonance2
  • +
  • resonance2_oncc
  • +
+

Targets for EQ bands:

+
    +
  • eqNbw
  • +
  • eqNbw_oncc
  • +
  • eqNfreq
  • +
  • eqNfreq_oncc
  • +
  • eqNgain
  • +
  • eqNgain_oncc
  • +
+

Targets for modulating LFOs:

+
    +
  • depth_lfo
  • +
  • depthadd_lfo
  • +
  • freq_lfo
  • +
+

These two need to be tested - are they for envelopes to modulate other envelopes?

+
    +
  • depth
  • +
  • depth_oncc
  • +
+

Targets for modulating decim and bitred do not appear to have been included in the specification.

+

Example envelope

+

Here is a simple pitch envelope which will start a note with a glide from up to an octave +lower, with the depth and time modulated by MIDI CCs. The envelope will statt at a lower +value at envelope point 0, and return the pitch to normal at envelope point 1.

+
eg01_sustain=1 //Pitch envelope setup for slides
+eg01_level0=1
+eg01_level1=0
+eg01_time0=0
+eg01_time1=0
+eg01_pitch_oncc100=-1200
+eg01_time1_oncc101=1
+
+

Using LFOs and envelopes together

+

Here is an example of using both an envelope and an LFO to modulate pitch, with common +depth and delay parameters. The goal here is asymmetrical pitch vibrato - vibrato which +does not go up and down around the original pitch, but instead only goes below it. This +is idiomatic with saxophones, and is also how vibrato with certain types of non-floating +guitar bridges works (string-bending vibrato is similar, of course, but in the other +direction).

+

Shifting the phase of LFO01 will make the vibrato waveform start at the top. We also need +to lower the pitch by the same amount as the vibrato depth. Using an envelope for this +allows us to delay the onset of the vibrato (again, an important element of idiomatic +saxophone vibrato) without a discontinuous jump in pitch.

+
lfo01_pitch_oncc111=20 //Saxy vibrato LFO - goes down from the main pitch
+lfo01_freq=2
+lfo01_freq_oncc112=8
+lfo01_phase=0.25 //To make it start at the top
+lfo01_delay_oncc116=1
+eg01_pitch_oncc111=20
+eg01_sustain=1
+eg01_level0=0
+eg01_level1=0
+eg01_level2=-1
+eg01_time0=0
+eg01_time1=0
+eg01_time1_oncc116=1
+eg01_time2=0
+
+

Using SFZ1 and SFZ2 modulations together

+

Both SFZ1 and SFZ2 modulations may be mixed freely. Indeed, it may be simpler to accomplish +the above using the SFZ1 pitch envelope, as it is sufficient in this case, with the SFZ2 +LFO. Setting the initial phase and modulating the delay with MIDI CC would not be possible +with the SFZ1 pitch LFO.

+
lfo01_pitch_oncc111=20 //Saxy vibrato LFO - goes down from the main pitch
+lfo01_freq=2
+lfo01_freq_oncc112=8
+lfo01_phase=0.25 //To make it start at the top
+lfo01_delay_oncc116=1
+pitcheg_delay_oncc116=1 //Pitch envelope to drop the central pitch when sax vibrato kicks in
+pitcheg_depth_oncc111=-20
+
+

SmoothccN and stepccN

+

Most MIDI CC modulations, though not all, can have use smoothccN and stepccN. +These work similarly to bend_smooth and bend_step.

+

SmoothccN adds "inertia" to a modulation, so quickly changing the MIDI CC value has a slower effect +on the modulation target than it would normally. StepccN causes the modulation to happen in a +discrete number of steps. Setting the number of steps to 1 would make the modulation an +all-or-nothing control.

+

This is what's possible under the SFZ2 specification. There are some additional modulations +available as ARIA extensions, with amplitude_onccN being a very useful one.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/strum/index.html b/tutorials/strum/index.html new file mode 100644 index 000000000..3c18516f3 --- /dev/null +++ b/tutorials/strum/index.html @@ -0,0 +1,1401 @@ + + + + + + + + + Strums - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Strums

Strumming can be difficult to produce with samples. SFZ does have some capabilities to make it a little easier.

+

Creating a strum is basically triggering several single-string samples with some of them delayed slightly. +Similar but even simpler is a drum flam, which is two drum hits in rapid succession.

+
<region>
+sample=snare1.wav
+<region>
+delay=0.03
+sample=snare2.wav
+
+

Basic Guitar Chord Strum

+

Here is how an open E major chord could be triggered with a single key:

+
<group>
+key=40
+<region>
+sample=e4.wav
+<region>
+delay=0.02
+sample=b4.wav
+<region>
+delay=0.04
+sample=e5.wav
+<region>
+delay=0.06
+sample=g#4.wav
+<region>
+delay=0.08
+sample=b4.wav
+<region>
+delay=0.1
+sample=e6.wav
+
+

This is a downward strum - physically the lower strings on a guitar are located higher, so downward strums begin with the lowest +notes. An upstroke would have the same samples but with the delays in reversed order, so it starts with the higest notes.

+
<group>
+key=40
+<region>
+sample=e4.wav
+delay=0.1
+<region>
+delay=0.08
+sample=b4.wav
+<region>
+delay=0.06
+sample=e5.wav
+<region>
+delay=0.04
+sample=g#4.wav
+<region>
+delay=0.02
+sample=b4.wav
+<region>
+sample=e6.wav
+
+

Different Chord Types

+

An E minor chord would be similar, only with a G instead of the G#. Leaving out the upward strum:

+
<global>
+sw_lokey=36
+sw_hikey=37
+sw_default=36
+
+<group>
+key=40
+<region>
+sample=e4.wav
+<region>
+delay=0.02
+sample=b4.wav
+<region>
+delay=0.04
+sample=e5.wav
+//Fourth string is different for major versus minor chords.
+<region>
+sw_last=36
+sw_label=Major
+delay=0.06
+sample=g#4.wav
+<region>
+sw_last=37
+sw_label=Minor
+delay=0.06
+sample=g4.wav
+<region>
+delay=0.08
+sample=b4.wav
+<region>
+delay=0.1
+sample=e6.wav
+
+

Of course for non-barre chords, there could be differences in voicings for more than one string, but the principle +remains the same.

+

The free Emilyguitar instrument located at https://github.com/sfzinstruments/karoryfer.emilyguitar includes a simple +strum patch with keyswitchable power chords, major barre chords and minor barre chords. It has downward strums only +with a very short strum time. However, it is not well-organized and not at all commented, its patches being just +output from sfzed. Somewhat more organized and including power chords (which are simply the lowest three strings of +the barre chord), our E chord might look like this:

+
<global>
+sw_lokey=36
+sw_hikey=38
+sw_default=36
+
+<group>
+key=40
+//Lowest three strings are the same regardless of keyswitch
+<region>
+sample=e4.wav
+<region>
+delay=0.02
+sample=b4.wav
+<region>
+delay=0.04
+sample=e5.wav
+
+//In order to display the keyswitch label for power chords,
+//we need a placeholder
+<group>
+key=40
+sw_last=37
+sw_label=Power
+<region>
+sample=*silence
+ampeg_decay=0
+ampeg_sustain=0
+ampeg_release=0
+
+//Fourth string is different for major versus minor chords
+//It is not triggered at all for power chords
+<group>
+key=40
+<region>
+sw_last=36
+sw_label=Major
+delay=0.06
+sample=g#4.wav
+<region>
+sw_last=37
+sw_label=Minor
+delay=0.06
+sample=g4.wav
+
+//Top two strings are not triggered for power chords
+//Duplicated for major and minor keyswitches
+<group>
+key=40
+sw_last=36
+sw_label=Major
+<region>
+delay=0.08
+sample=b4.wav
+<region>
+delay=0.1
+sample=e6.wav
+<group>
+key=40
+sw_last=37
+sw_label=Minor
+<region>
+delay=0.08
+sample=b4.wav
+<region>
+delay=0.1
+sample=e6.wav
+
+

For upwards strums, simply reversing the order of delay values would result in the power chords being +delayed as the e5.wav region would be the first sample triggered, and it would have 0.006 seconds of +delay. This would not be good. Therefore, if we want to add upwards strums on lower keyswitches, we +might end up with something like this:

+
<global>
+sw_lokey=33
+sw_hikey=38
+sw_default=36 //Default is major chord, downward strum
+
+//Lower three strings for barre chords
+<group>
+key=40
+sw_last=35
+sw_label=Major Up
+<region>
+sample=e4.wav
+delay=0.1
+<region>
+delay=0.08
+sample=b4.wav
+<region>
+delay=0.06
+sample=e5.wav
+<group>
+key=40
+sw_last=34
+sw_label=Minor Up
+<region>
+sample=e4.wav
+delay=0.1
+<region>
+delay=0.08
+sample=b4.wav
+<region>
+delay=0.06
+sample=e5.wav
+
+//Lower three strings for power chords
+<group>
+key=40
+sw_last=33
+sw_label=Power Up
+<region>
+sample=e4.wav
+delay=0.04
+<region>
+delay=0.02
+sample=b4.wav
+<region>
+sample=e5.wav
+
+//Fourth string is different for major versus minor chords
+//It is not triggered at all for power chords
+<group>
+key=40
+<region>
+sw_last=35
+sw_label=Major Up
+delay=0.004
+sample=g#4.wav
+<region>
+sw_last=34
+sw_label=Minor Up
+delay=0.004
+sample=g4.wav
+
+//Top two strings are not triggered for power chords
+//Duplicated for major and minor keyswitches
+<group>
+key=40
+sw_last=35
+sw_label=Major Up
+<region>
+delay=0.02
+sample=b4.wav
+<region>
+sample=e6.wav
+<group>
+key=40
+sw_last=34
+sw_label=Minor up
+<region>
+delay=0.02
+sample=b4.wav
+<region>
+sample=e6.wav
+
+

Depending on needs, this might not be worth implementing, as duplicaton of regions adds to the time +required for many SFZ players (certainly ARIA/sforzando) to parse and open an instrument. It is, +however, certainly possible.

+

Adjusting Time

+

The above strums all have a fixed duration. Adjusting strum time is easily done by replacing the +fixed delay with a modulated one. Going back to the simple E major example for brevity's sake:

+
<group>
+key=40
+<region>
+sample=e4.wav
+<region>
+delay_cc1=0.2
+sample=b4.wav
+<region>
+delay_cc1=0.4
+sample=e5.wav
+<region>
+delay_cc1=0.6
+sample=g#4.wav
+<region>
+delay_cc1=0.8
+sample=b4.wav
+<region>
+delay_cc1=1
+sample=e6.wav
+
+

It would also be easy to add a small random delay to each voice. However, because delay is not an +available target for the var modulator, it is not possible to have an adjustable amount of +randomization, or make the random amount smaller when the CC adjusting the non-random delay is low. +This means adding a simple delay_random to each voice would create the risk of "earlier" notes +actually sounding after "later" ones when the non-random delay is close to zero. However, making +the delay partially fixed and partially adjustable avoids this.

+
<group>
+key=40
+<region>
+sample=e4.wav
+<region>
+delay=0.01
+delay_cc1=0.2
+delay_random=0.01
+sample=b4.wav
+<region>
+delay=0.02
+delay_cc1=0.4
+delay_random=0.01
+sample=e5.wav
+<region>
+delay=0.03
+delay_cc1=0.6
+delay_random=0.01
+sample=g#4.wav
+<region>
+delay=0.04
+delay_cc1=0.8
+delay_random=0.01
+sample=b4.wav
+<region>
+delay=0.05
+delay_cc1=1
+delay_random=0.01
+sample=e6.wav
+
+

Ringing And Muting

+

With the above examples, the samples will play until a note-off message, then follow the usual amp +envelope release. In reality, the strings will often ring until the string is hit again, and it +can be more convenient to have the samples always play in their entirety unless muted:

+
<global>
+loop_mode=one_shot
+<group>
+key=40
+<region>
+sample=e4.wav
+group=6
+off_by=6
+<region>
+delay_cc1=0.2
+sample=b4.wav
+group=5
+off_by=5
+<region>
+delay_cc1=0.4
+sample=e5.wav
+group=4
+off_by=4
+<region>
+delay_cc1=0.6
+sample=g#4.wav
+group=3
+off_by=3
+<region>
+delay_cc1=0.8
+sample=b4.wav
+group=2
+off_by=2
+<region>
+delay_cc1=1
+sample=e6.wav
+group=1
+off_by=1
+
+

Note that a new strum will mute all strings, without waiting for their delay for that specific string to be completed. +There is currently elegant solution known for this. Using a longer off time or triggering a release sample could be +possible workarounds to fill the sonic gap, though. On the positive side, a partial strum that does not hit all the +strings would let the other strings keep ringing.

+

If one shot mode is used, it's probably also useful to allow for quickly muting all strings when desired. That can be done with a placeholder region for each string, and combining those regions on another key, here one above the octave of the strums.

+
<group>
+key=60
+ampeg_sustain=0
+ampeg_release=0
+<region>
+sample=*silence
+group=6
+off_by=6
+<region>
+sample=*silence
+group=5
+off_by=5
+<region>
+sample=*silence
+group=4
+off_by=4
+<region>
+sample=*silence
+group=3
+off_by=3
+<region>
+sample=*silence
+group=2
+off_by=2
+<region>
+sample=*silence
+group=1
+off_by=1
+
+

Harp Glissandi

+

Harp glissandi could be set up very similarly to a guitar strum, only with potentially a lot more notes. +For simplicty's sake, let's consider just one octave. Speed is still controlled by CC1, and MIDI note +24 will trigger an upward glissando starting with the C4 note.

+
<group>
+key=24
+<region>
+sample=c4.wav
+<region>
+sample=d4.wav
+delay_cc1=0.1
+<region>
+sample=e4.wav
+delay_cc1=0.2
+<region>
+sample=f4.wav
+delay_cc1=0.3
+<region>
+sample=g4.wav
+delay_cc1=0.4
+<region>
+sample=a4.wav
+delay_cc1=0.5
+<region>
+sample=b4.wav
+delay_cc1=0.6
+<region>
+sample=c5.wav
+delay_cc1=0.7
+
+

In order to make this more usable, we can add another control which will determine for how many notes +the gliss keeps going before it stops. Let's use CC4.

+
<group>
+key=24
+//First three notes are not affected by CC4, and are always played
+<region>
+sample=c4.wav
+<region>
+sample=d4.wav
+delay_cc1=0.1
+<region>
+sample=e4.wav
+delay_cc1=0.2
+<region>
+sample=f4.wav
+delay_cc1=0.3
+locc4=1
+<region>
+sample=g4.wav
+delay_cc1=0.4
+locc4=32
+<region>
+sample=a4.wav
+delay_cc1=0.5
+locc4=64
+<region>
+sample=b4.wav
+delay_cc1=0.6
+locc4=96
+<region>
+sample=c5.wav
+delay_cc1=0.7
+locc4=127
+
+

This is essentially how a harp glissando on a folk harp operates. Concert harps have pedals which +allow the retuning of strings to allow playing other scales, and this would need to be implemented, +perhaps with a different MIDI CC for each pitch class. Strumming the drone strings on a Hungarian +zither also works essentially as described here.

+

Lyres And Zithers

+

Many folk lyres, guslis etc. are tuned diatonically and chords on those are played by muting some +strings, and strumming across both the open and muted strings. Keyswitches in another octave could +be added to mute the strings, so that samples are only played when the switch matching that string is +down. This basically works like a harp gliss, but the samples for the muted strings are not played.

+

The keyswitches will not be displayed on the keyboard by most sfz players, so it will also likely +be necessary to add some placeholder regions just to make them display.

+

It's also common to strum across fewer than all the strings; this is basically what the power +chord in the above guitar examples is. Instead of keyswitching, it is also possible to have partial +strums on different keys (though this can easily require more keys than an 88-key keyboard), +or selectable by CC, note velocity and possibly other variables as well. The below example uses +CC4 to control how many strings are strummed.

+
<group>
+key=24
+//First three notes are not affected by CC4
+<region>
+sample=c4.wav
+sw_down=36
+<region>
+sample=d4.wav
+delay_cc1=0.1
+sw_down=38
+<region>
+sample=e4.wav
+delay_cc1=0.2
+sw_down=40
+<region>
+sample=f4.wav
+delay_cc1=0.3
+sw_down=41
+locc4=1
+<region>
+sample=g4.wav
+delay_cc1=0.4
+sw_down=43
+locc4=32
+<region>
+sample=a4.wav
+delay_cc1=0.5
+sw_down=45
+locc4=64
+<region>
+sample=b4.wav
+delay_cc1=0.6
+sw_down=47
+locc4=96
+<region>
+sample=c5.wav
+delay_cc1=0.7
+sw_down=48
+locc4=127
+
+//Placeholders to get the switch keys to be visible
+<group>
+sample=*silence
+ampeg_decay=0
+ampeg_sustain=0
+ampeg_release=0
+<region>
+key=36
+<region>
+key=38
+<region>
+key=40
+<region>
+key=41
+<region>
+key=43
+<region>
+key=45
+<region>
+key=47
+<region>
+key=48
+
+

For more realism, muted samples could be triggered for the strings which are not down. +Although muting the strings for the keyswitches which are up and skipping the strings where the +switch is down would be more analogous to the way the instruments are played in real life, this +sort of "negative space" chord fingering is much more awkward for most users to play on a keyboard. +It could easily be accomplished by merely switching the sw_up and sw_down opcodes in the below +example.

+
<group>
+key=24
+
+//Ringing strings
+//First three notes are not affected by CC4
+<region>
+sample=c4.wav
+sw_down=36
+<region>
+sample=d4.wav
+delay_cc1=0.1
+sw_down=38
+<region>
+sample=e4.wav
+delay_cc1=0.2
+sw_down=40
+<region>
+sample=f4.wav
+delay_cc1=0.3
+sw_down=41
+locc4=1
+<region>
+sample=g4.wav
+delay_cc1=0.4
+sw_down=43
+locc4=32
+<region>
+sample=a4.wav
+delay_cc1=0.5
+sw_down=45
+locc4=64
+<region>
+sample=b4.wav
+delay_cc1=0.6
+sw_down=47
+locc4=96
+<region>
+sample=c5.wav
+delay_cc1=0.7
+sw_down=48
+locc4=127
+
+//Muted strings
+//First three notes are not affected by CC4
+<region>
+sample=c4_muted.wav
+sw_up=36
+<region>
+sample=d4_muted.wav
+delay_cc1=0.1
+sw_up=38
+<region>
+sample=e4_muted.wav
+delay_cc1=0.2
+sw_up=40
+<region>
+sample=f4_muted.wav
+delay_cc1=0.3
+sw_up=41
+locc4=1
+<region>
+sample=g4_muted.wav
+delay_cc1=0.4
+sw_up=43
+locc4=32
+<region>
+sample=a4_muted.wav
+delay_cc1=0.5
+sw_up=45
+locc4=64
+<region>
+sample=b4_muted.wav
+delay_cc1=0.6
+sw_up=47
+locc4=96
+<region>
+sample=c5_muted.wav
+delay_cc1=0.7
+sw_up=48
+locc4=127
+
+//Placeholders to get the switch keys to be visible
+<group>
+sample=*silence
+ampeg_decay=0
+ampeg_sustain=0
+ampeg_release=0
+<region>
+key=36
+<region>
+key=38
+<region>
+key=40
+<region>
+key=41
+<region>
+key=43
+<region>
+key=45
+<region>
+key=47
+<region>
+key=48
+
+

Chromatic Strumming On Diatonic Instruments

+

The cithara barbarica instrument at https://github.com/sfzinstruments/cithara-barbarica has a patch like this. +It simply duplicates each string's regions to cover the "missing" pitches. This works fine as long as there are +no muted samples used for the stopped strings, and having a muted string sound every half-step would not be +idiomatic for instruments other than the very rare chromatic gusli.

+

One way to have muted sounds while playing chromatically would be to always trigger a muted sound for whatever +the "real" pitch of each string should be, but have it instantly muted if a pitch in that string's range is +played. This is not great, as the muted sound would be a half-step off, but as the muted strings are shortened +and produce a higher pitch anyway, it seems to work well enough.

+
<group>
+key=26
+
+//Muted regions, each with its own group and off_by
+
+<region>
+sample=d4_muted.wav
+group=11
+off_by=21
+
+<region>
+sample=e4_muted.wav
+group=12
+off_by=22
+delay_cc1=0.100
+
+<region>
+sample=f4_muted.wav
+group=13
+off_by=23
+delay_cc1=0.200
+
+//Non-muted regions, with groups that will mute the above regions if one of the keys covered by that sample is held down
+
+<region>
+sample=d4_finger.wav
+sw_down=36
+group=21
+transpose=-2
+
+<region>
+sample=d4_finger.wav
+sw_down=37
+group=21
+transpose=-1
+
+<region>
+sample=d4_finger.wav
+sw_down=38
+group=21
+
+<region>
+sample=e4_finger.wav
+sw_down=39
+group=22
+transpose=-1
+delay_cc1=0.100
+
+<region>
+sample=e4_finger.wav
+sw_down=40
+group=22
+delay_cc1=0.100
+
+<region>
+sample=f4_finger.wav
+sw_down=41
+group=23
+delay_cc1=0.200
+
+

A more realistic way to handle this would be to have a MIDI CC for each string to set its tuning, so for example the C string could sound a B or C# note, like on a concert harp with pedals. However, this is probably not very convenient for most players who would rather hit a B note to sound a B. This, of course, would not actually be chromatic - but not limited to a single scale.

+

Further Possibilities

+

In reality, a strum will transfer force to the first strings it hits, +and subsequent strings will be hit with a little less force, +and the delay between strings might also be nonlinear.

+

This tutorial is open source, so feel free to contribute.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/subtractive_synths/index.html b/tutorials/subtractive_synths/index.html new file mode 100644 index 000000000..8f331793c --- /dev/null +++ b/tutorials/subtractive_synths/index.html @@ -0,0 +1,1247 @@ + + + + + + + + + Subtractive synthesizers - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Subtractive synthesizers

Introduction

+

This tutorial describes implementing typical subtractive synthesizer +modulations - filters, envelopes and LFOs - in SFZ. It uses the +Caveman Cosmonaut instrument by Karoryfer Samples as an example. This +does not cover all modulations used in classic hardware subtractive +synths, but it's a start.

+

Basic amplifier envelope

+

Though subtractive synths get their name from having frequencies +subtracted from the sound by filter, the volume envelope is probably +the most fundamental modulation. Here is an AHDSR envelope including +‹control› parameter labels and defaults.

+
<control>
+label_cc100=Attack time
+label_cc101=Hold time
+label_cc102=Decay time
+label_cc103=Sustain level
+label_cc104=Release time
+
+set_cc102=63
+set_cc103=51
+set_cc104=31
+
+<global>
+//AHDSR
+ampeg_attack=0.002
+ampeg_sustain=0
+ampeg_release=0.002
+ampeg_attack_oncc100=0.5
+ampeg_hold_oncc101=1
+ampeg_decay_oncc102=5
+ampeg_sustain_oncc103=100
+ampeg_release_oncc104=2
+
+

An ADSR envelope would simple leave out the hold stage control, +leaving the default hold time of zero.

+

Further envelope possibilities

+

The above envelope will affect all sounds, as it's set at the global +level. In many classic synths, it's possible to have separate +envelopes modulating the volume of different oscillators, for +example using a shorter envelope to turn a noise oscillator into +a short transient.

+

If more envelope stages are required, an SFZ2 envelope with an +arbitrary amount of points can be used to modulate amplitude +instead of the SFZ1 envelope above.

+

In the ARIA SFZ player, amplifier envelope durations are calculated +once on trigger, which means changing envelope parameters other than +sustain and release while a note is playing will not change the sound. +The ampeg_dynamic opcode could be set to 1 in order to recalculate +envelope parameters every time one of the control parameters receives +a MIDI message, which could be closer to the behavior of most +analog synthesizer hardware.

+

Caveman Cosmonaut has a more unusual parameter called Env Soften, +which has no effect on some oscillators which have more +high-frequency content, and adds to the release and decay times +of the warmer-sounding oscillators. This is highly unusual, but +can be musically useful for things such as plucks, as the warmer +sounds linger longer. This is similar to the effect of release +or decay on a lowpass filter cutoff, but perhaps a little more +organic. That's set per oscillator, rather than globally, like +this, with CC 18 selecting the oscillator, and CC 106 being the +envelope soften:

+
<master>
+locc18=11
+hicc18=20
+ampeg_decay_oncc106=1.25
+ampeg_release_oncc106=0.7
+#include "mappings/unitra_flutes.sfz"
+
+<master>
+locc18=21
+hicc18=30
+ampeg_decay_oncc106=1
+ampeg_release_oncc106=0.4
+#include "mappings/unitra_clarinet.sfz"
+
+<master>
+locc18=31
+hicc18=40
+ampeg_decay_oncc106=1.5
+ampeg_release_oncc106=0.6
+#include "mappings/unitra_trombone.sfz"
+
+<master>
+locc18=41
+hicc18=50
+ampeg_decay_oncc106=0.5
+ampeg_release_oncc106=0.2
+#include "mappings/unitra_trompette.sfz"
+
+<master>
+locc18=51
+hicc18=60
+ampeg_decay_oncc106=1.25
+ampeg_release_oncc106=0.5
+#include "mappings/unitra_violin.sfz"
+
+<master>
+locc18=61
+hicc18=70
+#include "mappings/unitra_tremolo.sfz"
+
+<master>
+locc18=71
+#include "mappings/unitra_all.sfz"
+
+

Basic filter

+

The filter in the example instrument is a single lowpass filter +with cutoff and resonance controls, adjustable velocity tracking using +var a two-stage filter cutoff envelope.

+
<control>
+label_cc120=Filter cutoff
+label_cc121=Resonance
+label_cc124=Veltrack
+label_cc125=Pluck
+label_cc126=Filter attack
+label_cc127=Filter decay
+
+set_cc120=127
+set_cc127=40
+
+<global>
+//Lowpass filter
+cutoff=250
+cutoff_cc120=9600
+fil_keytrack=100
+resonance=0
+resonance_cc121=18
+var01_cutoff=6000 //Velocity track
+var01_mod=mult
+var01_oncc131=1
+var01_oncc124=1
+cutoff_cc124=-3000
+//Pluck envelope
+fileg_depth=0
+fileg_depthcc125=8400
+fileg_sustain=0
+fileg_attack=0
+fileg_attackcc126=0.5
+fileg_decay=0.001
+fileg_decaycc127=2
+
+

Filter keytracking

+

Making the filter cutoff keytrack is a simple matter of +setting the fil_keytrack to 100; however, things get +more complicated if filter keytracking is not desired. +Although fil_keytrack can be set to 0 and the base +filter cutoff will then not keytrack, the filter cutoff +modulation in SFZ is specified in cents, not Hertz. This +means the amount of the cutoff which is modulated will +keytrack, regardless of what fil_keytrack is set to. This +isn't a big issue with most synthesizers, but when trying +to make an adjustable highpass filter for all pieces of +a drum kit except the kick, for example, it can make +things complicated.

+

Adjusting keytracking for the modulated amount requires +using var and the extended CC 133 (MIDI key number). +Var and extended CCs are already used above for the +velocity tracking on the filter cutoff. The example instrument +has a somewhat convoluted and unusual configuration for +the filter keytracking, where when CC 120 has a very +high value, the cutoff will be slightly above 22.05 kHz +for all keys in the instrument's range, while the cutoff +when CC 120 is at zero has 70% keytracking. This is not +at all standard, and means the base cutoff has moderate +positive keytracking while the cutoff modulation has +negative keytracking.

+
//By default, cutoff modulation is measured in cents
+//To make the modulation not keytrack, we make a kludge
+//Using var
+cutoff=250
+var02_cutoff=9000
+var02_mod=mult
+var02_oncc120=1
+var02_curvecc120=0
+var02_oncc133=1
+var02_curvecc133=11
+fil_keytrack=70
+
+

At the end of the SFZ file, the ‹curve› is then specified:

+
<curve>
+curve_index=11
+v000=1
+v024=1
+v084=0.63
+v127=0.25
+
+

More filter possibilities

+

It would be easy to have more filter envelope stages; only +attack and decay are used above to keep things simple, as +those parameters are enough to create basic plucks (zero +attack, moderate decay) and 303 style basses (slightly +longer attack, moderate decay).

+

Using fil2_type and cutoff2 allows two filters in series, +for example a lowpass and highpass filter. Fil_type can +also be used to choose different filter types, perhaps with +locc/hicc.

+

Modulating the filter cutoff with LFOs is added below, in the +vibrato section.

+

Vibrato

+

Vibrato can affect pitch, volume (for tremolo) and filter cutoff +(for wobble). Here is a typical setup using one LFO to modulate +all three.

+
<control>
+label_cc111=Vibrato to pitch
+label_cc112=Vibrato speed
+label_cc113=Vibrato to cutoff
+label_cc114=Vibrato to volume
+label_cc115=Vibrato delay
+label_cc116=Vibrato fade
+
+set_cc112=40
+
+<global>
+lfo01_pitch_oncc111=22 //Vibrato LFO
+lfo01_freq=0.1
+lfo01_freq_oncc112=9.9
+lfo01_delay_oncc115=0.500
+lfo01_fade_oncc116=0.500
+lfo01_volume_oncc114=6
+//Wobble
+lfo01_cutoff=0
+lfo01_cutoff_oncc113=3600
+
+

Humanized vibrato

+

Humanization is obviously not a standard feature of synthesizers. +Technically, though, it's not difficult to implement.

+

The example instrument adds CC 117 for controlling the +amount of randomization +of the vibrato LFOs. This is similar to the humanization +described in the vibrato tutorial, but using CC 135 to +generate a true random number for each voice, which +means any unison voices' vibrato will drift out of sync +with those belonging to other voices. This is musically +useful for creating more complex pads, for example. Similar +principles could also be used to emulate analog oscillators' +much more subtle pitch drift.

+
<control>
+label_cc111=Vibrato to pitch
+label_cc112=Vibrato speed
+label_cc113=Vibrato to cutoff
+label_cc114=Vibrato to volume
+label_cc115=Vibrato delay
+label_cc116=Vibrato fade
+label_cc117=Vibrato humanize
+
+set_cc112=40
+
+<global>
+//Vibrato and humanization setup
+lfo01_pitch_oncc111=22 //Vibrato LFO
+lfo01_freq=0.1
+lfo01_freq_oncc112=9.9
+lfo01_delay_oncc115=0.500
+lfo01_fade_oncc116=0.500
+lfo01_volume_oncc114=6
+//Wobble
+lfo01_cutoff=0
+lfo01_cutoff_oncc113=3600
+
+lfo02_wave=1 //Second LFO to make things wobblier
+lfo02_phase=0
+lfo02_phase_oncc135=1 //Phase randomized
+lfo02_freq=0.01 //Basically no movement at very slow speeds, just randomization
+lfo02_freq_oncc117=1 //Max rate is not very high, so it doesn't sound too obvious
+lfo02_pitch_oncc117=6 //Slight pitch wobbliness
+lfo02_freq_lfo01_oncc117=0.5 //Affect the rate of the other LFO for unsteady vibrato
+lfo02_freq_lfo01_oncc112=2.5 //Faster when the first LFO is going faster
+
+lfo03_wave=1 //And a third LFO for secondhand complex wobbliness
+lfo03_phase=0.4
+lfo03_phase_oncc135=0.179 //Different phase response to random than the second LFO
+lfo03_freq=0.5
+lfo03_freq_oncc117=-0.4
+lfo03_freq_lfo2_oncc117=1
+lfo03_pitch_oncc117=-4
+
+lfo04_wave=1 //Fourth LFO for slowly changing the oscillator mix
+lfo04_phase_oncc135=1
+lfo04_freq=0.01
+lfo04_freq_oncc135=0.25 //Randomly from almost not moving at all to still pretty slow
+lfo04_volume_oncc117=1.5 //Slight volume changes
+
+

Unison and detune

+

Unison is a simple matter of triggering multiple regions +with one MIDI note. If using a simple sound source such +as a saw oscillators, all regions will sound identical so +the only result will be additional volume. Making the +unison more interesting requires some of: using different +samples for each voice, detuning the voices, and shifting +the phase of the voices.

+

The example instrument uses many sets of samples from an +analog keyboard, with every key producing a slightly +different timbre, and transposed versions of those sounds +used for unison. The detune and width amounts vary for +each of the three oscillators, but here is a simplified +version assuming there is only one oscillator.

+

Note that although there is a width opcodes for +use with stereo samples, in this case the left channel and right are +separate mono samples, so pan is used to spread them +in stereo - not width.

+

As the samples here are quite long, offset_random +is applied globally to effecitvely randomize each voice's phase. With +true single-cycle waveforms, the max offset would have to be set to +match each voice's max sample length.

+
<control>
+label_cc25=Unison
+label_cc26=Width
+label_cc27=Detune
+
+set_cc26=63
+set_cc27=63
+
+<global>
+//Randomizing the start points of the samples to randomize phase
+offset_random=1000
+
+//Center voice
+<master>
+#include "sample_map_basic.sfz"
+
+//Left voice
+<region>
+amplitude_cc25=100
+amplitude_cc25=100
+locc25=1
+pan_cc26=-100
+tune_cc27=-33
+#include "sample_map_transposed_1.sfz"
+
+//Right voice
+<region>
+amplitude_cc25=100
+locc25=1
+pan_cc26=100
+tune_cc27=33
+amplitude_cc25=100
+#include "sample_map_transposed_2.sfz"
+
+

More complex detune

+

Another highly unsual feature of Caveman Cosmonaut, though, is +that the detune doesn't have to be fixed. There are additional +detune controls which detune the additional voices more at the +start of the note, and then drift towards a common pitch over +time, using pitch envelopes. This is definitely not part of +any typical hardware analog synthesizer's feature set, but it +does have something in common with the way real world choirs +or instrumental ensembles find a commmon pitch.

+
<control>
+label_cc25=Unison
+label_cc26=Width
+label_cc27=Detune
+label_cc28=Extra detune amt
+label_cc29=Extra detune time
+
+set_cc26=63
+set_cc27=63
+set_cc29=16
+
+<global>
+//Randomizing the start points of the samples to randomize phase
+offset_random=1000
+
+//Pitch envelope defaults for the fancy detune
+pitcheg_sustain=0
+pitcheg_decay_shape=-2
+
+//Center voice
+<master>
+#include "sample_map_basic.sfz"
+
+//Left voice
+<region>
+amplitude_cc25=100
+locc25=1
+pan_cc26=-100
+tune_cc27=-33
+pitcheg_depth_oncc28=-150
+pitcheg_decay_oncc29=5
+#include "sample_map_transposed_1.sfz"
+
+//Right voice
+<region>
+amplitude_cc25=100
+locc25=1
+pan_cc26=100
+tune_cc27=33
+pitcheg_depth_oncc28=150
+pitcheg_decay_oncc29=5
+#include "sample_map_transposed_2.sfz"
+
+

Waveform selection and oscillator mixing

+

This is just locc/hicc for selection, and amplitude for volume +controls.

+

Mono mode and portamento

+

This is implemented similarly to any non-synth - see our legato tutorial.

+

Putting it all together

+

This is the main file for the example instrument. The unison and detune +settings, along with oscillator selection and mixing, are inside SFZ files +added via the #include directives.

+
<control>
+label_cc15=Bass Osc Vol
+label_cc16=Bass Osc Sel
+label_cc17=Osc 1 Vol
+label_cc18=Osc 1 Sel
+label_cc19=Osc 2 Vol
+label_cc20=Osc 2 Sel
+label_cc21=Osc 3 Vol
+label_cc22=Osc 3 Sel
+label_cc25=Unison
+label_cc26=Width
+label_cc27=Detune
+label_cc28=Extra detune amt
+label_cc29=Extra detune time
+label_cc100=Attack time
+label_cc101=Hold time
+label_cc102=Decay time
+label_cc103=Sustain level
+label_cc104=Release time
+label_cc106=Env soften
+label_cc108=Legato switch
+label_cc109=Porta time
+label_cc111=Vibrato to pitch
+label_cc112=Vibrato speed
+label_cc113=Vibrato to cutoff
+label_cc114=Vibrato to volume
+label_cc115=Vibrato delay
+label_cc116=Vibrato fade
+label_cc117=Unsteadiness
+label_cc120=Filter cutoff
+label_cc121=Resonance
+label_cc124=Veltrack
+label_cc125=Pluck
+label_cc126=Filter attack
+label_cc127=Filter decay
+
+set_cc15=100
+set_cc16=15
+set_cc17=127
+set_cc18=63
+set_cc19=100
+set_cc20=15
+set_cc21=100
+set_cc22=44
+set_cc26=63
+set_cc27=63
+set_cc29=16
+set_cc102=63
+set_cc103=51
+set_cc104=31
+set_cc109=31
+set_cc112=40
+set_cc120=127
+set_cc127=40
+
+<global>
+bend_down=-2400
+bend_up=2400
+off_mode=normal
+loop_mode=continuous
+offset=10000
+offset_random=1000
+
+//AHDSR
+ampeg_attack=0.002
+ampeg_sustain=0
+ampeg_release=0.002
+ampeg_attack_oncc100=0.5
+ampeg_hold_oncc101=1
+ampeg_decay_oncc102=5
+ampeg_sustain_oncc103=100
+ampeg_release_oncc104=2
+//Decay and release are affected by the soften parameter also
+//This is set separately for each oscillator
+
+//Filter
+//Lowpass filter
+//By default, cutoff modulation is measured in cents
+//To make the modulation not keytrack, we make a kludge
+//Using var
+cutoff=250
+var02_cutoff=9000
+var02_mod=mult
+var02_oncc120=1
+var02_curvecc120=0
+var02_oncc133=1
+var02_curvecc133=11
+fil_keytrack=70
+resonance=0
+resonance_cc121=18
+var01_cutoff=6000 //Velocity track
+var01_mod=mult
+var01_oncc131=1
+var01_oncc124=1
+cutoff_cc124=-3000
+//Pluck envelope
+fileg_depth=0
+fileg_depthcc125=8400
+fileg_sustain=0
+fileg_attack=0
+fileg_attackcc126=0.5
+fileg_decay=0.001
+fileg_decaycc127=2
+
+//Vibrato and humanization setup
+lfo01_pitch_oncc111=22 //Vibrato LFO
+lfo01_freq=0.1
+lfo01_freq_oncc112=9.9
+lfo01_delay_oncc115=0.500
+lfo01_fade_oncc116=0.500
+lfo01_volume_oncc114=6
+//Wobble
+lfo01_cutoff=0
+lfo01_cutoff_oncc113=3600
+
+lfo02_wave=1 //Second LFO to make things wobblier
+lfo02_phase=0
+lfo02_phase_oncc135=1 //Phase randomized
+lfo02_freq=0.01 //Basically no movement at very slow speeds, just randomization
+lfo02_freq_oncc117=1 //Max rate is not very high, so it doesn't sound too obvious
+lfo02_pitch_oncc117=6 //Slight pitch wobbliness
+lfo02_freq_lfo01_oncc117=0.5 //Affect the rate of the other LFO for unsteady vibrato
+lfo02_freq_lfo01_oncc112=2.5 //Faster when the first LFO is going faster
+
+lfo03_wave=1 //And a third LFO for secondhand complex wobbliness
+lfo03_phase=0.4
+lfo03_phase_oncc135=0.179 //Different phase response to random than the second LFO
+lfo03_freq=0.5
+lfo03_freq_oncc117=-0.4
+lfo03_freq_lfo2_oncc117=1
+lfo03_pitch_oncc117=-4
+
+lfo04_wave=1 //Fourth LFO for slowly changing the oscillator mix
+lfo04_phase_oncc135=1
+lfo04_freq=0.01
+lfo04_freq_oncc135=0.25 //Randomly from almost not moving at all to still pretty slow
+lfo04_volume_oncc117=1.5 //Slight volume changes
+
+//Some defaults for the fancy detune stuff
+pitcheg_sustain=0
+pitcheg_decay_shape=-2
+
+//And here come the oscillator mappings
+//First polyphonic mode
+
+#include "mappings/poly_map.sfz"
+
+#include "mappings/mono_first_map.sfz"
+
+#include "mappings/mono_legato_map.sfz"
+
+<curve>
+curve_index=11
+v000=1
+v024=1
+v084=0.63
+v127=0.25
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/sustained_note_basics/index.html b/tutorials/sustained_note_basics/index.html new file mode 100644 index 000000000..091d34150 --- /dev/null +++ b/tutorials/sustained_note_basics/index.html @@ -0,0 +1,859 @@ + + + + + + + + + Sustained note basics - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Sustained note basics

We've covered the basic opcodes required to map simple drum instruments on +another page, and here we are going to apply that +knowledge to pitched instruments, plus add more opcodes. Let's say we want to +sample a folk flute whose lowest note is a D. If the lowest five notes are +D, E, F#, G and A, and there is one sample available for each note, they could +be mapped like this:

+
<region>key=50 sample=d4.wav
+<region>key=52 sample=e4.wav
+<region>key=54 sample=f#4.wav
+<region>key=55 sample=g4.wav
+<region>key=57 sample=a4.wav
+
+

This would work well enough to make a sound when a MIDI note corresponding to +one of the sampled pitches is played. However, playing notes inbetween +the D and E, or E and F#, would mean no sound. We can "stretch" one of the +neighboring notes to cover that D# and that F using the +lokey / hikey and pitch_keycenter opcodes instead of key. +If a sample does not need to cover multiple notes, it can still use key. Whether +to use the D or E sample to cover the D# in our example is a judgment call - +which sounds better?

+
<region>lokey=50 hikey=51 pitch_keycenter=50 sample=d4.wav
+<region>lokey=52 hikey=53 pitch_keycenter=52 sample=e4.wav
+<region>key=54 sample=f#4.wav
+<region>lokey=55 hikey=55 pitch_keycenter=56 sample=g4.wav
+<region>key=57 sample=a4.wav
+
+

The samples will play as long as a note is held, but when the note is released, +they will end suddenly, which is probably not realistic for a flute sound, or +indeed most other instruments. We'll need to apply a volume envelope with a +release time set, which can be applied to all regions. +The ampeg_release opcode accomplishes this.

+
<global>ampeg_release=0.3
+
+<region>lokey=50 hikey=51 pitch_keycenter=50 sample=d4.wav
+<region>lokey=52 hikey=53 pitch_keycenter=52 sample=e4.wav
+<region>key=54 sample=f#4.wav
+<region>key=55 sample=g4.wav
+
+

If we have samples at various dynamics, such as quiet and loud, we could use +note velocity to choose which sample is played - however, while this makes +perfect sense for drum hits or piano notes, with instruments such as flute or +violin, it's possible for the player to vary the dynamic level while a note is +being sustained. This can be simulated with the +xfin_loccN / xfin_hiccN and xfout_loccN / xfout_hiccN opcodes. Using only the +D4 and E4 samples as an example, and controlling the dynamics with CC1 (mod wheel). +The amp_veltrack opcode is set to 0, so that velocity does not affect volume.

+
<global>ampeg_release=0.3 amp_veltrack=0
+
+<group>lokey=50 hikey=51 pitch_keycenter=50
+<region>sample=d4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85
+<region>sample=d4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127
+<region>sample=d4_f.wav xfin_locc1=86 xfin_hicc1=127
+<group>lokey=52 hikey=53 pitch_keycenter=52
+<region>sample=e4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85
+<region>sample=e4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127
+<region>sample=e4_f.wav xfin_locc1=86 xfin_hicc1=127
+
+

Now, CC1 would first fade in the quiet sample when it was between 0 and 42. +From 43 to 85, the quiet sample is faded out and the medium sample faded in. +From 86 to the max value of 127, the medium sample is faded out while the loud +sample fades in. If we have multiple techniques or articulation sampled, for +example regular sustains and fluttertongue sustains, we need a way to switch +between them. Each could be its own independent and complete SFZ file, and we +could just load the desired file into the player, but for convenience, +especially in live performance, it's good to load both at once and have a way of +switching between them. One way is loccN / hiccN where which sample is triggered +for a particular note depends on the value of a MIDI CC - let's use MIDI CC 11. +Notice that the fluttertongue samples in this example have fewer dynamic layers +than the main sustain samples - it's common for the "core" articulations of an +instrument to be sampled in more detail, and the SFZ format is flexible enough +to allow this, or even allow different amounts of dynamic layers or round robins +for different notes within the same articulation.

+
<global>ampeg_release=0.3 amp_veltrack=0
+
+<group>lokey=50 hikey=51 pitch_keycenter=50 hicc11=63
+<region>sample=d4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85
+<region>sample=d4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127
+<region>sample=d4_f.wav xfin_locc1=86 xfin_hicc1=127
+<group>lokey=52 hikey=53 pitch_keycenter=52 hicc11=63
+<region>sample=e4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85
+<region>sample=e4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127
+<region>sample=e4_f.wav xfin_locc1=86 xfin_hicc1=127
+<group>lokey=50 hikey=51 pitch_keycenter=50 locc11=64
+<region>sample=d4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127
+<region>sample=d4_ft_f.wav xfin_locc1=64 xfin_hicc1=127
+<group>lokey=52 hikey=53 pitch_keycenter=52 locc11=64
+<region>sample=e4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127
+<region>sample=e4_ft_f.wav xfin_locc1=64 xfin_hicc1=127
+
+

Another, probably more common, way is to use keyswitches. If we define the +keyswitch range as the C and C# below our lowest D using +sw_lokey / sw_hikey, we can then use sw_last to select articulations.

+
<global>ampeg_release=0.3 amp_veltrack=0 sw_lokey=48 sw_hikey=49
+
+<group>lokey=50 hikey=51 pitch_keycenter=50 sw_last=48
+<region>sample=d4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85
+<region>sample=d4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127
+<region>sample=d4_f.wav xfin_locc1=86 xfin_hicc1=127
+<group>lokey=52 hikey=53 pitch_keycenter=52 sw_last=48
+<region>sample=e4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85
+<region>sample=e4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127
+<region>sample=e4_f.wav xfin_locc1=86 xfin_hicc1=127
+<group>lokey=50 hikey=51 pitch_keycenter=50 sw_last=49
+<region>sample=d4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127
+<region>sample=d4_ft_f.wav xfin_locc1=64 xfin_hicc1=127
+<group>lokey=52 hikey=53 pitch_keycenter=52 sw_last=49
+<region>sample=e4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127
+<region>sample=e4_ft_f.wav xfin_locc1=64 xfin_hicc1=127
+
+

There are other possibilities - for example, since velocity is not needed to +control dynamics, we could use that to select articulations using +lovel / hivel, for example. However, it' is quite common, +especially with string instruments, to use a MIDI CC to control the dynamics of +sustained articulations, and velocity to control the dynamics of short +articulations such as staccato. In those cases, the short articulations could +use amp_veltrack set to 100 instead of 0, and generally be mapped in the same +way as the drums we've discussed before. The flute is +a monophonic instrument in reality - you can't play chords on it, while you can +using our SFZ here. For more realism, playing a note on this flute should mute +any previously playing notes. To make an instrument which can only play one note +at a time, the group and off_by opcodes can be used. +Although these can be used in more complex scenarios, for a +monophonic instrument with no multiple microphone positions sampled, it's enough +to put all samples in the same group, and have that group muted whenever a new +note from that group is played.

+
<global>ampeg_release=0.3 amp_veltrack=0 sw_lokey=48 sw_hikey=49 group=1 off_by=1
+
+<group>lokey=50 hikey=51 pitch_keycenter=50 sw_last=48
+<region>sample=d4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85
+<region>sample=d4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127
+<region>sample=d4_f.wav xfin_locc1=86 xfin_hicc1=127
+<group>lokey=52 hikey=53 pitch_keycenter=52 sw_last=48
+<region>sample=e4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85
+<region>sample=e4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127
+<region>sample=e4_f.wav xfin_locc1=86 xfin_hicc1=127
+<group>lokey=50 hikey=51 pitch_keycenter=50 sw_last=49
+<region>sample=d4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127
+<region>sample=d4_ft_f.wav xfin_locc1=64 xfin_hicc1=127
+<group>lokey=52 hikey=53 pitch_keycenter=52 sw_last=49
+<region>sample=e4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127
+<region>sample=e4_ft_f.wav xfin_locc1=64 xfin_hicc1=127
+
+

However, this cuts off the note suddenly, creating a gap before the next note +can reach full volume. That problem can be fixed by setting off_mode +to normal, which will make the notes being muted fade out gradually over the +duration previously specified with the ampeg_release opcode.

+
<global>ampeg_release=0.3 amp_veltrack=0 sw_lokey=48 sw_hikey=49
+
+group=1 off_by=1 off_mode=normal
+<group>lokey=50 hikey=51 pitch_keycenter=50 sw_last=48
+<region>sample=d4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85
+<region>sample=d4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127
+<region>sample=d4_f.wav xfin_locc1=86 xfin_hicc1=127
+<group>lokey=52 hikey=53 pitch_keycenter=52 sw_last=48
+<region>sample=e4_p.wav xfin_locc1=0 xfin_hicc1=42 xfout_locc1=43 xfout_hicc1=85
+<region>sample=e4_mf.wav xfin_locc1=43 xfin_hicc1=85 xfout_locc1=86 xfout_hicc1=127
+<region>sample=e4_f.wav xfin_locc1=86 xfin_hicc1=127
+<group>lokey=50 hikey=51 pitch_keycenter=50 sw_last=49
+<region>sample=d4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127
+<region>sample=d4_ft_f.wav xfin_locc1=64 xfin_hicc1=127
+<group>lokey=52 hikey=53 pitch_keycenter=52 sw_last=49
+<region>sample=e4_ft_p.wav xfin_locc1=0 xfin_hicc1=63 xfout_locc1=64 xfout_hicc1=127
+<region>sample=e4_ft_f.wav xfin_locc1=64 xfin_hicc1=127
+
+

This is enough to make a basic monophonic wind instrument, vocal, or other +monophonic instrument. There are more possibilities - better legato, vibrato +emulation, multiple microphone positions etc. - which we'll describe later in +another part of this guide. Together with the information covered in drum basics +earlier, this should also be enough to make a basic sampled piano or guitar.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/unison/index.html b/tutorials/unison/index.html new file mode 100644 index 000000000..e44031089 --- /dev/null +++ b/tutorials/unison/index.html @@ -0,0 +1,1295 @@ + + + + + + + + + Unison - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Unison

This tutorial describes various methods of using one set of samples to emulate +the sound of larger numbers of instruments - making a small ensemble sound +larger, using one set of samples for both first and second violins, automatically +multitracking guitars, synthesizer oscillator unison etc.

+

Transposition

+

Let's say we have only one sampled violin section, and need to use both first and +second violins. Using just one octave of range for simplicity, this is our first +violins example:

+
<global>
+<region>sample=c4.wav key=48
+<region>sample=db4.wav key=49
+<region>sample=d4.wav key=50
+<region>sample=eb4.wav key=51
+<region>sample=e4.wav key=52
+<region>sample=f4.wav key=53
+<region>sample=gb4.wav key=54
+<region>sample=g4.wav key=55
+<region>sample=ab4.wav key=56
+<region>sample=a4.wav key=57
+<region>sample=bb4.wav key=58
+<region>sample=b4.wav key=59
+<region>sample=c5.wav key=60
+
+

Using this for both first and second violins will result in two identical-sounding +sections with the same timbre, but it's easily possible to use the same samples +transposed, and get a different timbre. Instead of using the C4 sample to play C4, +use the Db4 sample transposed down a half step to play C4. This can be done by +using lokey, hikey and pitch_keycenter opcodes instead of just key.

+
<region>sample=c4.wav lokey=47 hikey=47 pitch_keycenter=48
+<region>sample=db4.wav lokey=48 hikey=48 pitch_keycenter=49
+<region>sample=d4.wav lokey=49 hikey=49 pitch_keycenter=50
+<region>sample=eb4.wav lokey=50 hikey=50 pitch_keycenter=51
+<region>sample=e4.wav lokey=51 hikey=51 pitch_keycenter=52
+<region>sample=f4.wav lokey=52 hikey=52 pitch_keycenter=53
+<region>sample=gb4.wav lokey=53 hikey=53 pitch_keycenter=54
+<region>sample=g4.wav lokey=54 hikey=54 pitch_keycenter=55
+<region>sample=ab4.wav lokey=55 hikey=55 pitch_keycenter=56
+<region>sample=a4.wav lokey=56 hikey=56 pitch_keycenter=57
+<region>sample=bb4.wav lokey=57 hikey=57 pitch_keycenter=58
+<region>sample=b4.wav lokey=58 hikey=58 pitch_keycenter=59
+<region>sample=c5.wav lokey=59 hikey=59 pitch_keycenter=60
+
+

Howerver, in most cases it's easier to use the key and transpose opcodes instead, +and set the transpose amount for all the transposed regions at once.

+
<global>
+transpose=-1
+<region>sample=c4.wav key=47
+<region>sample=db4.wav key=48
+<region>sample=d4.wav key=49
+<region>sample=eb4.wav key=50
+<region>sample=e4.wav key=51
+<region>sample=f4.wav key=52
+<region>sample=gb4.wav key=53
+<region>sample=g4.wav key=54
+<region>sample=ab4.wav key=55
+<region>sample=a4.wav key=56
+<region>sample=bb4.wav key=57
+<region>sample=b4.wav key=58
+<region>sample=c5.wav key=59
+
+

This still requires changing the key opcode for every region, however. Doing +this editing manually on large sample sets would be time-consuming, but +the old tool sfzed allows easily adding, subtracting or multiplying current +parameter values to regions, which becomes very useful when doing this with +thousands of samples.

+

This shifts the entire range of the instrument down by a half-step, though. In +order to preserve the correct range, we can remove the transposed notes which +got moved below the lowest pitch the instrument is capable of. That's easy. The +top range is more tricky - if we extend the highest note to cover its original +pitch as well, but then the same sample would be used for the same pitch by +both sections. So, we can instead use the next-to-highest note, transposed up. +This might not sound very consistent with the rest, but under these limitations, +it can be a reasonable compromise.

+
<global>
+transpose=-1
+<region>sample=db4.wav key=48
+<region>sample=d4.wav key=49
+<region>sample=eb4.wav key=50
+<region>sample=e4.wav key=51
+<region>sample=f4.wav key=52
+<region>sample=gb4.wav key=53
+<region>sample=g4.wav key=54
+<region>sample=ab4.wav key=55
+<region>sample=a4.wav key=56
+<region>sample=bb4.wav key=57
+<region>sample=b4.wav key=58
+<region>sample=c5.wav key=59
+<region>sample=b4.wav key=60 transpose=1
+
+

Transposition Values

+

In general, transposing downwards will result in a warmer sound, and transposing +upwards will make the sound brighter and thinner. Transposing by more than a half +step can be a good idea. In general, transposing by a minor third is a common way +to create a big change in timbre. Transposing by much more than a minor third +doesn't seem common outside of sound design not intended to be a realistic instrument +emulation.

+

Transposing down by a minor third while preserving the range in our example, and +filling in the lost top of the range by transposing upwards might look like this:

+
<global>
+transpose=-3
+<region>sample=eb4.wav key=48
+<region>sample=e4.wav key=49
+<region>sample=f4.wav key=50
+<region>sample=gb4.wav key=51
+<region>sample=g4.wav key=52
+<region>sample=ab4.wav key=53
+<region>sample=a4.wav key=54
+<region>sample=bb4.wav key=55
+<region>sample=b4.wav key=56
+<region>sample=c5.wav key=57
+<region>sample=a4.wav key=58 transpose=1
+<region>sample=bb4.wav key=59 transpose=1
+<region>sample=b4.wav key=60 transpose=1
+
+

Note that all of the above assumes the instrument is sampled chromatically; for +instruments which are sampled at wholetone intervals or diatonically, transposition +by at least a whole step will be necessary to avoid using the same samples for a +note. Instruments which are sampled every minor third will need an interval of at +least a minor third etc.

+

Unison By Transposition

+

If we put both the original and transposed samples in the same SFZ file, each MIDI +note will trigger two regions, and we now will have the sound of an ensemble which +is twice as large as what was actually sampled.

+
<group>
+<region>sample=c4.wav key=48
+<region>sample=db4.wav key=49
+<region>sample=d4.wav key=50
+<region>sample=eb4.wav key=51
+<region>sample=e4.wav key=52
+<region>sample=f4.wav key=53
+<region>sample=gb4.wav key=54
+<region>sample=g4.wav key=55
+<region>sample=ab4.wav key=56
+<region>sample=a4.wav key=57
+<region>sample=bb4.wav key=58
+<region>sample=b4.wav key=59
+<region>sample=c5.wav key=60
+
+<group>
+transpose=-1
+<region>sample=db4.wav key=48
+<region>sample=d4.wav key=49
+<region>sample=eb4.wav key=50
+<region>sample=e4.wav key=51
+<region>sample=f4.wav key=52
+<region>sample=gb4.wav key=53
+<region>sample=g4.wav key=54
+<region>sample=ab4.wav key=55
+<region>sample=a4.wav key=56
+<region>sample=bb4.wav key=57
+<region>sample=b4.wav key=58
+<region>sample=c5.wav key=59
+<region>sample=b4.wav key=60 transpose=1
+
+

Unison By Round Robin

+

For cases where the goal is to emulate overdubbed copies of the same instrument +with the same timbre, rather than different instruments with different timbres, +it's still necessary to avoid triggering the same samples. For example, +is how guitar multitracking is typically emulated. This approach also +works for instruments which are not pitched but it makes sense to layer them, +for example handclaps. In such cases, unison can be implemented by using +different round robin samples for each simultaneously playing sample. Using +one note with four round robins as an example:

+
<group>seq_length=4 key=48
+<region>sample=c4_rr1.wav seq_position=1
+<region>sample=c4_rr2.wav seq_position=2
+<region>sample=c4_rr3.wav seq_position=3
+<region>sample=c4_rr4.wav seq_position=4
+
+

We can create two by offsetting the round robins like this:

+
<group>seq_length=4 key=48
+<region>sample=c4_rr1.wav seq_position=1
+<region>sample=c4_rr2.wav seq_position=2
+<region>sample=c4_rr3.wav seq_position=3
+<region>sample=c4_rr4.wav seq_position=4
+<group>seq_length=4 key=48
+<region>sample=c4_rr1.wav seq_position=4
+<region>sample=c4_rr2.wav seq_position=1
+<region>sample=c4_rr3.wav seq_position=2
+<region>sample=c4_rr4.wav seq_position=3
+
+

The group headers aren't necessary and everything could be under one group, +but for organizational purposes, they can make things easier.

+

Or three, or a maximum of four:

+
<group>seq_length=4 key=48
+<region>sample=c4_rr1.wav seq_position=1
+<region>sample=c4_rr2.wav seq_position=2
+<region>sample=c4_rr3.wav seq_position=3
+<region>sample=c4_rr4.wav seq_position=4
+<group>seq_length=4 key=48
+<region>sample=c4_rr1.wav seq_position=4
+<region>sample=c4_rr2.wav seq_position=1
+<region>sample=c4_rr3.wav seq_position=2
+<region>sample=c4_rr4.wav seq_position=3
+<group>seq_length=4 key=48
+<region>sample=c4_rr1.wav seq_position=3
+<region>sample=c4_rr2.wav seq_position=4
+<region>sample=c4_rr3.wav seq_position=1
+<region>sample=c4_rr4.wav seq_position=2
+<group>seq_length=4 key=48
+<region>sample=c4_rr1.wav seq_position=2
+<region>sample=c4_rr2.wav seq_position=3
+<region>sample=c4_rr3.wav seq_position=4
+<region>sample=c4_rr4.wav seq_position=1
+
+

Note that this will not work well with random round robins, as it's +possible that the same sample will be randomly selected for multiple +regions.

+

Width And Detune

+

Multitracked guitars will often be spread in stereo, as will unison voices +in synthesizers etc. Spreading the above quad-tracked guitar in stereo +is simple:

+
<group>seq_length=4 key=48
+pan=-100
+<region>sample=c4_rr1.wav seq_position=1
+<region>sample=c4_rr2.wav seq_position=2
+<region>sample=c4_rr3.wav seq_position=3
+<region>sample=c4_rr4.wav seq_position=4
+<group>seq_length=4 key=48
+pan=100
+<region>sample=c4_rr1.wav seq_position=4
+<region>sample=c4_rr2.wav seq_position=1
+<region>sample=c4_rr3.wav seq_position=2
+<region>sample=c4_rr4.wav seq_position=3
+<group>seq_length=4 key=48
+pan=-50
+<region>sample=c4_rr1.wav seq_position=3
+<region>sample=c4_rr2.wav seq_position=4
+<region>sample=c4_rr3.wav seq_position=1
+<region>sample=c4_rr4.wav seq_position=2
+<group>seq_length=4 key=48
+pan=50
+<region>sample=c4_rr1.wav seq_position=2
+<region>sample=c4_rr2.wav seq_position=3
+<region>sample=c4_rr3.wav seq_position=4
+<region>sample=c4_rr4.wav seq_position=1
+
+

It's also possible to apply slight detuning to each voice. That's probably +not common with guitars, and unnecessary with section recordings where natural +tuning differences will already be captured in the recordings, but it is very +common in synthesizers, and can also be helpful when trying to turn solo +instrument samples into a small section. Detune can even be used by itself +to create multiple voices, and this is an especially viable approach for +synthesizers. The amount of detune, as well as width, can be modulated. Here +is an example of a saw oscillator with seven voices.

+
<region>sample=*saw
+<region>pitch_oncc100=20 pan_oncc101=100 sample=*saw
+<region>pitch_oncc100=-20 pan_oncc101=-100 sample=*saw
+<region>pitch_oncc100=30 pan_oncc101=67 sample=*saw
+<region>pitch_oncc100=-30 pan_oncc101=-67 sample=*saw
+<region>pitch_oncc100=40 pan_oncc101=33 sample=*saw
+<region>pitch_oncc100=-40 pan_oncc101=-33 sample=*saw
+
+

Legato

+

When self-muting is implemented, each set of unison samples will need to have its +own polyphony groups, same as would be needed with multiple microphone positions.

+

If there are true legato samples, that adds considerable complexity to the +transposition trick. The below steps are not a universal set of instructions, but +have worked successfully for at least one instrument.

+
    +
  • Create an extended-range map extending the range by the largest transposition amount in the direction opposite of the transposition. For example, if there are four transposed voices and are to be transposed down by a half-step, a full step, a minor third and a major third, add a major third of range to the top of the extended map. See the range extension tutorial for details.
  • +
  • Make copies of this extended map to create the to-be-transposed maps.
  • +
  • In each map, add the aomount of shift for the particular map (for example -1) to lokey, hikey and sw_previous.
  • +
  • Delete any regions with lokey or hikey above or below the final desired range, which might be both at the top and bottom of a map.
  • +
  • Delete any regions with sw_previous above or below the final desired range. This isn't strictly necessary as those regions "should" never be played, but will reduce parsing time and prevent weirdness when a note slightly outside the range is held by mistake and a note inside the range is pressed.
  • +
+

Humanization

+

When trying to emulate the sound of a larger section of instruments, especially when +trying to turn a solo instrument into an emulated section, it can be useful to +create small differences between each voice, especially when vibrato and legato +are also emulated. This is probably not that important with sampled ensembles, such +as emulating second violins, but with solo instruments it becomes crucial. Without +independent per-voice humanization, emulated vibrato and legato can sound more like +a solo instrument run through a chorus or other doubling effect, rather than separate +performances.

+

Aspects of the sound which can be humanized or randomized include timing, smoothing, +phase, pitch, vibrato speed and vibrato depth.

+

Here is a rather lengthy example, adapted from a real instrument, where each voice has +separate pan settings for stereo spread and separate polyphony groups - these are basic +features of unison, and not related to humanization, of course. The humanizing +differences between the voices are differences in bend smoothing, in maximum vibrato +depth, in the initial phase of the vibrato humanization LFOs, and in the fade times of +the legato regions. The shallower vibrato and slower legato of the transposed regions +emulate less confident, more hesitant players.

+
<global>
+//Basic global stuff shared by all voices
+ampeg_release=0.25
+ampeg_attack_oncc106=1
+ampeg_release_oncc107=1.25
+off_mode=normal
+bend_down=-1200
+bend_up=1200
+//Pitch bend smoothing is set separately for each voice
+amplitude_oncc100=100
+amplitude_smoothcc1=100
+locc100=1
+amp_veltrack=0
+loop_mode=loop_continuous
+
+//Vibrato
+//Pitch LFO depth is set separately for each voice
+lfo01_freq=2 //Any slower than this sounds really lousy
+lfo01_freq_oncc112=6 //8 Hz is about as fast as vibrato on cello can go
+lfo01_delay_oncc115=0.500
+lfo01_fade_oncc116=0.500
+//This LFO also does tremolo
+lfo01_volume_oncc21=1 //Not much - just a subtle effect on volume
+eq1_freq=2200 //EQ band for vibrato
+eq1_bw=2
+lfo01_eq1gain_oncc21=3 //Again, pretty subtle
+
+lfo02_wave=1 //Second LFO to make things wobblier
+//Initial phase is set separately for each voice
+lfo02_phase_oncc131=0.7 //Phase affected by velocity, to pseudo-randomize while keeping both mics' LFOs in sync
+lfo02_freq=0.01 //Basically no movement at very slow speeds, just randomization
+lfo02_freq_oncc117=1 //Max rate is not very high, so it doesn't sound too obvious
+lfo02_pitch_oncc117=6 //Slight pitch wobbliness
+lfo02_freq_lfo01_oncc117=0.2 lfo02_freq_lfo01_oncc112=0.8 //Affect the rate of the other LFO for unsteady vibrato
+
+lfo03_wave=1 //And a third LFO for secondhand complex wobbliness
+//Initial phase is set separately for each voice
+lfo03_phase_oncc131=0.479 //Different phase response to velocity than the second LFO
+lfo03_freq=0.5
+lfo03_freq_oncc117=-0.4
+lfo03_freq_lfo2_oncc117=1
+lfo03_pitch_oncc117=-4
+
+<master>
+//Central voice
+bend_smooth=80
+lfo01_pitch_oncc21=29
+lfo02_phase=0
+lfo03_phase=0.4
+group=1
+off_by=1
+
+//Sustains legato
+
+<group>
+trigger=first
+#include "mappings/ord_sus_map.sfz"
+
+<group>
+trigger=legato
+offset=5000 offset_random=500
+ampeg_attack=0.5
+ampeg_vel2attack=-0.35
+#include "mappings/ord_sus_map.sfz"
+
+
+<master>
+//Left voice using sample maps transposed by a half-step
+//Pan control not used in the central voice
+pan_oncc101=-100
+//Values different than the central voice, for humanization purposes
+bend_smooth=91
+lfo01_pitch_oncc21=17
+lfo02_phase=0.05
+lfo03_phase=0.3
+group=2
+off_by=2
+
+//Sustains legato
+
+<group>
+trigger=first
+#include "mappings/t1/ord_sus_map.sfz"
+
+<group>
+trigger=legato
+offset=5000 offset_random=500
+//Values different than the central voice, for humanization purposes
+ampeg_attack=0.55
+ampeg_vel2attack=-0.4
+#include "mappings/t1/ord_sus_map.sfz"
+
+
+<master>
+//Right voice using sample maps transposed by a whole step
+//Pan control not used in the central voice
+pan_oncc101=100
+//Values different than the central voice, for humanization purposes
+bend_smooth=87
+lfo01_pitch_oncc21=19
+lfo02_phase=0.02
+lfo03_phase=0.28
+group=3
+off_by=3
+
+//Sustains legato
+
+<master>
+trigger=first
+#include "mappings/t2/ord_sus_map.sfz"
+
+<master>
+trigger=legato
+offset=5000 offset_random=500
+//Values different than the central voice, for humanization purposes
+ampeg_attack=0.58
+ampeg_vel2attack=-0.43
+#include "mappings/t2/ord_sus_map.sfz"
+
+

Releases

+

Implementing release samples with unison requires a little extra effort. It's easiest +to simply implement releases for the center voice only, but even then it's necessary +to be careful to avoid triggering too many release samples.

+

At least in ARIA and Sforzando, a note-on event which triggers multiple regions +(for example a multimic instrument, or one with simulated unison) will have multiple +corresponding regions for the release region, causing the release region to be triggered +multiple times. With seven mics and a separate release for each mic, this would mean a +key release would trigger a total of 49 samples if not controlled with note_polyphony. +However, setting note_polyphony=1 and giving each mic a different group number solves this. +There's no need tu use off_by with the release groups.

+

An example with releases only for the center voice:

+
<global>
+//Basic global stuff shared by all voices
+ampeg_release=0.25
+off_mode=normal
+
+//Center voice
+<master>
+
+//Sustains
+<group>
+#include "mappings/ord_sus_map.sfz"
+
+//Releases
+<group>
+trigger=release
+group=501
+note_polyphony=1
+#include "mappings/ord_rel_map.sfz"
+
+
+<master>
+//Left voice using sample maps transposed by a half-step
+//Pan control not used in the central voice
+pan_oncc101=-100
+
+//Sustains
+<group>
+#include "mappings/t1/ord_sus_map.sfz"
+
+<master>
+//Right voice using sample maps transposed by a whole step
+//Pan control not used in the central voice
+pan_oncc101=100
+
+//Sustains
+<master>
+#include "mappings/t2/ord_sus_map.sfz"
+
+

With releases for all voices, just use a different group number for each voice's +releases, like this example:

+
<global>
+//Basic global stuff shared by all voices
+ampeg_release=0.25
+off_mode=normal
+
+//Center voice
+<master>
+
+//Sustains
+<group>
+#include "mappings/ord_sus_map.sfz"
+
+//Releases
+<group>
+trigger=release
+group=501
+note_polyphony=1
+#include "mappings/ord_rel_map.sfz"
+
+
+<master>
+//Left voice using sample maps transposed by a half-step
+//Pan control not used in the central voice
+pan_oncc101=-100
+
+//Sustains
+<group>
+#include "mappings/t1/ord_sus_map.sfz"
+
+//Releases
+<group>
+trigger=release
+group=502
+note_polyphony=1
+#include "mappings/t1/ord_rel_map.sfz"
+
+
+<master>
+//Right voice using sample maps transposed by a whole step
+//Pan control not used in the central voice
+pan_oncc101=100
+
+//Sustains
+<master>
+#include "mappings/t2/ord_sus_map.sfz"
+
+//Releases
+<group>
+trigger=release
+group=503
+note_polyphony=1
+#include "mappings/t2/ord_rel_map.sfz"
+
+

When using releases with round robins, it can be tricky to make the release sample +round robin counter advance correctly. When there are 2 "matching" samples playing, +ARIA appears to advance the counter for the releases by 2, and if there are 4 +release round robins, only 2 of them will actually be used. One workaround for that +is triggering an extra region of silence to make the round robin counter advance by +3, but this will only work if the number of regions is consistent and predictable.

+

With instruments that have release samples with a number of microphone positions +or organ stops, any of which could be on or off, the total number of matching +regions is very difficult to assess, and it's far easier to use lorand/hirand to +select the release samples instead.

+

Round Robin Neighbor Borrowing

+

Although not a method of achieving unison, round robin neighbor borrowing +is another use of transposition, which likewise milks more out of a limited +set of samples - specifically, emulating round robins where there are none, +or increasing the amonut of available round robins.

+

This works with either sequential round robin and random round robin +approaches, or both at once. Let's use sequential round robins for this +example, with a very small note range and three round robins sampled.

+
<global>
+seq_length=3
+
+<group>
+seq_position=1
+<region>sample=c5_rr1.wav key=60
+<region>sample=c#5_rr1.wav key=61
+<region>sample=d5_rr1.wav key=62
+
+
+<group>
+seq_position=2
+<region>sample=c5_rr2.wav key=60
+<region>sample=c#5_rr2.wav key=61
+<region>sample=d5_rr2.wav key=62
+
+
+<group>
+seq_position=3
+<region>sample=c5_rr3.wav key=60
+<region>sample=c#5_rr3.wav key=61
+<region>sample=d5_rr3.wav key=62
+
+

We can double the amount of round robins by using a transposed +sample from a neighboring note for every other note in the +sequence. This means every other note repeat has a slightly +different timbre, but it should sound more acceptable than +using untransposed notes for the first three sequence positions +and transposed notes for positions four through six. So, we +increase the sequence length to six, and alternate between +transposed and untransposed samples like this:

+
<global>
+seq_length=6
+
+<group>
+seq_position=1
+<region>sample=c5_rr1.wav key=60
+<region>sample=c#5_rr1.wav key=61
+<region>sample=d5_rr1.wav key=62
+
+<group>
+seq_position=2
+<region>sample=c#5_rr1.wav key=60 transpose=-1
+<region>sample=d5_rr1.wav key=61 transpose=-1
+<region>sample=c#5_rr1.wav key=62 transpose=1
+
+<group>
+seq_position=3
+<region>sample=c5_rr2.wav key=60
+<region>sample=c#5_rr2.wav key=61
+<region>sample=d5_rr2.wav key=62
+
+<group>
+seq_position=4
+<region>sample=c#5_rr2.wav key=60 transpose=-1
+<region>sample=d5_rr2.wav key=61 transpose=-1
+<region>sample=c#5_rr2.wav key=62 transpose=1
+
+<group>
+seq_position=5
+<region>sample=c5_rr3.wav key=60
+<region>sample=c#5_rr3.wav key=61
+<region>sample=d5_rr3.wav key=62
+
+<group>
+seq_position=6
+<region>sample=c#5_rr3.wav key=60 transpose=-1
+<region>sample=d5_rr3.wav key=61 transpose=-1
+<region>sample=c#5_rr3.wav key=62 transpose=1
+
+

It's also possible to triple the amount of round robins by +borrowing neighbors in both upwards and downwards direction +for each note (except the lowest and highest note in the range, +of course). In general, transposing by more than a half-step +is not a good idea, as the timbral differences grow larger with +larger transposition, but with some instruments it can be +possible to get away with it. If there are many dynamic layers +available, it's also possible to borrow from nearby dynamic layers, +especially in the case of drums.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/vibrato/index.html b/tutorials/vibrato/index.html new file mode 100644 index 000000000..b79700eed --- /dev/null +++ b/tutorials/vibrato/index.html @@ -0,0 +1,998 @@ + + + + + + + + + Vibrato - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Vibrato

Basic LFO vibrato

+

Emulating vibrato for solo instruments or voices with LFOs is not difficult. The challenges +are understanding the key aspects of vibrato on the real instrument, and keeping the number of +parameters from growing too large to be easy to use. The examples here use SFZ 2 spec +numbered LFOs, rather than the dedicated pitch, volume and filter LFOs +and envelopes of SFZ 1. A lot of this can be done under the SFZ 1 specification as well, but +there are some limitations.

+

The most basic, typical vibrato is pitch vibrato - just an LFO modulating pitch. Making the +minimum and maximum rates and depths that would be used by players in real life is important, +of course. The numbers here are examples which would be decent for bowed strings - it has a +rate of 2-10 Hz and a maximum depth of 35 cents. Wider and slower are certainly possible +on real instruments, but isn't commonly used in performance.

+
lfo01_pitch_oncc111=35
+lfo01_freq=2
+lfo01_freq_oncc112=8
+
+

Additional parameters

+

In real life, however, players and singers will often start a note without vibrato, +and add vibrato a fraction of a second later. This is where modulating the LFO delay parameter becomes useful, and possibly LFO fade as well. Delay seems like enough for most wind +instruments and vocals, but having both delay and fade seems effective with bowed strings.

+
lfo01_pitch_oncc111=35
+lfo01_freq=2
+lfo01_freq_oncc112=8
+lfo01_delay_oncc115=0.500
+lfo01_fade_oncc116=0.500
+
+

Vibrato on many instruments doesn't just affect pitch; on bowed strings, it seems to have +a subtle effect on volume and timbre as well. We can have the same MIDI CC parameter control +how much the vibrato LFO affects pitch, volume, and an EQ band, with the latter two being +quite subtle.

+

This is a good a time as any to note that not all vibrato is equal - it's not really +practical to add vibrato to the lowest note playable on a cello, for example, or to a +natural harmonic. With pizzicato, vibrato is possible, but probably should not affect the +EQ band, and either only affect pitch or pitch plus a subtle effect on volume. The below +will work reasonably for most bowed notes, however.

+
lfo01_pitch_oncc111=35
+lfo01_volume_oncc111=1
+lfo01_freq=2
+lfo01_freq_oncc112=8
+lfo01_delay_oncc115=0.500
+lfo01_fade_oncc116=0.500
+eq1_freq=2000
+eq1_bw=2
+lfo01_eq1gain_oncc111=2
+lfo01_eq1freq_oncc111=500
+
+

Humanization

+

Vibrato can also be humanized, by varying the rate of the vibrato LFO. This can be done +by modulating the rate of the vibrato LFO with another LFO. The ARIA sample & hold +waveform can be used here, and the modulation depth controlled by MIDI CC, so when that's +at zero, no humanization happens.

+
lfo02_freq=1
+lfo02_wave=12 //Sample & hold LFO waveform number
+lfo02_freq_lfo01_oncc117=1
+
+

Or, to stay in the SFZ 2 spec and not use ARIA extensions, a sine wave with randomized +starting phase will also work:

+
lfo02_freq=1
+lfo02_phase_oncc135=1
+lfo02_freq_lfo01_oncc117=1
+
+

However, when playing multiple layers, such as sustain samples with crossfaded dynamics +or multiple mic positions, this can cause each layer's vibrato to drift out of sync and +sound like separate instruments. This is generally not desirable, so it is possible to +pseudo-randomize the starting phase using a non-random CC, such as velocity +(which is often otherwise unused in sustain sounds with crossfaded dynamics). If the SFZ +player can have a global sample and hold LFO which does not retrigger for each note, this +would also be a solution, though ARIA does not allow this.

+
lfo02_freq=1
+lfo02_phase_oncc132=0.7
+lfo02_freq_lfo01_oncc117=1
+
+

This will vary the rate of the vibrato, but the depth will be constant. It is possible to have +an LFO modulate the depth of another LFO, measured as a percentage, for example 120% for 20% variation:

+
lfo02_freq=1
+lfo02_phase_oncc132=0.7
+lfo02_freq_lfo01_oncc117=1
+lfo02_depth_lfo01=120
+
+

For additional complexity, it's also possible to have the random LFO itself modulate pitch, +which will create some pitch drift, and have more than two LFOs involved. Here is a fairly +sophisticated example.

+
//Vibrato
+lfo01_pitch_oncc21=29 //Vibrato LFO
+lfo01_freq=2 //Any slower than this sounds really lousy
+lfo01_freq_oncc112=6 //8 Hz is about as fast as vibrato on cello can go
+lfo01_delay_oncc115=0.500
+lfo01_fade_oncc116=0.500
+//This LFO also does tremolo
+lfo01_volume_oncc21=1 //Not much - just a subtle effect on volume
+eq1_freq=2200 //EQ band for vibrato
+eq1_bw=2
+lfo01_eq1gain_oncc21=3 //Again, pretty subtle
+
+lfo02_wave=1 //Second LFO to make things wobblier
+lfo02_phase=0
+lfo02_phase_oncc131=0.7 //Phase affected by velocity, to pseudo-randomize while keeping both mics' LFOs in sync
+lfo02_freq=0.01 //Basically no movement at very slow speeds, just randomization
+lfo02_freq_oncc117=1 //Max rate is not very high, so it doesn't sound too obvious
+lfo02_pitch_oncc117=6 //Slight pitch wobbliness
+lfo02_freq_lfo01_oncc117=1 //Affect the rate of the other LFO for unsteady vibrato
+
+lfo03_wave=1 //And a third LFO for secondhand complex wobbliness
+lfo03_phase=0.4
+lfo03_phase_oncc131=0.479 //Different phase response to velocity than the second LFO
+lfo03_freq=0.5
+lfo03_freq_oncc117=-0.4
+lfo03_freq_lfo02_oncc117=1
+lfo03_pitch_oncc117=-4
+
+

However, note that the depth modulation is fixed, and not modulated by cc117 like the frequency modulation +is. This is because having a CC modulate the depth modulation does not appear to be implemented in ARIA. +It is, however, possible to modulate the depth of a flex envelope with MIDI CC, and then have that envelope +depth modulate the depth of the secondary LFO. This is, admittedly, very much a kludge, but it appears to +work.

+
lfo02_freq=1
+lfo02_phase_oncc132=0.7
+lfo02_freq_lfo01_oncc117=1
+lfo02_depth_lfo01=120
+eg1_level0_oncc117=1
+eg1_level1_oncc117=1
+eg1_depth_lfo02=100
+
+

However, when the depth of lfo02 is zero, this will effectively also make lfo01's depth zero, so there +will be no vibrato at all unless cc117 is turned up. Getting around this requires another kludge, which +is leaving lfo01 with fixed depth and creating yet another LFO for the variable part of the depth.

+
//Vibrato
+lfo01_pitch_oncc21=29 //Vibrato LFO
+lfo01_freq=2 //Any slower than this sounds really lousy
+lfo01_freq_oncc112=6 //8 Hz is about as fast as vibrato on cello can go
+lfo01_delay_oncc115=0.500
+lfo01_fade_oncc116=0.500
+//This LFO also does tremolo
+lfo01_volume_oncc21=1 //Not much - just a subtle effect on volume
+eq1_freq=2200 //EQ band for vibrato
+eq1_bw=2
+lfo01_eq1gain_oncc21=3 //Again, pretty subtle
+
+lfo02_pitch_oncc21=19 //Extra LFO for variable depth, shallower than main and pitch only
+lfo02_freq=2 //Same timing as first LFO
+lfo02_freq_oncc112=6
+lfo02_delay_oncc115=0.500
+lfo02_fade_oncc116=0.500
+
+lfo03_wave=1 //Third LFO to make the flrst two LFOs wobblier
+lfo03_phase=0
+lfo03_phase_oncc131=0.7 //Phase affected by velocity, to pseudo-randomize while keeping both mics' LFOs in sync
+lfo03_freq=0.01 //Basically no movement at very slow speeds, just randomization
+lfo03_freq_oncc117=1 //Max rate is not very high, so it doesn't sound too obvious
+lfo03_pitch=6 //Slight pitch wobbliness
+lfo03_freq_lfo01=1
+lfo03_freq_lfo02=1 //Affect the rate of the vibrato LFOs for unsteady vibrato
+
+lfo04_wave=1 //And a fourth LFO for secondhand complex wobbliness
+lfo04_phase=0.4
+lfo04_phase_oncc131=0.479 //Different phase response to velocity than the second LFO
+lfo04_freq=0.5
+lfo04_freq_oncc117=-0.4
+lfo04_freq_lfo03=1
+lfo04_pitch=-4
+
+lfo03_depth_lfo02=100
+lfo04_depth_lfo02=100
+eg1_level0_oncc117=1
+eg1_level1_oncc117=1
+eg1_depth_lfo03=100
+eg1_depth_lfo04=100
+
+

Asymmetrical vibrato

+

Something similar to the above will work fairly well for a range of strings and voices. +However, there are cases where vibrato should only go in one direction - for example, +bending guitar strings only moves the pitch upwards, while on saxophone it's possible +to play vibrato centered around the pitch, but most of the time players will go only +below the pitch. Let's use saxophone vibrato as an example. To keep it simple, let's +just go back to a simple, non-humanized vibrato with only depth and rate paremeters.

+

To have vibrato which will go below the main pitch is simple - the LFO phase can be +set so the wave starts at the top, and the note tuned down by the vibrato depth amount.

+
lfo01_pitch_oncc111=20
+lfo01_phase=0.25
+lfo01_freq=1.5
+lfo01_freq_oncc112=6
+pitch_oncc111=-20
+
+

This will work fine, as long as we don't try to apply delay or fade to the LFO, which +would result in the note starting out flat with no vibrato. To solve that problem, we +can combine the LFO with a pitch envelope. Here is an example with just delay:

+
lfo01_pitch_oncc111=20
+lfo01_freq=1.5
+lfo01_freq_oncc112=6
+lfo01_phase=0.25
+lfo01_delay_oncc116=1
+pitcheg_delay_oncc116=1
+pitcheg_depth_oncc111=-20
+
+

To have the choice of idiomatic sax vibrato and violin-style vibrato centered around the pitch +can be done separate LFOs and separate depth controls. It's also possible to duplicate all the +regions and use loccN/hiccN to select between ones with different styles of vibrato.

+
lfo01_pitch_oncc111=20 //Sax vibrato LFO - goes down from the main pitch
+lfo01_freq=1.5
+lfo01_freq_oncc112=6
+lfo01_phase=0.25 //Starts at top
+lfo01_delay_oncc116=1
+pitcheg_delay_oncc116=1 //Pitch envelope to drop the central pitch when sax vibrato kicks in
+pitcheg_depth_oncc111=-20
+
+lfo02_pitch_oncc114=20 //Violin vibrato LFO - goes below and above main pitch
+lfo02_freq=1.5
+lfo02_freq_oncc112=6 //Same rate as the first LFO
+lfo02_phase=0.5 //Starts in the middle, goes down first before going up
+lfo02_delay_oncc116=1 //Same delay, too
+
+

This covers jaw vibrato, but sax players also use diaphragm vibrato, which changes volume +and has no effect on pitch, which means there are now three vibrato depths. Having the +volume modulated by the second LFO is a little easier, as the phase setting of the first +LFO would mean having to apply a volume envelope as well.

+
lfo01_pitch_oncc111=20 //Sax vibrato LFO - goes down from the main pitch
+lfo01_freq=1.5
+lfo01_freq_oncc112=6
+lfo01_phase=0.25 //Starts at top
+lfo01_delay_oncc116=1
+pitcheg_delay_oncc116=1 //Pitch envelope to drop the central pitch when sax vibrato kicks in
+pitcheg_depth_oncc111=-20
+
+lfo02_pitch_oncc114=20 //Violin vibrato LFO - goes below and above main pitch
+lfo02_freq=1.5
+lfo02_freq_oncc112=6 //Same rate as the first LFO
+lfo02_delay_oncc116=1 //Same delay, too
+lfo02_phase=0.5 //Starts in the middle, goes down first before going up
+lfo02_volume=0 //This LFO also does tremolo
+lfo02_volume_oncc113=3
+
+

There is one additional consideration with diaphragm vibrato - when +the volume of the note drops down, the breath noise can become more prominent, especially on +quiet notes or when using the subtone technique. If the volume of the breath noise can be +modulated separately, the noise regions should not be affected by pitch vibrato, and be +affected by the diaphragm vibrato in an opposite direction to the notes. So, if the above +vibrato settings are set under a ‹global› header, the breath noise +sample regions could have settings similar to this.

+
lfo01_pitch_oncc111=0 //LFOs do not affect pitch
+pitcheg_depth_oncc111=0
+lfo02_pitch_oncc114=0
+lfo02_volume_oncc113=-3 //Diaphragm vibrato affects volume in the opposite direction
+
+

Humanization and having the diaphragm vibrato affect timbre can be done similarly as with +the strings above, ensuring both LFOs are humanized in sync with each other, so they do not +drift apart.

+

More special cases

+

Some instruments will have vibrato types which require special treatment, for example guitar +tremolo bridges will bend each string's pitch by a different amount when playing chords. This +requires different pitch modulation depths for each string. Vibrato can also be used to +modulate filter cutoffs, which is commonly used in synthesizers to create +evolving pads or wobble basses. This is not difficult to implement. Here is an example of a +synthesizer style vibrato with a typical lowpass filter, and vibrato which can affect pitch, +volume or filter cutoff.

+
//Filter
+//Lowpass filter
+cutoff=120
+cutoff_cc120=13200
+fil_keytrack=100
+resonance=0
+resonance_cc121=12
+
+//Vibrato
+lfo01_freq=1
+lfo01_freq_oncc112=11
+lfo01_delay_oncc115=0.500
+lfo01_fade_oncc116=0.500
+lfo01_pitch_oncc111=22 //Vibrato LFO affects pitch
+lfo01_volume_oncc114=6 //Volume tremolo
+lfo01_cutoff=0 //Filter wobble
+lfo01_cutoff_oncc113=3600
+
+

An unusual use of extremely deep vibrato and tremolo plus humanization is emulating vinyl +scratching. Pitch sweeps of 2+ octaves with strongly humanized LFO rate can resemble vinyl +scratching, though unlike real scratching, these LFOs are not controllable, and therefore +rhythmic scratching is not an option.

+
//Extreme vibrato that can resemble vinyl scratching
+//The depths are high but will be made even higher by the modulation of the LFO depth
+lfo01_pitch_oncc21=1333 //Extremely deep vibrato for vinyl emulation
+lfo01_freq=1
+lfo01_freq_oncc112=9
+//No delay but there is fade
+lfo01_fade_oncc116=0.5
+//This LFO also does tremolo
+lfo01_volume_oncc21=7 //Again very heavy
+
+lfo02_wave=1 //Second LFO to make things wobblier
+lfo02_phase=0
+lfo02_phase_oncc135=1 //Random
+lfo02_freq=0.01 //Basically no movement at very slow speeds, just randomization
+lfo02_freq_oncc117=1 //Max rate is not very high, so it doesn't sound too obvious
+lfo02_freq_lfo01_oncc117=1 //Affect the rate of the other LFO for unsteady vibrato
+
+lfo03_wave=1 //And a third LFO for secondhand complex wobbliness
+lfo03_phase=0.4
+lfo03_phase_oncc135=0.479 //Different phase response to velocity than the second LFO
+lfo03_freq=0.5
+lfo03_freq_oncc117=-0.4
+lfo03_freq_lfo2_oncc117=1
+
+lfo03_depth_lfo01=200
+lfo02_depth_lfo01=233
+eg1_level0_oncc117=1
+eg1_level1_oncc117=1
+eg1_depth_lfo2=100
+eg1_depth_lfo3=100
+
+

This by no means exhausts all the possibilties of vibrato. It does provide a decent combination of control and realism for a lot of common instrument types, as well as some wild possibilities.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/videos/index.html b/tutorials/videos/index.html new file mode 100644 index 000000000..ddaa9d406 --- /dev/null +++ b/tutorials/videos/index.html @@ -0,0 +1,702 @@ + + + + + + + + + SFZ Programming Video Tutorials - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/volume/index.html b/tutorials/volume/index.html new file mode 100644 index 000000000..d61427e75 --- /dev/null +++ b/tutorials/volume/index.html @@ -0,0 +1,806 @@ + + + + + + + + + Control of volume - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Control of volume

The SFZ format allows many different ways of controlling volume. There's the +modulation of volume by opcodes, there's velocity tracking, and there's also +modualtion by envelopes and LFOs.

+

This is currently a work in progress, collecting information in tutorial form, +though it might be turned into another type of page eventually.

+

Opcodes affecting playback volume

+

The relevant opcodes are: volume, amplitude, xfin / xfout, amp_veltrack, +amp_keytrack, amp_velcurve_N. +There are also envelope and LFO modulation sources: ampeg, amplfo, and +volume-related targets for egN and lfoN. Some of them will have multiple stages, +points, CCs etc, so the volume of one sample can be affected by many different things +at once.

+

Velocity tracking

+

This is affected by amp_veltrack and amp_velcurve_N. In addition, vel2 modulations +can affect amp envelope durations as well as the sustain level (though not the +peak level at the end of the attack phase) and in ARIA extended CC 131 can also +modulate things which affect volume, for example egN levels.

+

Remember that amp_veltrack is 100 by default, so if dynamics are to be controlled +by things other than velocity and dynamics should be controlled, for examle, by +mod wheel, then set amp_veltrack to 0, as in the code example in the next section.

+

When using velocity layers, remember that a quiet velocity layer will have a certain +max velocity, for example if a region has hivel set to 31, it +will never be triggered by velocities higher than 31, and therefore should usually +either have amp_velcurve_31 set to 1, or amp_veltrack should be set to 0.

+
<group>
+hivel=42
+amp_velcurve_42=1
+#include "quiet_layer.sfz"
+
+<group>
+lovel=43
+hivel=84
+amp_velcurve_84=1
+#include "middle_layer.sfz"
+
+<group>
+lovel=85
+#include "loud_layer.sfz"
+
+

Volume, amplitude and crossfade

+

Volume, amplitude, and crossfade generally affect the playback volume of the entire +region, beginning to end. "Generally" because amplitude and volume can be modulated +by CCs while the sample is playing.

+

Volume is additive and measured in decibels, so volume=6 adds 6 dB to the sample's +playback volume. Amplitude is multiplicative, and is a percentage of full amplitude, +so amplitude=6 would mean the sample is played at 6% amplitude.

+

Xfin and xfout are intended for cross-fading dynamic layers, and set the CC values for +zero amplitude and full amplitude. One limitation here is that it's not possible to +have a layer which has more than zero amplitude at the start of the fade-in. This is +important for instruments such as bowed strings, which have a certain minimum practical +playable loudness. These will often have dynamics linked to CC1 or some other CC, and +need to have some small amount of audible volume even at the lowest CC level. Here, +amplitude with curveccN can be used to fade in the lowest layer. +It's still possible to use xfout to fade the layer out at higher CC values as +the next layer fades in, though it may be simpler to just use amplitude for all layers, +for example like this:

+
<global>
+amp_veltrack=0
+
+<group>
+amplitude_oncc1=100
+amplitude_curvecc1=11
+#include "quiet_layer.sfz"
+
+<group>
+amplitude_oncc1=100
+amplitude_curvecc1=12
+#include "loud_layer.sfz"
+
+<curve>
+curve_index=11
+v000=0.4
+v063=1
+v127=0
+
+<curve>
+curve_index=12
+v000=0
+v063=0
+v127=1
+
+

Envelopes and LFOs

+

Both the ampeg envelope and one or more egN flex envelopes can be used in parallel. +The same is true of amplfo and lfoN flex LFOs. These affect the volume of the +region differently across time, obviously.

+

Randomization

+

amp_random and its alias gain_random work like volume/gain +and are measured in decibels. In ARIA and Cakewalk, amp_random is unipolar. +In the rgc sfz player, amp_random is bipolar.

+

In ARIA, CC135 (unipolar random) and 136 (bipolar random) can also be used by +various opcodes which modulate volume.

+

Stacking mutliple modulations

+

It is possible to have multiple CCs modulating the same opcode for the same region. +This can make sense with multiple mic positions, for example. There can be a release +samples volume control affecting release sample amplitude for all mics, and individual +mic controls with the amplitude for all samples recorded through that mic. The effect +with amplitude would be multiplicative - so with either control at 0, there would be +no sound.

+
<master>
+amplitude_oncc80=100 //Close mic volume
+<group>
+#include "close_notes.sfz"
+<group>
+trigger=release
+amplitude_oncc82=100 //Release noise volume
+#include "close_releases.sfz"
+
+<master>
+amplitude_oncc81=100 //Far mic volume
+<group>
+#include "far_notes.sfz"
+<group>
+trigger=release
+amplitude_oncc82=100 //Release noise volume
+#include "far_releases.sfz"
+
+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/versions/index.html b/versions/index.html new file mode 100644 index 000000000..7a88a1d95 --- /dev/null +++ b/versions/index.html @@ -0,0 +1,710 @@ + + + + + + + + + Versions - SFZ Format + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

Versions

SFZ v1

+

The first version of the format was originally published on the rgc:audio website, +which is the most supported by sfz related software.

+

SFZ v2

+

The SFZ v2 standard has never been clearly set down anywhere. +For the purpose of this website, anything included in the Simon Cann's +Cakewalk Synthesizers is considered SFZ v2, regardless of which SFZ players +it might or might not be actually implemented in.

+

If something works in ARIA but not in any Cakewalk products, +that's considered an ARIA extension.

+

Cakewalk Synthesizers is not a recent book, and was not intended +to be a standards document, but rather a manual for users of Cakewalk products. +So, if you are developing a new SFZ player, do not feel obligated to support +all opcodes, headers etc. listed on this website - instead, use your judgment.

+

Extensions

+

ARIA

+

ARIA also adds some extended MIDI CCs in addition to those already added +by SFZ 2, and XML instrument banks as a way of organizing multiple +SFZ instruments and configuring graphical user interfaces. +See also the Plogue forum's ARIA's Custom opcodes post.

+
+
+ +

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file