summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/level_meter.cc38
-rw-r--r--gtk2_ardour/rc_option_editor.cc26
-rw-r--r--libs/ardour/ardour/rc_configuration_vars.h1
-rw-r--r--libs/ardour/ardour/types.h8
-rw-r--r--libs/ardour/enums.cc20
5 files changed, 82 insertions, 11 deletions
diff --git a/gtk2_ardour/level_meter.cc b/gtk2_ardour/level_meter.cc
index fd32add587..d3bb4ad5ab 100644
--- a/gtk2_ardour/level_meter.cc
+++ b/gtk2_ardour/level_meter.cc
@@ -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)));
}
}
diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc
index 3f984eab29..501d76262b 100644
--- a/gtk2_ardour/rc_option_editor.cc
+++ b/gtk2_ardour/rc_option_editor.cc
@@ -1928,20 +1928,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]"),
diff --git a/libs/ardour/ardour/rc_configuration_vars.h b/libs/ardour/ardour/rc_configuration_vars.h
index f87781c8a9..5716fa5105 100644
--- a/libs/ardour/ardour/rc_configuration_vars.h
+++ b/libs/ardour/ardour/rc_configuration_vars.h
@@ -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)
diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h
index 553ee1ea28..11cdb79575 100644
--- a/libs/ardour/ardour/types.h
+++ b/libs/ardour/ardour/types.h
@@ -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);
diff --git a/libs/ardour/enums.cc b/libs/ardour/enums.cc
index 0d225fada3..e60977a3e5 100644
--- a/libs/ardour/enums.cc
+++ b/libs/ardour/enums.cc
@@ -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;