Skip to content

Audio levels and VU-meters

Audio levels The audio levels are returned by the OnAudioPeak event (type TOnAudioPeak ) when the AudioPeakEvent property is enabled.

The event returns the peak values of the left and right channels, in dB.

VU-Meters

VU-Meters are integrated in the component (analog or bargraph) and can be displayed easily.

Several new VU-Meter styles are now available, in addition to the classic analog needle (vu_Analog) and bargraph (vu_Bargraph):

  • vu_AnalogVintage : analog needle with a vintage, non-linear galvanometer scale and an "OVER" clip LED, reproducing the look of a real broadcast VU galvanometer.

  • vu_SegmentLed : segmented LED meter, with optional peak-hold segment.

  • vu_SmoothBar : smooth, gradient-filled bar with a peak-hold marker.

  • vu_MixingTable : mixing-console style meter.

  • vu_Spectrum : real-time spectrum analyzer (multi-band FFT display) instead of a single level.

Several VU-Meters include now a peak indicator, that can be deactivated by invoking VideoGrabber.SetVUMeterSetting (index, vu_PeakHoldMs, 0);

All of these styles share the same ballistics that can be adjusted with vu_AttackMs, vu_ReleaseMs and vu_PeakHoldMs and can be displayed either on a panel/image control or overlayed over the video frames (see below).

To implement VU-Meters, proceed as follows:

Note: the left and right stereo VU-Meters have the respective index VU_LEFT = 0 and VU_RIGHT = 1 (eventually define these constants)

  1. Put 2 panel (or image) controls on the form, one for the left channel and one for the right channel. Let's assume they are named Panel1 and Panel2.

  2. Set VUMeter = vu_Analog (or vu_Bargraph).

  3. Assign the handle of the panel (or image) controls:

Delphi:

VideoGrabber.SetVUMeterSetting (VU_LEFT, vu_Handle, Panel1.Handle);

VideoGrabber.SetVUMeterSetting(VU_RIGHT, vu_Handle, Panel2.Handle);

C#:

VideoGrabber.SetVUMeterSetting(VU_LEFT, TVUMeterSetting.vu_Handle, Panel1.Handle);

VideoGrabber.SetVUMeterSetting(VU_RIGHT, TVUMeterSetting.vu_Handle, Panel2.Handle);

  1. If needed, adjust the other VU-Meter settings (mainly the colors) by invoking SetVUMeterSetting, e.g.:

VideoGrabber.SetVUMeterSetting(VU_LEFT, vu_AttackMs, 50);

VideoGrabber.SetVUMeterSetting(VU_RIGHT, vu_AttackMs, 50);

VideoGrabber.SetVUMeterSetting(VU_LEFT, vu_ReleaseMs, 600);

VideoGrabber.SetVUMeterSetting(VU_RIGHT, vu_ReleaseMs, 600);

VideoGrabber.SetVUMeterSetting(VU_LEFT, vu_PeakHoldMs, 300);

VideoGrabber.SetVUMeterSetting(VU_RIGHT, vu_PeakHoldMs, 300);

Note:

To detach the VU-Meters from their panel (or image) controls, assign a null handle:

VideoGrabber.SetVUMeterSetting(VU_LEFT, vu_Handle, 0);

VideoGrabber.SetVUMeterSetting(VU_RIGHT, vu_Handle, 0);

VU-Meters and bargraphs overlayed over the video frames

Up to 6 VU-Meters / bargraphs are available (from index 0 to 5). For backward compatibility the VUMeter property is kept, but it activates only the VU-Meters 0 and 1.

In addition, the VU-Meters and bargraphs can now display custom values updated in real time; the custom values must be in the 0..100 range.

To activate any of the 6 VU-Meters, instead of setting the VUMeter property, invoke SetVuMeter_Enabled , then enable the video overlay with the vu_OverlayOverVideo setting. For example, to activate a bargraph overlayed over the video:

VideoGrabber.SetVUMeter_Enabled (index, vu_Bargraph);

VideoGrabber.SetVUMeterSetting(index, vu_OverlayOverVideo, 1);

So it is possible to use:

  • the 2 original VU-Meters (index 0 and 1)

  • 2 additional VU-Meters or bargraphs (index 2 and 3) that can display audio or custom values

  • 2 additional VU-Meters or bargraphs (index 4 and 5) that can display custom values ONLY

Note (obsolete meter types):

The dedicated vu_AnalogOverlay and vu_BargraphOverlay meter types are now OBSOLETE. They remain accepted for backward compatibility, but the recommended way is to enable any regular meter type (vu_Analog, vu_Bargraph, vu_AnalogVintage, vu_SegmentLed, vu_SmoothBar, vu_Spectrum, vu_MixingTable) and to turn the overlay on with the vu_OverlayOverVideo setting. This lets ANY meter type be overlayed over the video frames.

Example - activate the bargraphs 2 and 3 overlayed over the video:

Delphi:

// bargraph 2, top-left corner

VideoGrabber.SetVuMeter_Enabled(2, vu_Bargraph);

VideoGrabber.SetVUMeterSetting(2, vu_OverlayOverVideo, 1);

VideoGrabber.SetVUMeterSetting(2, vu_Transparent, 0);

VideoGrabber.SetVUMeterSetting(2, vu_OverlayLeft, 10);

VideoGrabber.SetVUMeterSetting(2, vu_OverlayTop, 10);

VideoGrabber.SetVUMeterSetting(2, vu_OverlayWidth, 100);

VideoGrabber.SetVUMeterSetting(2, vu_OverlayHeight, 60);

// bargraph 3, elsewhere on the frame

VideoGrabber.SetVUMeter_Enabled(3, vu_Bargraph);

VideoGrabber.SetVUMeterSetting(3, vu_OverlayOverVideo, 1);

VideoGrabber.SetVUMeterSetting(3, vu_Transparent, 0);

VideoGrabber.SetVUMeterSetting(3, vu_OverlayLeft, 200);

VideoGrabber.SetVUMeterSetting(3, vu_OverlayTop, 500);

VideoGrabber.SetVUMeterSetting(3, vu_OverlayWidth, 100);

VideoGrabber.SetVUMeterSetting(3, vu_OverlayHeight, 60);

C#:

videoGrabber.SetVUMeter_Enabled(2, TVUMeter.vu_Bargraph);

videoGrabber.SetVUMeterSetting(2, TVUMeterSetting.vu_OverlayOverVideo, 1);

videoGrabber.SetVUMeterSetting(2, TVUMeterSetting.vu_Transparent, 0);

videoGrabber.SetVUMeterSetting(2, TVUMeterSetting.vu_OverlayLeft, 10);

videoGrabber.SetVUMeterSetting(2, TVUMeterSetting.vu_OverlayTop, 10);

videoGrabber.SetVUMeterSetting(2, TVUMeterSetting.vu_OverlayWidth, 100);

videoGrabber.SetVUMeterSetting(2, TVUMeterSetting.vu_OverlayHeight, 60);

Using a bargraph as a custom (real-time) bargraph:

Once a meter is enabled, drive it with vu_CustomPercentValue. The value must be in the 0..100 range and can be updated as often as needed:

VideoGrabber.SetVUMeterSetting(3, vu_CustomPercentValue, 40); // e.g. 40%

Note (colors):

To customize the VU-Meter / bargraph foreground and background colors, pass the color as an RGB hexadecimal value, e.g.:

Delphi:

SetVUMeterSetting(2, VidGrab.TVUMeterSetting.vu_NormalColor, $FFFF00);

C#:

SetVUMeterSetting(2, VidGrab.TVUMeterSetting.vu_NormalColor, 0xFFFF00);

VB:

SetVUMeterSetting(2, VidGrab.TVUMeterSetting.vu_NormalColor, CType(&Hffff00, IntPtr))