add K12/RMS meter type
This commit is contained in:
parent
2065a2a2ac
commit
0acafa4d3d
@ -157,6 +157,8 @@ LevelMeterBase::update_meters ()
|
||||
(*i).meter->set (meter_deflect_ppm (peak + meter_lineup(0)));
|
||||
} else if (meter_type == MeterVU) {
|
||||
(*i).meter->set (meter_deflect_vu (peak + vu_standard() + meter_lineup(0)));
|
||||
} else if (meter_type == MeterK12) {
|
||||
(*i).meter->set (meter_deflect_k (peak, 12), meter_deflect_k(_meter->meter_level(n, MeterPeak), 12));
|
||||
} 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) {
|
||||
@ -320,6 +322,17 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
|
||||
c[6] = c[7] = 0xffff00ff;
|
||||
c[8] = c[9] = 0xff0000ff;
|
||||
break;
|
||||
case MeterK12:
|
||||
stp[0] = 115.0 * meter_deflect_k(-32, 12); //-20
|
||||
stp[1] = 115.0 * meter_deflect_k(-12, 12); // 0
|
||||
stp[2] = 115.0 * meter_deflect_k(-10, 12); // +2
|
||||
stp[3] = 115.0 * meter_deflect_k( -8, 12); // +4
|
||||
c[0] = c[1] = 0x008800ff;
|
||||
c[2] = c[3] = 0x00ff00ff;
|
||||
c[4] = c[5] = 0xffff00ff;
|
||||
c[6] = c[7] = 0xffff00ff;
|
||||
c[8] = c[9] = 0xff0000ff;
|
||||
break;
|
||||
case MeterIEC2BBC:
|
||||
c[0] = c[1] = c[2] = c[3] = c[4] = c[5] = c[6] = c[7] = c[8] = c[9] =
|
||||
ARDOUR_UI::config()->color_by_name ("meter color BBC");
|
||||
|
@ -101,6 +101,9 @@ ArdourMeter::meter_type_string (ARDOUR::MeterType mt)
|
||||
case MeterK14:
|
||||
return _("K14");
|
||||
break;
|
||||
case MeterK12:
|
||||
return _("K12");
|
||||
break;
|
||||
case MeterVU:
|
||||
return _("VU");
|
||||
break;
|
||||
@ -199,6 +202,16 @@ static inline float mtr_col_and_fract(
|
||||
}
|
||||
fraction = meter_deflect_k (val, 14);
|
||||
break;
|
||||
case MeterK12:
|
||||
if (val >= -8.0) {
|
||||
cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); // red
|
||||
} else if (val >= -12.0) {
|
||||
cairo_set_source_rgb (cr, 0.8, 0.8, 0.0); // yellow
|
||||
} else {
|
||||
cairo_set_source_rgb (cr, 0.0, 1.0, 0.0); // green
|
||||
}
|
||||
fraction = meter_deflect_k (val, 12);
|
||||
break;
|
||||
}
|
||||
return fraction;
|
||||
}
|
||||
@ -226,6 +239,7 @@ static void set_bg_color(Gtk::Widget& w, cairo_t* cr, MeterType type) {
|
||||
case MeterIEC1NOR:
|
||||
case MeterIEC2BBC:
|
||||
case MeterIEC2EBU:
|
||||
case MeterK12:
|
||||
case MeterK14:
|
||||
case MeterK20:
|
||||
if (rgba_p_from_style("meterstripPPM", &r, &g, &b, "bg")) {
|
||||
@ -334,6 +348,20 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ
|
||||
case DataType::AUDIO:
|
||||
|
||||
switch (type) {
|
||||
case MeterK12:
|
||||
points.insert (std::pair<float,float>(-52.0f, 1.0));
|
||||
points.insert (std::pair<float,float>(-42.0f, 1.0));
|
||||
points.insert (std::pair<float,float>(-32.0f, 1.0));
|
||||
points.insert (std::pair<float,float>(-22.0f, 1.0));
|
||||
points.insert (std::pair<float,float>(-18.0f, 1.0));
|
||||
points.insert (std::pair<float,float>(-15.0f, 1.0));
|
||||
points.insert (std::pair<float,float>(-12.0f, 1.0));
|
||||
points.insert (std::pair<float,float>( -9.0f, 1.0));
|
||||
points.insert (std::pair<float,float>( -8.0f, 0.8));
|
||||
points.insert (std::pair<float,float>( -6.0f, 1.0));
|
||||
points.insert (std::pair<float,float>( -3.0f, 1.0));
|
||||
points.insert (std::pair<float,float>( 0.0f, 1.0));
|
||||
break;
|
||||
case MeterK14:
|
||||
points.insert (std::pair<float,float>(-54.0f, 1.0));
|
||||
points.insert (std::pair<float,float>(-44.0f, 1.0));
|
||||
@ -645,6 +673,20 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
|
||||
case DataType::AUDIO:
|
||||
layout->set_attributes (audio_font_attributes);
|
||||
switch (type) {
|
||||
case MeterK12:
|
||||
overlay_midi = 0;
|
||||
points.insert (std::pair<float,string>(-52.0f, "-40"));
|
||||
points.insert (std::pair<float,string>(-42.0f, "-30"));
|
||||
points.insert (std::pair<float,string>(-32.0f, "-20"));
|
||||
points.insert (std::pair<float,string>(-22.0f, "-10"));
|
||||
points.insert (std::pair<float,string>(-18.0f, "-6"));
|
||||
points.insert (std::pair<float,string>(-15.0f, "-3"));
|
||||
points.insert (std::pair<float,string>(-12.0f, " 0"));
|
||||
points.insert (std::pair<float,string>( -9.0f, "+3"));
|
||||
points.insert (std::pair<float,string>( -6.0f, "+6"));
|
||||
points.insert (std::pair<float,string>( -3.0f, "+9"));
|
||||
points.insert (std::pair<float,string>( 0.0f, "+12"));
|
||||
break;
|
||||
case MeterK14:
|
||||
overlay_midi = 0;
|
||||
points.insert (std::pair<float,string>(-54.0f, "-40"));
|
||||
@ -903,6 +945,9 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
|
||||
case MeterK14:
|
||||
layout->set_text("K14");
|
||||
break;
|
||||
case MeterK12:
|
||||
layout->set_text("K12");
|
||||
break;
|
||||
default:
|
||||
case MeterPeak:
|
||||
case MeterKrms:
|
||||
|
@ -562,6 +562,7 @@ MeterStrip::update_background(MeterType type)
|
||||
case MeterIEC1NOR:
|
||||
case MeterIEC2BBC:
|
||||
case MeterIEC2EBU:
|
||||
case MeterK12:
|
||||
case MeterK14:
|
||||
case MeterK20:
|
||||
mtr_container.set_name ("meterstripPPM");
|
||||
@ -747,6 +748,7 @@ MeterStrip::popup_level_meter_menu (GdkEventButton* ev)
|
||||
add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC2EBU), MeterIEC2EBU);
|
||||
add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterK20), MeterK20);
|
||||
add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterK14), MeterK14);
|
||||
add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterK12), MeterK12);
|
||||
add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterVU), MeterVU);
|
||||
|
||||
MeterType cmt = _route->meter_type();
|
||||
|
@ -2141,6 +2141,7 @@ MixerStrip::popup_level_meter_menu (GdkEventButton* ev)
|
||||
add_level_meter_item_type (items, tgroup, ArdourMeter::meter_type_string(MeterIEC2EBU), MeterIEC2EBU);
|
||||
add_level_meter_item_type (items, tgroup, ArdourMeter::meter_type_string(MeterK20), MeterK20);
|
||||
add_level_meter_item_type (items, tgroup, ArdourMeter::meter_type_string(MeterK14), MeterK14);
|
||||
add_level_meter_item_type (items, tgroup, ArdourMeter::meter_type_string(MeterK12), MeterK12);
|
||||
add_level_meter_item_type (items, tgroup, ArdourMeter::meter_type_string(MeterVU), MeterVU);
|
||||
|
||||
int _strip_type;
|
||||
|
@ -187,7 +187,8 @@ namespace ARDOUR {
|
||||
MeterIEC1NOR = 0x080,
|
||||
MeterIEC2BBC = 0x100,
|
||||
MeterIEC2EBU = 0x200,
|
||||
MeterVU = 0x400
|
||||
MeterVU = 0x400,
|
||||
MeterK12 = 0x800
|
||||
};
|
||||
|
||||
enum TrackMode {
|
||||
|
@ -179,6 +179,7 @@ setup_enum_writer ()
|
||||
REGISTER_ENUM (MeterKrms);
|
||||
REGISTER_ENUM (MeterK20);
|
||||
REGISTER_ENUM (MeterK14);
|
||||
REGISTER_ENUM (MeterK12);
|
||||
REGISTER_ENUM (MeterIEC1DIN);
|
||||
REGISTER_ENUM (MeterIEC1NOR);
|
||||
REGISTER_ENUM (MeterIEC2BBC);
|
||||
|
@ -108,7 +108,7 @@ PeakMeter::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_fr
|
||||
// Meter audio in to the rest of the peaks
|
||||
for (uint32_t i = 0; i < n_audio; ++i, ++n) {
|
||||
_peak_signal[n] = compute_peak (bufs.get_audio(i).data(), nframes, _peak_signal[n]);
|
||||
if (_meter_type & (MeterKrms | MeterK20 | MeterK14)) {
|
||||
if (_meter_type & (MeterKrms | MeterK20 | MeterK14 | MeterK12)) {
|
||||
_kmeter[i]->process(bufs.get_audio(i).data(), nframes);
|
||||
}
|
||||
if (_meter_type & (MeterIEC1DIN | MeterIEC1NOR)) {
|
||||
@ -288,7 +288,7 @@ PeakMeter::meter ()
|
||||
/* 0.01f ^= 100 Hz update rate */
|
||||
const float midi_meter_falloff = Config->get_meter_falloff() * 0.01f;
|
||||
/* kmeters: 24dB / 2 sec */
|
||||
const float audio_meter_falloff = (_meter_type & (MeterK20 | MeterK14)) ? 0.12f : midi_meter_falloff;
|
||||
const float audio_meter_falloff = (_meter_type & (MeterK20 | MeterK14 | MeterK12)) ? 0.12f : midi_meter_falloff;
|
||||
|
||||
for (size_t n = 0; n < limit; ++n) {
|
||||
|
||||
@ -345,6 +345,7 @@ PeakMeter::meter_level(uint32_t n, MeterType type) {
|
||||
case MeterKrms:
|
||||
case MeterK20:
|
||||
case MeterK14:
|
||||
case MeterK12:
|
||||
{
|
||||
const uint32_t n_midi = current_meters.n_midi();
|
||||
if (CHECKSIZE(_kmeter)) {
|
||||
@ -404,7 +405,7 @@ PeakMeter::set_type(MeterType t)
|
||||
|
||||
_meter_type = t;
|
||||
|
||||
if (t & (MeterKrms | MeterK20 | MeterK14)) {
|
||||
if (t & (MeterKrms | MeterK20 | MeterK14 | MeterK12)) {
|
||||
const size_t n_audio = current_meters.n_audio();
|
||||
for (size_t n = 0; n < n_audio; ++n) {
|
||||
_kmeter[n]->reset();
|
||||
|
Loading…
Reference in New Issue
Block a user