-Smoothed DSP level metering UI updates

This commit is contained in:
Harry van Haaren 2013-07-26 01:39:06 +01:00
parent 75d9dc592a
commit 8d2924b9d4
3 changed files with 31 additions and 5 deletions

View file

@ -29,11 +29,13 @@ class DBMeter
{
// range scale from range = -96 -> +10, to 0 -> 1
float zeroOneL = (1-(fvbargraph0 / -96.f));
fvbargraph0 = -96;
return pow(zeroOneL, 4);
}
float getRightDB()
{
float zeroOneR = (1-(fvbargraph1 / -96.f));
fvbargraph1 = -96;
return pow(zeroOneR, 4);
}
@ -42,10 +44,12 @@ class DBMeter
for (int i = 0; (i < count); i = (i + 1))
{
fRec0[0] = max((fRec0[1] - fConst0), min(10.f, (20.f * log10f(max(1.58489e-05f, fabsf(*inputL))))));
fvbargraph0 = fRec0[0];
if ( fvbargraph0 < fRec0[0] )
fvbargraph0 = fRec0[0];
fRec1[0] = max((fRec1[1] - fConst0), min(10.f, (20.f * log10f(max(1.58489e-05f, fabsf(*inputR))))));
fvbargraph1 = fRec1[0];
if ( fvbargraph1 < fRec1[0] )
fvbargraph1 = fRec1[0];
fRec0[1] = fRec0[0];
fRec1[1] = fRec1[0];

View file

@ -19,6 +19,11 @@ Jack::Jack()
buffers.nframes = jack_get_buffer_size( client );
buffers.samplerate = jack_get_sample_rate( client );
// UI update
uiUpdateConstant = buffers.samplerate / 30;
uiUpdateCounter = buffers.samplerate / 30;
masterOutput = jack_port_register( client,
"master_out",
JACK_DEFAULT_AUDIO_TYPE,
@ -157,13 +162,26 @@ int Jack::process (jack_nframes_t nframes)
{
// 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 );
if (uiUpdateCounter > uiUpdateConstant )
{
EventTrackSignalLevel e( n, dbMeters.at(n).getLeftDB(), dbMeters.at(n).getRightDB() );
writeToGuiRingbuffer( &e );
}
}
metronome.process( nframes, &buffers );
if (uiUpdateCounter > uiUpdateConstant )
{
uiUpdateCounter = 0;
}
uiUpdateCounter += nframes;
return false;
}

View file

@ -64,9 +64,13 @@ class Jack
ControllerUpdater controllerUpdater;
vector<Looper*> loopers;
vector<DBMeter> dbMeters;
// UI update variables
long uiUpdateCounter;
long uiUpdateConstant;
int nframes;
int samplerate;