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)
-
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.
-
Set VUMeter = vu_Analog (or vu_Bargraph).
-
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);
- 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))