Stoatworks Labs

LEQtion

Sound level meter and dual-channel analyser

Field testingv0.1.3ApplicationRust / Tauri
LEQtion — Sound level meter and dual-channel analyser
Measuring its own signal generator: pink noise at −20 dBFS, taken in through the generator backend with no hardware in the chain at all. Pink noise is flat per octave, so a fractional-octave RTA reading flat across the band is the check rather than the decoration — a wrong window, a wrong normalisation or a wrong band integration would show up as a tilt or a step. LAF and the five-minute LAeq agree within 0.1 dB — −24.0 and −23.9 — over a complete window, and every level says dBFS because nothing here is calibrated.

What it does

A sound level meter you put together yourself: the RTA, spectrograph, bargraph, SPL and LEQ each live on a tile you add, move and resize, and it remembers the layout. The LEQs are why it exists. You set up as many as you want, each with its own window (anything from a second to an hour, or since the last reset) and its own A, C or Z weighting, and they run in the measurement engine rather than in the tile, so one keeps integrating whether or not anything on screen is showing it.

The measurement choices are ones I can defend. An LEQ is an integral of weighted pressure squared over time, so the samples go through an IEC 61672 weighting filter and those get integrated. Working it out instead by tilting a spectrum with a weighting curve makes the answer depend on the transform size, the window and the overlap, none of which have anything to do with the sound. Averaging is done on mean squares throughout, because a mean of decibels isn't a level, and a test fails if anyone tidies it into one.

The other half is a dual-channel analyser: a signal generator, and a transfer function measured against it, with magnitude, phase and coherence, and the arrival delay found from the impulse response and given in milliseconds, metres and samples. Coherence is on screen where you can see it. The magnitude trace breaks where coherence drops through the floor and the points fade to match, and coherence isn't reported at all until several averages have built up, because a single frame always reads 1 and that's arithmetic, not a measurement.

  • RTA from 1/1 to 1/48 octave, with selectable transform size, window, overlap, averaging and peak hold
  • Spectrograph on the same log frequency axis as the RTA, so the two line up when stacked
  • Time-weighted SPL with Fast, Slow and Impulse, plus max, min and peak
  • As many LEQs as you like, each with its own window length and A, C or Z weighting, integrating in the engine rather than in the tile
  • Level history charts — any of those levels over time, with each point covering a whole interval and a band showing the min and max inside it, so a transient between ticks is on the chart rather than missed
  • CSV logging, one row per interval and every series at once, written from the chart's own points; each row records whether it is calibrated and how many frames have been dropped
  • Signal generator — pink, white, sine and a repeating log sweep, band-limited if you want, with the peak it will actually reach shown beside the RMS level, because pink noise at −6 dBFS RMS reads conservative and clips hard
  • Transfer function with magnitude, phase and coherence, measured against the generator tapped internally or a hardware loopback, using several transform lengths at once so the bottom and top of the range are both usable
  • The generator is also selectable as an input, so the analyser can be checked against a signal whose level is known on a machine with no interface, no microphone and no microphone permission
  • Calibration against a hardware acoustic calibrator at 94 or 114 dB, refused — with the reason — when the tone is unsteady, off frequency, clipping or too close to the noise floor, and refused outright on the synthetic input, where there is no microphone to calibrate
  • Every level is labelled dBFS until a calibration exists, and audio the analysis dropped is reported rather than quietly stretched over
  • Core Audio, WASAPI, ALSA and JACK, with ASIO behind a build flag

Where it stands

Released at v0.1.3, a dependency release, and its macOS builds are signed and notarised by Apple. v0.1.2 was the first Developer ID build that asks for the microphone. v0.1.1 was signed without the audio-input entitlement, so macOS refused it the input without ever asking and it metered silence from every device. Still alpha: there are macOS builds to download and no Windows or Linux ones, because Tauri can't cross-bundle and the only Windows machine here is ARM64. The DSP is pinned by 142 tests, including the A and C weighting curves matching the IEC 61672-1 table to better than 0.06 dB, LEQ checked against signals with known answers, pink noise measured back through the RTA, and the transfer function finding a known lowpass corner and a known delay to within a sample. The whole app has been run against a real audio interface over Core Audio, and end to end with its own generator as the input. What's still open is the bit that matters most: it's never been checked against a reference sound level meter, no hardware calibrator has ever been plugged into it, no signal has been round-tripped through a loopback cable or a loudspeaker, and the ASIO path compiles but has never carried audio. It isn't a certified sound level meter and makes no conformance claim.

Watch it running

LEQtion video thumbnail

Nothing loads from YouTube until you press play.Watch it there instead