A VU meter using rectangular LED

Simulation of a VU meter using LED

A stereo meter for Broadcast

The VU meter is a component combining two LedBar with additional labelling and a dual scale display function. Just p[lace the component on the form, fill in a few values and Bob's you uncle. There is a value method for each channel that generates aled display by comparision to the given reference. Common references are -4, 0, +4 and 12dBu for an equivalent full MPX deviation.

What is not given is the pre-software for providing the measurement levels to the VU meter. Suppose the channels are sampled at 44K, placing a display update at this rate serves no usefull purpose since the eye cannot register at that rate. So using a sliding window, the peak value in the window is given at this rate. The attach / release algorithm then conditions the sample to provide a "nice" display.

    [Description("VUMeter")]
    [Designer(typeof(VUMeterDesigner))]
    public partial class VUMeter : UserControl
        {
            private Decimal left_peak_value = 0.0M;
            private Decimal right_peak_value = 0.0M;
            private Decimal left_rms_value = 0.0M;
            private Decimal right_rms_value = 0.0M;
            private Decimal reference = 4.0M;
            private Decimal peak_voltage_reference = 0;
            private Decimal rms_voltage_reference = 0;
            private Decimal left_dBu = 0.0M;
            private Decimal right_dBu = 0.0M;
            private Decimal attack_time = 25M;
            private Decimal release_time = 1.5M;
            private Decimal current_dBu = 0.0M;
            private Decimal sample_time = 5.0M;

            private const Int32 base_vu_meter_width = 304;
            private const Int32 base_vu_meter_height = 152;
            private Size vu_meter_size = new Size(base_vu_meter_width, base_vu_meter_height);
            private Int32 vu_meter_width = base_vu_meter_width;
            private Int32 vu_meter_height = base_vu_meter_height;
            private const Int32 base_vu_meter_right_bar_location_X = 6;
            private const Int32 base_vu_meter_right_bar_location_Y = 84;
            private Point base_vu_meter_right_bar_location = new Point(base_vu_meter_right_bar_location_X, base_vu_meter_right_bar_location_Y);
            private Point vu_meter_right_bar_location = new Point(base_vu_meter_right_bar_location_X, base_vu_meter_right_bar_location_Y);
            private const Int32 base_left_label_location_X = 16;
            private const Int32 base_left_label_location_Y = 58;
            private const Int32 base_right_label_location_X = 16;
            private const Int32 base_right_label_location_Y = 124;
            private const Int32 base_label_increment = 24;
            private Int32 label_X_increase = 0;
            private Int32 label_X_displace = 0;
            private Int32 left_label_Y_change = 0;
            private Int32 right_label_Y_change = 0;
            private const Int32 base_led_bar_width = 288;
            private const Int32 base_led_bar_height = 39;
            private const Int32 vu_meter_margin = 2;

            public VUMeter()
            {
                InitializeComponent();
                vu_meter_size = this.Size;
                LocateLabels();
            }

            private void LocateLabels()
            {
                //  Locate the labels based upon the VuMeter dimensions and location, size of the LEDBar
                LeftLabel60.Location = new Point((base_left_label_location_X + label_X_displace), (base_left_label_location_Y + left_label_Y_change));
                LeftLabel50.Location = new Point((base_left_label_location_X + label_X_displace + label_X_increase + base_label_increment), (base_left_label_location_Y + left_label_Y_change));
                LeftLabel40.Location = new Point((base_left_label_location_X + label_X_displace + (2 * (label_X_increase + base_label_increment))), (base_left_label_location_Y + left_label_Y_change));
                LeftLabel30.Location = new Point((base_left_label_location_X + label_X_displace + (3 * (label_X_increase + base_label_increment))), (base_left_label_location_Y + left_label_Y_change));
                LeftLabel20.Location = new Point((base_left_label_location_X + label_X_displace + (4 * (label_X_increase + base_label_increment))), (base_left_label_location_Y + left_label_Y_change));
                LeftLabel10.Location = new Point((base_left_label_location_X + label_X_displace + (5 * (label_X_increase + base_label_increment))), (base_left_label_location_Y + left_label_Y_change));
                LeftLabel6.Location = new Point((base_left_label_location_X + label_X_displace + (6 * (label_X_increase + base_label_increment))), (base_left_label_location_Y + left_label_Y_change));
                LeftLabel1.Location = new Point((base_left_label_location_X + label_X_displace + (7 * (label_X_increase + base_label_increment))), (base_left_label_location_Y + left_label_Y_change));
                LeftLabel0.Location = new Point((base_left_label_location_X + label_X_displace + (8 * (label_X_increase + base_label_increment))), (base_left_label_location_Y + left_label_Y_change));
                LeftLabelP1.Location = new Point((base_left_label_location_X + label_X_displace + (9 * (label_X_increase + base_label_increment))), (base_left_label_location_Y + left_label_Y_change));
                LeftLabelP4.Location = new Point((base_left_label_location_X + label_X_displace + (10 * (label_X_increase + base_label_increment))), (base_left_label_location_Y + left_label_Y_change));
                RightLabel60.Location = new Point((base_right_label_location_X + label_X_displace), (base_right_label_location_Y + right_label_Y_change));
                RightLabel50.Location = new Point((base_right_label_location_X + label_X_displace + label_X_increase + base_label_increment), (base_right_label_location_Y + right_label_Y_change));
                RightLabel40.Location = new Point((base_right_label_location_X + label_X_displace + (2 * (label_X_increase + base_label_increment))), (base_right_label_location_Y + right_label_Y_change));
                RightLabel30.Location = new Point((base_right_label_location_X + label_X_displace + (3 * (label_X_increase + base_label_increment))), (base_right_label_location_Y + right_label_Y_change));
                RightLabel20.Location = new Point((base_right_label_location_X + label_X_displace + (4 * (label_X_increase + base_label_increment))), (base_right_label_location_Y + right_label_Y_change));
                RightLabel10.Location = new Point((base_right_label_location_X + label_X_displace + (5 * (label_X_increase + base_label_increment))), (base_right_label_location_Y + right_label_Y_change));
                RightLabel6.Location = new Point((base_right_label_location_X + label_X_displace + (6 * (label_X_increase + base_label_increment))), (base_right_label_location_Y + right_label_Y_change));
                RightLabel1.Location = new Point((base_right_label_location_X + label_X_displace + (7 * (label_X_increase + base_label_increment))), (base_right_label_location_Y + right_label_Y_change));
                RightLabel0.Location = new Point((base_right_label_location_X + label_X_displace + (8 * (label_X_increase + base_label_increment))), (base_right_label_location_Y + right_label_Y_change));
                RightLabelP1.Location = new Point((base_right_label_location_X + label_X_displace + (9 * (label_X_increase + base_label_increment))), (base_right_label_location_Y + right_label_Y_change));
                RightLabelP4.Location = new Point((base_right_label_location_X + label_X_displace + (10 * (label_X_increase + base_label_increment))), (base_right_label_location_Y + right_label_Y_change));
            }

            [Description("VUMeter title")]
            [Category("Appearance")]
            public String VUMeterTitle { get { return VUGroup.Text; } set { VUGroup.Text = value; } }

            [Description("VUMeter body colour")]
            [Category("Appearance")]
            public Color VUMeterColour
            {
                get { return VUGroup.BackColor; }
                set
                {
                    VUGroup.BackColor = value;
                    this.BackColor = value;
                }
            }

            [Description("VUMeter attach time 5 to 100mS")]
            [Category("Type")]
            public Decimal AttackTime
            {
                get { return (Decimal)Math.Round(attack_time, 0); }
                set
                {
                    //  The attack time must be >= sample times
                    if (value < 5.0M) attack_time = 5.0M;
                    else if (value > 100.0M) attack_time = 100.0M;
                    else attack_time = value;
                    if (attack_time < sample_time) attack_time = sample_time;
                    if (release_time < attack_time) release_time = attack_time;
                }
            }

            [Description("VUMeter release time 0.5 to 5sec")]
            [Category("Type")]
            public Decimal ReleaseTime
            {
                get { return (Decimal)Math.Round(release_time, 1); }
                set
                {
                    //  release_time must be >= attack_time
                    if (value < 0.5M) release_time = 0.5M;
                    else if (value > 5.0M) release_time = 5.0M;
                    else release_time = value;
                    if (release_time < attack_time) release_time = attack_time;
                }
            }

            [Description("VUMeter sample time 1mSec to 1Sec")]
            [Category("Type")]
            public Decimal SampleTime
            {
                get { return (Decimal)Math.Round(sample_time, 0); }
                set
                {
                    //  sample_time cannot be > attack_time
                    if (value < 1.0M) sample_time = 1.0M;
                    else if (value > 1000.0M) sample_time = 1.0e3M;
                    else sample_time = value;
                    if (sample_time > attack_time) sample_time = attack_time;
                }
            }

            [Description("VUMeter left bar colour")]
            [Category("Type")]
            public Color LeftBarColour { get { return LeftBar.BackColour; } set { LeftBar.BackColour = value; } }

            [Description("VUMeter right bar colour")]
            [Category("Type")]
            public Color RightBarColour { get { return RightBar.BackColour; } set { RightBar.BackColour = value; } }

            [Description("VUMeter left peak")]
            [Category("Type")]
            public Decimal LeftPeakValue
            {
                get { return (Decimal)Math.Round(left_peak_value, 4); }
                set
                {
                    left_peak_value = value;
                    //  Convert to dBu as per reference
                    PeakVoltageTodBu(left_peak_value, ref left_dBu);
                    left_rms_value = left_peak_value / 1.41421M;
                    LeftDisplay();
                }
            }

            [Description("VUMeter Right Peak")]
            [Category("Type")]
            public Decimal RightPeakValue
            {
                get { return (Decimal)Math.Round(right_peak_value, 4); }
                set
                {
                    right_peak_value = value;
                    //  Convert to dBu as per reference
                    PeakVoltageTodBu(right_peak_value, ref right_dBu);
                    right_rms_value = right_peak_value / 1.41421M;
                    RightDisplay();
                }
            }

            [Description("VUMeter Left Rms")]
            [Category("Type")]
            public Decimal LeftRmsValue
            {
                get { return (Decimal)Math.Round(left_rms_value, 4); }
                set
                {
                    left_rms_value = value;
                    left_peak_value = left_rms_value * 1.41421M;
                    //  Convert to dBu as per reference
                    PeakVoltageTodBu(left_peak_value, ref left_dBu);
                    LeftDisplay();
                }
            }

            [Description("VUMeter Right Rms")]
            [Category("Type")]
            public Decimal RightRmsValue
            {
                get { return (Decimal)Math.Round(right_rms_value, 4); }
                set
                {
                    right_rms_value = value;
                    right_peak_value = right_rms_value * 1.41421M;
                    //  Convert to dBu as per reference
                    PeakVoltageTodBu(right_peak_value, ref right_dBu);
                    RightDisplay();
                }
            }

            [Description("VUMeter Left dBu")]
            [Category("Type")]
            public Decimal LeftdBuValue
            {
                get { return (Decimal)Math.Round(left_dBu, 2); }
                set
                {
                    left_dBu = value;
                    dBuToVoltage(left_dBu, ref left_rms_value, ref left_peak_value);
                    LeftDisplay();
                }
            }

            [Description("VUMeter Right dBu")]
            [Category("Type")]
            public Decimal RightdBuValue
            {
                get { return (Decimal)Math.Round(right_dBu, 2); }
                set
                {
                    right_dBu = value;
                    dBuToVoltage(right_dBu, ref right_rms_value, ref right_peak_value);
                    RightDisplay();
                }
            }

            [Description("VUMeter Left Pk-Pk")]
            [Category("Type")]
            public Decimal LeftPkPkValue
            {
                get { return (Decimal)Math.Round((left_peak_value * 2.0M), 4); }
                set
                {
                    left_peak_value = value * 0.5M;
                    left_rms_value = left_peak_value / 1.41421M;
                    PeakVoltageTodBu(left_peak_value, ref left_dBu);
                    LeftDisplay();

                }
            }

            [Description("VUMeter Right Pk-Pk")]
            [Category("Type")]
            public Decimal RightPkPkValue
            {
                get { return (Decimal)Math.Round((right_peak_value * 2.0M), 4); }
                set
                {
                    right_peak_value = value * 0.5M;
                    right_rms_value = right_peak_value / 1.41421M;
                    PeakVoltageTodBu(right_peak_value, ref right_dBu);
                    RightDisplay();
                }
            }

            [Description("VuMeter Size")]
            [Category("Layout")]
            public Size VuMeterSize
            {
                get { return vu_meter_size; }
                set
                {
                    //  Stretch in co-ordination with the LED Bar
                    if (value.Width < base_vu_meter_width) value.Width = base_vu_meter_width;
                    if (value.Height < base_vu_meter_height) value.Height = base_vu_meter_height;
                    vu_meter_size = value;
                    VUGroup.Size = vu_meter_size;
                    this.Size = new Size((vu_meter_size.Width + vu_meter_margin), (vu_meter_size.Height + vu_meter_margin));
                    vu_meter_width = vu_meter_size.Width;
                    vu_meter_height = vu_meter_size.Height;
                    //  The LED bar width increases as per the VuMeter width
                    Int32 vu_meter_width_increase = vu_meter_width - base_vu_meter_width;
                    //  The height increase is distributed between the two LED bar and RightBar location moved down by the LeftBar change
                    Int32 vu_meter_height_increase = vu_meter_height - base_vu_meter_height;
                    Int32 ledbar_height_increase = vu_meter_height_increase / 2;
                    //  Re-sizing the LedBar
                    LeftBar.BarSize = new Size((base_led_bar_width + vu_meter_width_increase), (base_led_bar_height + ledbar_height_increase));
                    RightBar.BarSize = new Size((base_led_bar_width + vu_meter_width_increase), (base_led_bar_height + ledbar_height_increase));
                    //  Re-locating the right led bar
                    vu_meter_right_bar_location = new Point(base_vu_meter_right_bar_location.X, (base_vu_meter_right_bar_location.Y + ledbar_height_increase));
                    RightBar.Location = vu_meter_right_bar_location;
                    //  Now the label locations need changing
                    left_label_Y_change = ledbar_height_increase;
                    right_label_Y_change = vu_meter_height_increase;
                    Int32 group_width_increase = LeftBar.BarSize.Width - base_led_bar_width;
                    label_X_increase = group_width_increase / 11;
                    Int32 led_width_fraction = group_width_increase - (11 * label_X_increase);
                    label_X_displace = led_width_fraction / 2;
                    LocateLabels();
                }
            }
            [Description("0 reference dBu")]
            [Category("Type")]
            public Decimal Reference
            {
                get { return (Decimal)Math.Round(reference, 2); }
                set
                {
                    reference = value;
                    dBuToVoltage(reference, ref rms_voltage_reference, ref peak_voltage_reference);
                    LeftDisplay();
                    RightDisplay();
                }
            }

            private void dBuToVoltage(Decimal dBu, ref Decimal Vrms, ref Decimal Vpeak)
            {
                try
                {
                    Vrms = 0.7746M * (Decimal)Math.Pow(10, (Double)(dBu / 20.0M));
                    Vpeak = Vrms * 1.41421M;
                }
                catch
                {
                    Vrms = 0;
                    Vpeak = 0;
                }
            }

            private void PeakVoltageTodBu(Decimal Vpeak, ref Decimal dBu)
            {
                try
                {
                    Decimal rms_voltage = Vpeak / 1.41421M;
                    RmsVoltageTodBu(rms_voltage, ref dBu);
                }
                catch { dBu = 0.0M; }
            }

            private void RmsVoltageTodBu(Decimal Vrms, ref Decimal dBu)
            {
                try
                {
                    dBu = 20.0M * (Decimal)Math.Log10((Double)(Vrms / 0.77459M));
                }
                catch { dBu = 0.0M; }
            }

            private void LeftDisplay()
            {
                //  The dBu is known and the reference dBu so we calculate the dB variance of the dBu
                Decimal dB_variance = left_dBu - reference;
                attack_release_reference(ref dB_variance);
                //  Convert the db_variance to a bar nmumber
                Int32 bar_number = ConvertdBtoBarNumber(dB_variance);
                String sC = ";
                LeftBar.Level_Text(ref sC, (Math.Round(left_dBu, 1).ToString()) + "dBu", true);
                LeftBar.Value = (UInt32)bar_number;
            }

            private void RightDisplay()
            {
                //  The dBu is known and the reference dBu so we calculate the dB variance of the dBu
                Decimal dB_variance = right_dBu - reference;
                attack_release_reference(ref dB_variance);
                //  Convert the db_variance to a bar nmumber
                Int32 bar_number = ConvertdBtoBarNumber(dB_variance);
                String sC = ";
                RightBar.Level_Text(ref sC, (Math.Round(right_dBu, 1).ToString()) + "dBu", true);
                RightBar.Value = (UInt32)bar_number;
            }

            private void attack_release_reference(ref Decimal dBs)
            {
                //  Take the entry value and pass through an attack/release filter, then retun the filtered value.
                //  Using my incremental algorithm.
                if (dBs > current_dBu)
                {
                    //  Into attack
                }
                else
                {
                    //  Into release
                }
            }

            private Int32 ConvertdBtoBarNumber(Decimal variance)
            {
                Int32 bar_number = 0;
                if (variance < -65.0M) bar_number = 0;
                else if ((variance >= -65.0M) && (variance < -55.0M)) bar_number = 1;
                else if ((variance >= -55.0M) && (variance < -45.0M)) bar_number = 2;
                else if ((variance >= -45.0M) && (variance < -35.0M)) bar_number = 3;
                else if ((variance >= -35.0M) && (variance < -25.0M)) bar_number = 4;
                else if ((variance >= -25.0M) && (variance < -15.0M)) bar_number = 5;
                else if ((variance >= -15.0M) && (variance < -8.0M)) bar_number = 6;
                else if ((variance >= -8.0M) && (variance < -3.5M)) bar_number = 7;
                else if ((variance >= -3.5M) && (variance < -0.5M)) bar_number = 8;
                else if ((variance >= -0.5M) && (variance < +0.5M)) bar_number = 9;
                else if ((variance >= +0.5M) && (variance < +2.5M)) bar_number = 10;
                else if ((variance >= +2.5M) && (variance < +4.0M)) bar_number = 11;
                else bar_number = 12;
                return bar_number;
            }

The attack / release function is left un filled (well skeleton), this is for the user to fill in. Just take the incoming level for each channel pass through your favourite attack / release algorithm, then use the new values to just generate the display level. Easy Peasy! There are many algorithms on the net, psuedo peak, rms, true peak, BBC, moving iron VU etc...etc...

The designer can be copied or the equivalent generated by hand by changing the properties of the designer form. The properties must coincide with that required by the .cs code. Note: only InitializeComponent() and declarations are here, the rest of the designer does not change!

            this.VUGroup = new System.Windows.Forms.GroupBox();
            this.RightLabelP4 = new System.Windows.Forms.Label();
            this.RightLabelP1 = new System.Windows.Forms.Label();
            this.RightLabel0 = new System.Windows.Forms.Label();
            this.RightLabel1 = new System.Windows.Forms.Label();
            this.RightLabel6 = new System.Windows.Forms.Label();
            this.RightLabel10 = new System.Windows.Forms.Label();
            this.RightLabel20 = new System.Windows.Forms.Label();
            this.RightLabel30 = new System.Windows.Forms.Label();
            this.RightLabel40 = new System.Windows.Forms.Label();
            this.RightLabel50 = new System.Windows.Forms.Label();
            this.RightLabel60 = new System.Windows.Forms.Label();
            this.LeftLabelP4 = new System.Windows.Forms.Label();
            this.LeftLabelP1 = new System.Windows.Forms.Label();
            this.LeftLabel0 = new System.Windows.Forms.Label();
            this.LeftLabel1 = new System.Windows.Forms.Label();
            this.LeftLabel6 = new System.Windows.Forms.Label();
            this.LeftLabel10 = new System.Windows.Forms.Label();
            this.LeftLabel20 = new System.Windows.Forms.Label();
            this.LeftLabel30 = new System.Windows.Forms.Label();
            this.LeftLabel40 = new System.Windows.Forms.Label();
            this.LeftLabel50 = new System.Windows.Forms.Label();
            this.LeftLabel60 = new System.Windows.Forms.Label();
            this.RightBar = new ComponentLibrary.LedBar();
            this.LeftBar = new ComponentLibrary.LedBar();
            this.VUGroup.SuspendLayout();
            this.SuspendLayout();
            // 
            // VUGroup
            // 
            this.VUGroup.BackColor = System.Drawing.Color.LightCyan;
            this.VUGroup.Controls.Add(this.RightLabelP4);
            this.VUGroup.Controls.Add(this.RightLabelP1);
            this.VUGroup.Controls.Add(this.RightLabel0);
            this.VUGroup.Controls.Add(this.RightLabel1);
            this.VUGroup.Controls.Add(this.RightLabel6);
            this.VUGroup.Controls.Add(this.RightLabel10);
            this.VUGroup.Controls.Add(this.RightLabel20);
            this.VUGroup.Controls.Add(this.RightLabel30);
            this.VUGroup.Controls.Add(this.RightLabel40);
            this.VUGroup.Controls.Add(this.RightLabel50);
            this.VUGroup.Controls.Add(this.RightLabel60);
            this.VUGroup.Controls.Add(this.LeftLabelP4);
            this.VUGroup.Controls.Add(this.LeftLabelP1);
            this.VUGroup.Controls.Add(this.LeftLabel0);
            this.VUGroup.Controls.Add(this.LeftLabel1);
            this.VUGroup.Controls.Add(this.LeftLabel6);
            this.VUGroup.Controls.Add(this.LeftLabel10);
            this.VUGroup.Controls.Add(this.LeftLabel20);
            this.VUGroup.Controls.Add(this.LeftLabel30);
            this.VUGroup.Controls.Add(this.LeftLabel40);
            this.VUGroup.Controls.Add(this.LeftLabel50);
            this.VUGroup.Controls.Add(this.LeftLabel60);
            this.VUGroup.Controls.Add(this.RightBar);
            this.VUGroup.Controls.Add(this.LeftBar);
            this.VUGroup.Location = new System.Drawing.Point(1, 1);
            this.VUGroup.MinimumSize = new System.Drawing.Size(302, 150);
            this.VUGroup.Name = "VUGroup";
            this.VUGroup.Size = new System.Drawing.Size(302, 150);
                    this.VUGroup.TabIndex = 0;
                    this.VUGroup.TabStop = false;
                    this.VUGroup.Text = "VU Meter";
                    // 
                    // RightLabelP4
                    // 
                    this.RightLabelP4.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.RightLabelP4.Location = new System.Drawing.Point(256, 124);
                    this.RightLabelP4.Name = "RightLabelP4";
                    this.RightLabelP4.Size = new System.Drawing.Size(20, 12);
                    this.RightLabelP4.TabIndex = 3;
                    this.RightLabelP4.Text = "+4";
                    this.RightLabelP4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // RightLabelP1
                    // 
                    this.RightLabelP1.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.RightLabelP1.Location = new System.Drawing.Point(232, 124);
                    this.RightLabelP1.Name = "RightLabelP1";
                    this.RightLabelP1.Size = new System.Drawing.Size(20, 12);
                    this.RightLabelP1.TabIndex = 3;
                    this.RightLabelP1.Text = "+1";
                    this.RightLabelP1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // RightLabel0
                    // 
                    this.RightLabel0.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.RightLabel0.Location = new System.Drawing.Point(208, 124);
                    this.RightLabel0.Name = "RightLabel0";
                    this.RightLabel0.Size = new System.Drawing.Size(20, 12);
                    this.RightLabel0.TabIndex = 3;
                    this.RightLabel0.Text = "0";
                    this.RightLabel0.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // RightLabel1
                    // 
                    this.RightLabel1.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.RightLabel1.Location = new System.Drawing.Point(184, 124);
                    this.RightLabel1.Name = "RightLabel1";
                    this.RightLabel1.Size = new System.Drawing.Size(20, 12);
                    this.RightLabel1.TabIndex = 3;
                    this.RightLabel1.Text = "-1";
                    this.RightLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // RightLabel6
                    // 
                    this.RightLabel6.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.RightLabel6.Location = new System.Drawing.Point(160, 124);
                    this.RightLabel6.Name = "RightLabel6";
                    this.RightLabel6.Size = new System.Drawing.Size(20, 12);
                    this.RightLabel6.TabIndex = 3;
                    this.RightLabel6.Text = "-6";
                    this.RightLabel6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // RightLabel10
                    // 
                    this.RightLabel10.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.RightLabel10.Location = new System.Drawing.Point(136, 124);
                    this.RightLabel10.Name = "RightLabel10";
                    this.RightLabel10.Size = new System.Drawing.Size(20, 12);
                    this.RightLabel10.TabIndex = 3;
                    this.RightLabel10.Text = "-10";
                    this.RightLabel10.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // RightLabel20
                    // 
                    this.RightLabel20.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.RightLabel20.Location = new System.Drawing.Point(112, 124);
                    this.RightLabel20.Name = "RightLabel20";
                    this.RightLabel20.Size = new System.Drawing.Size(20, 12);
                    this.RightLabel20.TabIndex = 3;
                    this.RightLabel20.Text = "-20";
                    this.RightLabel20.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // RightLabel30
                    // 
                    this.RightLabel30.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.RightLabel30.Location = new System.Drawing.Point(88, 124);
                    this.RightLabel30.Name = "RightLabel30v";
                    this.RightLabel30.Size = new System.Drawing.Size(20, 12);
                    this.RightLabel30.TabIndex = 3;
                    this.RightLabel30.Text = "-30";
                    this.RightLabel30.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // RightLabel40
                    // 
                    this.RightLabel40.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.RightLabel40.Location = new System.Drawing.Point(64, 124);
                    this.RightLabel40.Name = "RightLabel40";
                    this.RightLabel40.Size = new System.Drawing.Size(20, 12);
                    this.RightLabel40.TabIndex = 3;
                    this.RightLabel40.Text = "-40";
                    this.RightLabel40.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // RightLabel50
                    // 
                    this.RightLabel50.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.RightLabel50.Location = new System.Drawing.Point(40, 124);
                    this.RightLabel50.Name = "RightLabel50";
                    this.RightLabel50.Size = new System.Drawing.Size(20, 12);
                    this.RightLabel50.TabIndex = 3;
                    this.RightLabel50.Text = "-50";
                    this.RightLabel50.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // RightLabel60
                    // 
                    this.RightLabel60.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.RightLabel60.Location = new System.Drawing.Point(16, 124);
                    this.RightLabel60.Name = "RightLabel60";
                    this.RightLabel60.Size = new System.Drawing.Size(20, 12);
                    this.RightLabel60.TabIndex = 15;
                    this.RightLabel60.Text = "-60";
                    this.RightLabel60.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // LeftLabelP4
                    // 
                    this.LeftLabelP4.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.LeftLabelP4.Location = new System.Drawing.Point(256, 58);
                    this.LeftLabelP4.Name = "LeftLabelP4";
                    this.LeftLabelP4.Size = new System.Drawing.Size(20, 12);
                    this.LeftLabelP4.TabIndex = 12;
                    this.LeftLabelP4.Text = "+4";
                    this.LeftLabelP4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // LeftLabelP1
                    // 
                    this.LeftLabelP1.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.LeftLabelP1.Location = new System.Drawing.Point(232, 58);
                    this.LeftLabelP1.Name = "LeftLabelP1";
                    this.LeftLabelP1.Size = new System.Drawing.Size(20, 12);
                    this.LeftLabelP1.TabIndex = 11;
                    this.LeftLabelP1.Text = "+1";
                    this.LeftLabelP1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // LeftLabel0
                    // 
                    this.LeftLabel0.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.LeftLabel0.Location = new System.Drawing.Point(208, 58);
                    this.LeftLabel0.Name = "LeftLabel0";
                    this.LeftLabel0.Size = new System.Drawing.Size(20, 12);
                    this.LeftLabel0.TabIndex = 10;
                    this.LeftLabel0.Text = "0";
                    this.LeftLabel0.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // LeftLabel1
                    // 
                    this.LeftLabel1.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.LeftLabel1.Location = new System.Drawing.Point(184, 58);
                    this.LeftLabel1.Name = "LeftLabel1";
                    this.LeftLabel1.Size = new System.Drawing.Size(20, 12);
                    this.LeftLabel1.TabIndex = 9;
                    this.LeftLabel1.Text = "-1";
                    this.LeftLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // LeftLabel6
                    // 
                    this.LeftLabel6.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.LeftLabel6.Location = new System.Drawing.Point(160, 58);
                    this.LeftLabel6.Name = "LeftLabel6";
                    this.LeftLabel6.Size = new System.Drawing.Size(20, 12);
                    this.LeftLabel6.TabIndex = 8;
                    this.LeftLabel6.Text = "-6";
                    this.LeftLabel6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // LeftLabel10
                    // 
                    this.LeftLabel10.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.LeftLabel10.Location = new System.Drawing.Point(136, 58);
                    this.LeftLabel10.Name = "LeftLabel10";
                    this.LeftLabel10.Size = new System.Drawing.Size(20, 12);
                    this.LeftLabel10.TabIndex = 7;
                    this.LeftLabel10.Text = "-10";
                    this.LeftLabel10.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // LeftLabel20
                    // 
                    this.LeftLabel20.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.LeftLabel20.Location = new System.Drawing.Point(112, 58);
                    this.LeftLabel20.Name = "LeftLabel20";
                    this.LeftLabel20.Size = new System.Drawing.Size(20, 12);
                    this.LeftLabel20.TabIndex = 6;
                    this.LeftLabel20.Text = "-20";
                    this.LeftLabel20.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // LeftLabel30
                    // 
                    this.LeftLabel30.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.LeftLabel30.Location = new System.Drawing.Point(88, 58);
                    this.LeftLabel30.Name = "LeftLabel30";
                    this.LeftLabel30.Size = new System.Drawing.Size(20, 12);
                    this.LeftLabel30.TabIndex = 5;
                    this.LeftLabel30.Text = "-30";
                    this.LeftLabel30.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // LeftLabel40
                    // 
                    this.LeftLabel40.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.LeftLabel40.Location = new System.Drawing.Point(64, 58);
                    this.LeftLabel40.Name = "LeftLabel40";
                    this.LeftLabel40.Size = new System.Drawing.Size(20, 12);
                    this.LeftLabel40.TabIndex = 4;
                    this.LeftLabel40.Text = "-40";
                    this.LeftLabel40.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // LeftLabel50
                    // 
                    this.LeftLabel50.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.LeftLabel50.Location = new System.Drawing.Point(40, 58);
                    this.LeftLabel50.Name = "LeftLabel50";
                    this.LeftLabel50.Size = new System.Drawing.Size(20, 12);
                    this.LeftLabel50.TabIndex = 3;
                    this.LeftLabel50.Text = "-50";
                    this.LeftLabel50.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // LeftLabel60
                    // 
                    this.LeftLabel60.Font = new System.Drawing.Font("Arial Narrow", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.LeftLabel60.Location = new System.Drawing.Point(16, 58);
                    this.LeftLabel60.Name = "LeftLabel60";
                    this.LeftLabel60.Size = new System.Drawing.Size(20, 12);
                    this.LeftLabel60.TabIndex = 2;
                    this.LeftLabel60.Text = "-60";
                    this.LeftLabel60.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                    // 
                    // RightBar
                    // 
                    this.RightBar.BackColour = System.Drawing.Color.Bisque;
                    this.RightBar.BarSize = new System.Drawing.Size(288, 39);
                    this.RightBar.Location = new System.Drawing.Point(6, 84);
                    this.RightBar.Middle = ((uint)(8u));
                    this.RightBar.Name = "LedBar";
                    this.RightBar.Overload = true;
                    this.RightBar.Title = "Right";
                    this.RightBar.Upper = ((uint)(11u));
                    this.RightBar.Value = ((uint)(0u));
                    // 
                    // LeftBar
                    // 
                    this.LeftBar.BackColour = System.Drawing.Color.Bisque;
                    this.LeftBar.BarSize = new System.Drawing.Size(288, 39);
                    this.LeftBar.Location = new System.Drawing.Point(6, 18);
                    this.LeftBar.Middle = ((uint)(8u));
                    this.LeftBar.Name = "LedBar";
                    this.LeftBar.Overload = true;
                    this.LeftBar.Title = "Left";
                    this.LeftBar.Upper = ((uint)(11u));
                    this.LeftBar.Value = ((uint)(0u));
                    // 
                    // VUMeter
                    // 
                    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                    this.Controls.Add(this.VUGroup);
                    this.MinimumSize = new System.Drawing.Size(304, 152);
                    this.Name = "VUMeter";
                    this.Size = new System.Drawing.Size(304, 152);
                    this.VUGroup.ResumeLayout(false);
                    this.ResumeLayout(false);

                }

        private System.Windows.Forms.GroupBox VUGroup;
        private System.Windows.Forms.Label LeftLabel40;
        private System.Windows.Forms.Label LeftLabel50;
        private System.Windows.Forms.Label LeftLabel60;
        private LedBar RightBar;
        private LedBar LeftBar;
        private System.Windows.Forms.Label LeftLabelP4;
        private System.Windows.Forms.Label LeftLabelP1;
        private System.Windows.Forms.Label LeftLabel0;
        private System.Windows.Forms.Label LeftLabel1;
        private System.Windows.Forms.Label LeftLabel6;
        private System.Windows.Forms.Label LeftLabel10;
        private System.Windows.Forms.Label LeftLabel20;
        private System.Windows.Forms.Label LeftLabel30;
        private System.Windows.Forms.Label RightLabel60;
        private System.Windows.Forms.Label RightLabel50;
        private System.Windows.Forms.Label RightLabel40;
        private System.Windows.Forms.Label RightLabel30;
        private System.Windows.Forms.Label RightLabel20;
        private System.Windows.Forms.Label RightLabel10;
        private System.Windows.Forms.Label RightLabel6;
        private System.Windows.Forms.Label RightLabel1;
        private System.Windows.Forms.Label RightLabel0;
        private System.Windows.Forms.Label RightLabelP1;
        private System.Windows.Forms.Label RightLabelP4;
    }
        internal class VUMeterDesigner : System.Windows.Forms.Design.ControlDesigner
        {
            public void VUMeterDesigned()
            { }
            // clean up some unnecessary properties
            protected override void PreFilterProperties(IDictionary Properties)
            {
                Properties.Remove("Size");
                Properties.Remove("MaximumSize");
                    Properties.Remove("MinimumSize");
                    Properties.Remove("BackColor");
                    Properties.Remove("BackgroundImage");
                    Properties.Remove("BackgroundImageLayout");
                    Properties.Remove("ContextMenuStrip");
                    Properties.Remove("AutoScroll");
                    Properties.Remove("AutoScrollMargin");
                    Properties.Remove("AutoScrollMinSize");
                    Properties.Remove("AutoSize");
                    Properties.Remove("AutoSizeMode");
                    Properties.Remove("RightToLeft");
                }
            }
            

A simple internal designer class override is used to remove non-required properties.