* added max peak hold state to IO so that the true held peaks can be displayed
in the numeric field in the gui. * returned meter falloff to proper slower speeds git-svn-id: svn://localhost/ardour2/trunk@1265 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
ebbc8b3b6a
commit
239a5db497
@ -587,10 +587,8 @@ ARDOUR_UI::map_meter_falloff ()
|
||||
{
|
||||
const char* action = X_("MeterFalloffMedium");
|
||||
|
||||
/* XXX hack alert. Fix this. Please */
|
||||
|
||||
float val = Config->get_meter_falloff ();
|
||||
MeterFalloff code = (MeterFalloff) (int) (floor (val));
|
||||
MeterFalloff code = meter_falloff_from_float(val);
|
||||
|
||||
switch (code) {
|
||||
case MeterFalloffOff:
|
||||
|
@ -312,7 +312,7 @@ GainMeter::update_meters ()
|
||||
{
|
||||
vector<MeterInfo>::iterator i;
|
||||
uint32_t n;
|
||||
float peak;
|
||||
float peak, mpeak;
|
||||
char buf[32];
|
||||
|
||||
for (n = 0, i = meters.begin(); i != meters.end(); ++i, ++n) {
|
||||
@ -320,9 +320,11 @@ GainMeter::update_meters ()
|
||||
peak = _io->peak_input_power (n);
|
||||
|
||||
(*i).meter->set (log_meter (peak), peak);
|
||||
|
||||
if (peak > max_peak) {
|
||||
max_peak = peak;
|
||||
|
||||
mpeak = _io->max_peak_power(n);
|
||||
|
||||
if (mpeak > max_peak) {
|
||||
max_peak = mpeak;
|
||||
/* set peak display */
|
||||
if (max_peak <= -200.0f) {
|
||||
peak_display.set_text (_("-inf"));
|
||||
@ -478,7 +480,12 @@ GainMeter::peak_button_release (GdkEventButton* ev)
|
||||
void
|
||||
GainMeter::reset_peak_display ()
|
||||
{
|
||||
max_peak = minus_infinity();
|
||||
Route * r;
|
||||
if ((r = dynamic_cast<Route*> (_io.get())) != 0) {
|
||||
r->reset_max_peak_meters();
|
||||
}
|
||||
|
||||
max_peak = -INFINITY;
|
||||
peak_display.set_text (_("-Inf"));
|
||||
peak_display.set_name ("MixerStripPeakDisplay");
|
||||
}
|
||||
|
@ -103,7 +103,7 @@ CONFIG_VARIABLE (float, video_pullup, "video-pullup", 0.0f)
|
||||
/* metering */
|
||||
|
||||
CONFIG_VARIABLE (float, meter_hold, "meter-hold", 100.0f)
|
||||
CONFIG_VARIABLE (float, meter_falloff, "meter-falloff", 0.375f)
|
||||
CONFIG_VARIABLE (float, meter_falloff, "meter-falloff", 27.0f)
|
||||
CONFIG_VARIABLE (nframes_t, over_length_short, "over-length-short", 2)
|
||||
CONFIG_VARIABLE (nframes_t, over_length_long, "over-length-long", 10)
|
||||
|
||||
|
@ -197,6 +197,19 @@ class IO : public PBD::StatefulDestructible
|
||||
}
|
||||
}
|
||||
|
||||
float max_peak_power (uint32_t n) {
|
||||
if (_ninputs == 0) {
|
||||
return minus_infinity();
|
||||
} else if (n < std::max (_ninputs, _noutputs)) {
|
||||
return _max_peak_power[n];
|
||||
} else {
|
||||
return minus_infinity();
|
||||
}
|
||||
}
|
||||
|
||||
void reset_max_peak_meters ();
|
||||
|
||||
|
||||
static void update_meters();
|
||||
|
||||
private:
|
||||
@ -272,6 +285,7 @@ class IO : public PBD::StatefulDestructible
|
||||
vector<Port*> _inputs;
|
||||
vector<float> _peak_power;
|
||||
vector<float> _visible_peak_power;
|
||||
vector<float> _max_peak_power;
|
||||
string _name;
|
||||
Connection* _input_connection;
|
||||
Connection* _output_connection;
|
||||
|
@ -66,6 +66,8 @@ const char* edit_mode_to_string (ARDOUR::EditMode);
|
||||
ARDOUR::EditMode string_to_edit_mode (std::string);
|
||||
|
||||
float meter_falloff_to_float (ARDOUR::MeterFalloff);
|
||||
ARDOUR::MeterFalloff meter_falloff_from_float (float);
|
||||
float meter_falloff_to_db_per_sec (float);
|
||||
float meter_hold_to_float (ARDOUR::MeterHold);
|
||||
|
||||
#if defined(HAVE_COREAUDIO) || defined(HAVE_AUDIOUNITS)
|
||||
|
@ -2427,6 +2427,16 @@ IO::reset_peak_meters ()
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
IO::reset_max_peak_meters ()
|
||||
{
|
||||
uint32_t limit = max (_ninputs, _noutputs);
|
||||
|
||||
for (uint32_t i = 0; i < limit; ++i) {
|
||||
_max_peak_power[i] = -INFINITY;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
IO::setup_peak_meters ()
|
||||
{
|
||||
@ -2434,7 +2444,8 @@ IO::setup_peak_meters ()
|
||||
|
||||
while (_peak_power.size() < limit) {
|
||||
_peak_power.push_back (0);
|
||||
_visible_peak_power.push_back (0);
|
||||
_visible_peak_power.push_back (-INFINITY);
|
||||
_max_peak_power.push_back (-INFINITY);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2468,20 +2479,25 @@ IO::meter ()
|
||||
|
||||
float new_peak = _peak_power[n];
|
||||
_peak_power[n] = 0;
|
||||
|
||||
|
||||
/* compute new visible value using falloff */
|
||||
|
||||
if (new_peak > 0.0) {
|
||||
if (new_peak > 0.0f) {
|
||||
new_peak = coefficient_to_dB (new_peak);
|
||||
} else {
|
||||
new_peak = minus_infinity();
|
||||
new_peak = -INFINITY;
|
||||
}
|
||||
|
||||
/* update max peak */
|
||||
|
||||
_max_peak_power[n] = max (new_peak, _max_peak_power[n]);
|
||||
|
||||
|
||||
if (Config->get_meter_falloff() == 0.0f || new_peak > _visible_peak_power[n]) {
|
||||
_visible_peak_power[n] = new_peak;
|
||||
} else {
|
||||
// do falloff
|
||||
new_peak = _visible_peak_power[n] - Config->get_meter_falloff();
|
||||
// do falloff, the config value is in dB/sec, we get updated at 100/sec currently (should be a var somewhere)
|
||||
new_peak = _visible_peak_power[n] - (Config->get_meter_falloff() * 0.01f);
|
||||
_visible_peak_power[n] = max (new_peak, -INFINITY);
|
||||
}
|
||||
}
|
||||
|
@ -845,7 +845,10 @@ Route::add_redirect (boost::shared_ptr<Redirect> redirect, void *src, uint32_t*
|
||||
_peak_power.push_back(0);
|
||||
}
|
||||
while (_visible_peak_power.size() < potential_max_streams) {
|
||||
_visible_peak_power.push_back(0);
|
||||
_visible_peak_power.push_back(-INFINITY);
|
||||
}
|
||||
while (_max_peak_power.size() < potential_max_streams) {
|
||||
_max_peak_power.push_back(-INFINITY);
|
||||
}
|
||||
|
||||
_redirects.push_back (redirect);
|
||||
@ -903,7 +906,10 @@ Route::add_redirects (const RedirectList& others, void *src, uint32_t* err_strea
|
||||
_peak_power.push_back(0);
|
||||
}
|
||||
while (_visible_peak_power.size() < potential_max_streams) {
|
||||
_visible_peak_power.push_back(0);
|
||||
_visible_peak_power.push_back(-INFINITY);
|
||||
}
|
||||
while (_max_peak_power.size() < potential_max_streams) {
|
||||
_max_peak_power.push_back(-INFINITY);
|
||||
}
|
||||
|
||||
_redirects.push_back (*i);
|
||||
|
@ -394,25 +394,65 @@ slave_source_to_string (SlaveSource src)
|
||||
}
|
||||
}
|
||||
|
||||
/* I don't really like hard-coding these falloff rates here
|
||||
* Probably should use a map of some kind that could be configured
|
||||
* These rates are db/sec.
|
||||
*/
|
||||
|
||||
#define METER_FALLOFF_OFF 0.0f
|
||||
#define METER_FALLOFF_SLOWEST 6.6f // BBC standard
|
||||
#define METER_FALLOFF_SLOW 8.6f // BBC standard
|
||||
#define METER_FALLOFF_MEDIUM 20.0f
|
||||
#define METER_FALLOFF_FAST 32.0f
|
||||
#define METER_FALLOFF_FASTER 46.0f
|
||||
#define METER_FALLOFF_FASTEST 70.0f
|
||||
|
||||
float
|
||||
meter_falloff_to_float (MeterFalloff falloff)
|
||||
{
|
||||
switch (falloff) {
|
||||
case MeterFalloffOff:
|
||||
return 0.0f;
|
||||
return METER_FALLOFF_OFF;
|
||||
case MeterFalloffSlowest:
|
||||
return 1.0f;
|
||||
return METER_FALLOFF_SLOWEST;
|
||||
case MeterFalloffSlow:
|
||||
return 2.0f;
|
||||
return METER_FALLOFF_SLOW;
|
||||
case MeterFalloffMedium:
|
||||
return 3.0f;
|
||||
return METER_FALLOFF_MEDIUM;
|
||||
case MeterFalloffFast:
|
||||
return 4.0f;
|
||||
return METER_FALLOFF_FAST;
|
||||
case MeterFalloffFaster:
|
||||
return 5.0f;
|
||||
return METER_FALLOFF_FASTER;
|
||||
case MeterFalloffFastest:
|
||||
return METER_FALLOFF_FASTEST;
|
||||
default:
|
||||
return 6.0f;
|
||||
return METER_FALLOFF_FAST;
|
||||
}
|
||||
}
|
||||
|
||||
MeterFalloff
|
||||
meter_falloff_from_float (float val)
|
||||
{
|
||||
if (val == METER_FALLOFF_OFF) {
|
||||
return MeterFalloffOff;
|
||||
}
|
||||
else if (val <= METER_FALLOFF_SLOWEST) {
|
||||
return MeterFalloffSlowest;
|
||||
}
|
||||
else if (val <= METER_FALLOFF_SLOW) {
|
||||
return MeterFalloffSlow;
|
||||
}
|
||||
else if (val <= METER_FALLOFF_MEDIUM) {
|
||||
return MeterFalloffMedium;
|
||||
}
|
||||
else if (val <= METER_FALLOFF_FAST) {
|
||||
return MeterFalloffFast;
|
||||
}
|
||||
else if (val <= METER_FALLOFF_FASTER) {
|
||||
return MeterFalloffFaster;
|
||||
}
|
||||
else {
|
||||
return MeterFalloffFastest;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user