You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A skin editor. Settings → Appearance → Edit skin opens all thirteen colour
roles with a picker on each, and the canvas behind the panel repaints as you
drag — as does a tablet mirroring the session. Every role prints its contrast
ratio against the surface it is read on, and the ones below the floor that
role is held to are marked with the reason; a low-contrast palette still
saves, because refusing to save what is already on screen is worse than a
warning. Skins remain plain JSON files and hand-editing them is unchanged.
Skins can be deleted from the editor, which previously meant finding the file.
Reset, beside Edit on Settings → Meters → Delivery target, deletes every
target you have saved and puts the built-in six back. It asks first, in a
dialog naming what goes, and afterwards says how many files it removed.
Targets you wrote by hand are gone from the disk, so this is also how a
correction to a built-in is undone without going looking for its JSON file.
The VU Meter marks where the needle reached. A mark rides the scale at the
loudest point of the last second and a half and then falls back to the
needle, because a 300 ms movement is slow by design and the loudest moment of
a phrase is over before the needle has finished describing it. It is the same
quantity the needle draws, held rather than measured a second time.
The VU Meter prints its reading and its reference along the bottom of the
face: the deflection in VU on the left, and which dBFS level reads as 0 VU on
the right. The second one is the genuinely confusing thing about a VU meter
and the face now says it out loud. A module too small for either drops it and
keeps the dial.
The Spectrogram and the Oscilloscope can be drawn in full colour. Colour: Full RGB in either module's menu replaces the skin's one-hue ramp,
and what it paints is the quantity that module's axes leave uncoloured. On the
Spectrogram that is the level: the spectrogram rainbow, indigo through
green and yellow to red and white, which separates far more steps of level than
one hue can. On the Oscilloscope it is the band balance, because a waveform
has no frequency axis at all: red, green and blue are its bass, its mids and
its highs, split at 200 Hz and 2 kHz, so a kick is red, a hat is blue and a
full-spectrum hit is white, the way DJ software has coloured audio for twenty
years. That balance is taken in decibels against the loudest of the three bands
rather than in power — bass carries an order of magnitude more power than air
does, and a power mix draws every piece of music red — and it is recorded with
the column, so the picture holds its colours instead of being repainted by
whatever is playing now. A column whose source published no spectrum keeps the
accent rather than being handed a colour that would claim a balance nobody
measured. Off by default in both, because a rainbow reads as more precise
than the measurement behind it, it collapses for the eight percent of men who
cannot separate red from green, and on the Spectrogram it brings its own dark
ground into a light skin. Nothing measured changes at either setting: no
reading, no report and no byte on the wire moves.
⚡ Changed
A menu marks the value it holds by recessing that row, not by brightening
it. Every dropdown in the application — the delivery target, the signal
source, and a module's dozen settings — used to print its current value as the
lightest row in the menu, which put the emphasis on the one choice pressing
cannot change and left the options you can still take looking greyed out. The
chosen row now sits in a darker well and the alternatives sit on the menu's
own surface, which is how selection reads everywhere else in the interface.
Nothing about what the menus contain or choose changed.
The signal source in the status bar is a bordered chip, the same shape the
delivery target beside it has always had. It is the menu people open most and
it was drawn as a dot and a bare word in a row of bordered controls, which
reads as a caption rather than as something you can click. The dot stays,
inside the chip: bright while something is being metered, dim on Silence.
The OAA wordmark is gone from the status bar. The window carries the
application's name; the bar carries what changes while you work, and three
capitals that never change were the one item in it saying nothing about the
signal. Every width at which the bar drops an item moved with it — the
controls at the narrow end now leave 25 to 40 px earlier than they did,
because a bordered chip cannot give back the width a bare word could. All of
them still have keyboard shortcuts except the three remote controls, which is
unchanged.
The sample rate no longer prints flush against the DAW's playhead. The gap
between the source group and the readings is a fixed one now rather than
whatever the window had left over, so it is there at every width instead of
only on a wide one.
The VU Meter has a face. The scale is a band along the rim rather than a
hairline arc, red above 0 VU over a tinted ring, and the needle is a taper
under a machined hub — so how far up the scale the programme is can be read
from the rim before the needle is read at all. Nothing about the movement,
the ballistics or the reading changed.
The Loudness Distribution fits its loudness axis to the programme instead of
always drawing −60 to 0 LUFS. A mastered programme's gated distribution
occupies eight to fifteen of those sixty decibels, so the picture the LRA
reading is taken from was squeezed into a fifth of the module with the rest
left blank; the axis now holds every occupied bin, the gated range and the
delivery target, rounds outwards to whole ticks, and stays where it is until
the distribution grows past it. No reading changes — the same bins are drawn
against a shorter stretch of the same scale. Scale: Full range in the
module's menu restores the published axis, which is the one to pick when two
distributions are being compared side by side.
Open Audio Analyzer has a new logo, and every icon it ships follows it. A
white waveform on a teal ramp, replacing the four teal bars on graphite. The
app icon, the installers' icons, the Android launcher icon, the layered icon
macOS and iOS render, the favicon, the documentation site's header, the
README and the social card all change together. The tile is also a rounder
shape than it was, because the one macOS 26 and iOS 26 draw is rounder than
the one every version before them drew. Nothing about what the application
measures or displays is affected.
The icon reads less well at 16 px than the one it replaces, and that is a
real cost rather than an oversight. Four bars at four heights survived being
two pixels wide; a waveform with nine excursions across twelve pixels does
not, and no stroke weight rescues it. The line is held at one device pixel so
that it stays white instead of smearing to grey, and the sizes the icon is
now designed around are 32 px and up. Where this shows is the Windows
Explorer list view and a Linux panel at its smallest setting.
Precision Instrument and Daylight can no longer be replaced. A skin file
naming one of their two ids used to shadow the built-in; it is now ignored,
and the skin editor offers Save as new rather than an in-place save. The two
shipped skins are what proves the thirteen colour roles are semantic rather
than aliases for particular colours, and a reference point a file on disk can
quietly redefine is not one. If you had such a file it is inert now —
rename its id and it comes back as a skin of its own. Delivery targets are
unaffected and still shadow their built-ins, because a target is a claim about
somebody else's published specification and has to be correctable without a
release.
🐛 Fixed
The VU Meter no longer draws a needle for a reading nobody measured. The
per-channel arrays are NaN while a remote display's link to the host is
quiet, and the dial rested at the bottom of its scale with exactly the
confidence it reads a quiet passage with; the face now shows no needle and
the reading is an em dash. Only a tablet display could reach this.
The VU Meter's scale numbers no longer overprint each other on a small
module: −5 and −3 sit close together on a face that crowds towards the bottom
in voltage, and at the narrowest widths they collided into one smear. The
face now sheds the numbers it has no room for, keeping 0 and both ends.
A panel that scrolls draws one scrollbar rather than two. Settings, and
every other panel tall enough to scroll, carried the skin's own thumb on its
right edge and a second, wider grey one immediately inside it, which faded in
whenever the panel was scrolled. The second was supplied by Flutter, which
decorates a scrolling region on macOS, Windows and Linux without being asked;
the panel now declines it. Tablets never showed it.
The Super Meter's target tick sits in its slot again. The slot is a
surround laid down under the tick so that its contrast is identical on all
three rings, whatever each ring is currently drawing; it was being stroked at
exactly the tick's own width, so the tick covered it completely and was read
against the arc after all. It stands 1.5 px out either side now, which is what
the constant describing it always said. The tick itself is unchanged.
🚧 Internal
The skin editor's suite waits for the effect of a save rather than for the
file. Its helper stopped as soon as the skin's file existed, which is one
event-loop turn before the editor is told the write finished — so the four
assertions about what saving then selects raced the disk, and won on a Mac and
lost on the Linux runner every time.
flutter analyze no longer walks website/tools/. The two Flutter web
targets that render the real modules for the site now share the mock MeterSource as a package rather than each holding a copy, and a package:oaa_mock import needs package resolution where the relative one it
replaced needed none — so on any machine that had not run pub get inside
each of them, which is every CI runner, the repository's analyze gate failed
on eight unresolved references in code that no gate builds. They are excluded
in analysis_options.yaml and analysed by their own.
The remote display's skin frame is rate-limited to one every 150 ms, with the
last value always delivered. Dragging a colour in the new editor produces a
palette per pointer move, and those frames are queued rather than dropped —
unthrottled they grew that queue for as long as the pointer was down.
The artwork and the program that renders it swapped places. assets/brand/oaa-logo.svg is now the drawing, hand-edited, and packaging/icon/make_icons.dart reads it; previously the mark was four
rectangles described as numbers in that program and every vector in the
repository was a hand-copied transcription of them, kept in step by a rule
saying the mark changed there first and was brought across afterwards. That
rule does not scale to a path with three hundred control points. The program
now also writes packaging/icon/oaa.svg, the rest of assets/brand/ and the
website's icons, which removes the last four files anybody kept by hand.
make_icons.dart grew a path rasteriser — an SVG path parser, a cubic
flattener and a scanline fill — because the mark is a stroked cubic path and
the old renderer only knew rectangles. Still no dependencies. The stroke is
drawn as the union of a rectangle per segment and a disc per vertex rather
than by offsetting the outline, which is the same shape and is not a research
problem.
The tile's corner is measured rather than remembered. Three macOS 26 system
icons were rendered through NSWorkspace, thresholded to a silhouette and
fitted: a corner of a third of the side on a superellipse of exponent 2.7,
where the shape Apple drew from iOS 7 to iOS 18 was 22.37% on an exponent
near 4. The first cut of this release used the remembered numbers and looked
visibly square next to everything else in the Dock.
The documentation site serves its favicon as a file instead of inlining it
into every page as a data URI. The mark was a few hundred bytes when that
choice was made and is three kilobytes now, which across twenty pages was a
hundred kilobytes of the same icon.