zynaddsubfx

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

commit 9717a19ff654a506e666d6136ba475c086c394a9
parent 2db782fe25cbeb9e5a0a101523623938aef9662e
Author: Daniel Sheeler <dsheeler@pobox.com>
Date:   Sat, 23 Mar 2019 06:03:55 -0500

Transmit Part peaks in stereo instead of mono

Diffstat:
Msrc/Misc/Master.cpp | 32+++++++++++++++++++-------------
Msrc/Misc/Master.h | 3++-
2 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/src/Misc/Master.cpp b/src/Misc/Master.cpp @@ -388,12 +388,12 @@ static const Ports master_ports = { d.reply(m-1);}}, {"get-vu:", rDoc("Grab VU Data"), 0, [](const char *, RtData &d) { Master *m = (Master*)d.obj; - d.reply("/vu-meter", "bb", sizeof(m->vu), &m->vu, sizeof(float)*NUM_MIDI_PARTS, m->vuoutpeakpart);}}, + d.reply("/vu-meter", "bb", sizeof(m->vu), &m->vu, sizeof(float)*NUM_MIDI_PARTS, m->vuoutpeakpartl);}}, {"vu-meter:", rDoc("Grab VU Data"), 0, [](const char *, RtData &d) { Master *m = (Master*)d.obj; - char types[6+NUM_MIDI_PARTS+1] = {0}; - rtosc_arg_t args[6+NUM_MIDI_PARTS+1]; - for(int i=0; i<6+NUM_MIDI_PARTS; ++i) + char types[6+2*NUM_MIDI_PARTS+1] = {0}; + rtosc_arg_t args[6+2*NUM_MIDI_PARTS+1]; + for(int i=0; i<6+2*NUM_MIDI_PARTS; ++i) types[i] = 'f'; args[0].f = m->vu.outpeakl; args[1].f = m->vu.outpeakr; @@ -401,9 +401,10 @@ static const Ports master_ports = { args[3].f = m->vu.maxoutpeakr; args[4].f = m->vu.rmspeakl; args[5].f = m->vu.rmspeakr; - for(int i=0; i<NUM_MIDI_PARTS; ++i) - args[6+i].f = m->vuoutpeakpart[i]; - + for(int i=0; i<NUM_MIDI_PARTS; ++i) { + args[6 + 2 * i].f = m->vuoutpeakpartl[i]; + args[6 + 2 * i + 1].f = m->vuoutpeakpartr[i]; + } d.replyArray("/vu-meter", types, args);}}, {"reset-vu:", rDoc("Grab VU Data"), 0, [](const char *, RtData &d) { Master *m = (Master*)d.obj; @@ -745,7 +746,8 @@ Master::Master(const SYNTH_T &synth_, Config* config) shutup = 0; for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) { - vuoutpeakpart[npart] = 1e-9; + vuoutpeakpartl[npart] = 1e-9; + vuoutpeakpartr[npart] = 1e-9; fakepeakpart[npart] = 0; } @@ -1004,16 +1006,20 @@ void Master::vuUpdate(const float *outl, const float *outr) //Part Peak computation (for Part vumeters or fake part vumeters) for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) { - vuoutpeakpart[npart] = 1.0e-12f; + vuoutpeakpartl[npart] = 1.0e-12f; + vuoutpeakpartr[npart] = 1.0e-12f; if(part[npart]->Penabled != 0) { float *outl = part[npart]->partoutl, *outr = part[npart]->partoutr; for(int i = 0; i < synth.buffersize; ++i) { - float tmp = fabs(outl[i] + outr[i]); - if(tmp > vuoutpeakpart[npart]) - vuoutpeakpart[npart] = tmp; + if (fabs(outl[i]) > vuoutpeakpartl[npart]) + vuoutpeakpartl[npart] = fabs(outl[i]); + if (fabs(outr[i]) > vuoutpeakpartr[npart]) + vuoutpeakpartr[npart] = fabs(outr[i]); } - vuoutpeakpart[npart] *= dB2rap(volume); + float v = dB2rap(Volume); + vuoutpeakpartl[npart] *= v; + vuoutpeakpartr[npart] *= v; } else if(fakepeakpart[npart] > 1) diff --git a/src/Misc/Master.h b/src/Misc/Master.h @@ -170,7 +170,8 @@ class Master void vuresetpeaks(); //peaks for part VU-meters - float vuoutpeakpart[NUM_MIDI_PARTS]; + float vuoutpeakpartl[NUM_MIDI_PARTS]; + float vuoutpeakpartr[NUM_MIDI_PARTS]; unsigned char fakepeakpart[NUM_MIDI_PARTS]; //this is used to compute the "peak" when the part is disabled AbsTime time;