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