Needle
VU, PPM and bargraph meters, by the book, 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 how they move isn't up to me. 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 with it.
The rest get the same treatment. 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, and 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, which is the bit anyone who's used one watches for, with a heater that warms up from cold and a phosphor that smears.
What comes out is what the real instruments do. 0 VU sits at 71 % of the arc, not 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 tells you 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 from, which is why people tap them.
The instruments are integrated at 4800 steps a second rather than once per frame, so the answer doesn't depend on the frame rate, and the first frame of a clip triggered mid-composition integrates nothing instead of forty seconds in one go. A Standard switch locks the ballistics to the specifications. Turn it off and Rise, Fall and Overshoot are yours, and the plugin tells you the result isn't a real movement any more. Peak hold and hold decay, which nobody ever standardised, only ever drove the bargraph, and like the rest of the ballistics controls they're hidden whenever they can't act.
Audio comes from the one input FFGL offers, Resolume's 64-bin spectrum. Needle takes the RMS over every bin, which is what the FFGL SDK itself calls the volume, and by Parseval's theorem follows the signal's power however the bins are laid out, so it doesn't rely on the untested assumption that they run linearly up to Nyquist. What it can't 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, so the guess isn't buried somewhere in the code. It isn't a true-peak meter, and the user guide explains 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.2, and early days. v0.1.2 answers the first report from somebody else's Resolume rig. The level is now the RMS over the 64 bins, as the FFGL SDK computes it, rather than the root of their sum, so it reads about 18 dB lower than before: a composition with Reference Level or Sensitivity moved to compensate will now read low. The ballistics controls hide whenever they can't act, Free mode overshoots by what Overshoot says (1.25 % at the defaults, where it was 11.6 %), and the VU stops at the end of its scale instead of running on to eleven times full scale. v0.1.1 fixed the hidden meter of a Stereo Pair freezing when Count went to Mono and back. It hasn't been loaded into Resolume on macOS yet. 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 (no GPU), passing the fleet's host checks with every parameter as declared. That machine has no sound device, so its audio-driven controls weren't exercised there. The only real audio it has met in a host was on that user's rig, and nothing in v0.1.2 has been run in Resolume with audio, so whether Resolume's 64 bins are magnitudes or powers, and what a full-scale tone reads, are still assumptions, which is why Bin Law, Reference Level and Sensitivity exist. The ballistics are measured against the engine rather than read off pixels, and tools/verify.sh runs the lot: the VU reaches 99 % in 300.000 ms and overshoots by 1.2500 %, both inside ANSI C16.5's limits; a PPM falls 20 dB in 2.800000 s and a 5 ms burst reads 2 dB below the same tone held; the bargraph's thresholds are 3 dB apart; the magic eye's shadow never widens across a 60 dB sweep and overlaps 15° at +6 dB; a clip triggered at 40 s behaves the same as one triggered at zero, and the reading doesn't change between 24 and 144 fps; at Wear 1 the pointer stops 2.0 % short and at Wear 0 it's a frictionless movement bit for bit; and both meters of a Stereo Pair agree bit for bit after Count goes to Mono and back. Draws are pixel-exact at two rasters, all 31 controls change the picture, and the universal bundle passes the fleet's oxbow host as ND01. It costs under 0.03 ms a frame from 720p to 4K on macOS. It isn't 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 of the 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's a user guide and a browser demo, which is a port rather than the plugin, but no factory presets and no OpenFX port. Try it in your own rig before you trust it in a show.
Watch it running
Nothing loads from YouTube until you press play.Watch it there instead