foo_vis_vumeter is modern reimplementation of the analog VU meter component by DRON. It renders using DirectX 12.
- Uses DirectX 12 (Direct3D 12, DXGI 1.6, Direct2D 1.3, DirectWrite 1.3) for rendering.
- Supports VUEditor-generated
.binfiles. Refer to the ".binFile Specification" and "foobar2000.rarSpecification" sections below. - Supports AIMP analog
.zipskins. Refer to the "AIMP Analog.zipSpecification" below. - Supports AIMP LED
.zipskins. Refer to the "AIMP LED.zipSpecification" below. - Includes many fine-tuning options and modes.
- Implements controls through the mouse context menu.
- Incorporates a tuning dialog and a mixer dialog for extra customization.
- Supports the Default User Interface (Default UI) and the Columns User Interface (Columns UI).
- Implements COM Automation through ActiveX/host objects.
- Delivers 32-bit and 64-bit x86 component configurations as well as ARM64EC.
- Tested on foobar2000 v2.25.1 (x86 64-bit) and Microsoft Windows 11 (Build 26100).
- Built for foobar2000 v2.0 and later (2025-03-07) with latest Windows 11 SDK (10.0.26100.0) and MSVC (v143).
- Requires foobar2000 v2.0 or later.
- Requires Windows 10 or later due to DirectX 12.
- Falls back to the WARP software rasterizer if no DirectX 12-compatible adapter found.
- Download foobar2000 and install.
- Download the installation file (
foo_vis_vumeter.fb2k-component) from the component page. - Import
foo_vis_vumeter.fbk2-componentinto foobar2000 using the File > Preferences > Components > Install... menu item. - Download and extract panels or skins into this component's directory of foobar2000. This should be
<foobar2000 profile folder>\vumeter.
The panels or skins files define the visualizations.
The foobar2000 component is not packaged with any panels. It supports various formats, namely foobar2000 .bin files, AIMP analog .zip skins and AIMP LED .zip skins.
Use these references to find community-made skins or create new ones using VUEditor:
- foobar2000 VU Meter Skin Gallery: A collection of skins compiled and curated by tom2tec.
- Custom Skin Thread (in Russian).
- Pointer Pickmeter (foo_vis_vumeter.dll) Thread by DRON with download links to
VUEditor.zip(in Russian). - AIMP Analog Meter (Plugin Skins) Thread (in Russian): Another collection of skins collected and curated by Artem (AIMP main developer).
- AIMP LVU Thread (in Russian): LED skins and editor by xrEngine.
- Some newly developed panels have been posted to the
foo_vis_vumeterthread in the HydrogenAudio Forum.
The component is controlled via the context menu, accessible by right-clicking anywhere on the component window. In addition, fine tuning can be performed by using the mouse wheel.
What the mouse wheel controls is selected through the "Tuning" menu. If the changes result in bad state, use the "Options > Reset" option. The selected tuning mode value can be reset to its default using middle click.
In the context menu there are a few symbols placed next to some options. These are their meaning:
- Circle: an option that is mutually exclusive with its neighbors.
- Square: a selection that is mutually exclusive with its neighbors that is currently tunable by the mouse wheel.
- Eighth Note with Triangle: a selection has been made in a child/nested menu.
- Check Mark: a Boolean option that is enabled when checked and disabled when unchecked.
- Right Caret: there is a nested menu that will open on mouse hover.
- Bold Text: this options is the default action, double clicking the window performs it.
- Grayed Text: this option is invalid at the present time or disabled.
What follows are the different menu categories with a short explanation of each option.
Layout:
- Left + Right (H): displays the left panel and right panel abutted side-by-side.
- Left + Right (V): displays the left panel abutted above the right panel.
- Left: displays only the left panel.
- Right: displays only the right panel.
- Mono: displays only the left panel and the needle shows a mixed-down version of the audio.
- Lock Aspect Ratio: locks the panel or skin to the native dimensions' ratio instead of filling the window.
Mode:
- Stereo: the default and shows discrete left and right channels. In multi-channel audio, the left channels are mixed down into one with specific weighing to be displayed in the left panel and similarly with the right channels for the right panel. The center and LFE channels are mixed into left and right with an even share going into each.
- Sum (Left + Right): shows the average of the sum of the left and right channels.
- Sum (Left || Right): shows either the left or right channels, whichever is greater.
- Mid/Side: shows mid and side components of the audio signal. Mid is shown in the left panel and is calculated as
(left + right) / 2. Side is show in the right panel and is calculated as(left - right) / 2. Same downmixing into left and right channels for multi-channel audio as the Stereo mode applies before mid and side components are calculated.
Levels:
- RMS: the default and calculates root mean square of the samples in the sample window.
- Peak: finds the highest (absolute value) sample in the sample window.
- Mixed: uses "RMS" for the needle/pin or main display element and, if the panel includes them, uses "Peak" for the LEDs/lamps.
- BS.1770: calculates loudness as prescribed in Rec. ITU-R BS.1770-5--except for the 400ms window as that is controlled/fine-tuned by the sample window option.
- R 128: calculates loudness as prescribed in EBU R 128-2023 using the
libebur128library--except for the 400ms window as that is controlled/fine-tuned by the sample window option.
Movement:
- No Inertia: applies no post-processing to the needle movement.
- ODE Roots: the default and uses the roots of the mass-spring differential equation to simulate the needle movement.
- PID Control: uses a PID controller to govern the needle movement. The tuning dialog has PID gain parameters. Kp and Ki can range from 0 to 50 with a precision of 3 decimal places. Kd can range from 0 to 0.01 with a precision of 4 decimal places. This is very hard to get right.
- Curve Fit: moves the needle on top of a precomputed exponential curve based on the sample rate and frame time.
Decay:
- Slow: sets the decay factor to 0.0075.
- Normal: sets the decay factor to 0.01.
- Fast: the default and sets the decay factor to 0.015.
Tuning (mouse wheel-controlled):
- Zero: sets the offset in frames from the default zero frame. Only applies to foobar2000
.binpanels. Default is 0 and the range is [-128.0, 512.0]. If:Ctrlkey is held down during the mouse wheel scroll, the step size is 100.Shiftkey is held down during the mouse wheel scroll, the step size is 10.Left Altkey is held down during the mouse wheel scroll, the step size is 0.1.- No key is held down during the mouse wheel scroll, the step size is 1.
- Range: compresses the range of the needle drawing space. Only applies to foobar2000
.binpanels when a level other than BS.1770 or R 128 is selected. Default is 0 and the range is [0.0, 2.0] in steps of 0.01. - Decay: sets how fast the needle falls per frame. Can also be set to predetermined values in the "Decay" menu. Default is 0.01 and the range is [0.0075, 0.03] in steps of 0.0005. Note: the tooltip display value is multiplied by 100.
- Rise: sets how fast the needle rises per frame. Default is 0.25 and the range is [0.01, 0.80] in steps of 0.01.
- Jitter: sets the minimum loudness change threshold needed for the needle to move. Default is 0 and the range is [0.0, 0.050] in steps of 0.001. Note: the tooltip display value is multiplied by 10.
- Gain: sets the preamplifier gain in dB. Default is 0 and the range is [-60.0, 60.0]. If:
Ctrlkey is held down during the mouse wheel scroll, the step size is 10.Shiftkey is held down during the mouse wheel scroll, the step size is 0.1.Left Altkey is held down during the mouse wheel scroll, the step size is 0.01- No key is held down during the mouse wheel scroll, the step size is 1.
- Window: sets the sampling window size in milliseconds. Default is 42 and the range is [10.0, 400.0] in unit steps.
- FPS: sets the maximum number of frames rendered per second. Default is 60 and the range is [24.0, 100.0] in unit steps.
- Corner: sets the default corner radius width in pixels of the skin image size. Can also be set to enabled or disabled from the "Options" menu. Default is 16 and the range is [0.0, 32.0] in steps of 1.6.
Options:
- Downmix Channels: instructs foobar2000 to combine all channels into one. This occurs in the player before any of this component's processing. It is disabled by default.
- Rounded Corners: sets the corner tuning option to 0.0 (unchecked) or 16.0 (checked and default).
- Cubic Interpolation: selects between high quality cubic (enabled and default) and linear (disabled) Direct2D interpolation modes.
- Disable Tuning: disables the tuning menu and makes the component ignore the mouse wheel. The tuning menu is enabled by default.
- Disallow Fullscreen: disables fullscreening through mouse, menu and keyboard. Fullscreen toggling is enabled by default.
- Multi-Monitor Fullscreen: sets the fullscreen mode to span across all screens instead of only the single screen where the player is active.
- Remove Background: removes the edge-sampled background and simply uses a dark or light mode default color. By default the sampled background is shown.
- Enable Transparency: enables transparency in Columns UI for panels that support it such as JSP3 and JSplitter. Note that this mode incurs a heavy performance penalty when enabled; it is especially noticeable during windowing events such as resizing. As such it is disabled by default.
- Ignore Defaults: ignores the defaults set in
.inifiles that may accompany the.binfiles, both loose and archived in.rar. Defaults are not ignored by defaults. - Freeze: freezes video frame. It is not enabled by default.
- Show Counter: displays a frame counter on the top right. It is not shown by default.
- Screensaver Mode: switches skins/panels automatically after a specific interval. The switching occurs only within the same group (folder). The switching interval (period) of this mode is controlled through a slider of the tuning dialog; the default value is 18 seconds but the mode is disabled by default.
- Vertical Synchronization: disabled and not functional. ?
- Rescan: Rescans panels directory.
- Reset: Resets all options to their defaults except layout/visual options.
Configure: opens a dialog box with the tuning options.
Mix: opens a dialog box with the channel level mixer board.
Explore: opens the profile directory in Windows Explorer.
Fullscreen: toggles the component between fullscreen mode and embedded or windowed mode. Keeps the screen on and stops the screensaver from starting during fullscreen.
The Fullscreen option is bolded because it is the double-click default.
The different panels/skins found during the scan of the <foobar2000 profile folder>\vumeter directory appear in lexicographical order (directories first) below the "Fullscreen" toggle.
There are some options under: Preferences > Advanced > Visualisations > VU Meter:
- Debug ouptut:
<unchecked>. - Panels directory:
<empty>(implies<foobar2000 profile folder>\vumeter\when empty). Supports%fb2k_profile_path%and environment variables (also enclosed between%; DOS-style). - Degreelessness: (untested; ?).
The currently selected tuning parameter is denoted by a square symbol under the context menu's Tuning popup.
The selected tuning parameter can be changed by three main methods. The first is directly through selecting the desired one in the context menu. The second is using a modifier key and the vertical mouse wheel together to cycle through the parameters in menu order. The modifier key that must be held down while the vertical mouse wheel turns is one of Esc, Right Alt or AltGr. The third is to use the horizontal mouse scroll wheel. As the tuning parameter changes, the mouse tooltip should display the active one and its current value.
Once again, the selected tuning mode value can be reset to its default using middle click and all tuning parameters will fall back to their defaults if the Options > Reset option is used.
Note: selecting a parameter simply means this is the one that will be affected by the mouse wheel and middle mouse click. The combination of all settings and tuning parameter values determines the visualization's behavior appearance.
Tuning can also be done through the context menu's Configure dialog box. Notes:
- Only one dialog box can be open at a time and it is modeless.
- The panel selection will only affect the instance from where the dialog was launched, whereas all of the other tuning parameters affect every instance.
- Changes are reflected in real time.
- Clicking "Cancel" or "X" (in the system menu bar) will undo any changes back to the state when the dialog box was opened. Either of these will also close the dialog box.
- Clicking "Reset" will revert all options to their default values (exactly equivalent to the reset option in the context menu).
- Clicking "OK" will keep the changes and close the dialog box.
- All combos, buttons, sliders and edit boxes include tooltips and are tab stops.
- Sliders can be controlled using the mouse by dragging the slider or by the mouse wheel. Also using the keyboard's arrow keys and
Home/PgUp/PgDn/End. - When the dragging a slider with the mouse, the edit box value and the tune value itself are updated only when the dragging ends (i.e., left mouse button released).
- Editing the tune value with the keyboard directly might be difficult due to the real-time validation.
- The dialog box takes on the default theming colors based on light or dark mode selection in foobar2000.
Channel level mixing can be customized through the context menu's Mix dialog box. Notes:
- Only one dialog box can be open at a time and it is modeless.
- The mix will affect every instance, however the color box only affects the instance where the dialog was launched.
- The sliders have their loudest setting (0 dB) at the top and their quietest (-12 dB) at the bottom.
- The color box will only appear for
.binpanels. It contains the edge-sampled RGB hexadecimal background color. It can be changed to any other valid color, overriding the automatically-sampled color. - The "Enable mixer" checkbox is automatically selected and deselected. It is selected when the level mode is not BS.1770 or R 128.
- Clicking the "Default" button will reset the mixer sliders to their default values and the color box to the edge-sampled value.
- Clicking "Cancel" or "X" (in the system menu bar) will undo any changes back to the state when the dialog box was opened. Either of these will also close the dialog box.
- Clicking "OK" will keep the changes and close the dialog box.
- The left channels are front left (L) [0 dB], back left (BL) [-3 dB], front center left (FCL) [-6 dB], side left (SL) [-3 dB], top front left (TFL) [-3 dB] and top back left (TBL) [-3 dB].
- The right channels are front right (R) [0 dB], back right (BR) [-3 dB], front center right (FCR) [-6 dB], side right (SR) [-3 dB], top front right (TFR) [-3 dB] and top back right (TBR) [-3 dB].
- The center channels are front center (C) [-3 dB], low frequency effects (LFE) [-10 dB], back center (BC) [-6 dB], top center (TC) [-6 dB], top front center (TFC) [-6 dB] and top back center (TBC) [-6 dB].
The press-and-tap touch gesture switches skins/panels within the same group.
The horizontal mouse wheel and buttons 4 and 5 can be used to cycle through the selected tuning option. Be aware that buttons 4 and 5 might have other side-effects in the player such as moving to the next or previous track.
As with the mouse buttons, be aware that any custom keyboard shortcuts set in the player can alter or prevent the component from reacting to these.
The needle movement can be approximated using the following formula: display = old +/- (e ^ (new - old) - 1) * rise/decay. The rise or decay factor limits how far the needle can move per frame or iteration of the calculation.
The needle position, frame number in foobar2000 .bin panels or angle in AIMP analog .zip skins, is calculated using the point-slope equation referenced to the zero dB frame or angle. For the AIMP LED .zip skins, the "light" fill is calculated by interpolating between the points in the dbs parameter's array using Catmull-Rom splines.
Used a circuit of a stereo VU meter, tracing the PCB and translating all the component values of the driving circuit into a SPICE netlist. The netlist was simulated to get the step/transient and impulse responses of the "system." Since the VU meter face plate is logarithmic, the circuit uses analog differentiator, integrator and summer circuits. To validate the netlist simulation correctness, various points of the working circuit were probed with an oscilloscope.
With the characteristics of the driving circuit in hand, turned attention to the needle. The needle can be modeled as a mass-spring system. So, setting up the ODE for the system (with some minor guesses) provides the behavior characteristics of the needle. This is a common second-order system with known roots.
The needle was set up underdamped and simulated/"animated" as a PID controller (see this series for additional insights). The PID coefficients were derived from the transient and impulse response targets of the SPICE simulation as those come from the voltage levels (closest to the visualization audio levels provided by foobar2000). The actual PID coefficients are simplified into higher level abstractions that are called "rise" and "decay"--where the larger numbers means faster. And also "jitter" which is a control on the minimum increment to the error accumulator.
This methodology only provides an approximate model of the analog behavior of the needle in a discrete simulation. Although the derivation was detailed, the needle movement of this component is not and will never be an accurate duplicate to its real-world analog. However, using the tuning knobs provided along time and experimentation it should be possible to create a pleasing ballistic needle movement.
Panel Specification
===================
Reverse Engineer: Jimmy Cassis
Date: 2024-10-01
This specification defines the format of the BIN file.
Panel File Format
-----------------
The files in this format use ".bin" extension.
The panel file begins with a header.
The panel file format layout:
Offset Size Description
0 2 Bitmap width (16-bit unsigned integer, little-endian), between 2 and 4096
2 2 Bitmap height (16-bit unsigned integer, little-endian), between 2 and 4096
4 2 Frame count (16-bit unsigned integer, little-endian), between 2 and 1024
6 2 Zero dB frame (16-bit unsigned integer, little-endian), between 0 and 1024
8 n Needle delta offset list (array of 32-bit unsigned integer offsets, little-endian), `n` is "frames * 4" and the first entry must be greater than or equal to 32; note that some offsets might be repeated due to the "knots" interpolation.
8+n p Background image bitmap pixel array (BI_RGB format [B8G8R8A8 UNORM], 32 bits per pixel, little-endian), `p` is "width * height * 4", format below
8+n+p l Optional, lamp delta offset list (array of 32-bit unsigned integer offsets, little-endian), `l` is "frames * 4"
8+n+p+l d Needle delta arrays (variable size, offsets are big-endian, deltas are BI_RGB and apply per channel), `d` is variable, format below
8+n+p+l+d a Optional, lamp delta arrays (variable size, offsets are big-endian, deltas are BI_RGB and apply per channel), `a` is variable, format below
The total size of the file is: 8+n+p+l+d+a
The total size of the file must be greater than: 8+n+p
The bitmap pixel array layout is as follows (address _decreases_ from left-to-right) and arranged in top-down order:
+-------------------------+-------------------------+-------------------------+-------------------------+
Sample Length: | 8 | 8 | 8 | 8 |
Channel Membership: | Alpha | Red | Green | Blue |
Pixel Bits: | A A A A a a a a | R R R R r r r r | G G G G g g g g | B B B B b b b b |
Bit Number: | 31 30 29 28 27 26 25 24 | 23 22 21 20 19 18 17 16 | 15 14 13 12 11 10 9 8 | 7 6 5 4 3 2 1 0 |
+-------------------------+-------------------------+-------------------------+-------------------------+
^ ^
| |
| + less significant byte
+ more significant byte
The needle and lamp delta arrays use the following format:
- For every frame there is a 2-byte big-endian offset while the most significant bit (MSB) of the even byte is unset.
- If the MSB for the even byte is set, it indicates a count (excluding the MSB) of the number of pixel channels to override starting at the offset in the pixel array indicated by the sum of all the previous 2-byte offsets.
* Note that the offset might not necessarily start or end at a pixel boundary.
- Repeat, calculating a new offset from the end of the final overriden pixel until the even byte MSB is set and the count is zero (0x80).
Worked example for the needle delta array (address _increases_ from left-to-right):
+-----------------------------------+-----------------------+-----+-----------------------------------------------------------+-----+---------...---+
Offset Sum: | 174272 | 7 | 1489| 19 | 1481| 23 ... |
Offset: |32768+32768+32768+32768+32768+10438| 7| 0| 1| 2| 3| 4| 5| 6| 1488|19| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|13|14|15|16|17|18| 1480|23| 0| 1|...| 0|
Bytes: |7F FF 7F FF 7F FF 7F FF 7F FF 28 BF 87 8A 8B 87 00 E0 E2 DE 05 D0 93 B1 B2 AE 00 69 6A 67 00 6B 6D 68 00 B8 B9 B6 00 E0 E2 DF 05 C8 97 E6 EE ... 80|
Pixel Bits: |^^ ** | Bb Gg Rr Aa Bb Gg Rr| | Bb Gg Rr Aa Bb Gg Rr Aa Bb Gg Rr Aa Bb Gg Rr Aa Bb Gg Rr| | Bb Gg ...End|
+-|--|------------------------------+-----------------------+-----+-----------------------------------------------------------+-----+---------...---+
| |
| + more significant byte
+ less significant byte
Notes
-----
When drawing, ignore the alpha channel.
Extensions
----------
1. Separate Left and Right Panels
By default, the panel file represents both the left and the right panels.
If the file format is repeated at the end of the delta arrays, it is assumed that the first format corresponds to the left panel and the second format corresponds to the right panel.
The file formats can be concatenated uncompressed into one file. Alternatively, individually compressed files can be concatenated (keep the same compression scheme for both).
Another method to provide separate left and right panels is to provide a pair of files where the left panel file ends in `1.bin` and the right panel file in `2.bin`.
2. Transparency (Alpha Channel)
By default, the alpha channel is ignored.
If the alpha channel is not to be ignored (BI_BITFIELDS format [B8G8R8A8 UNORM], 32 bits per pixel, little-endian), set bit 7 (the most significant bit) of the upper byte of the zero dB frame in the header.
3. Bottom-up Background Bitmap Pixel Array.
By default, the bitmap pixel array is assumed to be in top-down order.
If the bitmap pixel array is arranged in bottom-up order instead of top-down order, set bit 6 of the upper byte of the zero dB frame in the header.
- Can be bzip2-compressed (recommended), LZMA-compressed, Gzip-compressed, Zstandard-compressed, LZ4-compressed, Lzip-compressed or uncompressed.
- Can use needles or lamps (LEDs), or both.
- Can contain a single meter for left and right channels or separate left and right meters. See Extension 1.
Warning: Identifying LZMA-compressed heuristic is limited; especially if the skin was compressed outside of VUEditor. Therefore it is possible to confuse an uncompressed
.binfile of any width less than 225 with a LZMA-uncompressed one. Using a bzip2-compressed file mitigates this issue since this scheme starts with an easily identifiable magic number.
- Must be ZIP-compressed and contain a
skin.inialongside corresponding PNG images at the root of the archive. - Can contain a single panel for left and right channels or separate left and right panels.
- For single panel the images must be named
0.png(background),1.png(needle),2.png(glass) with optional3.png(LED) andbg.png(wallpaper). - For single panel all parameters must be specified under the
VUsection in theskin.inifile; the supported parameters areMinAngle,MinLevel,ZeroAngle,ZeroLevel,MaxAngle,MaxLevel,PivotPointX,PivotPointY,MobilityNegative,MobilityPositive,orientation, anddbs. The section and parameter names are case insensitive. - For separate left and right panels the left panel images must be named
l_0.png(background),l_1.png(needle),l_2.png(glass) with optionall_3.png(LED) and the right panel images must be namedr_0.png(background),r_1.png(needle),r_2.png(glass) with optionalr_3.png(LED). There can be an optionalbg.png(wallpaper). The image names are case insensitive. - For separate left and right panels, the left panel parameters must be specified in the
skin.inifile under theVU_Lsection and the right panel parameters must be specified under theVU_Rsection. The supported parameters are the same as the single panel ones.
Note 1:
MobilityNegative,MobilityPositive, andorientationparameters are currently unused.
Note 2: The
dbsparameter array is optional and only used in skins that include an LED component in addition to the needle. As noted previously, the LED image is{l_,r_,}3.png.
Note 3: Missing parameters are assumed to be 0 or false.
- Must be ZIP-compressed and contain a
settings.inialongside corresponding PNG images at the root of the archive. - The left panel parameters must be specified in the
settings.inifile under theleftsection and the right panel parameters must be specified under therightsection. The background must be specified in thebgsection. The supported parameter in all 3 sections ispng. The supported parameters in theleftandrightsections areorientation,start_point,finish_point,pos_x,pos_y, anddbs. - The
dbsimage "dimension" can increase or decrease with the decibel level depending on whether the LED image is covered or uncovered. - An
orientationvalue of 0 specifies that thedbsdimension refers to width (i.e., horizontal). Conversely a value of 1 refers to height as the value that changes with the level (i.e., vertical). - The image name must match the one given in by the
pngparameter for each section.
- Must be RAR-compressed and contain a
<filename>.binfile alongside an optional<filename>.inifile. Where<filename>must exactly match the name used as the base name of<filename>.rar. Further, these files must be placed in the root of the archive. - The
<filename>1.bin/<filename>2.binnaming pattern (with or without space between file name root and number) is also supported for individual L/R panels. - The
.binfile(s) contained in the archive must follow the.binfile specification outlined above and compressed, if desired, using a supported format. - All customization parameters must be specified under the
DEFAULTsection in the<filename>.inifile; the supported parameters arefall,rise,singleMeter,peakLED,isVertical,curveAdj, andbgColour. The section and parameter names are case insensitive.
Note 1:
fallandriseparameters are currently unused.
Note 2: The
peakLEDparameter being true sets Levels to _Mixed as soon as the panel is loaded. ThesingleMeterandisVerticalparameters combine to set the Layout mode. ThebgColourparameter sets the background color, overriding the edge color detection. ThecurveAdjparameter flattens the logarithmic curve by affecting the quadratic parameter.
Note 3: Missing parameters are assumed to be 0 or false.
- Similar to the
.rarspecification, except that<filename>.binand<filename>.iniare not archived together. <filename>.binand<filename>.inimust live in the same folder.
The component exposes COM interfaces for automation. The IVUMeter and IVUMeterWindow COM interfaces for managing and interacting with the foobar2000 VU Meter component. In foobar2000, these interfaces are mainly accessed through JavaScript.
Retrieves a IVUMeter interface instance.
extern "C" __declspec(dllimport) HRESULT __cdecl com_get_interface(IVUMeter** pp);Defines the layout options for the VU Meter window.
| Value | Name | Description |
|---|---|---|
| 0 | BothH | Both channels, horizontal |
| 1 | BothV | Both channels, vertical |
| 2 | Left | Left channel only |
| 3 | Right | Right channel only |
| 4 | Mono | Mono layout |
Provides control and status for the VU Meter component.
IID: {9EBE6FDE-502B-4571-922F-5D5942A53638}
| Property | Returns (get) / Accepts (put) | Description |
|---|---|---|
ComponentVersion |
UINT; get |
Gets component's version number. |
ComponentVersionText |
BSTR; get |
Gets component's version as text. |
LeftLevel |
FLOAT; get |
Gets left channel RMS level. |
RightLevel |
FLOAT; get |
Gets right channel RMS level. |
LeftPeak |
FLOAT; get |
Gets left channel peak level. |
RightPeak |
FLOAT; get |
Gets right channel peak level. |
Offset |
DOUBLE; get, put |
Gets or sets gain offset value. |
UpdatePeriod |
DOUBLE; get |
Gets update window period. |
DownmixChannels |
BOOL; get, put |
Gets or sets downmix state. |
RoundCorners |
FLOAT; get, put |
Gets or sets corner rounding. |
CubicInterpolation |
BOOL; get, put |
Gets or sets cubic interpolation state. |
DisableTuning |
BOOL; get, put |
Gets or sets tuning disable state. |
DisallowFullscreen |
BOOL; get, put |
Gets or sets fullscreen restriction state. |
MultiMonFullscreen |
BOOL; get, put |
Gets or sets multi-monitor fullscreen state. |
RemoveBackground |
BOOL; get, put |
Gets or sets background removal state. |
EnableTransparency |
BOOL; get, put |
Gets or sets transparency state. |
IgnoreDefaults |
BOOL; get, put |
Gets or sets "ignore defaults" state. |
Freeze |
BOOL; get, put |
Gets or sets freeze state. |
ShowCounter |
BOOL; get, put |
Gets or sets FPS counter visibility. |
ScreensaverMode |
BOOL; get, put |
Gets or sets screensaver mode state. |
VSync |
BOOL; get, put |
Gets or sets (no effect) VSync state. |
WindowID |
UINT; get |
Gets current active window ID. Returns -1 if there is no active window. |
WindowCount |
UINT; get |
Gets total window count. |
| Function | Returns | Description |
|---|---|---|
Print(BSTR* Text) |
None | Prints text to the foobar2000 console. |
Rescan() |
None | Rescans vumeter folder. |
Defaults() |
None | Restores defaults. |
CreateWindow(UINT ID) |
IVUMeterWindow** |
Creates VUMeterWindow interface for the window using ID. |
RegisterWindow(UINT ID) |
None | Sets window using ID as active. |
RegisterRect(UINT ID, INT Left, INT Top, INT Width, INT Height) |
None | Registers a rectangle region -- no effect. |
Represents a VU Meter window instance with properties for visibility, layout, and skin/panel configuration.
IID: {482C5F92-2D21-4F6F-9857-87C1D2C04344}
| Method | Returns (get) / Accepts (put) | Description |
|---|---|---|
Visible |
BOOL; get, put |
Gets or sets (no effect) window visibility state. |
Enabled |
BOOL; get, put |
Gets or sets (no effect) window enabled state. |
Layout |
LayoutEnum; get, put |
Gets or sets current layout. |
LockAspectRatio |
BOOL; get, put |
Gets or sets aspect ratio lock state. |
SkinName |
BSTR; get, put |
Gets current skin name or changes skin. |
GroupName |
BSTR; get, put |
Gets current group name or changes skin to first one in group. |
GroupCount |
UINT; get |
Gets number of groups (directories). |
SkinCount |
UINT; get |
Gets number of skins in group of currently-selected skin. |
| Function | Returns | Description |
|---|---|---|
SetBounds(int Left, int Top, int Width, int Height) |
None | Sets window position and size -- no effect. |
SetConfig(BSTR GroupName, BSTR SkinName, LayoutEnum Layout) |
None | Changes skin and layout. |
LoadSkin(BSTR GroupName, BSTR SkinName) |
None | Changes skin. |
LoadPrevSkin(BSTR GroupName) |
None | Loads previous skin in group (does not wrap around). |
LoadNextSkin(BSTR GroupName) |
None | Loads next skin in group (does not wrap around). |
GroupSize(UINT Index) |
UINT |
Gets size of a group by index. |
Groups(UINT Index) |
BSTR |
Gets group name by index. |
Skins(UINT Index) |
BSTR |
Gets skin name by index in group. |
Skin(UINT Group, UINT Index) |
BSTR |
Gets skin name by group index and skin index. |