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:
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
{