commit 72f489ca4212246f0e5b1e5e80fcb7c6fb05a6b6
parent 1cfd55838f5883a29a362b06f1eae439ff618dcd
Author: fundamental <mark.d.mccurry@gmail.com>
Date: Tue, 5 Mar 2019 22:53:25 -0500
Merge remote-tracking branch 'github/master'
Diffstat:
7 files changed, 55 insertions(+), 21 deletions(-)
diff --git a/src/Misc/MiddleWare.cpp b/src/Misc/MiddleWare.cpp
@@ -466,7 +466,7 @@ public:
bank.loadbank(bank.banks[par].dir);
}
- void loadPart(int npart, const char *filename, Master *master)
+ void loadPart(int npart, const char *filename, Master *master, rtosc::RtData &d)
{
actual_load[npart]++;
@@ -524,7 +524,7 @@ public:
//Give it to the backend and wait for the old part to return for
//deallocation
parent->transmitMsg("/load-part", "ib", npart, sizeof(Part*), &p);
- GUI::raiseUi(ui, "/damage", "s", ("/part"+to_s(npart)+"/").c_str());
+ d.broadcast("/damage", "s", ("/part"+to_s(npart)+"/").c_str());
}
//Load a new cleared Part instance
@@ -1424,14 +1424,14 @@ static rtosc::Ports middwareSnoopPorts = {
const int part_id = rtosc_argument(msg,0).i;
const char *file = rtosc_argument(msg,1).s;
impl.pending_load[part_id]++;
- impl.loadPart(part_id, file, impl.master);
+ impl.loadPart(part_id, file, impl.master, d);
rEnd},
{"load-part:is", 0, 0,
rBegin;
const int part_id = rtosc_argument(msg,0).i;
const char *file = rtosc_argument(msg,1).s;
impl.pending_load[part_id]++;
- impl.loadPart(part_id, file, impl.master);
+ impl.loadPart(part_id, file, impl.master, d);
rEnd},
{"load-part:iss", 0, 0,
rBegin;
@@ -1439,7 +1439,7 @@ static rtosc::Ports middwareSnoopPorts = {
const char *file = rtosc_argument(msg,1).s;
const char *name = rtosc_argument(msg,2).s;
impl.pending_load[part_id]++;
- impl.loadPart(part_id, file, impl.master);
+ impl.loadPart(part_id, file, impl.master, d);
impl.uToB->write(("/part"+to_s(part_id)+"/Pname").c_str(), "s",
name);
rEnd},
@@ -1449,7 +1449,7 @@ static rtosc::Ports middwareSnoopPorts = {
const int slot = rtosc_argument(msg, 0).i + 128*bank.bank_lsb;
if(slot < BANK_SIZE) {
impl.pending_load[0]++;
- impl.loadPart(0, impl.master->bank.ins[slot].filename.c_str(), impl.master);
+ impl.loadPart(0, impl.master->bank.ins[slot].filename.c_str(), impl.master, d);
impl.uToB->write("/part0/Pname", "s", impl.master->bank.ins[slot].name.c_str());
}
rEnd},
@@ -1545,7 +1545,7 @@ static rtosc::Ports middlewareReplyPorts = {
Bank &bank = impl.master->bank;
const int part = rtosc_argument(msg, 0).i;
const int program = rtosc_argument(msg, 1).i + 128*bank.bank_lsb;
- impl.loadPart(part, impl.master->bank.ins[program].filename.c_str(), impl.master);
+ impl.loadPart(part, impl.master->bank.ins[program].filename.c_str(), impl.master, d);
impl.uToB->write(("/part"+to_s(part)+"/Pname").c_str(), "s", impl.master->bank.ins[program].name.c_str());
rEnd},
{"setbank:c", 0, 0,
diff --git a/src/Misc/XMLwrapper.cpp b/src/Misc/XMLwrapper.cpp
@@ -565,6 +565,17 @@ string XMLwrapper::getparstr(const string &name,
return defaultpar;
}
+bool XMLwrapper::hasparreal(const char *name) const
+{
+ const mxml_node_t *tmp = mxmlFindElement(node,
+ node,
+ "par_real",
+ "name",
+ name,
+ MXML_DESCEND_FIRST);
+ return tmp != nullptr;
+}
+
float XMLwrapper::getparreal(const char *name, float defaultpar) const
{
const mxml_node_t *tmp = mxmlFindElement(node,
diff --git a/src/Misc/XMLwrapper.h b/src/Misc/XMLwrapper.h
@@ -202,6 +202,12 @@ class XMLwrapper
const std::string &defaultpar) const;
/**
+ * Test existence of real parameter.
+ * @param name The parameter name.
+ */
+ bool hasparreal(const char *name) const;
+
+ /**
* Returns the real value stored in the node.
* @param name The parameter name.
* @param defaultpar The default value if the real value is not found.
diff --git a/src/Params/ADnoteParameters.cpp b/src/Params/ADnoteParameters.cpp
@@ -151,7 +151,7 @@ static const Ports voicePorts = {
rParamZyn(PFilterVelocityScaleFunction, rShort("v.sense"), rDefault(64),
"Filter Velocity Function Shape"),
-
+
//Modulator Stuff
rOption(PFMEnabled, rShort("mode"), rOptions(none, mix, ring, phase,
frequency, pulse), rDefault(none), "Modulator mode"),
@@ -180,6 +180,7 @@ static const Ports voicePorts = {
"Modulator Amplitude Envelope"),
+
//weird stuff for PCoarseDetune
{"detunevalue:", rMap(unit,cents) rDoc("Get detune in cents"), NULL,
[](const char *, RtData &d)
@@ -315,10 +316,20 @@ static const Ports globalPorts = {
//Amplitude
rParamZyn(PPanning, rShort("pan"), rDefault(64),
"Panning of ADsynth (0 random, 1 left, 127 right)"),
- rParamZyn(PVolume, rShort("vol"), rDefault(90), "volume control"),
+ rParamF(Volume, rShort("vol"), rLinear(-60.0f,20.0f),
+ rDefault(-3.75f), "volume control"),
rParamZyn(PAmpVelocityScaleFunction, rShort("sense"), rDefault(64),
"Volume velocity sense"),
-
+ {"PVolume::i", rShort("vol.") rLinear(0,127)
+ rDoc("Volume"), NULL,
+ [](const char *msg, RtData &d)
+ {
+ rObject *obj = (rObject *)d.obj;
+ if (!rtosc_narguments(msg))
+ d.reply(d.loc, "i", (int)roundf(96.0f * (1.0f + obj->Volume/60.0f)));
+ else
+ obj->Volume = -60.0f * (1.0f - rtosc_argument(msg, 0).i / 96.0f);
+ }},
rParamZyn(Fadein_adjustment, rDefault(FADEIN_ADJUSTMENT_SCALE),
"Adjustment for anti-pop strategy."),
rParamZyn(PPunchStrength, rShort("strength"), rDefault(0),
@@ -460,7 +471,7 @@ void ADnoteGlobalParam::defaults()
PBandwidth = 64;
/* Amplitude Global Parameters */
- PVolume = 90;
+ Volume = -3.75f;
PPanning = 64; //center
PAmpVelocityScaleFunction = 64;
AmpEnvelope->defaults();
@@ -839,7 +850,7 @@ void ADnoteGlobalParam::add2XML(XMLwrapper& xml)
xml.addparbool("stereo", PStereo);
xml.beginbranch("AMPLITUDE_PARAMETERS");
- xml.addpar("volume", PVolume);
+ xml.addparreal("volume", Volume);
xml.addpar("panning", PPanning);
xml.addpar("velocity_sensing", PAmpVelocityScaleFunction);
xml.addpar("fadein_adjustment", Fadein_adjustment);
@@ -914,7 +925,15 @@ void ADnoteGlobalParam::getfromXML(XMLwrapper& xml)
PStereo = xml.getparbool("stereo", PStereo);
if(xml.enterbranch("AMPLITUDE_PARAMETERS")) {
- PVolume = xml.getpar127("volume", PVolume);
+ const bool upgrade_3_0_3 = (xml.fileversion() < version_type(3,0,3)) ||
+ (!xml.hasparreal("volume"));
+
+ if (upgrade_3_0_3) {
+ int vol = xml.getpar127("volume", 0);
+ Volume = -60.0f * ( 1.0f - vol / 96.0f);
+ } else {
+ Volume = xml.getparreal("volume", Volume);
+ }
PPanning = xml.getpar127("panning", PPanning);
PAmpVelocityScaleFunction = xml.getpar127("velocity_sensing",
PAmpVelocityScaleFunction);
@@ -1127,7 +1146,7 @@ void ADnoteGlobalParam::paste(ADnoteGlobalParam &a)
{
copy(PStereo);
- copy(PVolume);
+ copy(Volume);
copy(PPanning);
copy(PAmpVelocityScaleFunction);
diff --git a/src/Params/ADnoteParameters.h b/src/Params/ADnoteParameters.h
@@ -64,7 +64,7 @@ struct ADnoteGlobalParam {
127 - right */
unsigned char PPanning;
- unsigned char PVolume;
+ float Volume;
unsigned char PAmpVelocityScaleFunction;
diff --git a/src/Synth/ADnote.cpp b/src/Synth/ADnote.cpp
@@ -669,9 +669,7 @@ void ADnote::legatonote(LegatoParams lpars)
int tmp[NUM_VOICES];
NoteGlobalPar.Volume = 4.0f
- * powf(0.1f, 3.0f
- * (1.0f - pars.GlobalPar.PVolume
- / 96.0f)) //-60 dB .. 0 dB
+ * powf(10.0f, pars.GlobalPar.Volume / 20.0) //-60 dB .. 20 dB
* VelF(
velocity,
pars.GlobalPar.PAmpVelocityScaleFunction); //velocity sensing
@@ -1977,7 +1975,7 @@ void ADnote::Global::initparameters(const ADnoteGlobalParam ¶m,
AmpLfo = memory.alloc<LFO>(*param.AmpLfo, basefreq, time, wm,
(pre+"GlobalPar/AmpLfo/").c_str);
- Volume = 4.0f * powf(0.1f, 3.0f * (1.0f - param.PVolume / 96.0f)) //-60 dB .. 0 dB
+ Volume = 4.0f * powf(10.0f, param.Volume / 20.0) //-60 dB .. 20 dB
* VelF(velocity, param.PAmpVelocityScaleFunction); //sensing
Filter = memory.alloc<ModFilter>(*param.GlobalFilter, synth, time, memory,
diff --git a/src/Tests/guitar-adnote.xmz b/src/Tests/guitar-adnote.xmz
@@ -66,7 +66,7 @@ version-revision="3" ZynAddSubFX-author="Nasca Octavian Paul">
<ADD_SYNTH_PARAMETERS>
<par_bool name="stereo" value="yes" />
<AMPLITUDE_PARAMETERS>
-<par name="volume" value="73" />
+<par_real name="volume" value="-14.375" exact_value="0xC165FFFF" />
<par name="panning" value="74" />
<par name="velocity_sensing" value="85" />
<par name="fadein_adjustment" value="20" />
@@ -764,7 +764,7 @@ version-revision="3" ZynAddSubFX-author="Nasca Octavian Paul">
<INSTRUMENT_EFFECT id="0">
<EFFECT>
<par name="type" value="6" />
-<par name="preset" value="4" />
+<par name="preset" value="0" />
<EFFECT_PARAMETERS>
<par_no id="0">
<par name="par" value="112" />