Sonasync

Version 3.35.6

Design the filter.
Then print the page
that goes in the rack.

Sonasync takes a measurement, aligns a multi-way system, fits the correction, and works out the limiter settings each driver actually needs. Then it prints all of it on one page you can type into any processor — including every processor that has never heard of FIR.

Windows 10 1809 or later · sixty days unlocked · no account, no telephone home

The workflow

Eleven stages, in the order you actually work

Take a measurement or import one. Align the ways. Set the crossovers. Fit the correction by hand or automatically. Listen to it. Export it. Then measure again and see whether it did what it promised. Each stage shows you its result before you move on — there is no button that does everything, on purpose.

  1. 1Import

    Smaart, REW, or any file with frequency, magnitude, phase and coherence columns. Mic calibration is applied once, and the tool records who applied it.

  2. 2Measure

    Take your own, with an interface, a microphone and a loopback cable. Swept sine, several sweeps averaged, a level meter before the measure button rather than a warning after it — and an impulse view that shows when the sound arrived, in milliseconds and metres. Two live modes sit in front of it, for watching the system while you move things rather than after.

  3. 3Arrivals

    Several sources measured from one microphone position, and the delay each of them needs. Microphone at the mix position; measure the left array, the right, the subs, the fills and each tower; the differences between their arrival times are the delays to set. The part of the job that used to be finished on paper.

  4. 4System

    Sub, low, mid, high. Delay, polarity and gain per way, with the alignment worked out from where the ways actually overlap.

  5. 5Target

    Flat, tilted, shelved — the curve you are correcting towards, owned in one place.

  6. 6FIR Design

    Windowed-sinc and linear-phase Linkwitz-Riley legs, with the delay and polarity carried in the taps.

  7. 7IIR / PEQ

    Parametric bands by hand, with Q and bandwidth in octaves side by side.

  8. 8Auto Fit

    Levenberg-Marquardt fitting that prefers few bands to many, and refuses to correct what it cannot see.

  9. 9Audition

    Hear the correction on your own material before it goes anywhere near a rig.

  10. 10Export

    Coefficients, processor presets, and the settings sheet.

  11. 11Verify

    Keep what the program predicted, load the filter into the processor, measure again — and be told how far the result sits from what was promised. Everything else here produces a curve; this is the only part that checks whether the curve was right.

New in 2.19

Two ways of watching it happen

A capture tells you what the system did. Neither of these waits for that. One window, two modes, and they answer different questions — so the program ships both rather than picking.

Live IR — where, and how far

A short sweep, fired over and over. The impulse response and the arrival distance move while you move the microphone or aim the loudspeaker, in milliseconds and in metres, measured against the loopback rather than against your driver’s buffers.

This is the one for finding a cluster’s arrival time at the mix position, and for the delay between an array and its subs. A sweep puts all its energy at one frequency at a time, so it buys 20–30 dB of noise rejection over a broadband signal and its impulse peak is sharp enough to read.

It is honest about the cost of being quick: a short sweep spends more of its octaves inside its own fades, so a live frame is trustworthy over a narrower band than the capture that follows it. The window prints both frequencies and draws nothing outside them.

Live TF — what it is doing, right now

A dual-FFT transfer function. It compares the reference and the microphone continuously and reports the difference, so it works on pink noise, on the walk-in music, or on the band with the room full. You do not fire a sweep at an audience; this is what you use instead.

Magnitude, phase and coherence, on five transform lengths at once so the bottom of the trace resolves and the top still keeps up. Same loopback the sweep already needs — no new wiring.

And it says what it does not know. The phase trace is marked not aligned until the flight time has been found, because until then it is describing the distance rather than the loudspeaker. Coherence is not drawn at all until two frames have been averaged: after one, the arithmetic gives exactly 1 for any two signals whatsoever — including a microphone that is not plugged in.

Live IR is free, with the rest of measuring. Live TF is what a licence buys — it is not another measurement so much as a different kind of tool: a continuous analyser you work with while a show is running, rather than something you take and put down.

Time alignment

Only aligning the system?
Then you never have to buy anything.

Microphone at the mix position. Measure the left array, the right array, the subs, the front fills and each delay tower, one at a time. The differences between their arrival times are the delays to set, and something holds them and does the subtraction. All of it is Time Align — one of the two halves, and the cheaper one.

The whole job, in order

  1. Loop one output back to the second input. Without that reference the delay is whatever the sound card’s buffers happened to be that run — on one machine here that moved by 70 ms across four runs.
  2. Microphone at the mix position. Set Read from and Read to to the band you want — for subs against tops, the crossover region, where both are producing. The target band is drawn before you fire, so you can see what you are about to read.
  3. Open Live IR. Fire one way at a time and take it — type what it is called (a name is suggested from the band) and press Take this way. Left array, right array, fills and towers go into the table the same way. Do not move the microphone.
  4. Type the tops’ height, the ref mic’s height and — from a laser meter — its distance. The listening card draws the seat and splits each arrival into the air and the rack.
  5. Read the delays off the table and type them into the processor. Then measure again: the arrivals should land on top of each other.
  6. Save measurements keeps the night’s work in a file of its own, to open again for review.

Why not just a rangefinder?

Because a laser measures distance, and what reaches the audience is time — which includes the amplifier, the processor and the loudspeaker itself, none of which a tape can see.

Two identical clusters, both exactly 30 m from the microphone, on different amplifiers: the tape says they are aligned and they are not. A ported subwoofer is worse. A fourth-order 35 Hz alignment — an ordinary box — carries something like 3.7 ms of its own group delay, which is 1.3 metres the rangefinder cannot reach, and subs are rarely on the same processing as the tops, so nothing cancels.

The real trouble is not that a tape is inaccurate. It is that it cannot reveal its own error — the rig where it is fine and the rig where it is 2.5 ms out look identical until something measures them.

Keep the rangefinder for the cross-check. The metres column should read longer than the tape, never shorter, and the difference is your electronics. Shorter means something is wrong — sound cannot arrive before it left.

It knows which way round the answer goes

You can only ever add delay, so the source that arrives last is the reference and takes none; everything earlier is held back to meet it. Delaying the far source instead of the near one produces numbers that look entirely reasonable and put a tower further out of time than it started.

Every delay is shown in milliseconds and in metres, because a delay is a distance and “the tower is 34 metres behind the main” is something you can check by walking it.

Temperature cannot move it

The delay is a difference between two measured times, and neither was worked out from a distance — both were measured against the loopback. A cold hall and a hot afternoon give an identical answer. Only the metres beside it move.

The seat, drawn

A side view under the impulse: the tops at their height, the sub on the floor, the ref mic standing or seated at its distance. Each line carries its arrival and its distance — 94.10 ms · 30.03 m — and its angle from level near the ref mic. Move the ref mic in the card and the metres and angles follow; the milliseconds are measured and wait for a new sweep.

Sub lands 7.20 ms later. Delay the tops 7.20 ms. That answer needs nothing typed. Give it a laser distance and it adds how much of the gap is where the boxes stand and how much is inside the rack — and refuses a processing time that would have the sound arrive before it could fly there.

The site is shaded by level, red near the boxes to blue far away, with a contour line every 3 dB. Only the ref mic’s spot is measured; the rest is predicted from it, 6 dB per doubling of distance, and says so. Load sample shows all of it without a rig.

The ground, and the level

Ground bounce. Over a narrow low band a reflection off the floor cannot be separated from the direct sound and can pull the arrival late — up to 0.49 ms for tops at 3 m and a standing ref mic 30 m out. The card warns, draws the bounce’s path, and gives the cure: the ref mic on the ground, or a wider band.

What the ground is made of. Measure the ground finds that bounce in the impulse at the moment the geometry predicts and says how much the surface returned — hard, fairly hard or soft — with no table of surfaces needed.

The level at the ref mic. Every sweep reports its level and the room’s in the band read, in dB SPL (Z) once the SPL meter has been calibrated against the organiser’s own meter.

And three things it refuses to do

Each of these produces a delay that looks entirely reasonable and is wrong. So the table groups its rows by microphone position and by band, lowest first, and works out delays only inside a group — the main over low, mid and high, the subs with the main’s low, a tower from its own seat — and never subtracts between them.

  • Subtract across two microphone positions Two arrivals from different seats differ by the seat as well as by the source, and no arithmetic separates them afterwards.
  • Subtract across two bands A band-limited arrival is the source’s group delay averaged over that band. One subwoofer, one position, read over four bands, gave four arrivals 4.2 ms apart — 1.4 metres of apparent position, from nothing but what was typed in two boxes.
  • Align anything measured without a loopback That figure is the driver’s buffers, not a distance, so it cannot be compared with anything — including itself an hour later.

On the bench

What did the new woofer change?

The program works on one measurement at a time, which is right for designing a filter and wrong for the question people spend afternoons on. Keep a measurement on the shelf and the next one no longer destroys it.

Measure the box. Change the driver. Measure again. Then overlay the two, or hold them against each other in numbers — with their mean levels aligned first, so what is reported is a difference in shape. A replacement driver of a different sensitivity would otherwise show a flat few decibels across the whole band: true, and not the question. The sensitivity difference is reported on its own line so it is not lost.

And if the program ever closes without saving, it keeps a copy aside and offers your work back when it next starts — still unsaved, still pointing at the file it came from.

The part nobody else does

A page you can type into any processor

Every FIR designer assumes the job ends with a coefficient file loaded into a FIR-capable box. Most boxes in the world are not that, and the engineer standing in front of a DriveRack is not going to buy a rack to use a measurement tool.

So the tool prints the numbers instead: crossover points and slopes, delays in milliseconds and samples and metres, polarity, gain, the band list with Q and bandwidth both, and the limiter settings for every way. A system set up from that sheet and a DriveRack gets the alignment, the crossover and the EQ. It gives up only the linear phase.

  • Prints, emails, or survives being photographed on a phone
  • Readable six months later without this program installed
  • States what it does not model, so nobody treats it as a guarantee
================================================================
  SYSTEM SETTINGS SHEET
  Main hangs - 4-way line array
  48000 Hz    343 m/s assumed for distances
================================================================

  WAY 4   High 1.4" horn
----------------------------------------------------------------
  Crossover      high-pass  1.60 kHz  Linkwitz-Riley 24 dB/oct
                 (no low-pass - this way runs to the top)

  Delay          4.104 ms   197.0 samples   1.408 m / 4.62 ft
  Polarity       normal
  Gain           -4.5 dB

  RMS limiter    threshold  -1.72 dBu   -3.94 dBV   0.635 V
                 attack 0.62 ms      release 100 ms

  Working        driver 80 W AES / 8 ohm  ->  25.30 V
                 amp 700 W / 8 ohm, 32.0 dB gain
                 timing from one period of 1600 Hz
                 at the threshold the driver sees 80 W

Processor limits

It designs what your processor can actually take

Fitters do not know what your box accepts. On a narrow room mode one will happily return Q 8, and on a deep dip it will ask for +15 dB. Plenty of processors stop at Q 4 and +13 dB, and every brand draws that line somewhere different.

Tell it what yours takes and Auto Fit works inside those limits. Not fitted freely and clamped afterwards — that would leave a curve nobody optimised, with no record of what moved. Bounded, it places bands differently: two gentle ones where a narrow one was not allowed.

And when a limit genuinely bites, it says so by name rather than quietly handing you a gentler correction than the measurement justified.

  • Pick your processor from a list, or type four numbers off its manual
  • Works for the legacy box no shipped device list would ever include
  • Separate limits for FIR — taps, rate and latency budget
  • Boost and cut are separate, because real processors are lopsided
  • Nothing is clamped or shortened for you — it tells you, you decide
  Processor      RHAON STLA/9R (fw 1.10)
  Boost / cut    +13.0 dB / -18.0 dB
  Q              0.10 to 4.00
  Source         reported by the owner of the unit

  ---- after Auto Fit -------------------------------------------

  Fitted 6 bands in 25 iterations: 2.19 dB RMS error
  reduced to 0.16 dB. 1 band was held back by RHAON
  STLA/9R - the fit wanted more than it accepts

  ---- after designing a FIR ------------------------------------

  RHAON STLA/9R holds 256 taps but this design is 1025.
  Shortening it costs resolution at the low end first,
  which is usually where the correction was needed.

  ---- on the settings sheet ------------------------------------

  * Band 2 (420.2 Hz) asks for 15.00 dB of boost;
    RHAON STLA/9R stops at +13.00 dB.

Limiters

The same rig. Thirteen decibels apart.

An 18″ sub and a compression driver on one system want completely different limiter thresholds, and a single setting is wrong for both. The threshold is arithmetic — the driver’s rating referred back through the amplifier’s voltage gain — so the tool computes it per way rather than leaving you to guess.

18″ sub · 1600 W AES · 4 Ω

+8.28dBu

+6.06 dBV · 2.010 V
attack 33.3 ms, release 333 ms

1.4″ horn · 80 W AES · 8 Ω

−1.72dBu

−3.94 dBV · 0.635 V
attack 0.62 ms, release 100 ms

Give the horn the sub’s number and it sees

13.01dB too much

which is 10 × log₁₀(1600/80), exactly.

Three units, always, on the same line

Processors disagree about whether their threshold field means dBu, dBV or volts, and dBV sits exactly 2.2185 dB below dBu. Reading one into the other’s field is 2.2 dB hot — which a sub shrugs off and a compression driver does not. So every threshold is printed in all three and nobody converts anything at one in the morning.

And it refuses to guess

No driver rating, no suggestion. Thermal time constants, excursion below box tuning, and what a real amplifier does into a real load are named on every sheet as not modelled, because a threshold presented without them is a number people treat as a promise.

Several positions

What EQ can fix, and what it cannot

A measurement taken at one place describes one place. Part of what it shows is the loudspeaker, and EQ fixes that everywhere. The rest is the room, and EQ “fixes” that at the microphone while making every other seat worse. One measurement cannot tell them apart — not because it is a poor measurement, but because the information is not in it.

Measure the same source from several seats and the tool separates them. What is the same everywhere is the loudspeaker; what moves as you move is not.

Six seats, one loudspeaker — the example set that ships with the tool
FrequencyWhat it isSpread across seatsCoherenceVerdict
94 Hzport tuning2.1 dB0.97EQ it
331 Hzreflection null20.8 dB0.97leave it
1804 Hzhorn dip6.4 dB0.97EQ it

Coherence is 0.97 at all three. Coherence tells you how good the measurement is, not whether the thing it measured exists anywhere else — a 20 dB null in one seat can be a flawless measurement. Without the position check, a fitter would happily correct all three.

Pricing

Sixty days of everything. Then the half you need, or both.

Measuring never stops being free. The demo unlocks everything for sixty days; after that you keep measuring, aligning and reading every number on screen for good, and a licence is what lets you keep the work — save the project, write the settings sheet, export the coefficients. The two halves sell separately, because plenty of people only ever need one, and together for 20% less.

One half

Time Align

USD 167.22 or PHP 10,500 within the Philippines

Where the sound arrives from, and when

  • What this half unlocks: saving and reopening projects, the settings sheet, and Live TF. Everything else below is free for everyone, with or without a licence.
  • Measurement, with your own interface and microphone
  • Live IR — watching the arrival while you move things
  • Live TF — the continuous analyser: a crossover region checked, a delay confirmed by phase, while the system plays
  • The arrivals table — several sources, one microphone, the delays
  • A measurement library, to hold one against another
  • Measurement import and microphone calibration — in both halves
  • Multi-way system tree with per-way delay and polarity
  • Alignment, and how exact it has to be
  • Several-position analysis
  • The settings sheet — the page you type into the rack
  • Saving and reopening your projects

The other half

Correction

USD 151.30 or PHP 9,500 within the Philippines

Handing the processing to the rack

  • What this half unlocks: the coefficient and processor preset exports, and the per-way limiter and compressor thresholds. Designing is free — Target, FIR, IIR / PEQ and Auto Fit all work without a licence. This is what lets you hand the result over.
  • Target curves and FIR design
  • IIR / parametric fitting
  • Auto Fit
  • Per-way limiter and compressor thresholds
  • Coefficient and processor preset export
  • Measurement import and microphone calibration — in both halves, so a measurement taken in Smaart or REW can be corrected here

Buying one

PayPal internationally, GCash within the Philippines. Email [email protected] with the name the licence should be issued to and you will be sent payment details and, on payment, your licence file. Licences are issued by hand, by a person, usually within a day.

Your licence is a small file. Keep it — it is the licence, it is not tied to any one computer, and the same file works wherever you install the program. If you lose it, ask and it will be sent again.

The name is inside the file and cannot be changed afterwards without a new one being issued. If the licence is for a company, send the company name.

For help afterwards, open a ticket on the issue tracker or email the same address — whichever you prefer. Either reaches the person who wrote the program, and there is no queue in front of you.

There is no money-back guarantee. That is exactly why the demo is sixty days of the whole program, unlocked: measure your own loudspeakers, with your own microphone, in your own room, before you pay anything. Nobody should buy a measurement tool on a promise when they can buy it on a measurement.

Version 3.35.6 · 21 September 2026

What changed

The recent releases. Everything older is on GitLab, filed with the release it shipped in.

Be told when there is a new one

  • Watch the project on GitLab Sign in, open the project, and set the bell to Custom → Releases. GitLab mails you on every release. Nothing is collected here and nothing is installed.
  • Subscribe to the feed This Atom feed lists every release as it happens. Any reader will take it, no account needed. This is the one to use if you would rather not hand an address to anybody, including us.
  • Ask to be emailed Send one line and you go on a list used for exactly one thing: a short note when a version ships, saying what changed. No newsletter, no forwarding, and say the word and you are off it.

The program itself never checks for updates. It makes no network calls of any kind — that is the point of it — so the checking has to happen here rather than on the machine in the rack.

3.35.6 — designing is free; handing it over is what is sold

  • Three parts of the program gave three answers Asked whether designing a filter needs a licence, the engine said no — it gates five call sites and every one is an export or the limiter thresholds. The stage tabs said yes and locked Target, FIR, IIR / PEQ and Auto Fit. The demo panel managed to say both, one paragraph each. The engine was right and the tabs are gone.
  • The tabs could never have been right The aligning half owns no stage — Save is in the top bar and the settings sheet is a button inside Export — so four tabs went dark for Time Align and none at all for Correction, at nearly the same price. That lopsidedness came from the shape of the window, not from what was being sold.
  • You can now walk the whole program Design the correction, run Auto Fit, hear it in Audition — and meet the wall at the button that would hand it to a processor, which is the moment you know what you would be buying. Each half now says on the site exactly what it unlocks, and what is free for everyone.

3.35.5 — the licence is offered at the click, not after the work

  • A refusal arriving after you chose a file is a refusal too late 3.35.4 made a refused save speak, which was the fault as reported. It still opened the file dialog first — so you picked a folder, typed a name, pressed Save, and only then heard no. Every gated action now asks before the dialog opens, and answers with the licence panel showing the reason and the prices, the way a locked stage tab already did.
  • Five actions, and each names its own half Saving a project and the settings sheet belong to Time Align; the PEQ export, the FIR export and the bulk coefficient export belong to Correction. They had all been saying “a licence” without saying which — and the settings sheet sits on the same panel as two Correction exports, so the distinction is not academic.

3.35.4 — a refused save said nothing at all

  • Save refused, wrote nothing, and showed no message Found by pressing Save with a Correction licence loaded: no complaint, and no file either. The gate was right and the refusal set a message naming the half that would have permitted it — but of the three routes to saving, only the one on the way out checked the result. The Save button and the Save dialog threw it away, which is precisely where it needed saying: a refusal that writes nothing and says nothing looks like it worked.
  • All three routes now report They go through one function, so a refusal cannot be silent down one and spoken down another. You get “Nothing was saved”, the reason, a reminder that the work is still open and nothing on disk has changed, and the licence panel one button away. It covers the reasons that were never about licensing too — a folder that is not writable, a full disk — which were silent in the same way.

3.35.3 — the program was still describing the product it used to be

  • The refusal named the wrong half Both gates printed the same sentence, “Designing a correction needs a licence” — so somebody holding a Correction licence who pressed Save was told they needed the licence they were holding. That reads as a broken licence rather than a boundary. One message per half now, each naming the licence that would have answered yes.
  • The demo dialog promised what the gate refused It said measuring and aligning were free for good, listing save and the settings sheet among them — both of which had moved into the aligning half at 3.35.0. Rewritten around where the wall actually is: measuring never stops being free, and a licence is what lets you keep the work.
  • The price was the old one The dialog quoted USD 360 / PHP 20,500 for “one edition” — an edition that has not existed since 3.35.0, at a price above the Suite. All three are shown now, with what each is for.
  • The locks only knew about one half The stage tabs carried a single flag marking the correction stages, and it asked only whether the demo had expired — so any licence opened Target, FIR, PEQ and Auto Fit, and a Time Align holder was stopped at the export instead. Each stage now says which half it belongs to.

3.35.2 — three faults in licensing, all found by using it

  • The generator was signing with a key nothing accepts Two signing seeds exist; one was retired when the production key came in. Three licences went out signed by the retired one. The check added in 3.35.1 could not catch it — it verifies against the seed it was just handed, so it passes while signing with a key no build accepts. It now compares against the key compiled into the same tree, refuses outright, and writes nothing. Every licence prints the fingerprint it was signed by.
  • Removing a licence did not remove it The record lives in six anchors so that deleting one is worth nothing. All six were read; four were written. So removing blanked the four, and the next launch found the old licence in the fifth and put it back — there was no way to reach an unlicensed state at all. Read and write now cover the same set.
  • Live TF moved to Time Align Found by trying an Align licence on real hardware: the window came up grey. A transfer function is how a crossover region is checked and a delay confirmed by phase, which is alignment work — and Live IR and Live TF are two tabs of one window, so splitting them across the halves meant one window whose tabs belonged to different products. Verification is unaffected.

3.35.1 — the licence generator was issuing something unreadable

  • Found by trying to use it The command-line generator had been obsolete since the move to Ed25519: it produces a printable key from the old scheme, and the application dropped that scheme when it went to licence files. So the one generator that can be scripted issued something nothing can read. It built, its tests passed, and nothing said so. It issues real licence files now, and reads each one back through the verifier before writing it.
  • The join nobody was testing The file round-tripped and the rule answered correctly for a given edition, but nothing checked that the edition coming out of a signed licence is the one the gate then reads — which is exactly where a licence sold as one thing could quietly behave as another. Twelve checks now issue a real licence for each half and ask both gates what it permits, with the demo expired so the demo is not answering instead. Editing the edition in a text editor breaks the signature.

3.35.0 — two halves, sold separately, and measuring stays free

  • Look all you like; keep it when you have paid The program has always had two halves and only one was for sale. Now both are, separately or together — and the line is drawn at the deliverables, not at the microphone. An unlicensed program measures your room, aligns your system and shows every figure it worked out; it just will not write the file. Saving a project and the settings sheet are Time Align; designing a correction and exporting coefficients are Correction.
  • Importing works in either half Not a detail: a Correction licence cannot fire a sweep, so without import it would have nothing to design against. A measurement taken in Smaart or REW can be corrected here.
  • The edition is a bit per half Suite is not a third thing to keep in step — it is literally Align | Correct, and a fourth half later is another bit. A test pins it, because the failure it prevents is handing somebody the half they did not buy, which nothing else would ever complain about.

3.34.1 — the analyser was painting outside its own window

  • Found the first time it ran on real Linux On Fedora the analyser’s explanation was drawn below its own window, over the main window’s plot. A QML layout does not clip: once the wrapped paragraphs came to more than the window had, the overflow painted onto whatever was behind it. The fault was always there — Windows resolved a font that wrapped them to fewer lines, so it never showed. A layout whose height depends on font metrics is one system font away from this.
  • Clipping is the floor, not the fix On its own it trades an overflow for text silently cut off, which is the same failure in a quieter coat. The explanation is bounded to a third of the window and scrolls within it; the plot keeps the rest. The live windows survived the same font change because their panels have been scrolling all along.

3.34.0 — the audition was comparing the source against itself

  • Bypass off with nothing processed played the source and called it filtered Play has always refused to start un-bypassed when nothing has been processed. The bypass switch did not — and that is the button the comparison uses. Start on Bypass, press Play, switch to Filtered, and playback falls back to the original while the status line reads “Playing: filtered”. Two identical signals, presented as a comparison.
  • Redesigning the filter left the old processed audio in place The audition watched the filter’s sample rate and nothing else, so changing a band and listening again played the previous filter. That is the worst answer to give an A/B, because the conclusion you draw is “the change did nothing”. A new filter now discards audio processed with the old one and says so.
  • The test found a third case After a filter change while not playing, bypass stayed off, so the button still read “Filtered” with nothing behind it. The playing case had been handled and the idle one had not.

3.33.3 — the last controls that came from somewhere else

  • The spin box was Qt’s own The program runs the Basic style, which draws a control light whatever the rest of the window is doing. The analyser’s block count was a white box with grey chevrons, a head taller than the control beside it. It is dark now and the same height as everything else, with a minus and a plus rather than chevrons — that is what the control does, and each goes faint at its limit instead of vanishing, so the row does not twitch at either end of the range.
  • And eight text boxes nobody had mentioned Checking whether the spin box was alone turned up eight plain text fields with no theming at all — including both fields in the calibration dialog, a dark panel with two white boxes in it. All eight use a themed drop-in now.
  • What is still stock, written down rather than left to be found Four text areas, three check boxes that bypass the themed one that already exists, and the export sheet’s tab bar. Those live in panels not opened while working on this, and restyling views nobody has looked at is how one visual fault becomes three.

3.33.2 — one control height, from one token

  • Three heights in a single row A button was 30 tall; a combo box never set its own height so it took the style’s, about 40 — the controlHeight in that file turned out to be the popup delegate, not the control; and a labelled number field stacked a caption of no fixed height over a 30-tall box, so its total varied with whatever font the system resolved. That is most of what makes a window look assembled rather than designed.
  • The same relationship had two numbers The gap between a caption and its control was 3 in the analyser and 4 everywhere else. There is one token for it now, and a caption has a fixed height so a stack of label-plus-control is the same everywhere it appears.
  • Dividers built from three numbers that nearly agreed The analyser’s group rules were controlHeight + fontSmall + 3, which happened to come out near the height of the groups beside them. They are that height by construction now.

3.33.1 — chrome is calm, data is saturated

  • The furniture and the measurement shared a tin of paint The accent colour was the same value as the measured-response trace, so a button you had pressed and a number the microphone produced were literally indistinguishable. The palette is split in two now: chrome for selection, focus and hover, kept calm; data for traces and bars, which keep the bright hues.
  • It also failed legibility, which is not a taste question White text on the old accent measured 2.75:1, under the 4.5:1 floor for normal text — every primary button and every lit segment in the program. The muted value measures 5.24:1. Calming the chrome made it more readable, not less.
  • Three marks stopped borrowing colours they did not own The analyser’s bars read a status colour, so changing what “pass” looks like would have silently repainted them. The impulse window and a plot’s fallback trace borrowed the chrome accent, so muting the furniture would have muted a measurement with it.
  • And the workaround it justified is gone Every button carried an overridable colour, for one reason: the analyser had to repaint its buttons in its own data colour. Chrome and data cannot collide any more, so a lit control looks the same in every window.

3.33.0 — one control for one question

  • Every “pick one of these” is a single control now Five resolutions, Bars against Line, Fast against Slow, the view switches, the auxiliary-plot picker — all were rows of separate buttons with gaps between them, reading as independent actions that happen to be adjacent. The only thing saying otherwise was which one was lit, and highlighting is the last thing a reader looks at. A segmented control says it structurally. Deliberately not used for actions: Listen, Clear max and Calibrate stay buttons, because they do something rather than select something — a distinction that was invisible when both were the same pill.
  • A toggle that renamed itself The SPL window’s meter switch was one button whose label changed to whichever mode you were in — the most confusable shape a toggle has, because nobody can tell whether the word names the current state or the thing the press will do. Both states are visible now and the lit one is the answer.
  • The grid was being drawn on top of the data Gridlines ran straight through the analyser’s bars, which is what made that plot look muddy rather than crisp. Grid belongs behind data. The hint and the pointer tooltip moved to their own layer in front — which also made the plot cheaper, since hovering used to repaint the whole grid on every mouse event because the tooltip lived in it.

3.32.3 — both meter windows resize properly

  • The analyser was clipping its own controls at the default size A RowLayout neither wraps nor shrinks, and that has cost this window its last control three times — Clear max twice, then Calibrate at the default window size, which is the worst version because nobody resized anything to cause it. 3.32.2 bound the minimum to the row’s implicit width and it still clipped: the groups size themselves with Layout.preferredWidth, which does not feed implicit width, so the measurement under-counted. It is a Flow now — it wraps, so there is no minimum to compute and nothing to fall off the end.
  • The big SPL reading fits its card The type size was 18 percent of the window width — a guess about how many characters there would be. The count changes: 93.6 is four, 103.7 is five, and five ran off both sides. The old figure is a ceiling now and the text shrinks only as far as it must.
  • Weighting is a dropdown, one per band Six buttons and two bare captions became two dropdowns. Once a row wraps, a label is a separate item from the buttons it names — SUB ended one line and its Z A C began the next, and a caption that has drifted from its control is worse than none. Still per band, which is the part that matters: A-weighting is 30 dB down at 40 Hz, so the setting that suits the tops ruins the sub.

3.32.2 — the SPL window resizes

  • The control rows wrap now This window is dragged onto a second monitor and an LED wall and resized to whatever is there, and its two control rows were RowLayouts — which do not wrap and do not shrink. Past their natural width they simply stop drawing whatever is at the right-hand end. Thirteen buttons and six number fields in a 560-pixel minimum window meant most of them were not on screen, and nothing looked broken: it looked like the features were never built. They are Flows now, and the minimum width drops to 420. That is the difference between responsive and merely resizable — a row that cannot wrap has no minimum it can honour.
  • The stale-calibration banner pushed the controls off the bottom Two lines of red appear without warning, and the window minimum was a hand-written 400 — so the control rows went off the bottom exactly when something had gone wrong and those controls mattered most. The minimum is measured now, from the banner and the two wrapping rows. Not from the meters: their type size follows the window height, so measuring them would be a height that depends on itself.

3.32.1 — and Listen works with them

  • A format disagreement stopped Listen entirely Endpoint formats must agree to PLAY a stimulus and RECORD it on one clock. Reading a microphone needs nothing from the output — but a disagreement cleared the ready flag and made the whole device unusable. A Realtek microphone array against a headphone output disagrees almost by definition, so picking them by hand and pressing Listen did nothing at all. Listening stands; only measuring is refused, and it says why.
  • Refreshing wiped a hand-picked pair The refresh asked whether the selected name was still in the paired interface list. A combination chosen with the In/Out pickers never is — its label is made up on the spot — so every refresh decided it had been unplugged and cleared it. It now asks whether those endpoints are still present, which is what it was always really asking.

3.32.0 — you choose the endpoints now

  • The pairing was choosing for you, silently An interface here is a pair — an input endpoint and an output endpoint recognised as one box, matched by name, because on Windows the two halves share nothing else. A card that puts several inputs behind one name defeats that: a Realtek offers Microphone Array and Stereo Mix against a single output, and Stereo Mix captures playback — it opens cleanly, sits at a low hiss and never answers a voice. There was no way to see the choice and no way to change it. Now there are In and Out pickers listing every endpoint, with the pairing still the default.
  • Input only is a real configuration The SPL meter and the RTA read a microphone and need no output, no loopback and no second channel — yet they were gated behind a pairing they never use, so a plain USB measurement microphone could not be selected at all. Set Out to none and they work. Sweeps, Live IR and Live TF stay unavailable and say why rather than sitting inert.
  • The format was never checked before the device was opened Qt does not define what happens when a format is unsupported — the source may fail, or start anyway and deliver bytes in another layout. Read as float, misread bytes are flat noise at a plausible level: it opens, data flows, nothing errors, and it looks exactly like a working measurement of a noisy room. It is checked now, and the device's own rate and channel count are adopted out loud instead.
  • Three facts it knew and never showed Which endpoint is open, what it asked for, what it got — all on one line under the pickers. If the last two disagree in a way you did not choose, that is the fault.

3.31.0 — two SPL meters, for two boxes

  • One meter or two At a shootout the subs and the tops are separate boxes judged separately, and one broadband number cannot say which of them is loud — a rig can be 6 dB up on the subs and dead level on the tops. One meter stays the default, because not all measuring is a shootout.
  • The two bands overlap, and that is the idea 18–250 Hz for the subs and 60 Hz–20 kHz for the tops, so 60–250 Hz is counted by both. A sub makes energy at 200 Hz whatever the crossover says, and a full-range top really does put energy at 60. This is why it is two independent pairs of edges and not one split point: a split can only make bands that touch, which forces the tops to begin exactly where the sub stops. A test pins it — a 100 Hz tone reads -9.031 dBFS on both meters, counted twice, not halved.
  • Each band weights itself, which is correctness not preference A-weighting is about 30 dB down at 40 Hz, which is why sub limits are quoted dBC and never dBA. With two meters the setting that is right for the tops is the one that ruins the sub, so each band has its own Z/A/C — Z on the subs, A on the tops.
  • A moved band forgets what it measured Changing an edge or a weighting throws away that band’s Leq and max hold. An Leq accumulated over 18–250 Hz and then continued over 18–120 is two measurements added together and reported as one.

3.30.0 — the analyser stops sending you to another window

  • It can start listening by itself The analyser reads the input stream, and with that stream stopped the plot is empty. It used to say “press Listen in the Measure stage” — a message telling you to go to a different window and do the one thing this window was waiting for. The SPL meter has had its own Listen button all along; the analyser, built later for the same job, never got one. It is in the middle of the empty plot now.
  • And it can calibrate the microphone it is reading Calibrate opens both calibrations at once, because they are different things constantly mistaken for each other: the microphone file is per band and corrects your capsule’s own curve, while the SPL offset is one number that turns dBFS into dB SPL. This matters more in the analyser than in the meter — a meter shows one broadband figure where capsule error partly averages out, but the analyser shows every band separately, so an uncalibrated microphone’s response is drawn into the plot as though it were the room’s.
  • An empty field calibrated against zero The dialog read Number(field.text), and Number("") is 0, so pressing OK with nothing typed set an offset against a 0 dB reference. The validator stops a bad number being typed; nothing stopped no number.
  • The manual denied having an RTA The scope section, written long before the analyser existed, still said “there is no live analyser, no RTA” — three sections above the one documenting it. It also now says which windows can run together, because nothing anywhere did: the microphone is not the limit, the loudspeaker is.

3.29.2 — the analyser draws like an analyser should

  • The bars moved to the graphics card They were drawn by a software rasteriser: 480 bars two pixels wide is about 190 000 pixels a frame, coloured in one at a time by the processor. Measured before: 116 frames a second at 1/3 octave and seven at 1/48. They are scene-graph geometry now, so 480 bands cost what 31 cost — and it is the lighter path, which is the point: it removes that rasterise and a multi-megabyte texture upload from every frame. On a modest laptop that is the difference between seven frames a second with a core pegged and sixty with it idle.
  • The transform left the thread that draws One analysis is tens of milliseconds at the fine resolutions, and it was running on the thread responsible for the picture — about a third of every interval with the renderer stopped. It runs on a worker now, and a tick arriving while one is still going is dropped rather than queued.
  • And it stopped paying for a number it then calls unreliable Resolving 25 Hz at 1/48 octave needs about seven seconds of signal and a quarter-million-point transform — 49 ms each, against 11 for a block four times shorter. The display was already drawing those bands hollow and naming the frequency, because a shorter block cannot resolve them either way. It now reads a second and a half: everything above about 100 Hz resolves at every resolution, and below that the bars stay outlined and say so.

3.29.1 — a real-time analyser that admits what it cannot see

  • 1/3 to 1/48 octave, with the averaging a meter has None, one to ten blocks, or the Fast and Slow time constants from IEC 61672 — applied per band, on energy, exactly as the SPL meter applies them broadband. Peak, and a maximum held per band. Inside the program rather than beside it, because two programs cannot share one interface in Windows shared mode.
  • It agrees with the SPL meter to 0.00 dB Written against the same band-RMS code: the same Parseval sum, the same window with its power divided back out, the same largest-power-of-two block that never pads. A test measures one band both ways and compares. Two windows reading one microphone must not show a room as two numbers.
  • And it says which bands it cannot resolve yet A finer band is a narrower filter, and a narrower filter needs longer to settle: 1/48 octave at 20 Hz is 0.29 Hz wide and wants about seven seconds. That is the uncertainty relation, not an implementation detail, and no analyser escapes it — most draw a confident bar there anyway. Here those bands are drawn hollow and the footer says where the line falls.
  • A frequency scale, and a number under the pointer The first build of it had neither: a wall of bars with nothing to say which was 1 kHz and no level to read off it. The axis now runs 20 Hz to 20 kHz on the same gridlines as every other plot here, hovering any bar reports its frequency and level at the pointer, and with nothing hovered the header reads the loudest band — which is what somebody feeding a tone into a system is looking for.
  • And it draws at the screen’s rate, not the analyser’s The bars used to move only when a frame of analysis arrived, ten times a second, which on Slow is exactly the stepping the eye picks out. Drawing now happens on every rendered frame and takes its step from the elapsed frame time, so the bars move at the same speed on a 60 Hz panel and a 144 Hz one — twice as smoothly on the second. It draws the path between two measured points and invents nothing: the readouts report the measured value, never the animated one.
  • The bands are the ones printed on your rack The ISO 266 preferred series — 20, 25, 31.5, 40 … 1.25k, 1.6k, 2k … 12.5k, 16k, 20k, the classic thirty-one at 1/3 octave and sixty-one at 1/6. IEC 61260 allows two systems, and the other one puts a band at 1984 Hz where every graphic equaliser is marked 2 kHz. A band this calls 2 kHz has to be the band your processor calls 2 kHz, or every figure carried between them is about a slightly different slice of the spectrum.
  • And the room’s own noise, drawn behind the bars The single most useful thing an analyser can say and the one nothing else says: how much of what you are looking at was already there. Bands within 6 dB of the room’s noise are drawn dim, because acting on one of those means equalising the air handling. The microphone’s own response is taken back out when a calibration file is loaded, and the footer names every setting in force — a level quoted without them is not a level.

3.28.0 — the sample is a room now, and it found things

  • Two samples, simulated and then measured A new user used to open empty plots with no way to find out what any of it does without an interface, a microphone, a PA and a room. Now there is a room: a rig at a mix position — two hangs, subs, a front fill, two delay towers, a floor that reflects — and a three-way box on a bench three metres away. The program’s own sweep is played through the model and handed to the program’s own measurement engine, so the magnitude, the impulse, the arrival and the floor comb are all measured. Nothing is drawn, because a drawn curve agrees with nothing.
  • It gave a never-tested feature its first evidence Working out how far a loudspeaker is from the gap between the direct sound and its floor reflection — no laser, no tape — could never be checked, because checking wants a room with known distances. Pointed at this one it reads 30.29 m where the room is 30.22, inside the third of a metre it claims for itself. The comb predictor says the first null is at 237 Hz; the measured curve is 8.5 dB down there. Two parts that had never been compared, agreeing to half a decibel.
  • And it teaches the thing a drawing cannot The subs arrive about eight milliseconds late although they stand nearer, because a crossover is a filter and a filter takes time. On the bench the horn sits 22 cm behind the woofer, so by geometry it arrives last — and measured through the crossovers the low arrives last instead. Nobody typed either number.

3.27.2 — the meters tell the truth, and move at a readable speed

  • The input meters read full scale with nothing plugged in Reported from a desk: an interface detected the moment it was connected, and both meters sitting at 0.0 dBFS — the loudest reading there is — with no microphone and no loopback attached. 3.26.0 gave every input its own meter and lost the starting value doing it, so until you pressed Listen the bars showed whatever happened to be in that memory. A meter is one of the few things on screen an operator trusts without checking.
  • They fall three times more slowly 20 dB per second instead of 60, which is where broadcast peak meters sit and what a hand on a gain knob can follow. Rise is still instant: a peak that is not shown is a peak that warned nobody.
  • And the SPL meter now reads at the rate a meter reads at Slow was being applied correctly — a one second time constant on energy, as IEC 61672 defines it — but the number was redrawn twenty times a second, so the tenths digit churned however smooth the value underneath was. What the eye read as a fast meter was that digit. The display now samples twice a second on Slow, four times on Fast, and the limit alarm reads the same number it shows.

3.27.1 — one licence, every operating system

  • There is no such thing as a Linux licence A licence is bound to the signing key and to nothing else — not a machine, not an install, not a build — so an operating system is one more thing it is not bound to. The same file works on Windows, Debian and Fedora. That was already true; now there is a test that keeps it true.
  • A licence saved with a byte-order mark was refused Three invisible bytes from an editor’s “UTF-8 with BOM” made the program tell somebody holding a perfectly good licence that it was not a Sonasync licence file. True about the bytes, wrong about the situation. Line endings of every persuasion are accepted now — and a licence that was edited is still refused, which is the part that matters.
  • The Linux build left two odd files wherever you started it Two of the four anchors that make the demo hard to reset are written as registry paths, and only Windows has a registry. Off it they became file names relative to the working directory. They now live under ~/.config, where they belong.
  • And the machine-wide anchor was not machine-wide It looked for ProgramData, which no Linux machine has, and fell back to a place that already had a copy. Four anchors on Windows, four on Linux.

3.27.0 — it runs on Linux

  • A .deb and an .rpm, from the same source and the same tests Debian and Ubuntu, Fedora and openSUSE. The whole suite — 2558 checks across 27 binaries — passes on Linux exactly as it does on Windows, and the build script refuses to package anything if it does not.
  • Dependencies named, not bundled The opposite of the Windows build, and the right answer here: a distribution patches and updates its own Qt, and a bundled copy would be neither.
  • Four things that only a real build finds A missing QML module that fails at startup rather than at install; Windows font names that Canvas refuses rather than substitutes, so every plot label complained; a binary installed under a name the desktop entry did not run; and no PNG icon, only a Windows .ico.
  • What it does not yet prove It compiles, tests and starts on Linux. It has not measured anything there: device enumeration through PipeWire needs a real machine with an interface in it, and that is the next thing to find out.

3.26.0 — any two inputs, and an interface that settles itself

  • The microphone and the loopback can be on any two inputs Sonasync used to open two channels, which on an 18-input interface meant patching into the first pair and nothing else. It now opens the interface’s own channel count and lets you pick — input 5 and input 6 if that is where the cables are.
  • Its own count, not two, and that matters Asking Windows for two channels on an eighteen-channel device invites it to downmix all eighteen into them. A “microphone” that is secretly a mix of everything measures, looks plausible, and is wrong.
  • Windows takes a moment to let go — so it waits Reported from the field: close Sonasync, reopen it a minute later, and the endpoints come back disagreeing about their format although nothing was changed. The workaround was toggling 48 kHz to 44.1 and back in Sound properties. A disagreement is now re-read twice before it is believed, and the panel says it is settling rather than shouting that measuring is turned off.

3.24.0 – 3.25.0 — the dips that belong to the floor

  • Sonasync now says where the floor cancels, before anything is fitted At this microphone the floor cancels at 508 Hz, 1.52 kHz, 2.54 kHz… Exact, from the two heights and the distance, and marked on the frequency axis beside the bands.
  • It is the most expensive mistake in tuning The comb looks exactly like a loudspeaker fault, and a fitter will put nine decibels of boost into a 510 Hz null. That does nothing at the seat it was measured at — the cancellation is still a cancellation — and adds nine decibels everywhere else, into the amplifier’s headroom and the driver’s excursion.
  • No other tool can refuse it, because refusing needs the geometry A magnitude curve has none. Sonasync measures the box height, the microphone height, the distance and the floor itself, so it can name the frequencies rather than argue about the curve.
  • 3.25.0: and now the fitter refuses them Not a warning after the fact — the points never reach the fitter. On a measurement carrying a real floor comb, the automatic correction put +15.0 dB into a cancellation unguarded and +0.0 dB with the geometry in hand. It says how many points it left out and up to what frequency, and it can be switched off — it is your rig — in which case it says that too.
  • And it says what it does not know How deep, from the measured surface where the ground has been measured and the worst case otherwise — stated, not implied. Only at that microphone: move it and the comb moves. And if the window is shorter than the bounce, the curve does not contain the comb at all, which it says instead of warning about nothing.

3.23.0 — what the filter length cost

  • The filter that ships is not the filter that was drawn Cutting an impulse response to a tap count and tapering it with a window changes it, always. Every tool draws the design and lets the rig deliver the news; this one measures the difference and says it before you export.
  • Compared with the same design at a named longer length Not with an ideal filter: a brickwall is a discontinuity, no tap count reaches it, and an error against one would be unbounded and mean nothing.
  • Two numbers, because either alone misleads The residual — what is left over when the two are subtracted, in dB relative to the sound the filter keeps — and the passband figure in dB and degrees. A filter too short to filter looks flatter in the passband, not better; only the residual puts two lengths in the right order.
  • And what the next step up would buy 2047 taps would leave 6.5 dB less behind, for 10.7 ms more latency — 3.7 m of throw. A number beside its alternative is a decision.

3.22.0 — Explain, everywhere it applies

  • Fixed: the switch changed every stage but only lived in two windows Panel subtitles are shared by the whole program, so turning Explain off in a live window made text disappear in Measure, System and Export with no visible cause and no way back. The switch now sits in the stage strip of the main window as well — one setting, a control in every window it changes.
  • And it now quiets the paragraphs, not just the subtitles 21 standing explanations across Measure, System, Target, FIR, Auto-fit, Arrivals, the library and both live modes follow the switch. Only static doctrine was moved: anything carrying a measured number stayed exactly where it was.
  • The calibrate dialog keeps its instructions Deliberately left out: a dialog whose steps could be hidden is a dialog nobody can complete.

3.21.0 – 3.21.2 — Explain, and calibration where it is read

  • One switch for the standing explanations Sonasync says why, and that is the point of it — but on a four-way card the paragraphs were a quarter of the height, pushing the numbers somebody came for below the fold. Explain puts the doctrine away and leaves the work: the card drops from 1973 to 1498 pixels with nothing of substance gone.
  • It never touches a result, a refusal or a warning Every delay, every ground-bounce caveat, every “read over the wrong band” stays exactly where it was. A quieter program that left those out would be a less honest one, and that is not a trade on offer.
  • On for a fresh install, and it remembers Somebody meeting this program should meet the reasoning. Once they have, the switch stays where they put it.
  • 3.21.2: calibrate from the live windows SPL calibration lived only in the Measure stage, which is not where levels are read — the listening card prints dB SPL at the ref mic and the coverage lanes are drawn on that scale. Both live modes now carry a line saying which scale is in force: levels are in dBFS — the computer’s scale with a Calibrate button, dB SPL (Z), +102.4 dB, set 19 Sep when it is set, or the stale warning in amber when the input floor has moved and the gain knob probably has too.
  • 3.21.1: every way’s angle at the ears, not just the highest Reported from the sample: a sub-and-tops rig drew the tops’ angle and left the sub’s out. All of them are listed now, in the top corner, each in its way’s colour — clear of the ray labels, which is where they used to collide. The Explain switch is in the accent colour and a size up, because a control somebody has to find should not be dressed as a caption.
  • What just happened to a file now goes away again “Saved” is an event, so it clears after eight seconds. A failure stays — something that did not happen is not news that fades.

3.20.0 – 3.20.1 — the distance, without a tape

  • No laser? The floor bounce gives the distance The arrival cannot: it is flight PLUS the rack, so a 6.5 ms processor puts a box 2.2 m further away than it is. The floor reflection escapes that completely — direct sound and reflection leave the same amplifier at the same moment, so the rack delay is in both and cancels in the gap between them. What is left is the two heights and the distance, in closed form.
  • Proven through the program’s own sweep, rack delay and all 30 m read back as 30.17, 12 m as 12.03, with 6.5 ms of processing in the way. Doubling the rack delay moves the answer by nothing at all.
  • It says what it is worth, and refuses when it cannot Every answer carries what one sample of timing is worth in metres. A soft floor with no bounce, a band too narrow to separate one, a gap no pair of heights could produce, or a reflection implying a distance further than the sound had time to fly — each is refused with the reason, never turned into a number.
  • 3.20.1: the one model in the program names where it breaks The coverage lanes are the only thing on screen that is neither measured nor typed, and they now say so in full: measured only at the ref mic, then point source, 6 dB per doubling: a line array does not fall that fast. Everything else either comes off an impulse or was entered by the operator — and where neither is possible, Sonasync refuses rather than filling the gap.
  • Where a distance came from is on the picture typed, measured from the floor bounce, or placed by the arrival — includes processing.

3.19.0 – 3.19.1 — looking down

  • A plan view, switchable with the side view The side view is height against distance — where the ground bounce and the box angle live. The plan view looks down, and it is where FOH left and FOH right stop being the same point. Drawn to scale, the same metres across and down.
  • Every seat a microphone stood in Not just the one on screen, each with how many rows were measured there. A seat with no typed distance is placed by its arrival and says so.
  • It is not a coverage plan, and says so on the picture What is drawn is where you say the boxes are and what a microphone measured from the seats it stood in. Nothing is worked out about a seat nobody measured.
  • 3.19.1: tick what you want drawn Distances, angles and reflections are switches under the plot. Four ways, each with a ray, a label, an angle and a bounce path, is more ink than anybody can read at a mix position. Reflections start off and never hide: the switch carries the count and says in amber how many ways may read late off the ground.
  • Across the room is metres, not decoration Left/right beside height and forward/back, for every way and the ref mic. A box 5 m off the centre at 30 m is 30.44 m away, not 30.03, and that path is what the delay comes from. Off-axis is three-dimensional now, and a bearing sits beside the angle — 9.5° toward house left.

3.18.0 — one band per lane

  • The level is shaded per way, not washed over the whole picture A wash had to ADD the ways to fill the space, and ways are read over different bands — a sub over 80–400 Hz summed with a hi over 800–2500 and captioned with one of them. Each way now has a lane of its own: one band, its own measured level, 6 dB per doubling, every lane on one scale with whole 3 dB steps marked and the ref mic line straight down.
  • An “all ways” lane only when they share a band Which is exactly how the card tells you to read a crossover pair.
  • A box is drawn as what you say it is Stack on the deck, cabinet on a pole, flown hang, horn, delay tower — beside the height and the place, defaulting to what the height implies. The old picture had two silhouettes chosen by height alone, so a delay tower drew as a little flown box. It cannot come from the band: an aligned pair is read over the band they share, so a mid and a hi would draw the same.

3.17.0 – 3.17.2 — call a way what you call it

  • 3.17.2 — fixed: the mids and the highs could not be read “Read from” stopped at 500 Hz. Two ways are aligned by reading both over the band they share, and a mid and a hi crossing at 1.6 kHz share nothing below 500 — four ways in the rack and only the bottom one measurable. The limit is the sample rate now: 11.2 kHz at 48 kHz, so a mid–hi pair reads over 800–2500 Hz and a horn over 8–16 kHz. Nothing about the low end changed.
  • The name is typed, not chosen from a list Infra, Low-mid, Main L hi, Delay tower 2 — a real rig does not fit five words. One is suggested from the band on screen and overtyped whenever it is wrong; the arithmetic never looks at the name.
  • The rig’s own order Each name keeps its own height and place, and the ways stack by the height you typed — lowest first — so the drawing matches the rig rather than a list in the program.
  • Fixed: a saved file did not appear in the list Saving changes no row, and the list only refreshed when a row changed, so a good save looked like a failed one.
  • 3.17.1: which night is on screen The name of the opened file sits above the table and on the listening card, and the row in the saved list is marked. Change anything and it says edited since it was opened until you save. It changes no number — it only says which numbers these are.

3.16.0 — every way, not just a pair

  • Sub, low, mid, hi — as many ways as the rack has Reported from a quadrangle job with four ways and a card that had two buttons. Fire each way on its own and take it; the one that lands last takes no delay and the card says how long each of the others waits.
  • A way read over its own passband is named and set aside “read over 1600–20000 Hz, not 80–400 Hz” — never folded in. Read the pair you are aligning over the band they share.
  • Every way has a height, including a flown sub To the middle of the driver that plays that way, not the bottom of the cabinet. The plot draws each way in its own colour, with its band, its line and its ground bounce.
  • 3.16.1: the night’s files, listed Saved measurements appear under the Save button, A to Z — one click and a prompt puts a night’s work back on screen. They live in Documents/Sonasync/measurements.

3.15.0 – 3.15.1 — keep the night’s work, and the ref mic’s angle

  • Save and open the measurements on their own Every arrival, the layout and the measured ground in a .sonalive file, without the rest of a project — opened again, the listening card and plot come back for review exactly as they were.
  • Export CSV One line per arrival for a spreadsheet: band, arrival, distance, delay, levels. One way — the .sonalive file is what reopens.
  • Distance and angle on the lines 94.10 ms · 30.03 m on each line, and 2.5° below level near the ref mic. Move the ref mic in the card and the metres and angle move; the milliseconds are measured and wait for a new sweep.
  • 3.15.1: the ref mic’s angle 0° is level toward the stage. It changes no timing — only the highs above 5 kHz — and warns when a box arrives far off the mic’s axis over a band that reaches up there.

3.14.0 — what the ground is made of, measured

  • No surface table needed How strongly the ground reflects is the surface, and the impulse already holds the reflection. The geometry says when the bounce arrives; Sonasync looks there, and only there.
  • How much it returns, octave by octave Measure the ground after sweeping the tops over a wide band: the ground returned 85% of the sound — hard, behaves like concrete, asphalt, tiles or water. Checked through the real measurement chain: a 90% and a 50% bounce read back as 0.900 and 0.500.
  • It refuses rather than guesses A band too narrow to separate the bounce, nothing at the predicted moment, or a reflection stronger than any surface returns — each is said, not measured.

3.13.0 — the level across the site, and the ground

  • A coverage picture, with contour lines The side view is shaded red near the boxes to blue far away, with a labelled line every 3 dB. Hover anywhere for the level. Only the ref mic’s spot is measured — the rest is predicted from it, 6 dB per doubling of distance, and it says so.
  • A warning when the ground bounce can move an arrival No surface data needed: the bounce’s timing comes from the heights and the distance. Tops at 3 m, ref mic at 1.7 m, 30 m out — over 60–150 Hz the arrival can read up to 0.49 ms late on a hard floor. The cure is given: ref mic on the ground, or a wider band.
  • dB SPL (Z) Sweep levels say they are unweighted, so they are never read against a limit given in dBA or dBC.
  • 3.13.1: Load sample No rig to hand? One button fills the listening plot with a sample tops and sub, marked as sample data everywhere, and one button takes it out again.
  • 3.13.2: the band, named The sample sets its own target band, the plot says which band its colours are the level of, and nothing is claimed behind the boxes.
  • 3.13.3: where the bounce comes from Behind the boxes is faded rather than blank, and when the ground-bounce warning is on its path is drawn — box, ground, ref mic — with its numbers on hover.

Before that

  • 3.12.0 — the sweep’s level and the room’s at the ref mic, in dB SPL (Z) once the SPL meter is calibrated.
  • 3.11.0 — an audio interface is found when it is plugged in, and nothing Windows reports is hidden.
  • 3.10.0 — the listening position drawn in Live IR, and the arrivals table grouped by seat and band.
  • 3.9.0 — an SPL meter for the wall: subs and tops against their own limits, blinking red over, calibrated against the organiser’s meter.
  • 3.7–3.8 — delays the wrong way round are caught; ways that do not reach past their crossover are flagged; a blank plot says why.
  • 3.6.0 — Live IR fires one frame at a time; the band is settable from Live IR; it will go below 30 Hz if you ask.
  • 3.5.0 — two bands are never subtracted; it listens to the room before it measures; a headroom figure that does not saturate.
  • 3.3.0 — the band you type is the band you read; a narrow sweep is scored on the room, not its own width; a refusal names the channel and the cause.
  • 3.2.0 — where zero sits on the impulse plot is yours to choose; smoothing on the live transfer function; it says when it is not measuring anything.
  • 3.1.x — XTA DP448 joins the processor list; Import can read a filter, and knows which way round it sits.

Each release carries its own notes on the releases page, including the measurements behind the claims above.

Against the established tools

What is unusual here —
and what is not

Smaart, REW, SATlive, Systune, EASE and ArrayCalc are the tools this works beside, and most of what they do they do well. A few things here have no equivalent that we know of. We have not tested every current version of every one of them, so if any of this is wrong, tell us and it gets corrected.

Unusual here

  • It refuses rather than guesses Two arrivals read over different bands, or from different microphone positions, are never subtracted — they are listed, and the reason is given. A processing time that would need sound to arrive before it could fly there is refused, not printed. Most analysers subtract whatever you hand them.
  • The arrivals table groups itself By microphone position, then by band. A main read over low, mid and high, the subs, and a delay tower from its own seat become four blocks, each aligned on its own.
  • Flight time and processing, separated Type the distance from a laser meter and an arrival splits into the part the air did and the part the rack did — 87.55 ms of air plus 6.55 ms inside the processor. An analyser that never asks where the boxes stand cannot tell you that.
  • A ground-bounce warning tied to the band you read The bounce’s delay comes from the heights; whether it can be separated comes from the band. Over a crossover band it can pull an arrival up to half a millisecond late, and the card says so, draws its path, and gives the cure.
  • Measure the ground The reflection at the moment the geometry predicts, measured against the direct sound: how much the surface returned, octave by octave. No table of materials to pick from — the site answers for itself.
  • Coverage shading anchored to a measurement Prediction programs work forward from a loudspeaker data file. This works outward from the level actually measured at the ref mic, and labels every other point predicted.
  • An SPL calibration that knows when it is stale If the input floor drifts more than 6 dB it says a gain knob may have moved, rather than carrying on with a number that is wrong by that much.
  • A clock mismatch, named A sweep that comes back the wrong length is not a vague failure: 8.8 % longer — that ratio is a 44100 Hz playback clock.

Where the established tools are ahead

  • Proof, by a wide margin Smaart has been on tens of thousands of shows. This program’s field evidence is one loopback rig check — see what has not been checked.
  • Live multi-channel and multi-microphone work Several seats at once, and the workflow built around that. Here it is one microphone, one position at a time.
  • ASIO and broad hardware support This opens what Windows exposes to ordinary programs. An interface with an ASIO-only driver is invisible to it.
  • A mature transfer-function workflow Coherence weighting, averaging schemes, frequency-dependent windowing, years of refinement in the hands of people doing it nightly.
  • Prediction from real directivity data EASE and ArrayCalc read a loudspeaker’s own GLL, so their coverage maps know what happens beside and behind a box. The shading here knows only distance, and says so.
  • Reporting, templates, training and support An industry around them. Here there is one person and an email address.

The short of it: what is unusual here is mostly about refusing to mislead you, and about tying a measurement to where the boxes actually stand. That is a narrow patch of ground, and it is held by arithmetic and argument rather than by years in the field — which is the next thing to earn.

Before you decide

What has not been checked

Every calculation here is verified against an answer known in advance, and the whole measurement chain has been proven electrically against a loopback: flat, zero degrees, coherence 1.00, delay 0.00 ms. That covers the stimulus, the channel mapping, the capture, the engine and the display.

Proven

  • Timing, against a tape measure A microphone at a hand-measured 76 cm read 2.31 ms of propagation, which the program put at 0.793 m of air.
  • The electrical chain, end to end Against a path whose right answer is exact. A wire is flat, at zero phase, with a coherence of one.
  • Memory, measured rather than assumed Thirteen minutes of continuous analysis and five start-and-stop cycles. Nothing grows.

Not proven

  • Magnitude has never met air Nobody has taken a filter this program designed, loaded it into a processor, played it through a real loudspeaker and measured the result. Timing is one claim; the magnitude response is a different one, and it has no such check.
  • One machine, one interface It has run on a single Windows install with a single audio interface. Second machines are where the surprises are.
  • The listening card has met simulated measurements only The seat drawing, the ground-bounce warning, Measure the ground and the level field are tested against reflections and sweeps built in advance — a 90% and a 50% ground bounce read back as 0.900 and 0.500 through the real chain — but not yet against a real floor on a real site.

If you do one thing with it, do that first one: design a filter, load it, re-measure, and send back the predicted curve beside the measured one. That single plot is worth more than any amount of arithmetic — and the demo is the whole program for sixty days, so it costs you nothing to find out.

Using it on a real rig? This is what would help

  1. A predicted curve beside the measured one. Design a filter here, load it into the processor, measure the result, and send both plots. That is the one check nothing else substitutes for.
  2. A saved measurements fileSave measurements in the arrivals panel writes a .sonalive holding every arrival, the layout and the measured ground. From one file the delays, the bands, the geometry and the ground can all be checked against what the rig actually did.
  3. The interface you used, and whether it was found on its own. Plug it in with Sonasync already open. If it does not appear, a screenshot of Show what Windows reported but is not listed says why in one line.
  4. Anything it refused, and whether the refusal was right. A band it would not subtract, a processing time it called impossible, a ground bounce it warned about. A refusal that was wrong is a bug worth more than a compliment.

Send it to [email protected]. Nothing is uploaded by the program — it makes no network calls at all — so anything that reaches us is something you chose to send, and it is used to fix what it shows and nothing else. Every line above moves from the right-hand column to the left only when somebody measures it.

Download

Try all of it for sixty days

The demo is the whole program, unlocked, for sixty days. When they are up it does not shut down and does not take your work away: a project you already have still opens and still reads, and the meters and the analyser still run. What asks for a licence is the work — firing a measurement, and designing a correction.

Download for Windows Read the manual

Linux 3.35.6: .deb for Debian, Ubuntu and Mint · .rpm for Fedora, openSUSE and RHEL

Windows 10 1809 or later, 64-bit · 30 MB installer
This program is not code-signed, so Windows SmartScreen shows a “Windows protected your PC” notice on first run. Choose More infoRun anyway. A certificate costs more each year than it would be worth to the people this is for, and it is not planned.
The Linux packages are built from the same source as Windows and are on the same version. They need Qt 6.4 or later, which every current distribution has, and name it rather than bundling it — 1 MB instead of 30, and your distribution’s own Qt, patched by the people who ship it. They run the same 2768 checks as the Windows build, and the .deb is installed into a freshly bootstrapped Ubuntu root as a check: no unmet dependencies, nothing missing, and it starts.
It has been measured on Linux. Fedora 43, with a real interface: the microphone, the calibration file and the analyser all work through PipeWire. That was the open question — the way this program decides which two audio endpoints are one box was written around how Windows names them, and nothing guaranteed it would survive elsewhere. It did. Still open: nothing has been played out of it on Linux, and no timing measurement there has been checked against a known answer.