diff options
-rw-r--r-- | gtk2_ardour/level_meter.cc | 38 | ||||
-rw-r--r-- | gtk2_ardour/rc_option_editor.cc | 26 | ||||
-rw-r--r-- | libs/ardour/ardour/rc_configuration_vars.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/types.h | 8 | ||||
-rw-r--r-- | libs/ardour/enums.cc | 20 |
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; |