implement meter-lineup and VU standard preferences

This commit is contained in:
Robin Gareus 2013-07-23 21:20:51 +02:00 committed by Paul Davis
parent 1e7beb5a31
commit 2faf401fea
5 changed files with 82 additions and 11 deletions

View File

@ -85,6 +85,34 @@ LevelMeter::set_meter (PeakMeter* meter)
}
}
static float meter_lineup(float offset) {
switch (Config->get_meter_line_up_level()) {
case MeteringLineUp24:
return offset + 6.0;
case MeteringLineUp20:
return offset + 2.0;
case MeteringLineUp18:
return offset;
case MeteringLineUp15:
return offset - 3.0;
default:
break;
}
return offset;
}
static float vu_standard() {
// note - default meter config is +2dB (france)
switch (Config->get_meter_vu_standard()) {
case MeteringVUfrench: // +2dB
return 0;
case MeteringVUamerican: // 0dB
return -2;
case MeteringVUstandard: // -4dB
return -6;
}
}
float
LevelMeter::update_meters ()
{
@ -115,18 +143,18 @@ LevelMeter::update_meters ()
if (meter_type == MeterPeak) {
(*i).meter->set (log_meter (peak));
} else if (meter_type == MeterIEC1NOR) {
(*i).meter->set (meter_deflect_nordic (peak));
(*i).meter->set (meter_deflect_nordic (peak + meter_lineup(0)));
} else if (meter_type == MeterIEC1DIN) {
(*i).meter->set (meter_deflect_din (peak));
(*i).meter->set (meter_deflect_din (peak + meter_lineup(3.0)));
} else if (meter_type == MeterIEC2BBC || meter_type == MeterIEC2EBU) {
(*i).meter->set (meter_deflect_ppm (peak));
(*i).meter->set (meter_deflect_ppm (peak + meter_lineup(0)));
} else if (meter_type == MeterVU) {
(*i).meter->set (meter_deflect_vu (peak));
(*i).meter->set (meter_deflect_vu (peak + vu_standard() + meter_lineup(0)));
} else if (meter_type == MeterK14) {
(*i).meter->set (meter_deflect_k (peak, 14), meter_deflect_k(_meter->meter_level(n, MeterPeak), 14));
} else if (meter_type == MeterK20) {
(*i).meter->set (meter_deflect_k (peak, 20), meter_deflect_k(_meter->meter_level(n, MeterPeak), 20));
} else {
} else { // RMS
(*i).meter->set (log_meter (peak), log_meter(_meter->meter_level(n, MeterPeak)));
}
}

View File

@ -1920,20 +1920,34 @@ RCOptionEditor::RCOptionEditor ()
ComboOption<MeterLineUp>* mlu = new ComboOption<MeterLineUp> (
"meter-line-up-level",
_("Meter line-up level"),
_("Meter line-up level; 0dBu"),
sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_line_up_level),
sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_line_up_level)
);
mlu->add (MeteringLineUp24, _("-24dB"));
mlu->add (MeteringLineUp20, _("-20dB (SMPTE)"));
mlu->add (MeteringLineUp18, _("-18dB (EBU)"));
mlu->add (MeteringLineUp15, _("-15dB"));
mlu->add (MeteringLineUp24, _("-24dBFS"));
mlu->add (MeteringLineUp20, _("-20dBFS (SMPTE)"));
mlu->add (MeteringLineUp18, _("-18dBFS (EBU, BBC)"));
mlu->add (MeteringLineUp15, _("-15dBFS (DIN)"));
Gtkmm2ext::UI::instance()->set_tip (mlu->tip_widget(), _("Configure meter-ticks and color-knee point."));
Gtkmm2ext::UI::instance()->set_tip (mlu->tip_widget(), _("Configure meter-ticks and color-knee point for dBFS scale DPM, set reference/offset level for IEC PPM."));
add_option (S_("Preferences|GUI"), mlu);
ComboOption<VUMeterStandard>* mvu = new ComboOption<VUMeterStandard> (
"meter-vu-standard",
_("VU Meter standard"),
sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_vu_standard),
sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_vu_standard)
);
mvu->add (MeteringVUfrench, _("+2dB (France)"));
mvu->add (MeteringVUamerican, _(" 0dB (North America, Australia)"));
mvu->add (MeteringVUstandard, _("-4dB (standard)"));
add_option (S_("Preferences|GUI"), mvu);
Gtk::Adjustment *mpk = manage (new Gtk::Adjustment(0, -10, 0, .1, .1));
HSliderOption *mpks = new HSliderOption("meter-peak",
_("Peak threshold [dBFS]"),

View File

@ -149,6 +149,7 @@ CONFIG_VARIABLE (bool, super_rapid_clock_update, "super-rapid-clock-update", fal
CONFIG_VARIABLE (float, meter_hold, "meter-hold", 100.0f)
CONFIG_VARIABLE (float, meter_falloff, "meter-falloff", 32.0f)
CONFIG_VARIABLE (VUMeterStandard, meter_vu_standard, "meter-vu-standard", MeteringVUfrench)
CONFIG_VARIABLE (MeterLineUp, meter_line_up_level, "meter-line-up-level", MeteringLineUp18)
CONFIG_VARIABLE (float, meter_peak, "meter-peak", 0.0f)

View File

@ -383,6 +383,12 @@ namespace ARDOUR {
MeteringRoute ///< meter what is going through the route
};
enum VUMeterStandard {
MeteringVUfrench, // + 2
MeteringVUamerican, // +-0
MeteringVUstandard // -4
};
enum MeterLineUp {
MeteringLineUp24,
MeteringLineUp20,
@ -590,6 +596,7 @@ std::istream& operator>>(std::istream& o, ARDOUR::HeaderFormat& sf);
std::istream& operator>>(std::istream& o, ARDOUR::AutoConnectOption& sf);
std::istream& operator>>(std::istream& o, ARDOUR::EditMode& sf);
std::istream& operator>>(std::istream& o, ARDOUR::MonitorModel& sf);
std::istream& operator>>(std::istream& o, ARDOUR::VUMeterStandard& sf);
std::istream& operator>>(std::istream& o, ARDOUR::MeterLineUp& sf);
std::istream& operator>>(std::istream& o, ARDOUR::PFLPosition& sf);
std::istream& operator>>(std::istream& o, ARDOUR::AFLPosition& sf);
@ -612,6 +619,7 @@ std::ostream& operator<<(std::ostream& o, const ARDOUR::HeaderFormat& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::AutoConnectOption& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::EditMode& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::MonitorModel& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::VUMeterStandard& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::MeterLineUp& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::PFLPosition& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::AFLPosition& sf);

View File

@ -62,6 +62,7 @@ setup_enum_writer ()
ColorMode _ColorMode;
MeterFalloff _MeterFalloff;
MeterHold _MeterHold;
VUMeterStandard _VUMeterStandard;
MeterLineUp _MeterLineUp;
EditMode _EditMode;
RegionPoint _RegionPoint;
@ -222,6 +223,11 @@ setup_enum_writer ()
REGISTER_ENUM (MeterHoldLong);
REGISTER (_MeterHold);
REGISTER_ENUM (MeteringVUfrench);
REGISTER_ENUM (MeteringVUamerican);
REGISTER_ENUM (MeteringVUstandard);
REGISTER (_VUMeterStandard);
REGISTER_ENUM (MeteringLineUp24);
REGISTER_ENUM (MeteringLineUp20);
REGISTER_ENUM (MeteringLineUp18);
@ -675,6 +681,20 @@ std::ostream& operator<<(std::ostream& o, const MonitorModel& var)
return o << s;
}
std::istream& operator>>(std::istream& o, VUMeterStandard& var)
{
std::string s;
o >> s;
var = (VUMeterStandard) string_2_enum (s, var);
return o;
}
std::ostream& operator<<(std::ostream& o, const VUMeterStandard& var)
{
std::string s = enum_2_string (var);
return o << s;
}
std::istream& operator>>(std::istream& o, MeterLineUp& var)
{
std::string s;