implement meter-lineup and VU standard preferences
authorRobin Gareus <robin@gareus.org>
Tue, 23 Jul 2013 19:20:51 +0000 (21:20 +0200)
committerRobin Gareus <robin@gareus.org>
Tue, 23 Jul 2013 19:20:51 +0000 (21:20 +0200)
gtk2_ardour/level_meter.cc
gtk2_ardour/rc_option_editor.cc
libs/ardour/ardour/rc_configuration_vars.h
libs/ardour/ardour/types.h
libs/ardour/enums.cc

index fd32add587eabdca0b34f4fc382c1d62550fcd6d..d3bb4ad5abbd3c037aab102639f50ce0610e60b2 100644 (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)));
                                }
                        }
index 3f984eab2910346e47b057678a219eb085ff7676..501d76262b3adf01e44c3e35c3f1f37777d87304 100644 (file)
@@ -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]"),
index f87781c8a93bb9bda98b76ddaa00b353814b85cd..5716fa5105d314817bf4e965c070017dd6b5ebe7 100644 (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)
 
index 553ee1ea28856b6172f7aa759732e8d709ededb8..11cdb79575038619cb1e435647a6941d5c5e3c44 100644 (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);
index 0d225fada3925fc399e909ffffadcc551bdd3bf8..e60977a3e52fa26a25c1f472bc5d07d0458d081f 100644 (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;