Audio levels and VU-meters

Prev

Next

 




Audio levels and VU-meters

Description

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);

4. 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))



See Also
TVUMeter TVUMeterSetting AudioBalance AudioChannelRenderMode AudioVolume MuteAudioRendering SpeakerBalance SpeakerControl SpeakerVolume VUMeter 
Copyright (c) Datastead