Needle
VU, PPM and bargraph meters for Resolume

What it does
An FFGL source plugin for Resolume Arena and Avenue: four audio meters drawn live at the output's own raster, and the idea behind all four is that the movement is not a free choice. A VU meter is a d'Arsonval movement — a mass on a spring with viscous damping — which has exactly two free parameters. ANSI C16.5 makes exactly two statements about it: a step to 0 VU reaches 99 % of its deflection in 300 ms, and overshoots by 1.0 % to 1.5 %. Two statements about a two-parameter system leave nothing to taste, so Needle solves for them in code: a damping ratio of 0.812716986 and a natural frequency of 13.5119 rad/s. Change the quoted figure and the movement changes.
The same discipline runs through the rest. A peak programme meter's 20 dB of fall-back in 2.8 s is a time constant, 1.2160 s, because an exponential decay in amplitude is a straight line in decibels; its 5 ms integration figure gives 3.16 ms. The bargraph is the LM3915's ladder, 3 dB a step over ten steps. The magic eye is a 6U5 with a 100° shadow that closes as the level rises and overlaps past the reference — the thing anyone who has used one watches for — with a heater that warms up from cold and a phosphor that smears.
What falls out is what the instruments do. 0 VU sits at 71 % of the arc rather than in the middle, because a VU scale is linear in voltage; a BBC PPM's marks are evenly spaced because its scale is linear in decibels, and it has no red band because a PPM says where the peak is and leaves the judgement to you. Wear puts dry friction in the pivot rather than more damping, so a tired meter stops short, somewhere different depending on which way it came — which is why people tap one.
The instruments are integrated at 4800 steps a second, not once per frame, so the answer does not depend on the frame rate, and the first frame of a clip triggered mid-composition integrates nothing rather than forty seconds at once. A Standard switch locks the ballistics to the specifications; off, Rise, Fall and Overshoot are yours, and the plugin says plainly that the result is no longer a movement. Peak hold and hold decay, which nobody standardised, stay live either way.
Audio comes from the one input FFGL offers, Resolume's 64-bin spectrum. Needle sums every bin, which by Parseval's theorem is the signal's power however the bins are laid out, so it does not depend on the untested assumption that they run linearly to Nyquist. What it cannot know — whether the bins are magnitudes or powers, and what a full-scale tone reads — is a Bin Law switch, a Reference Level and a Sensitivity trim rather than a buried guess. It is not a true-peak meter, and the user guide says why.
- Four instruments in one source: VU, BBC-style PPM, LED bargraph and magic eye, mono or as a stereo pair
- VU ballistics solved from ANSI C16.5: 99 % in 300 ms, 1.25 % overshoot, measured rather than asserted
- PPM ballistics from IEC 60268-10 type II: 20 dB of fall-back in 2.8 s, a 5 ms burst reading 2 dB down
- The LM3915's 3 dB ladder, with a peak hold bar and a hold decay you set
- A 6U5 magic eye whose wings overlap past the reference, with heater warm-up and phosphor persistence
- A Standard switch, and a Free mode with Rise, Fall and Overshoot
- Reference Level, a ±12 dB Sensitivity trim and a Bin Law switch for the host's unmeasured spectrum
- Face, needle, lamp, glass and a Wear control that puts real dry friction in the pivot
- Universal macOS bundle and a Windows x64 DLL
Where it stands
v0.1.1, and honestly early. The ballistics are measured against the engine rather than read off pixels, and tools/verify.sh runs the lot: a step to 0 VU reaches 99 % in 300.000 ms (ANSI C16.5 allows 300 ± 5) and overshoots by 1.2500 % (allowed 1.0–1.5), with the integrator tracking the exact closed-form step response to better than 1e-12 of full scale; a PPM falls 20 dB in 2.800000 s and a 5 ms burst reads 2.000000 dB below the same tone held; the bargraph's ten thresholds, recovered by bisecting on the input, are 3.000000 dB apart with the bottom at −27.000 dB; the magic eye's shadow never widens across a 60 dB sweep, is 100° wide open and its wings overlap 15° at +6 dB; a clip triggered at t = 40 s reaches 99 % at 300.24 ms, the same to 2.5 µs as one triggered at zero; half a second of signal reads 0.712908590 at 24, 30, 50, 60 and 144 fps with a spread of exactly zero; and at Wear 1 the pointer stops 2.0 % of full scale short, while at Wear 0 it is bit-identical to a frictionless movement at all 9,600 steps; and the two meters of a Stereo Pair read the same, bit for bit, on every frame after Count goes to Mono and back (v0.1.0 froze the hidden one, and v0.1.1 is that fix). Draws are pixel-exact at 640×360 and 1920×1080, all 31 controls measurably change the picture, and the universal bundle passes the fleet's oxbow host as ND01. Render cost on macOS is under 0.03 ms/frame from 720p to 4K. It has not yet been loaded into Resolume on macOS. On Windows it has: a build of v0.1.0 loads, registers as a source and draws its meters in Resolume Arena 7.27.1 on software rendering (win-lab, no GPU), passing the fleet's host checks with every parameter as declared; the box has no sound device, so its audio-driven controls were not exercised there. No real audio has reached it in a host, so whether Resolume's 64 bins are magnitudes or powers, and what a full-scale tone reads, remain assumptions — which is why Bin Law, Reference Level and Sensitivity exist. It is not a true-peak meter: the PPM and bargraph are driven by a block RMS, 3.01 dB below a real PPM on a sine. Three quoted figures — the PPM's 2 dB burst figure, the BBC PPM's marks and the 6U5's 100° — came from background knowledge rather than a document. There is a user guide and a browser demo, which is a port rather than the plugin; no factory presets and no OpenFX port. Check it in your own rig before trusting it in a show.
Watch it running
Nothing loads from YouTube until you press play.Watch it there instead