mirror of
https://github.com/vale981/openAV-Luppp
synced 2025-03-05 09:01:39 -05:00
-Updated Jack to have DBMeter instances, dbMetering taking place in process(), event for signal level added & handled in GUI
This commit is contained in:
parent
9337fae460
commit
c9cf150841
7 changed files with 64 additions and 34 deletions
|
@ -7,9 +7,6 @@
|
|||
#include <cmath>
|
||||
#include <cstdlib>
|
||||
|
||||
float fabsf(float dummy0);
|
||||
float log10f(float dummy0);
|
||||
|
||||
class DBMeter
|
||||
{
|
||||
public:
|
||||
|
@ -27,33 +24,28 @@ class DBMeter
|
|||
int getNumInputs() { return 2;}
|
||||
int getNumOutputs(){ return 2;}
|
||||
|
||||
// call this to get the current dB value, range = -96 -> +10
|
||||
// call these to get the current dB values
|
||||
float getLeftDB()
|
||||
{
|
||||
return fvbargraph0;
|
||||
// range scale from range = -96 -> +10, to 0 -> 1
|
||||
float zeroOneL = (1-(fvbargraph0 / -96.f));
|
||||
return pow(zeroOneL, 4);
|
||||
}
|
||||
float getRightDB()
|
||||
{
|
||||
return fvbargraph1;
|
||||
float zeroOneR = (1-(fvbargraph1 / -96.f));
|
||||
return pow(zeroOneR, 4);
|
||||
}
|
||||
|
||||
void process(int count, float** inputs, float** outputs)
|
||||
void process(int count, float* inputL, float* inputR )
|
||||
{
|
||||
float* input0 = inputs[0];
|
||||
float* input1 = inputs[1];
|
||||
float* output0 = outputs[0];
|
||||
float* output1 = outputs[1];
|
||||
for (int i = 0; (i < count); i = (i + 1))
|
||||
{
|
||||
float fTemp0 = float(input0[i]);
|
||||
fRec0[0] = max((fRec0[1] - fConst0), min(10.f, (20.f * log10f(max(1.58489e-05f, fabsf(fTemp0))))));
|
||||
fRec0[0] = max((fRec0[1] - fConst0), min(10.f, (20.f * log10f(max(1.58489e-05f, fabsf(*inputL))))));
|
||||
fvbargraph0 = fRec0[0];
|
||||
output0[i] = float(fTemp0);
|
||||
|
||||
float fTemp1 = float(input1[i]);
|
||||
fRec1[0] = max((fRec1[1] - fConst0), min(10.f, (20.f * log10f(max(1.58489e-05f, fabsf(fTemp1))))));
|
||||
fRec1[0] = max((fRec1[1] - fConst0), min(10.f, (20.f * log10f(max(1.58489e-05f, fabsf(*inputR))))));
|
||||
fvbargraph1 = fRec1[0];
|
||||
output1[i] = float(fTemp1);
|
||||
|
||||
fRec0[1] = fRec0[0];
|
||||
fRec1[1] = fRec1[0];
|
||||
|
|
|
@ -19,6 +19,8 @@ namespace Event
|
|||
MASTER_VOL,
|
||||
RECORD,
|
||||
|
||||
TRACK_SIGNAL_LEVEL,
|
||||
|
||||
LOOPER_LOAD,
|
||||
LOOPER_PLAY,
|
||||
LOOPER_STATE,
|
||||
|
@ -138,6 +140,20 @@ class EventTimeBPM : public EventBase
|
|||
EventTimeBPM(float b) : bpm(b) {}
|
||||
};
|
||||
|
||||
class EventTrackSignalLevel : public EventBase
|
||||
{
|
||||
public:
|
||||
int type() { return int(TRACK_SIGNAL_LEVEL); }
|
||||
uint32_t size() { return sizeof(EventTrackSignalLevel); }
|
||||
|
||||
int track;
|
||||
float left;
|
||||
float right;
|
||||
|
||||
EventTrackSignalLevel(){}
|
||||
EventTrackSignalLevel(int t, float l,float r) : track(t), left(l), right(r) {}
|
||||
};
|
||||
|
||||
class EventTimeTempoTap : public EventBase
|
||||
{
|
||||
public:
|
||||
|
|
|
@ -66,6 +66,12 @@ void handleGuiEvents()
|
|||
gui->getTrack(ev.track)->progress.value(ev.progress);
|
||||
//jack->setLooperLoopLength( ev.track, ev.scale );
|
||||
} break; }
|
||||
case Event::TRACK_SIGNAL_LEVEL: {
|
||||
if ( availableRead >= sizeof(EventTrackSignalLevel) ) {
|
||||
EventTrackSignalLevel ev;
|
||||
jack_ringbuffer_read( rbToGui, (char*)&ev, sizeof(EventTrackSignalLevel) );
|
||||
gui->getTrack(ev.track)->getVolume()->amplitude( ev.left, ev.right );
|
||||
} break; }
|
||||
case Event::GUI_PRINT: {
|
||||
if ( availableRead >= sizeof(EventGuiPrint) ) {
|
||||
EventGuiPrint ev;
|
||||
|
|
|
@ -30,6 +30,7 @@ class GTrack : public Fl_Group
|
|||
{
|
||||
public:
|
||||
|
||||
Avtk::Volume* getVolume(){return &volume;}
|
||||
Avtk::ClipSelector* getClipSelector(){return &clipSel;}
|
||||
|
||||
GTrack(int x, int y, int w, int h, const char* l = 0 ) :
|
||||
|
|
42
src/jack.cxx
42
src/jack.cxx
|
@ -49,6 +49,22 @@ Jack::Jack()
|
|||
JackPortIsOutput,
|
||||
0 );
|
||||
|
||||
for(int i = 0; i < NTRACKS; i++)
|
||||
{
|
||||
loopers.push_back( new Looper(i) );
|
||||
timeManager.registerObserver( loopers.back() );
|
||||
|
||||
// allocate working buffers for each track
|
||||
buffers.audio[Buffers::TRACK_0 + i] = (float*) malloc( sizeof(float) * nframes );
|
||||
}
|
||||
|
||||
for( int i = 0; i < NTRACKS; i++)
|
||||
{
|
||||
dbMeters.push_back( DBMeter( buffers.samplerate ) );
|
||||
}
|
||||
|
||||
timeManager.registerObserver( &metronome );
|
||||
|
||||
if ( jack_set_process_callback( client,
|
||||
static_process,
|
||||
static_cast<void*>(this)) )
|
||||
|
@ -63,27 +79,13 @@ Jack::Jack()
|
|||
{
|
||||
cerr << "Jack() error setting timebase callback" << endl;
|
||||
}
|
||||
|
||||
for(int i = 0; i < NTRACKS; i++)
|
||||
{
|
||||
// allocate working buffers for each track
|
||||
buffers.audio[Buffers::TRACK_0 + i] = (float*) malloc( sizeof(float) * nframes );
|
||||
|
||||
loopers.push_back( new Looper(i) );
|
||||
timeManager.registerObserver( loopers.back() );
|
||||
|
||||
dbMeters.push_back( new DBMeter( buffers.samplerate ) );
|
||||
}
|
||||
|
||||
timeManager.registerObserver( &metronome );
|
||||
|
||||
jack_transport_start(client);
|
||||
}
|
||||
|
||||
|
||||
void Jack::activate()
|
||||
{
|
||||
jack_activate( client );
|
||||
jack_transport_start(client);
|
||||
}
|
||||
|
||||
|
||||
|
@ -150,6 +152,16 @@ int Jack::process (jack_nframes_t nframes)
|
|||
*output++ = tmp;
|
||||
}
|
||||
|
||||
// get DB readings, and send to UI
|
||||
for(int n = 0; n < NTRACKS; n++)
|
||||
{
|
||||
// needs to be setup to handle stereo instead of mono
|
||||
dbMeters.at(n).process( nframes, buffers.audio[Buffers::TRACK_0 + n], buffers.audio[Buffers::TRACK_0 + n]);
|
||||
EventTrackSignalLevel e( n, dbMeters.at(n).getLeftDB(), dbMeters.at(n).getRightDB() );
|
||||
writeToGuiRingbuffer( &e );
|
||||
}
|
||||
|
||||
|
||||
metronome.process( nframes, &buffers );
|
||||
|
||||
return false;
|
||||
|
|
|
@ -64,7 +64,8 @@ class Jack
|
|||
ControllerUpdater controllerUpdater;
|
||||
|
||||
vector<Looper*> loopers;
|
||||
vector<DBMeter*> dbMeters;
|
||||
|
||||
vector<DBMeter> dbMeters;
|
||||
|
||||
int nframes;
|
||||
int samplerate;
|
||||
|
|
|
@ -37,9 +37,11 @@ int main()
|
|||
|
||||
|
||||
jack = new Jack();
|
||||
jack->activate();
|
||||
|
||||
gui = new Gui();
|
||||
|
||||
jack->activate();
|
||||
|
||||
gui->show();
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue