commit bbf3baf70ce366a0edb9ccf5d05d08a73783813f
parent 2c035fd23eb21ddde971daeb56af988841f761ff
Author: Daniel Sheeler <dsheeler@pobox.com>
Date: Sun, 31 Mar 2019 12:46:50 -0500
LFO delay to float seconds
Diffstat:
5 files changed, 45 insertions(+), 29 deletions(-)
diff --git a/src/Misc/Part.cpp b/src/Misc/Part.cpp
@@ -1208,7 +1208,6 @@ void Part::getfromXML(XMLwrapper& xml)
if (xml.hasparreal("volume")) {
setVolume(xml.getparreal("volume", Volume));
} else {
- unsigned char c = xml.getpar127("volume", 0);
setVolume(volume127ToFloat(xml.getpar127("volume", -40.0f)));
}
setPpanning(xml.getpar127("panning", Ppanning));
diff --git a/src/Params/LFOParams.cpp b/src/Params/LFOParams.cpp
@@ -74,9 +74,21 @@ static const rtosc::Ports _ports = {
"Amplitude Randomness (calculated uniformly at each cycle)"),
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(ad_voice_amp, 30),
+ rParamF(delay, rShort("delay"), rSpecial(disable), rUnit(S),
+ rLinear(0.0, 4.0), rDefaultDepends(loc), rDefault(0),
+ rPreset(ad_voice_amp, 0.94),
"Delay before LFO start\n0..4 second delay"),
+ {"Pdelay::i", rShort("delay") rLinear(0,127)
+ rDoc("Delay before LFO start\n0..4 second delay"), NULL,
+ [](const char *msg, RtData &d)
+ {
+ rObject *obj = (rObject *)d.obj;
+ if (!rtosc_narguments(msg)) {
+ d.reply(d.loc, "i", (int)roundf(127.0f * obj->delay / 4.0f));
+ } else {
+ obj->delay = 4.0f * rtosc_argument(msg, 0).i / 127.0f;
+ }
+ }},
rToggle(Pcontinous, rShort("c"), rDefault(false),
"Enable for global operation"),
rParamZyn(Pstretch, rShort("str"), rCentered, rDefault(64),
@@ -140,7 +152,7 @@ LFOParams::LFOParams(float freq_,
char Pstartphase_,
char PLFOtype_,
char Prandomness_,
- char Pdelay_,
+ float Pdelay_,
char Pcontinous_,
consumer_location_t loc,
const AbsTime *time_) : loc(loc),
@@ -164,14 +176,14 @@ LFOParams::LFOParams(consumer_location_t loc,
auto init =
[&](float freq_, char Pintensity_, char Pstartphase_, char PLFOtype_,
- char Prandomness_, char Pdelay_, char Pcontinous_)
+ char Prandomness_, float delay_, char Pcontinous_)
{
Dfreq = freq_;
Dintensity = Pintensity_;
Dstartphase = Pstartphase_;
DLFOtype = PLFOtype_;
Drandomness = Prandomness_;
- Ddelay = Pdelay_;
+ Ddelay = delay_;
Dcontinous = Pcontinous_;
};
@@ -180,7 +192,7 @@ LFOParams::LFOParams(consumer_location_t loc,
case ad_global_amp: init(6.49, 0, 64, 0, 0, 0, 0); break;
case ad_global_freq: init(3.71, 0, 64, 0, 0, 0, 0); break;
case ad_global_filter: init(6.49, 0, 64, 0, 0, 0, 0); break;
- case ad_voice_amp: init(11.25, 32, 64, 0, 0, 30, 0); break;
+ case ad_voice_amp: init(11.25, 32, 64, 0, 0, 0.94, 0); break;
case ad_voice_freq: init(1.19, 40, 0, 0, 0, 0, 0); break;
case ad_voice_filter: init(1.19, 20, 64, 0, 0, 0, 0); break;
default: throw std::logic_error("Invalid LFO consumer location");
@@ -194,12 +206,12 @@ LFOParams::~LFOParams()
void LFOParams::defaults()
{
- freq = Dfreq;
+ freq = Dfreq;
Pintensity = Dintensity;
Pstartphase = Dstartphase;
PLFOtype = DLFOtype;
Prandomness = Drandomness;
- Pdelay = Ddelay;
+ delay = Ddelay;
Pcontinous = Dcontinous;
Pfreqrand = 0;
Pstretch = 64;
@@ -214,7 +226,7 @@ void LFOParams::add2XML(XMLwrapper& xml)
xml.addpar("lfo_type", PLFOtype);
xml.addpar("randomness_amplitude", Prandomness);
xml.addpar("randomness_frequency", Pfreqrand);
- xml.addpar("delay", Pdelay);
+ xml.addparreal("delay", delay);
xml.addpar("stretch", Pstretch);
xml.addparbool("continous", Pcontinous);
}
@@ -231,7 +243,12 @@ void LFOParams::getfromXML(XMLwrapper& xml)
PLFOtype = xml.getpar127("lfo_type", PLFOtype);
Prandomness = xml.getpar127("randomness_amplitude", Prandomness);
Pfreqrand = xml.getpar127("randomness_frequency", Pfreqrand);
- Pdelay = xml.getpar127("delay", Pdelay);
+ if (xml.hasparreal("delay")) {
+ delay = xml.getparreal("delay", delay);
+ } else {
+ delay = 4.0f * xml.getpar127("delay", (int)delay *127.0f/4.0f)
+ / 127.0f;
+ }
Pstretch = xml.getpar127("stretch", Pstretch);
Pcontinous = xml.getparbool("continous", Pcontinous);
}
@@ -245,7 +262,7 @@ void LFOParams::paste(LFOParams &x)
COPY(PLFOtype);
COPY(Prandomness);
COPY(Pfreqrand);
- COPY(Pdelay);
+ COPY(delay);
COPY(Pcontinous);
COPY(Pstretch);
diff --git a/src/Params/LFOParams.h b/src/Params/LFOParams.h
@@ -42,7 +42,7 @@ class LFOParams:public Presets
char Pstartphase_,
char PLFOtype_,
char Prandomness_,
- char Pdelay_,
+ float delay_,
char Pcontinous,
consumer_location_t loc,
const AbsTime* time_ = nullptr);
@@ -55,13 +55,13 @@ class LFOParams:public Presets
void paste(LFOParams &);
/* MIDI Parameters*/
- float freq; /**<frequency*/
+ float freq; /**<frequency*/
unsigned char Pintensity; /**<intensity*/
unsigned char Pstartphase; /**<start phase (0=random)*/
unsigned char PLFOtype; /**<LFO type (sin,triangle,square,ramp,...)*/
unsigned char Prandomness; /**<randomness (0=off)*/
unsigned char Pfreqrand; /**<frequency randomness (0=off)*/
- unsigned char Pdelay; /**<delay (0=off)*/
+ float delay; /**<delay (0=off)*/
unsigned char Pcontinous; /**<1 if LFO is continous*/
unsigned char Pstretch; /**<how the LFO is "stretched" according the note frequency (64=no stretch)*/
@@ -78,12 +78,12 @@ class LFOParams:public Presets
void setup();
/* Default parameters */
- float Dfreq;
+ float Dfreq;
unsigned char Dintensity;
unsigned char Dstartphase;
unsigned char DLFOtype;
unsigned char Drandomness;
- unsigned char Ddelay;
+ float Ddelay;
unsigned char Dcontinous;
};
diff --git a/src/Synth/LFO.cpp b/src/Synth/LFO.cpp
@@ -24,7 +24,7 @@ namespace zyn {
LFO::LFO(const LFOParams &lfopars, float basefreq, const AbsTime &t, WatchManager *m,
const char *watch_prefix)
:first_half(-1),
- delayTime(t, lfopars.Pdelay / 127.0f * 4.0f), //0..4 sec
+ delayTime(t, lfopars.delay), //0..4 sec
waveShape(lfopars.PLFOtype),
deterministic(!lfopars.Pfreqrand),
dt_(t.dt()),
diff --git a/src/Tests/guitar-adnote.xmz b/src/Tests/guitar-adnote.xmz
@@ -97,7 +97,7 @@ version-revision="4" ZynAddSubFX-author="Nasca Octavian Paul">
<par name="lfo_type" value="0" />
<par name="randomness_amplitude" value="0" />
<par name="randomness_frequency" value="0" />
-<par name="delay" value="0" />
+<par_real name="delay" value="0" exact_value="0x00000000" />
<par name="stretch" value="64" />
<par_bool name="continous" value="no" />
</AMPLITUDE_LFO>
@@ -129,7 +129,7 @@ version-revision="4" ZynAddSubFX-author="Nasca Octavian Paul">
<par name="lfo_type" value="0" />
<par name="randomness_amplitude" value="0" />
<par name="randomness_frequency" value="0" />
-<par name="delay" value="19" />
+<par_real name="delay" value="0.598425" exact_value="0x3F193265" />
<par name="stretch" value="64" />
<par_bool name="continous" value="no" />
</FREQUENCY_LFO>
@@ -168,7 +168,7 @@ version-revision="4" ZynAddSubFX-author="Nasca Octavian Paul">
<par name="lfo_type" value="0" />
<par name="randomness_amplitude" value="0" />
<par name="randomness_frequency" value="0" />
-<par name="delay" value="0" />
+<par_real name="delay" value="0" exact_value="0x00000000" />
<par name="stretch" value="64" />
<par_bool name="continous" value="no" />
</FILTER_LFO>
@@ -264,7 +264,7 @@ version-revision="4" ZynAddSubFX-author="Nasca Octavian Paul">
<par name="lfo_type" value="0" />
<par name="randomness_amplitude" value="0" />
<par name="randomness_frequency" value="0" />
-<par name="delay" value="30" />
+<par_real name="delay" value="0.944882" exact_value="0x3F71E3C8" />
<par name="stretch" value="64" />
<par_bool name="continous" value="no" />
</AMPLITUDE_LFO>
@@ -301,7 +301,7 @@ version-revision="4" ZynAddSubFX-author="Nasca Octavian Paul">
<par name="lfo_type" value="0" />
<par name="randomness_amplitude" value="0" />
<par name="randomness_frequency" value="0" />
-<par name="delay" value="0" />
+<par_real name="delay" value="0" exact_value="0x00000000" />
<par name="stretch" value="64" />
<par_bool name="continous" value="yes" />
</FREQUENCY_LFO>
@@ -342,7 +342,7 @@ version-revision="4" ZynAddSubFX-author="Nasca Octavian Paul">
<par name="lfo_type" value="0" />
<par name="randomness_amplitude" value="0" />
<par name="randomness_frequency" value="0" />
-<par name="delay" value="0" />
+<par_real name="delay" value="0" exact_value="0x00000000" />
<par name="stretch" value="64" />
<par_bool name="continous" value="no" />
</FILTER_LFO>
@@ -508,7 +508,7 @@ version-revision="4" ZynAddSubFX-author="Nasca Octavian Paul">
<par name="lfo_type" value="0" />
<par name="randomness_amplitude" value="0" />
<par name="randomness_frequency" value="0" />
-<par name="delay" value="0" />
+<par_real name="delay" value="0" exact_value="0x00000000" />
<par name="stretch" value="64" />
<par_bool name="continous" value="yes" />
</FREQUENCY_LFO>
@@ -594,7 +594,7 @@ version-revision="4" ZynAddSubFX-author="Nasca Octavian Paul">
<par name="lfo_type" value="0" />
<par name="randomness_amplitude" value="0" />
<par name="randomness_frequency" value="0" />
-<par name="delay" value="0" />
+<par_real name="delay" value="0" exact_value="0x00000000" />
<par name="stretch" value="64" />
<par_bool name="continous" value="yes" />
</FREQUENCY_LFO>
@@ -3368,7 +3368,7 @@ version-revision="4" ZynAddSubFX-author="Nasca Octavian Paul">
<par name="lfo_type" value="0" />
<par name="randomness_amplitude" value="0" />
<par name="randomness_frequency" value="0" />
-<par name="delay" value="0" />
+<par_real name="delay" value="0" exact_value="0x00000000" />
<par name="stretch" value="64" />
<par_bool name="continous" value="no" />
</AMPLITUDE_LFO>
@@ -3403,7 +3403,7 @@ version-revision="4" ZynAddSubFX-author="Nasca Octavian Paul">
<par name="lfo_type" value="0" />
<par name="randomness_amplitude" value="0" />
<par name="randomness_frequency" value="0" />
-<par name="delay" value="0" />
+<par_real name="delay" value="0" exact_value="0x00000000" />
<par name="stretch" value="64" />
<par_bool name="continous" value="no" />
</FREQUENCY_LFO>
@@ -3442,7 +3442,7 @@ version-revision="4" ZynAddSubFX-author="Nasca Octavian Paul">
<par name="lfo_type" value="0" />
<par name="randomness_amplitude" value="0" />
<par name="randomness_frequency" value="0" />
-<par name="delay" value="0" />
+<par_real name="delay" value="0" exact_value="0x00000000" />
<par name="stretch" value="64" />
<par_bool name="continous" value="no" />
</FILTER_LFO>