zynaddsubfx

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

commit 2db782fe25cbeb9e5a0a101523623938aef9662e
parent cc0e9d3367fe6b5014f349991113d32d3afa673c
Author: Daniel Sheeler <dsheeler@pobox.com>
Date:   Fri, 22 Mar 2019 16:10:23 -0500

Global volume to dB float Pt II: cleanup; had replaced /volume::i with
/volume::f, but need /volume::i for old ui, so replace /volume::f with
/Volume::f.

Diffstat:
Msrc/Misc/Master.cpp | 45++++++++++++++++++++++++---------------------
Msrc/Misc/Master.h | 6++----
2 files changed, 26 insertions(+), 25 deletions(-)

diff --git a/src/Misc/Master.cpp b/src/Misc/Master.cpp @@ -430,20 +430,22 @@ static const Ports master_ports = { rDefault(80) rDoc("Master Volume"), 0, [](const char *m, rtosc::RtData &d) { if(rtosc_narguments(m)==0) { - d.reply(d.loc, "i", (int) roundf(96.0f * ((Master*)d.obj)->volume / 40.0f + 96.0f)); + d.reply(d.loc, "i", (int) roundf(96.0f * ((Master*)d.obj)->Volume / 40.0f + 96.0f)); } else if(rtosc_narguments(m)==1 && rtosc_type(m,0)=='i') { - ((Master*)d.obj)->volume = 40.0f * (limit<char>(rtosc_argument(m,0).i,0,127) - 96.0f) / 96.0f; - d.broadcast(d.loc, "i", limit<char>(rtosc_argument(m, 0).i, 0, 127)); + ((Master *)d.obj)->Volume = ((Master *)d.obj)->volume127ToFloat(limit<unsigned char>(rtosc_argument(m, 0).i, 0, 127)); + d.broadcast(d.loc, "i", limit<char>(rtosc_argument(m, 0).i, 0, 127)); }}}, - {"volume::f", rShort("volume") rProp(parameter) rDefault(-6.667f) rLinear(-40.0f,12.917f) - rDoc("Master Volume"), 0, - [](const char *m, rtosc::RtData &d) { - if(rtosc_narguments(m)==0) { - d.reply(d.loc, "f", ((Master*)d.obj)->volume); - } else if(rtosc_narguments(m)==1 && rtosc_type(m,0)=='f') { - ((Master*)d.obj)->setPvolume((int) roundf(96.0f * rtosc_argument(m,0).f) / 40.0f + 96.0f); - d.broadcast(d.loc, "f", ((Master*)d.obj)->volume); - }}}, + {"volume::i", rShort("volume") rProp(parameter) rLinear(0,127) + rDoc("Master Volume"), 0, + [](const char *m, rtosc::RtData &d) { + if(rtosc_narguments(m)==0) { + d.reply(d.loc, "i", (int) roundf(96.0f * ((Master*)d.obj)->Volume / 40.0f + 96.0f)); + } else if (rtosc_narguments(m)==1 && rtosc_type(m,0)=='i') { + ((Master *)d.obj)->Volume = ((Master *)d.obj)->volume127ToFloat(limit<unsigned char>(rtosc_argument(m, 0).i, 0, 127)); + d.broadcast(d.loc, "i", limit<char>(rtosc_argument(m, 0).i, 0, 127)); + }}}, + rParamF(Volume, rShort("volume"), rDefault(-6.66667f), rLinear(-40.0f,12.917f), + rUnit(dB), "Master Volume"), {"Psysefxvol#" STRINGIFY(NUM_SYS_EFX) "/::i", 0, &sysefxPort, [](const char *msg, rtosc::RtData &d) { SNIP; @@ -854,8 +856,9 @@ bool Master::applyOscEvent(const char *msg, bool nio, int msg_id) void Master::defaults() { - volume = -6.667; - setPvolume(80); + union {float f; uint32_t i;} convert; + convert.i = 0xC0D55556; + Volume = convert.f; setPkeyshift(64); for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) { @@ -1292,7 +1295,7 @@ bool Master::AudioOut(float *outr, float *outl) //Master Volume - float v = dB2rap(volume); + float v = dB2rap(Volume); for(int i = 0; i < synth.buffersize; ++i) { outl[i] *= v; outr[i] *= v; @@ -1392,10 +1395,10 @@ Master::~Master() /* * Parameter control */ -void Master::setPvolume(char Pvolume_) + +float Master::volume127ToFloat(unsigned char volume_) { - Pvolume = Pvolume_; - volume = (Pvolume - 96.0f) / 96.0f * 40.0f; + return (volume_ - 96.0f) / 96.0f * 40.0; } void Master::setPkeyshift(char Pkeyshift_) @@ -1468,7 +1471,7 @@ void Master::initialize_rt(void) void Master::add2XML(XMLwrapper& xml) { - xml.addparreal("volume", volume); + xml.addparreal("volume", Volume); xml.addpar("key_shift", Pkeyshift); xml.addparbool("nrpn_receive", ctl.NRPN.receive); @@ -1585,9 +1588,9 @@ int Master::loadXML(const char *filename) void Master::getfromXML(XMLwrapper& xml) { if (xml.hasparreal("volume")) { - xml.getparreal("volume", volume); + xml.getparreal("volume", Volume); } else { - setPvolume(xml.getpar127("volume", Pvolume)); + Volume = volume127ToFloat(xml.getpar127("volume", 0)); } setPkeyshift(xml.getpar127("key_shift", Pkeyshift)); ctl.NRPN.receive = xml.getparbool("nrpn_receive", ctl.NRPN.receive); diff --git a/src/Misc/Master.h b/src/Misc/Master.h @@ -144,14 +144,12 @@ class Master class Part * part[NUM_MIDI_PARTS]; //parameters - - unsigned char Pvolume; unsigned char Pkeyshift; unsigned char Psysefxvol[NUM_SYS_EFX][NUM_MIDI_PARTS]; unsigned char Psysefxsend[NUM_SYS_EFX][NUM_SYS_EFX]; //parameters control - void setPvolume(char Pvolume_); + float volume127ToFloat(unsigned char volume_); void setPkeyshift(char Pkeyshift_); void setPsysefxvol(int Ppart, int Pefx, char Pvol); void setPsysefxsend(int Pefxfrom, int Pefxto, char Pvol); @@ -188,7 +186,7 @@ class Master class FFTwrapper * fft; static const rtosc::Ports &ports; - float volume; + float Volume; //Statistics on output levels vuData vu;