zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

commit b48b53ccbb1c1d982e5883d93fbce77855557a22
parent 835664c6841b4440ff704afafbf6bebadef22208
Author: Johannes Lorenz <johannes89@ist-einmalig.de>
Date:   Mon,  6 Nov 2017 20:19:41 +0100

Fix and add default values

Details:
* Implement consumer location
* Improve use of rPresets with constant numbers by using rPresetAtMultiple
* Add ADnoteParameters default values

Diffstat:
Msrc/Effects/EffectMgr.cpp | 2+-
Msrc/Params/ADnoteParameters.cpp | 45++++++++++++++++++++++++++++-----------------
Msrc/Params/EnvelopeParams.cpp | 54+++++++++++++++++++++++++++++++++++++++++-------------
Msrc/Params/FilterParams.cpp | 24+++++++++++++++---------
Msrc/Params/LFOParams.cpp | 19+++++++++++++++----
Msrc/Params/Presets.h | 13+++++++------
6 files changed, 107 insertions(+), 50 deletions(-)

diff --git a/src/Effects/EffectMgr.cpp b/src/Effects/EffectMgr.cpp @@ -169,7 +169,7 @@ EffectMgr::EffectMgr(Allocator &alloc, const SYNTH_T &synth_, :insertion(insertion_), efxoutl(new float[synth_.buffersize]), efxoutr(new float[synth_.buffersize]), - filterpars(new FilterParams(time_)), + filterpars(new FilterParams(loc_effect, time_)), nefx(0), efx(NULL), time(time_), diff --git a/src/Params/ADnoteParameters.cpp b/src/Params/ADnoteParameters.cpp @@ -90,29 +90,40 @@ static const Ports voicePorts = { rDefault(Sound), "Type of Sound"), rParamZyn(PDelay, rShort("delay"), rDefault(0), "Voice Startup Delay"), - rToggle(Presonance, rShort("enable"), "Resonance Enable"), - rParamI(Pextoscil, rShort("ext."), + rToggle(Presonance, rShort("enable"), rDefault(true), + "Resonance Enable"), + rParamI(Pextoscil, rDefault(-1), rShort("ext."), rMap(min, -1), rMap(max, 16), "External Oscillator Selection"), - rParamI(PextFMoscil, rShort("ext."), + rParamI(PextFMoscil, rDefault(-1), rShort("ext."), rMap(min, -1), rMap(max, 16), "External FM Oscillator Selection"), - rParamZyn(Poscilphase, rShort("phase"), "Oscillator Phase"), - rParamZyn(PFMoscilphase, rShort("phase"), "FM Oscillator Phase"), - rToggle(Pfilterbypass, rShort("bypass"), "Filter Bypass"), + rParamZyn(Poscilphase, rShort("phase"), rDefault(64), + "Oscillator Phase"), + rParamZyn(PFMoscilphase, rShort("phase"), rDefault(64), + "FM Oscillator Phase"), + rToggle(Pfilterbypass, rShort("bypass"), rDefault(false), + "Filter Bypass"), //Freq Stuff - rToggle(Pfixedfreq, rShort("fixed"), "If frequency is fixed"), - rParamZyn(PfixedfreqET, rShort("e.t."), "Equal Temperament Parameter"), - rParamZyn(PBendAdjust, rShort("bend"), "Pitch bend adjustment"), - rParamZyn(POffsetHz, rShort("offset"), "Voice constant offset"), + rToggle(Pfixedfreq, rShort("fixed"), rDefault(false), + "If frequency is fixed"), + rParamZyn(PfixedfreqET, rShort("e.t."), rDefault(0), + "Equal Temperament Parameter"), + rParamZyn(PBendAdjust, rShort("bend"), rDefault(88) /* 64 + 24 */, + "Pitch bend adjustment"), + rParamZyn(POffsetHz, rShort("offset"), rDefault(64), + "Voice constant offset"), //nominally -8192..8191 - rParamI(PDetune, rShort("fine"), - rLinear(0, 16383), rDefault(8192), "Fine Detune"), - rParamI(PCoarseDetune, rShort("coarse"), "Coarse Detune"), + rParamI(PDetune, rShort("fine"), rLinear(0, 16383), + rDefault(8192), "Fine Detune"), + rParamI(PCoarseDetune, rShort("coarse"), rDefault(0), + "Coarse Detune"), rParamZyn(PDetuneType, rShort("type"), - rOptions(L35cents, L10cents, E100cents, E1200cents), - "Magnitude of Detune"), - rToggle(PFreqEnvelopeEnabled, rShort("enable"), "Frequency Envelope Enable"), - rToggle(PFreqLfoEnabled, rShort("enable"), "Frequency LFO Enable"), + rOptions(L35cents, L10cents, E100cents, E1200cents), rDefault(L35cents), + "Magnitude of Detune"), + rToggle(PFreqEnvelopeEnabled, rShort("enable"), rDefault(false), + "Frequency Envelope Enable"), + rToggle(PFreqLfoEnabled, rShort("enable"), rDefault(false), + "Frequency LFO Enable"), //Amplitude Stuff rParamZyn(PPanning, rShort("pan."), rDefault(64), diff --git a/src/Params/EnvelopeParams.cpp b/src/Params/EnvelopeParams.cpp @@ -37,50 +37,78 @@ static const rtosc::Ports localPorts = { #undef rChangeCb #define rChangeCb if(!obj->Pfreemode) obj->converttofree(); if (obj->time) { \ obj->last_update_timestamp = obj->time->time(); } + rOption(loc, rProp(internal), + rOptions(ad_global_amp, ad_global_freq, ad_global_filter, + ad_voice_amp, ad_voice_freq, ad_voice_filter, + ad_voice_fm_amp, ad_voice_fm_freq, + sub_freq_env, sub_bandwidth_env), + "location of the envelope"), rToggle(Pfreemode, rDefault(false), "Complex Envelope Definitions"), #undef rChangeCb #define rChangeCb if(!obj->Pfreemode) obj->converttofree(); \ if(obj->time) { obj->last_update_timestamp = obj->time->time(); } rParamZyn(Penvpoints, rProp(internal), rDefaultDepends(loc), - rPresets(4, 3, 4, 4, 3, 4, 3, 4, 3, 3), + rPresetAtMulti(3, ad_global_freq, ad_voice_freq, + ad_voice_fm_freq, + sub_freq_env, sub_bandwidth_env), + rDefault(4), "Number of points in complex definition"), rParamZyn(Penvsustain, rDefaultDepends(loc), - rPresets(2, 1, 2, 2, 1, 2, 1, 2, 1, 1), + rPresetAtMulti(1, ad_global_freq, ad_voice_freq, + ad_voice_fm_freq, + sub_freq_env, sub_bandwidth_env), + rDefault(2), "Location of the sustain point"), rParams(Penvdt, MAX_ENVELOPE_POINTS, "Envelope Delay Times"), rParams(Penvval, MAX_ENVELOPE_POINTS, "Envelope Values"), rParamZyn(Penvstretch, rShort("stretch"), rDefaultDepends(loc), - rPresets(64, 0, 0, 64, 0, 0, 0, 64, 64, 64), + rPresetAtMulti(0, ad_global_freq, ad_global_filter, + ad_voice_freq, ad_voice_filter, ad_voice_fm_freq), + rDefault(64), "Stretch with respect to frequency"), rToggle(Pforcedrelease, rShort("frcr"), rDefaultDepends(loc), - rPresets(true, false, true, true, false, - false, false, true, false, false), + rPresetAtMulti(true, ad_global_amp, ad_global_filter, ad_voice_amp, + ad_voice_fm_amp), + rDefault(false), "Force Envelope to fully evaluate"), rToggle(Plinearenvelope, rShort("lin/log"), rDefault(false), "Linear or Logarithmic Envelopes"), rParamZyn(PA_dt, rShort("a.dt"), rDefaultDepends(loc), - rPresets(0, 50, 40, 0, 40, 70, 90, 80, 50, 70), + rPreset(ad_global_freq, 50), rPreset(ad_global_filter, 40), + rPreset(ad_voice_freq, 40), rPreset(ad_voice_filter, 70), + rPreset(ad_voice_fm_freq, 90), rPreset(ad_voice_fm_amp, 80), + rPreset(sub_freq_env, 50), rPreset(sub_bandwidth_env, 70), + rDefault(0), "Attack Time"), rParamZyn(PA_val, rShort("a.val"), rDefaultDepends(loc), - rDefault(64), rPresetsAt(4, 30, 90, 20, 64, 30, 100), + rPreset(ad_global_freq, 30), rPreset(ad_global_filter, 90), + rPreset(ad_voice_fm_freq, 20), rPreset(ad_voice_fm_amp, 64), + rPreset(sub_freq_env, 30), rPreset(sub_bandwidth_env, 100), + rDefault(64), "Attack Value"), rParamZyn(PD_dt, rShort("d.dt"), rDefaultDepends(loc), - rDefault(10), rPresets(40, 10, 70, 100, 10, 70, 10, 90), + rPreset(ad_global_amp, 40), rPreset(ad_global_filter, 70), + rPreset(ad_voice_amp, 100), rPreset(ad_voice_filter, 70), + rPreset(ad_voice_fm_amp, 90), + rDefault(10), "Decay Time"), rParamZyn(PD_val, rShort("d.val"), rDefaultDepends(loc), - rDefault(64), rPresetsAt(5, 40), + rDefault(64), rPreset(ad_voice_filter, 40), "Decay Value"), rParamZyn(PS_val, rShort("s.val"), rDefaultDepends(loc), rDefault(64), - rPresets(127), rPresetsAt(3, 127), rPresetsAt(7, 127), + rPresetAtMulti(127, ad_global_amp, ad_voice_amp, ad_voice_fm_amp), "Sustain Value"), rParamZyn(PR_dt, rShort("r.dt"), rDefaultDepends(loc), - rPresets(25, 60, 60, 100, 60, 10, 80, 100, 60, 60), + rPreset(ad_global_amp, 25), + rPreset(ad_voice_amp, 100), rPreset(ad_voice_filter, 10), + rPreset(ad_voice_fm_freq, 80), rPreset(ad_voice_fm_amp, 100), + rDefault(60), "Release Time"), rParamZyn(PR_val, rShort("r.val"), rDefaultDepends(loc), - rDefault(64), rPresetsAt(5, 40, 40), + rPresetAtMulti(40, ad_voice_filter, ad_voice_fm_freq), + rDefault(64), "Release Value"), - {"Envmode:", rDoc("Envelope variant type"), NULL, rBegin; d.reply(d.loc, "i", env->Envmode); diff --git a/src/Params/FilterParams.cpp b/src/Params/FilterParams.cpp @@ -65,26 +65,31 @@ const rtosc::Ports FilterParams::ports = { rSelf(FilterParams), rPaste, rArrayPaste, + rOption(loc, rProp(internal), + rOptions(ad_global_filter, ad_voice_filter, sub_filter, effect), + "location of the filter"), rOption(Pcategory, rShort("class"), rOptions(analog, formant, st.var.), rDefault(analog), "Class of filter"), rOption(Ptype, rShort("type"), - rOptions(LP1, HP1, LP2, HP2, BP, notch, peak, - l.shelf, h.shelf), rDefault(LP2), "Filter Type"), + rOptions(LP1, HP1, LP2, HP2, BP, notch, peak, l.shelf, h.shelf), + rDefault(LP2), "Filter Type"), rParamI(Pstages, rShort("stages"), rLinear(0,5), rDefault(0), "Filter Stages"), rParamF(baseq, rShort("q"), rUnit(none), rLog(0.1, 1000), rDefaultDepends(loc), - rPreset(ad_global_filter, 0x1.1592acp+0), - rPreset(ad_voice_filter, 0x1.e2f3ap+1), - rPreset(sub_filter, 0x1.1592acp+0), + rPreset(loc_ad_global_filter, 0x1.1592acp+0), + rPreset(loc_ad_voice_filter, 0x1.e2f3ap+1), + rPreset(loc_sub_filter, 0x1.1592acp+0), + rPreset(loc_effect, 0x1.384298p+2), "Quality Factor (resonance/bandwidth)"), rParamF(basefreq, rShort("cutoff"), rUnit(Hz), rLog(31.25, 32000), rDefaultDepends(loc), - rPreset(ad_global_filter, 0x1.3d434p+12), - rPreset(ad_voice_filter, 0x1.d48ab6p+8), - rPreset(sub_filter, 0x1.294d3ep+11), + rPreset(loc_ad_global_filter, 0x1.3d434p+12), + rPreset(loc_ad_voice_filter, 0x1.d48ab6p+8), + rPreset(loc_sub_filter, 0x1.294d3ep+11), + rPreset(loc_effect, 0x1.f3fffcp+9), "Base cutoff frequency"), rParamF(freqtracking, rShort("f.track"), rUnit(%), rLinear(-100, 100), rDefault(0.0f), @@ -318,7 +323,7 @@ void FilterParams::setup() } FilterParams::FilterParams(const AbsTime *time_) - :FilterParams(0,64,64, loc_unspecified, time_) + :FilterParams(loc_effect, time_) { } @@ -350,6 +355,7 @@ FilterParams::FilterParams(consumer_location_t loc, case loc_ad_global_filter: init(2, 94, 40); break; case loc_ad_voice_filter: init(2, 50, 60); break; case loc_sub_filter: init(2, 80, 40); break; + case loc_effect: init(0, 64, 64); break; default: throw std::logic_error("Invalid filter consumer location"); } diff --git a/src/Params/LFOParams.cpp b/src/Params/LFOParams.cpp @@ -33,17 +33,28 @@ namespace zyn { static const rtosc::Ports _ports = { rSelf(LFOParams), rPaste, + rOption(loc, rProp(internal), + rOptions(ad_global_amp, ad_global_freq, ad_global_filter, + ad_voice_amp, ad_voice_freq, ad_voice_filter, unspecified), + "location of the filter"), rParamF(Pfreq, rShort("freq"), rLinear(0.0,1.0), rDefaultDepends(loc), - rPresets(80.0f, 70.0f, 80.0f, 90.0f, 50.0f, 50.0f), + rPreset(loc_ad_global_amp, 80.0f), + rPreset(loc_ad_global_freq, 70.0f), + rPreset(loc_ad_global_filter, 80.0f), + rPreset(loc_ad_voice_amp, 90.0f), + rPreset(loc_ad_voice_freq, 50.0f), + rPreset(loc_ad_voice_filter, 50.0f), "frequency of LFO\n" "lfo frequency = (2^(10*Pfreq)-1)/12 * stretch\n" "true frequency is [0,85.33] Hz"), rParamZyn(Pintensity, rShort("depth"), - rDefaultDepends(loc), rDefault(0), rPresetsAt(3, 32, 40, 20), + rDefaultDepends(loc), + rDefault(0), rPreset(loc_ad_voice_amp, 32), + rPreset(loc_ad_voice_freq, 40), rPreset(loc_ad_voice_filter, 20), "Intensity of LFO"), rParamZyn(Pstartphase, rShort("start"), rSpecial(random), - rDefaultDepends(loc), rDefault(64), rPreset(4, 0), + rDefaultDepends(loc), rDefault(64), rPreset(loc_ad_voice_freq, 0), "Starting Phase"), rOption(PLFOtype, rShort("type"), rOptions(sine, triangle, square, up, down, exp1, exp2), rDefault(sine), "Shape of LFO"), @@ -52,7 +63,7 @@ static const rtosc::Ports _ports = { rParamZyn(Pfreqrand, rShort("f.r."), rSpecial(disable), rDefault(0), "Frequency Randomness (calculated uniformly at each cycle)"), rParamZyn(Pdelay, rShort("delay"), rSpecial(disable), - rDefaultDepends(loc), rDefault(0), rPreset(3, 30), + rDefaultDepends(loc), rDefault(0), rPreset(loc_ad_voice_amp, 30), "Delay before LFO start\n0..4 second delay"), rToggle(Pcontinous, rShort("c"), rDefault(0), "Enable for global operation"), rParamZyn(Pstretch, rShort("str"), rCentered, rDefault(64), diff --git a/src/Params/Presets.h b/src/Params/Presets.h @@ -51,6 +51,7 @@ class Presets //currently no enum, since this won't work with rPreset //enum consumer_location_t //{ + #define loc_ad_global_amp 0 #define loc_ad_global_freq 1 #define loc_ad_global_filter 2 @@ -58,19 +59,19 @@ class Presets #define loc_ad_voice_amp 3 #define loc_ad_voice_freq 4 #define loc_ad_voice_filter 5 -#define loc_ad_voice_fm_freq 6 -#define loc_ad_voice_fm_amp 7 + +#define loc_ad_voice_fm_amp 6 +#define loc_ad_voice_fm_freq 7 #define loc_sub_freq 8 #define loc_sub_filter 9 #define loc_sub_bandwidth 10 -#define loc_unspecified 11 - -#define rLocPreset(x) rPreset(loc_x, x) +#define loc_effect 11 +#define loc_unspecified 12 -using consumer_location_t = int; //}; +using consumer_location_t = int; enum class consumer_location_type_t {