}
}
+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 ()
{
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)));
}
}
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]"),
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)
MeteringRoute ///< meter what is going through the route
};
+ enum VUMeterStandard {
+ MeteringVUfrench, // + 2
+ MeteringVUamerican, // +-0
+ MeteringVUstandard // -4
+ };
+
enum MeterLineUp {
MeteringLineUp24,
MeteringLineUp20,
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);
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);
ColorMode _ColorMode;
MeterFalloff _MeterFalloff;
MeterHold _MeterHold;
+ VUMeterStandard _VUMeterStandard;
MeterLineUp _MeterLineUp;
EditMode _EditMode;
RegionPoint _RegionPoint;
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);
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;