The ultimate loudspeaker-in-room listening test — reflections and directivity v1.58

Every other room tool draws you a picture. This one lets you hear it – not your room, but an idealised rectangular one: six flat surfaces, a single reflection each, and below the Schroeder frequency an analytic mode bank, so a null is a real null. Not a prediction, but controls a real room will never give you: the whole room against no room at all, a new seat between two notes, one wall out of the picture with everything else left where it was.

Each of the six first order reflections has its own mute and its own level – one surface at a time. Drag a speaker while it plays and the sound follows. Directivity decides what the walls actually get, and most room calculators leave it out: pick an ideal omni, cardioid or dipole, or an example polar response.

Headphones. R A/Bs the whole room against the anechoic direct sound – that is the actual test; space switches between two setups you have stored. Everything runs in your browser and nothing leaves it unless you ask: sharing a link or saving to an account sends that preset to the server. No audio is recorded, and nothing else is uploaded.

Heavy for a web page: a directivity convolver and an HRTF panner per path, plus the mode bank and a reverb tail in real time. If it drops out: plug the laptop in, mute a few surfaces (each one carries a convolver and a panner) or turn Modes off. Judge the differences you hear rather than the absolute amount of room. What it does and does not model, below the app.

Get Pro — 29 € for 12 months Everything that makes sound is free, your own VituixCAD measurements included. Pro adds impulse‑response export and room and loudspeaker libraries. One payment, twelve months — not a subscription, nothing renews.

Built with AI, and not fully checked. The ideas, the listening tests and the checking on this page are mine, but the code and much of the maths behind it — the directivity fit, for instance — were built with AI help, and I cannot personally vouch for every statement being right. If you spot an error — or know how something could be done better — please say so: post at diyAudio.com or mail contact.audioexperiment@gmail.com.

50

Source

WAV, MP3, FLAC, OGG, M4A. A long WAV is read and decoded whole, so give it a few seconds — the line below counts.

Headphone correction ?

Load or paste AutoEQ parametric EQ settings for your headphones — get them here.

Room

Paths

Listener

Turn and listen for whether the image follows you.?
?
It changes tone as well as placement: a head is also a filter.
Ears at 0.90 m seated, 1.60 m standing. The speakers stay where they are, so the ear-height lock comes off.
?
Uncheck to move your ears freely — smoother but heavier. Leave it on if the audio stutters.
Both keep the sliders honest: switching off leaves everything where it is.?
Measured direct vs room ?
Difference to the estimate

Speakers

?

Speaker library

A polar export becomes an entry in the list above – from VituixCAD, or from any tool whose output you can name and order the same way. The files are read in your browser; nothing goes to the server unless you back the speaker up or tick it into a shared link.?
The free version keeps one speaker of your own at a time — importing another one replaces it, and asks first. Importing and listening are free; Pro is what lets you keep several and compare them, which is what this list is for. See what Pro costs.
    Add more speakers — get Pro One payment, twelve months. Not a subscription.

    Settings

    Settings library

    Export & import

    Import
    Everything stays in this browser until you export it or save it. Room takes only the room out of a save, so a shared comparison keeps its speakers and plays in yours.?

    Share a link

    Anyone can open a shared link — no account needed. Making one needs a free account, email only. A link is public the moment you press the button. ?
    A link carries the room and the speakers, not the playback. Your volume and the test signal are yours and stay as they are.
    Make it your link
    /preset/
    Your link back is rel="ugc nofollow": it is there for people who click it, not for search engines. A named link never expires.

    Impulse response

    Records this room, this seat and this speaker as one stereo impulse response – the room and the loudspeaker, taken before the level slider and before any headphone correction. That correction is for your headphones, so it stays out: a listener convolving this file would hear it a second time. 32-bit float WAV at the browser's own sample rate. Load it into any convolution reverb.

    Binaural or not is the Ears switch above, in Listener. With it on the file is a binaural IR for headphone monitoring; with it off it is amplitude panned, which is what you want if the result goes onto loudspeakers – a binaural IR would go through a head a second time there. There is no separate setting here, so the file cannot disagree with what you listened to.

    Top view — drag the speakers, the listener and which way they face

    Spectrum and speaker EQ ?

    Applied before the room, so the walls reflect what you set. Both speakers get the same curve. Drag a dot to move a band, scroll on it for Q.?
    High-pass
    Low-pass
    Band 1
    Band 2
    Band 3
    Band 4

    Directivity check — the measurement against what plays

    roundingwhole circlefrontbelow 250 Hzworst
    horizontal
    vertical
    dB rms over every measured band, for the speaker playing right now.?

    Listening tests

    A list of listening test examples to train your ear

    The point of these is not the simulator. It is listening skill: to give a written concept a sound. You have read what SBIR does, or what a strong side wall reflection does — here you can hear it, switch it off, and hear it again.

    Before you start

    Adjust the late tail to your liking first. A normal living room with furnishing and curtains has it relatively low, while a naked modern apartment might have it louder. Consider adjusting your room acoustics if you find better sound with the simulator.

    Turn off room modes so the bass does not change and distract you. By the way – a multisub setup, or some bass management in general, could make your own room sound like that too!

    Floor and ceiling reflections do not seem very natural, so take them with a grain of salt and adjust their level to your liking. Bad sound might be the HRTF used, headphones not being calibrated and so on, and also the simplicity of the simulation. However, a simple worst-case simulation like this can really highlight what their effect might be.

    Start virtual, then anchor it if you want to

    The first tests need nothing of yours. Take one thing – a single reflection, a few degrees of toe-in, one directivity pattern – change only that, and A/B it against itself until you can say whether you hear a difference at all. If any is a real answer and it comes up more often than the hobby admits.

    After that it is worth calibrating the room to yours, because this is as much a test of your listening as of the loudspeakers. Set the dimensions and where you and the speakers stand in them, pick the model on the list that comes closest to what you own, then work the late tail, the surface materials and the seat until what you hear on headphones is recognisably the room you are sitting in. It will not be your room – it is six flat surfaces with one reflection each – but it can get close enough to be worth trusting, and you are the only one who can decide when it has.

    From there every test below is a question about your own room rather than a demonstration.

    1. Model your own loudspeakers – import a polar export, or pick the example on the list that is closest to what you have. If you sit closer than about two metres, export your own polars at your own distance; the reason is in what this models.
    2. Set the room to your dimensions, and put the speakers and the seat where they really are, toe-in included.
    3. Pick the wall, ceiling and floor materials by how the room is built rather than by how it looks. The absorption charts in the reference section are there to sanity check the choice.
    4. Set the late tail until it sounds reasonable. Not correct – reasonable. 100 % is a calibrated reference rather than a target, and your own room is unlikely to sit exactly on it.
    5. Then the modes and the early reflections. Level them until the bass and the floor and ceiling stop drawing attention to themselves. For a single test you may still want the modes off, as above; this step is about the room you keep.
    6. EQ if you use it at home, with the curve you actually listen through – it sits ahead of the room here, which is where yours sits too.
    7. Save the room to your saved rooms, or export it as a preset file.
    8. Use it as the baseline from then on: load it, change nothing but the loudspeaker, and listen. One variable at a time is what makes the answer mean anything.

    What this gets you, and what it does not. The reflections are first order, the floor and the ceiling do not sound natural, and the HRTF is not yours – so a room anchored this way is still not a prediction of how your room sounds. Reasonable is as far as the calibration goes, and it is far enough for the thing it is for: differences between loudspeakers, and between positions, in the same room. Everything the model gets wrong it gets wrong the same way on both sides of that comparison, which is exactly why the comparison survives it.

    The tests

    1. Use the default preset, press Closer and Away to walk the listener back and forth, and listen to the sound change. Stop where you think the sound feels natural to you.
    2. Toggle floor and ceiling reflections off, then toggle either the left or the right reflection off to hear their effect in sound. Change toe-in with directive speakers and repeat the test.
    3. SBIR. Mute every early reflection except the front wall, tick Speakers follow so the whole setup travels together, and hold Closer to walk it towards the front wall and Away to back off again. Listen to the low mids: the front wall reflection modulates them as the distance changes. At which distance does it stop bothering you? Then switch to music — which parts of the track go weak when the SBIR is bad? Finally turn every reflection back on and walk the same stretch again: can you still hear the SBIR among the rest of them, and does the speaker directivity change how easy it is to hear?
    4. Lock the speakers to the user and press Closer to move the listening triangle towards the front wall, and hear the sound change. Repeat with Away, and let the assembly travel to the other side of the room. At which positions does the sound seem nice? Use R to toggle the room off. Tip: how does loudspeaker directivity change this?
    5. Depth. Do speakers up against the front wall reduce the perceived depth? Leave the listener where it is and move only the speakers closer to the wall and further from it. If you hear a difference, great – now tick Speakers follow and move the whole setup instead, so your distance to the speakers stays the same. Is the difference still there? And does the speaker directivity matter here? And if your listening and speaker positioning is dictated by practical issues – where the sofa and the TV are – then play with the room acoustics and with the speaker directivity and toe-in instead. Tip: W A S D move the speakers and the arrow keys move you, so you can shift either one without reaching for a slider.
    6. Using a dipole speaker, find a listening triangle size and toe-in you like.
    7. After finding nice positioning, move the listener back and forth with your eye on the critical distance readout – what happens to the sound closer than that, and what happens further away?
    8. Adjust the room height and listen for where the ceiling reflection changes from odd to natural.
    9. Now the same walk, but watching the surfaces instead of the number: with the room and speakers where you like them, move the listener back and forth and toggle each early reflection in turn. Which ones matter to you, and which way – do they enhance the sound, or make it weird?
    10. Move behind a speaker, mute the other one, change the pattern to cardioid and use the toe-in to highlight different walls in your room. This one you can do at home as well! Fun experiment. Use noise as the sound source.
    11. Move the speakers further apart – can you hear a "hole" appear in the middle? What if you change the toe-in? What is your favourite stereo triangle, equilateral or something else? If you find one worth arguing about, put it in a link – making one needs a free account, opening one does not.
    12. Try the time–intensity trading trick: toe the speakers in so they cross in front of the listening position, then move sideways – does the noise stay in the middle or not? By the way, this effect is not as obvious here as it is in reality.
    13. To find a nice sounding setup, use noise, then Store A and Store B in the bar above the app and flip between them with the A / B button or the space bar – the switch is instant, and the level, the source and the sine frequency stay put so you are comparing the positioning and nothing else. Swap to music to listen whether it sounds nice, and toggle the room on and off with R. Both A and B travel in a shared link, so someone else can flip between the same two setups you did.
    14. Speakers along the narrow wall or the long one? Set up one of them, Store A, then swap the room's width and depth so the same room turns ninety degrees, set the speakers up again and Store B. Now flip with the A / B button: same floor area, same materials, only the direction you are firing in.
    15. The noise sources are mono, so two speakers playing the same sound make an obvious comb filter as you move. Try muting one speaker – sounds more natural, right? By the way, the comb filter here in the simulator is more obvious than in reality, but it is there, especially with a very small listening triangle in your room. When one speaker is far out, the loud early reflections mask the effect – it is a complete mess no matter how you move.
    16. How much does the sound change when you switch the floor material?
    17. Load your own loudspeaker plans into the simulator and listen whether there is a difference, and with what positioning it matters.
    18. If you are a sound designer or a mix engineer, listen to your master with your favourite setup, adjust the room and the setup for nice sound, and export the IR to use in your convolution reverb back in the DAW. Tip: modes on also changes the low end; toe-in and changing speakers adjust the top end.
    19. What is spaciousness? Is it loud early reflections – or some of them – or a loud late tail? What is "spacious" to you?

    By the way – you can do some of these tests for real, especially the ones where the listener moves! Muting a particular reflection needs a carefully positioned mattress, moving the speakers needs two assistants, moving the walls needs a light-speed contractor, and A/B testing needs quantum magic.

    None of these tests need Pro. If you would like to support the quantum magic anyway, Support the quantum magic.

    What it sounds like to me

    My own headphone setup does not give me proper externalisation, but I can still tell when the sound gets focus and when it does not – and that is a real effect in itself.

    With loud early reflections – speakers far away – the sound localises in front of me, roughly at the wall or at the speakers. On headphones that may just feel hazy. That is the "they are here" feel to me.

    Moving the listener closer cuts the early reflections and changes the HRTF, and the sound gets focus – in reality and on headphones alike, more inside the head. That is the "I'm there" feel to me, when the track has the space information embedded in it. With noise it feels like the noise is very accurate inside my head, both here and live.

    You might read these two references exactly the other way round. Whatever – just experiment and get a feel for what affects what, and hopefully end up with the sound you prefer at home.

    By the way: my own listening position is right about where the sound changes between "they are here" and "I'm there", and I move a bit forward or backward to switch at will – by mood, by the recording. Have fun!

    — Teemu

    Share your setup and listening test on the forum!

    What this models, and what it does not

    Read the assumptions before you trust what you hear
    • Modelled: direct sound and first order specular reflections from six surfaces; path length as delay and as 1/r attenuation; one reflection coefficient per bounce; a crude high frequency loss for the surface and for air; ideal frequency independent directivity (omni, cardioid, dipole — the dipole's rear lobe is polarity inverted); HRTF panning from the image source position; a synthetic exponential tail whose decay comes from Sabine on the current room.
    • Below the Schroeder frequency a second model takes over, crossed over rather than mixed. One bounce per surface cannot produce a mode — a mode is what is left after infinitely many bounces — so the bottom end is analytic: every mode of an ideal rectangular room, f = (c/2)·√((nx/W)² + (ny/H)² + (nz/L)²), each a resonator whose level is the mode's pressure at the speaker times its pressure at your ears. Phase turns through resonance, so modes cancel as well as add, and zero means you are sitting in a null.
    • The crossover is what makes the nulls real. Both models describe the same field, so running both everywhere would count the same energy twice and the reflections would fill in the null the mode bank just made. In a real room there is no separate direct sound down there — the field is modal, which is why the null is deep. So the image source branch is high passed at the Schroeder frequency and the mode bank low passed at the same point. Turning the modes down slides that high pass to the bottom of the model, so the anechoic reference keeps its bottom octaves.
    • The mode bank's level is an anchor, not a measurement. A mode has no reference of its own the way direct sound has 1/r, so it is scaled to what the high pass removes: averaged over listening positions across the modal band, the modal field carries the same energy as the direct sound it replaces. Averaged, because one position is either a null or a peak. Above the Schroeder frequency modes overlap into a statistical field, and that is where the bank stops; wall and floor materials move the boundary, visibly on the spectrum plot. Q comes from one Sabine number, so every mode decays at the same rate — real ones do not.
    • Below the lowest mode the room is a pressure vessel, and the model stops there deliberately. The lowest term of a modal expansion is not a mode: every cosine equals one, so it is the same everywhere in the room, and it carries the bottom octave under the first axial mode. Without it a small room would sound quieter down there than outdoors, which is the wrong direction. It continues the modal field's own level rather than the anechoic one, and it is flat below the first mode instead of rising: a real room leaks through doors, windows and flexing plasterboard, so pressurisation does not go on forever.
    • The late tail is a calibrated estimate of a diffuse field, not a measurement. Its level is what a diffuse field of this room's absorption would be, with the early reflections subtracted from it. It is bounded at both ends, so a very live or a very dead room reads closer to the middle than it is; the line beside the slider says when either limit bites. Late tail →
    • The measured ratio beside your seat is read from the running audio, and deliberately not the same number as the estimate. It is taken above the crossover only, so it says nothing about the modal bottom end, and a residual against the estimate is geometry rather than a calibration error. Measured direct vs room →
    • The critical distance beside your listening distance is textbook theory, not a reading from this model. It does not claim that a small room has a diffuse field in its bottom octaves, and it is not the direct-to-reverberant ratio of this page at your seat – here the late tail is a slider and the reflections are first order only. Critical distance →
    • An ideal shoebox is not your room. No furniture, no bass traps, no door openings, no non-parallel walls, nothing built in. The mode bank holds a fixed number of modes and the line above says so when a room needs more. Its field arrives in mono to both ears – at modal frequencies the wavelength is many times your ear spacing, so the difference between your ears is small, but not zero. Surface mutes act on the reflections only: muting a wall does not remove the modes that wall is half of.
    • Two symmetric speakers playing mono do not excite the odd width modes. Not "weakly" — zero in the model, because the mode's pressure is equal and opposite at the two speaker positions. The lowest width mode of the default room can stay silent wherever you sit, until you slide the pair off centre or the channels carry different bass. It is why a symmetric subwoofer pair is recommended against lateral modes. Walk along the room for the length modes instead, or try the even width mode an octave up.
    • Also not modelled: diffusion, scattering, furniture, real frequency dependent materials, second and higher order reflections, and therefore flutter echo, which cannot exist in a first order model.
    • Nothing in the chain is level dependent, so the loudspeaker never strains. Every stage is a filter or a convolution, hence linear: no distortion, no thermal or power compression, no woofer running out of excursion, no port noise. Turn it up and you get the same sound louder, which is not what a real speaker does. So you cannot hear whether a speaker holds together at level – a large part of what people mean when they call one good – and what you get instead is a fair comparison: directivity and response only, at any volume.
    • Measured directivity is an approximation of a measurement. Horizontal and vertical polars on the export's own angular grid, normalised to the on-axis response, so the data carries directivity only, never the speaker's own frequency response. Without ver files the horizontal polar is copied into that plane, and the page says so when it does. Two planes are not a sphere, so directions in between are guessed as H(θ)·cos²ψ + V(θ)·sin²ψ. Each path plays that curve as a short impulse response, rebuilt when the angle rounds into another cell — played rather than fitted. What is left between the measurement and your ears: which cell you land in, the length of that impulse response, and a floor below which the filter stops following the measurement. The note under the error map names the floor; the table in the directivity check above is computed from the speaker you are listening to, and the error map shows you where the rounding goes. Speaker library →
    • Every loudspeaker here is one point, not a cabinet with drivers spread over it. A polar export is measured at one distance – 3 m for the examples here – and that curve stands in for the speaker at every distance you walk to. Much closer than about two metres the drivers stop summing into one source, so a walk right up to a speaker is the model talking rather than the speaker; the driver spacings in these examples are all small next to two metres. A line radiator is where this breaks: a tall array or a full-height dipole neither falls off at 1/r nor collapses to a point, so it is right only at the distance it was measured from. If you sit closer than the export, export your own polars at that distance – the point source then carries the real path lengths, on one condition: your ears stay level with the speaker, this page's default, kept true by the height lock. Free the height and the export's own geometry no longer matches yours.
    • Directivity is read with its phase when the export carries a phase column: a rear lobe that is polarity inverted plays inverted, because the sign sits in the measured phase rather than in a model of the drivers. Without that column each angle’s phase is built from its own magnitude. File format →
    • Which way a positive angle points is not in the export, and it changes what you hear. Both polars are read with their sign and the pair is mirrored: the data belongs to one cabinet, so the other speaker plays it left–right reversed, as such a pair is normally built. Vertically the choice trades the floor reflection for the ceiling one and it is yours to make; horizontally it swaps the two side walls, and there is no switch for it yet – up and inward are the owner's answers rather than documented conventions. A left–right symmetric cabinet does not care about the horizontal choice, and that covers every entry here bar one; export noise tens of decibels down behind them is why the page decides symmetry from a power weighted measure and not an exact test. The exception is the classic three-way, carrying its midrange and tweeter off the centre line of the baffle: its two horizontal halves are genuinely different measurements, the choice decides which side wall gets which response, and the directivity map says which case you are in.
    • The HRTF is the browser's own generic set. It is not yours, there is no head tracking, and elevation is its weakest axis — which is unfortunate, because floor and ceiling are the reflections people argue about. Judge side wall reflections first.
    • Muting a reflection removes energy, so some of what you hear is a level change. That is honest here — with SBIR the level change is the phenomenon — but keep it in mind when comparing two positions.

    Reference

    What the numbers beside the sliders mean

    Walls & ceiling — a low / high

    Two absorption coefficients per surface, low band and high band. The split is the same one the reflection shelf and the two decay times of the tail use, so one number cannot drift from the other. Typical published values for that kind of construction rather than measurements of any particular wall – the same standing as every other number in this model.

    The order of the two numbers matters more than their size.

    • Bare concrete absorbs almost nothing at either end: the tail stays bright as it dies.
    • Curtains and carpet absorb the top far harder than the bottom: the tail goes dark and the bass outlasts it.
    • Panelled surfaces run the other way round. Gypsum board and plywood on studs resonate and absorb the low end harder than the high one, which is why a stud-wall living room sounds brighter and thinner than a masonry one of the same size, and why it needs no bass trap so much as it is one.

    The low figure is the published 125 Hz value, not an average across the band, and that is deliberate. Its most audible consumer is the modal region below the Schroeder frequency, where the mode bank gets its decay and its Q – and a stud wall really does absorb that much down there, which is why such a room has less bass boom than a concrete box.

    The cost: the same figure colours reflections and the low half of the tail all the way up to the split, where 125 Hz is the wrong reference. A gypsum panel is far less absorbent by 1 kHz, so its reflections come out about 1 dB darker than published data would give; a carpet or a curtain is far more absorbent, so theirs come out about 2.5 dB brighter. That is the gap between the step and the curve in the charts below. Fixing it would take a third band.

    Both numbers are drawn below against published octave band data for the same kind of surface. The line with dots is the published data, 125 Hz to 4 kHz; the flat two-step line is what the model uses, one value below the split and one above. Where the step sits away from the curve, the curve is the published figure and the step is the simplification. The two surfaces you are listening to right now are marked in use.

    Handbooks disagree with each other by a good deal – the two standard rows for heavy carpet differ by 0.18 at 250 Hz on their own. Two rows have no standard table entry at all and say so. Read them as a sanity check, not as a datasheet.

    published octave bands the two bands this model uses

    Late tail — Reflections n % of the room budget · the tail fills the rest

    100 % on the slider is not the loud end of a preference. It is the level that brings the whole room side – these reflections plus the tail – up to what a diffuse field of this room's absorption would be. The slider is a percentage of that calibrated amount, and the line says how much of it the early reflections already supply.

    • The early reflections are subtracted from the budget, not stacked on it: the tail gets √(budgetearly), the early energy averaged over listening positions – only a room average may be taken off a room average.
    • The split moves with the speaker, which is why it is printed beside the slider: a more directive speaker puts less power into the room, so it both leaves the tail less of the budget and makes the tail quieter. In the same room the reflections read anywhere from well under a quarter of the budget to most of it on that choice alone. Absorption lowers the tail as well.
    • The channels are decorrelated, so two speakers give √2 of the tail.
    • A bigger room gets a quieter tail, and it is the budget itself that shrinks rather than the sharing: the critical distance grows with the room, and the budget is the diffuse level at that distance. The reflections take a slightly larger share of that smaller amount, not a smaller one.
    • Resizing does not stretch the tail you are hearing: a new one is built and takes over once the dimension settles, so the change arrives as a single step rather than following the slider.
    • Capped on the line means the room is live enough that the honest level would clip the output, so you are reading the room as quieter than it would really be – pick a more absorbent wall or floor material.
    • Held at a floor means the reflections alone already reach the diffuse estimate.

    Turn — Left / Right / Face speakers

    Hold a button to turn at a rate scaled from Move speed. The angle wraps, and Head follows greys all three out.

    Face away and listen for whether the image follows you. Front-back confusion is a known failure of a generic HRTF, and hearing it is what this control is for.

    Lock — Speakers follow · Head follows

    • Speakers follow – your move is applied to the speakers as the same delta, so the triangle keeps its shape and the whole set-up travels through the room: where you sit becomes separable from how the triangle is shaped. Centre greys out, since it would carry the triangle with it and centre nothing.
    • Head follows – the direction is recomputed from the speakers on every update, i.e. Face speakers held down rather than pressed once, so walking never turns into turning. Target is the pair, or the one speaker still playing if you mute the other: muting as an A/B therefore compares one speaker on axis against two in front of you, not the same seat twice. The Head slider and the Turn buttons grey out.

    Neither lock stores a value of its own – the sliders keep showing the real position, and switching off leaves everything where it is. Height, Toe-in and Ear height are outside both.

    Speaker library

    A polar export becomes a named entry in the list. Files are read in your browser; a measurement reaches the server only if you back it up to your account or tick it into a shared link. It plays as soon as it is imported. File format →

    • Required: the on-axis file hor 0. Everything else is read against it.
    • Half a circle is enough horizontally – the model reads the angle’s magnitude. Uneven angle steps are fine.
    • ver files are optional – without them the vertical polar is copied from the horizontal one.
    • The line under the file picker reports what arrived: angles per plane, range, step, widest gap.
    • Export at your listening distance. The examples here are 3 m, which stops being honest much below 2 m. Your ears have to stay level with the speaker – the height lock keeps that true.
    • A speaker arriving with a shared link or a preset file plays the same way. With an account, Back up copies one to your account so another machine gets it.

    Description travels with the speaker: export files, the copy in your account, shared links. It is what tells someone opening your link what they are hearing, since the name does not travel. Private memo is backed up to your account only – never exported, never shared.

    The spheres have no design choices: a point source on a sphere, size the only variable. Their pattern depends on ka = 2πr/λ, so the whole set is one curve slid along the frequency axis – double the diameter and the baffle step moves down an octave.

    The classic three-way is the only asymmetric entry: mid and tweeter sit off the centre line of a wide baffle, so it radiates differently towards each side wall. The data is the left cabinet; the right plays it mirrored. The horizontal map draws both halves instead of mirroring one, and the note under it names which case is loaded.

    Polar file format — plane · angle · three columns

    Plain text. VituixCAD writes it directly (File → Export → Polar Frequency Responses), but nothing about the import is specific to it: a measurement rig, a BEM/FEM solver or a script of your own work the same way once the names and columns match.

    File name: only the ending matters – hor or ver, the angle in degrees, .txt. Anything may come before the plane; between plane and angle anything but a digit or a minus sign. So my-speaker hor 0.txt, sim_ver_-30.txt and VituixCAD_PolarFR hor 45.txt all read. One file per angle, and you pick the whole set at once.

    Contents: one line per frequency point. Hertz, then dB, then phase in degrees if you have it. Separator: space, tab, comma or semicolon; decimal point or comma. Any line that does not start with two readable numbers is skipped, so headers and blank lines can stay.

    # my-speaker hor 30.txt — a line that is not two numbers is skipped
    # Freq(Hz)  SPL(dB)  Phase(deg)
    20.0      -8.41     -12.3
    25.0      -8.36     -15.8
    31.5      -8.30     -19.9
    ...
    20000.0  -31.07     146.8
    • Frequency spacing is yours. The page resamples onto its own band grid, taking the energy average within each band, so a dense set loses nothing and a sparse one is interpolated across.
    • hor 0 is required. Every other angle is read against it.
    • Phase is all or nothing per file. One unreadable third column and that file is magnitude only. Wrapping at ±180° is fine – it is unwrapped for you.
    • Beyond the angles you export, the edge value is held rather than extrapolated – the picker line names it when the coverage falls short of the steepest reflections.

    What the third column buys: each angle sums with the right timing, so the reflections and the two speakers add as the real thing does off axis. Without it the directional phase falls back to minimum phase – not to the on-axis phase – which is right for a formula-built source but not for a real cabinet; the difference shows in the crossover region and towards the sides. On-axis phase and per-angle phase are separate: a third column in hor 0 alone gives the first, the whole set gives the second.

    Synthetic radiator — n° · holds to n Hz

    A source built from a formula, not measured: you set a −6 dB total angle and a physical size for each plane. It is convolved exactly like a measurement, so the graphs read the data the sound uses. It answers a building decision: how narrow does the vertical pattern have to be before the floor and ceiling stop mattering, and is an object that size already too big to build?

    The number on each line is where that plane’s pattern stops holding. Below it the object is small compared with the wavelength and the pattern widens towards a sphere. A wide pattern needs a smaller object than a narrow one – hence two size sliders, and the vertical number is usually the awkward one.

    What it is not:

    • The axis is flat by definition – the sliders change directivity and nothing else. There is no cabinet response here.
    • An ideal aperture: no diffraction around it, no cabinet behind it, and its directivity levels off high up where a solid object of the same size would keep narrowing.
    • No rear lobe. A real horn or sphere radiates a peak straight backwards; this does not.
    • Each pattern holds only as far down as its own dimension allows – which is the point, not a shortcoming.

    It will not sound like a speaker from the list even at the same size, and the reason is frequency rather than size. A real cabinet’s pattern keeps moving: narrowing as the driver grows large against the wavelength, widening across a crossover where a smaller driver takes over, narrowing again above it. This one settles on the angle you set and holds it. A room hears a speaker mostly through its reflections, so a pattern that stays put and one that moves colour it differently – audible long before either is wrong. Sliders to hear what a chosen pattern does to a room; the list when you want a cabinet.

    Response — Directivity only and three phase models

    A polar export holds two things. Directivity is every angle stored as its difference from straight ahead – which is why 0° is exactly flat. The on-axis response is the part that was divided out. First position: directivity only. The other three add the response back, each with a different phase.

    • Minimum phase – what the magnitude alone dictates; the phase any smooth passive filter of that shape would have.
    • Measured phase – adds what the export measured: the part a crossover adds in time and which does not show in the magnitude. A Linkwitz–Riley pair sums to an all-pass, so equalising cannot find it – it has to be read from the phase column.
    • Linear phase – removes both, on the axis. A passive crossover cannot do it, an FIR can; the switch is that comparison without the build. On the axis it rings before the transient, which is what linear-phase crossovers do and why the position exists. The other three do not.

    Shape, not level: the average energy between 200 Hz and 10 kHz is removed, so the response changes tone and not loudness, and all four positions share that curve exactly. A constant delay is fitted out of the phase over the same band, so the list changes dispersion and not arrival time — the measuring distance does not come with it. Latency is the same in all four, so switching moves nothing in time. It is applied once per speaker, ahead of the room, so the walls and the modes reflect it. Bypass under the spectrum does not touch it – that button compares your curve.

    Phase is read at every measured angle, not only on the axis, and it does not stay the same off axis. On the ideal two-way, sideways it stays within 0.07 ms of the axis out to 60°; vertically it changes sign across the crossover — at 30°, +0.04 ms below the woofer’s band and −0.10 ms above it, because the drivers are not on the same axis. The direct sound leaves along the axis; the floor and ceiling bounces leave at 32° and 48° in the default room and carry the phase measured there. How much it matters follows driver spacing – least on an ideal two-way, most on the classic three-way.

    • Linear phase is linear on the axis alone. One filter at the input, ahead of the drivers and the room, straightens the direction it was measured on; every other angle keeps the difference it had, including the bounce angles the correction never saw. Not a speaker that is linear everywhere, but the one you could build, heard from where you sit.
    • Between measured angles the page interpolates, so a 10° export is a 10° model.
    • No phase column, none of this: each angle’s phase is built from its own magnitude.
    • Under Shorter filters the reflection filters cannot carry phase the magnitude does not dictate, so they stay minimum-phase whatever you pick.
    • Two different crossovers on the same speaker is a different question, and this list does not answer it alone. The difference shows as vertical lobing, magnitude and phase both – the microphone saw the drivers summed at each angle, so what is missing is not a source per driver but whatever the export left out. Two exports of the same speaker give different power responses and different reflections. LR2 against LR4 is that comparison as far as it goes today.

    A position is grey when the speaker cannot do it, and the line underneath says which case: an ideal pattern has no measured response; a measurement imported before this existed kept only the magnitude, so it gets minimum phase until you import its polar files again. That line also carries the number that decides whether any of this is worth hearing: the largest excess group delay between 100 Hz and 1 kHz, after the constant delay is out, so it counts dispersion and not distance. The example two-ways read a fraction of a millisecond; the three-ways read two orders of magnitude more and low down, where a steep high-pass and two crossovers put it.

    The critical distance estimate does not follow the switch – it assumes a flat speaker, and the line below it says so whenever the response or the EQ is shaping anything.

    Spectrum — an omnidirectional microphone at your seat

    The direct sound, the reflections and their comb filtering, the late tail and the room modes, in one curve at your listening position.

    • The tilt of the curve belongs to the source, not the room. What the room does is the departure from it – watch a null appear as you walk, and move when you change the room.
    • Read before the binaural stage, and summed to mono there. Two ear signals that arrive a fraction of a millisecond apart sum to a comb filter neither ear hears, so it would put ripple in the top octaves of an anechoic direct sound. The curve is therefore the pressure at your seat rather than at an eardrum.
    • The headphone correction is not in it. That sits after the master output; this curve is the loudspeaker in the room.

    Headphone correction — Load · Paste · Bypass

    Last in the chain, after the master output, and not part of what is modelled – it corrects your headphones, not the room. The room meters and the spectrum curve do not see it, for the same reason.

    The file is AutoEq’s ParametricEQ (AutoEq publishes one for most headphones). Load a file or Paste the block straight from that page – same parser.

    • It stays in this browser. Not in an export, a room saved to your account or a shared link, and opening someone else’s link does not replace yours. It survives a reload, and the row names the file.
    • Reset does not clear it – that resets the model, not what you listen through. Clear on this card removes it.
    • Reads PK, LSC and HSC rows. Other filter types, a missing preamp line and a GraphicEQ file are named on the row rather than dropped in silence.
    • Web Audio’s shelving filters have a fixed slope, so a shelf Q other than the standard one is not played as written. AutoEq writes the standard one; a hand-tuned file may not, and the row says so.
    • The curve is drawn from the filters themselves, preamp excluded – that is what makes it comparable with AutoEq’s own graph.

    Bypass keeps the correction’s preamp by default, and that is a measurement decision. A correction is built with headroom below it; without that preamp, switching it off would also raise the level – and louder sounds better, so the comparison would answer “which is louder” when you meant to hear the shape. If the bypass still sounds louder or quieter, the trim beside it settles it.

    Speaker EQ — Bypass (e)

    The curve is drawn over the spectrum, and you edit it there. Drag a dot sideways to move the band, up and down for its gain, scroll on it for Q. The knobs below the graph are the same numbers, so either one follows the other. The dots marked HP and LP move sideways only – a pass filter has no gain to drag. Touching any control switches the EQ on; the default is bypass.

    The knobs turn by dragging up and down, not in a circle, and shift makes the travel finer. The wheel steps a fraction of the range over a knob, or a single step of the control with shift. The unit is in the label above each knob, so the reading below it is a bare number: 20.0k under Hz means 20 kHz.

    Double-click any slider or knob on this page to put it back to its default. Nothing snaps to zero, deliberately – snapping would make the values either side of it hard to pick, and that is where fine adjustment matters most.

    The graph carries two vertical scales at once. The orange spectrum is a level in dBFS, labelled on the left; the blue EQ curve is a gain, labelled on the right. They share the frequency axis and nothing else, so the EQ curve sitting above a peak does not mean it is louder than it – it means it is adding that many decibels there.

    The EQ sits ahead of the speaker and the room, so the walls, the floor and the room modes all reflect the curve you set – boost the bass and you hear what the mode does with it, not just what your ear does. That is the reason for an equaliser on this page at all. Both speakers get the same curve; this is a listening test, not a channel-by-channel calibration.

    Bypass is on the E key, so you can compare without the mouse. It is a real bypass: the signal goes round the filters rather than through flattened ones. Flat resets the curve and leaves the bypass where it is.

    • Parametric bands, plus a high-pass and a low-pass whose Q is in decibels – that is Web Audio’s unit for those two filter types, and Butterworth is −3.0 dB rather than the 0.707 you may expect. A band with 0 dB of gain is transparent, so there is nothing to switch off.
    • Slope 12 or 24 dB/octave, and the high-pass is named after the enclosure: a sealed box rolls off at 12, a reflex box at 24. Set it to your box’s corner and you are listening to that alignment in this room. There is no "reflex" low-pass, so that one is labelled by the number alone. Either slope is −3.0 dB at its own corner frequency.
    • Both reach well past the bass, so the pair is also a band-pass: hand the room a single octave and hear which reflections belong to it, or listen to a driver’s own passband. Drive them past each other and nothing comes through — the page says so rather than leaving you to wonder.
    • Preamp is headroom, not tone. Boosts push the output towards clipping, so Peak boost sets the preamp to the tallest boost of the curve. The row reads the Peak, the preamp and the net left after it, and warns when that net is high enough to clip. Sustained clipping sounds like a distorting driver, which is exactly the thing a test like this must not invent.
    • One reading does not follow the EQ: the critical distance estimate knows only absorption and directivity, so it still assumes a flat speaker – and says so on the line below it while the EQ is shaping anything. Measured direct vs room does follow it, because that one is measured downstream of the filters.

    Ear height — At speaker height

    The browser stores its head-related filters on a 15° grid of elevations and truncates to the one below the source, so a boundary sits at 0° and every 15° from there. Crossing one changes the tone in a single jump and leaves it changed: −6 dB at 6.4 kHz for two millimetres of ear height, measured here. That boundary is where a listener normally sits, level with the speaker, and a reflection in a vertical wall keeps the source's height – so the direct sound and every wall reflection cross it at the same millimetre.

    Ticked, your ears stay level with the speakers: elevation is zero and nothing is ever crossed. Unticked, every path runs through two filters from neighbouring bins, crossfaded by where the real elevation falls between them. That takes the step down to the noise floor of the measurement, and both positions are rewritten for every path each time you move – a load switch rather than an accuracy one: if the audio stutters, tick it back on.

    Two limits it does not remove. Floor and ceiling reflections cross their own boundaries as you walk, because their elevation depends on distance. And ticked it is a constraint: a vertical listening test is not done with it on.

    Vertical + — + angle points up

    Only appears for a measured speaker: the export does not answer it, and the synthetic radiator is symmetric vertically, so there the setting would do nothing. A measured vertical set usually is asymmetric – a woofer below a tweeter does not radiate the same way up as down – so which sign means up decides whether the floor reflection or the ceiling one gets the off-axis response that belongs to it. Backwards swaps the two. Up is the owner's convention here; the file itself only says +30°.

    It does not move Q on the critical distance row: that integral reads both halves, so the sign only exchanges them.

    Directivity check — the measurement against what plays

    The measurement is the thick line, what you hear is the dashed one. They are the same data: each path convolves the measured curve directly, so the dashed line is the measurement at the nearest angle cell rather than a model of it. Where the two separate, that separation is the rounding.

    The table is that separation as a number – dB rms over every measured band, for the speaker playing right now: whole circle, front, below 250 Hz. Near zero on axis, because the pattern barely moves there; largest where it turns fastest, i.e. the deep off-axis nulls above 1 kHz and the rear. Worst may be the filter’s floor instead of the rounding: where the measurement has a deep null the chain stops following it rather than approximating it.

    The Response switch changes what the curves are. The polar data is normalised to the on-axis response, so on Directivity only 0 dB is the speaker’s own axis at every frequency – directivity alone, plus your EQ, which stays in every view because it sits ahead of the speaker. A speaker aimed straight at the seat therefore draws a flat direct line, or the shape of your EQ: that is the zero level looking at itself rather than a perfect loudspeaker. Switch the response on and the on-axis curve is added back into At your seat, All angles and the power response – 0° is no longer flat, and the dips are the ones the chain actually produces. The line under the graph says which you are reading. Both maps stay directivity: the error map is the measurement minus the cell that plays, so adding the same curve to both would not change it.

    • At your seat – the heavier pair adds the room: six early reflections summed with the direct sound as complex pressure, delays and all, read against the direct sound’s own level. Smoothed, so the finest detail is missing; below the crossover the room is carried by the mode bank, which is not in this graph; and it is the pressure at the seat, not at your ears, where the head and the HRTF would come in.
    • All angles – the white pair is the power response, the energy average over the whole sphere, which is what a room ends up hearing. Same line in both planes, because the integral uses both. Measured data hides the measurement so you can read the playing curve alone.
    • Towards each surface – what leaves the speaker towards each wall, the floor and the ceiling, not what reaches your ears. That is where placement is decided: an off-axis dip aimed at the wall beside you arrives as a reflection with a hole in it, and a few degrees of toe-in moves the hole. Mute that surface and hear whether it matters. Left speaker only – the right is the same curve mirrored unless you have moved something, and the asymmetry is what At your seat is for. Wall absorption is left out: it is smooth and would not put a dip anywhere, so it would only leave you wondering whether a hole belongs to the speaker or to the carpet. Each curve follows its own surface switch above, and with the response on the white direct line is the real thing and not flat.
    • Polar map – a map of directivity, named as one.
    • Error map – the measurement at the exact angle minus the filter you get, which is the nearest cell played through a short filter built on the phase model you chose. Flat grey means it cost nothing there. Most is rounding, but the map reads the real filter, so it also shows that filter’s two limits: its length, and a floor below which it cannot follow the measurement. The chequered patch in the rear top octave is that floor, not rounding, and it is where the table’s largest number comes from. It has its own key beside the colour scale rather than a stronger colour, because it is a different thing rather than more of the same one. The note under the map names the cell, the filter and the band density, and says which of the two you are looking at.

    An ideal pattern — omni, cardioid, dipole — is a plain gain per angle rather than a measurement convolved into the signal, so there is nothing to draw beside it.

    Reflection detail — Full · Shorter filters

    Fourteen paths each convolve a directivity filter. Shorter filters cuts the twelve reflection paths to a small fraction of their length — the line under the switch says both lengths — and leaves the two direct paths untouched, because the direct sound is the one you localise on. What you give up is the directivity curve itself, at every frequency and not just at the bottom. Use it when the audio crackles.

    It also pins the reflections to minimum phase. Phase that the magnitude does not dictate needs room ahead of the peak, and the shortened filter has none, so with this switch on the phase position you pick applies to the direct sound alone.

    What it costs depends on the cabinet, not on the setting. A filter length is a length of time, and a wide baffle puts its directivity structure low, where structure is long. Measured back when the full length was shorter than it is today: 0.17 dB rms on the bookshelves, 1.8 dB rms on the 1 m sphere, the spheres passing the bookshelves at about 38 cm. Against today’s full length the gap is wider, and it has not been measured again. Judge it on the speaker you are listening to, not on the list.

    It does not fix the stutter while you walk. That is not convolving, it is building: every time your angle rounds into a new cell the page builds a new filter, at full length either way. If walking stutters, the levers are the room and the paths – mute surfaces you are not judging, turn Modes off, or move with the sliders instead of holding a key.

    Where you can see it. The polar map and the error map always read the direct path, so they do not move when you switch. The curves under Towards each surface are drawn from the shortened filters, so those do – that is the window into what the setting costs.

    Both figures are measured across the whole speaker list, both planes and both sides of the horizontal where a speaker is not left–right symmetric, at five filter lengths. Full length is the default because of the large cabinets.

    Group delay — the crossover against the room

    The phase of the Response switch drawn as time. The white curve is the group delay you hear on measured phase, the grey curve the one on minimum phase, and linear phase is the zero line itself — every frequency arriving together on the axis. The gap between white and grey is the whole of what the switch does: if they lie on top of each other, that A/B has nothing to find on this speaker. It needs a measured speaker whose export carried the phase column, and says so when it has none.

    The dashed blue lines are this room. Each one is how much later a reflection reaches you than the direct sound, from the same geometry the sound uses — move a wall or walk, and they move; mute a surface and its line stays, greyed and labelled. They are there because milliseconds on their own do not say whether they are many: a crossover that delays the bass 2 ms is a different proposition in a room whose nearest reflection is 1.5 ms behind than in one where it is 15.

    ⚠️ They are not the same kind of millisecond, and the graph is not claiming they are. A reflection is a second arrival of the whole signal; group delay is a smear inside one arrival. Equal numbers do not mean equally audible — the comparison is there for the order of magnitude. Whether either is audible is what the listening test is for, and the square-wave source is the one that makes the smear easiest to hear.

    • Two scales. Room scale fits the nearest reflection into the picture, which is the comparison. Speaker scale drops it and fits the curves, which you need when the answer is “the speaker does almost nothing” and the curve would otherwise be a flat line along the bottom. The line under the graph carries the numbers either way: the excess delay across the midrange, the nearest reflection, and any reflection above the top of the scale.
    • On axis only — the stored phase is the on-axis phase, so there is no horizontal or vertical choice here and those buttons are hidden. Off axis the page uses the same phase, and how good an approximation that is measured is in the Response section.
    • The curve stops short of the ends of the measurement, because the window it is read over has to fit inside the measured band. Beyond those ends the model holds the last value it was given, and a group delay read off that would describe the model rather than any loudspeaker.

    Reading the pair: as far as the grey curve follows the white one, that much of the delay is the magnitude’s own and would be there in any speaker rolling off that way; the rest is what only measured phase has. Where the white curve crosses a reflection line, the room above that frequency is doing more than the crossover.

    Ears — Binaural (HRTF)

    On, the browser's own head-related transfer function does the listening: interaural delay and ear filtering, which is what makes height and front-back audible on headphones. Off is plain amplitude panning – direction still follows where you face, but nothing goes through a head. Measured with the head at 90°, switching off takes the interaural delay from 542 µs to zero and puts the first arrival back on plain geometry.

    Two things it is for:

    • Separating the HRTF from the room. Off, the floor and ceiling reflections are level and delay only, and the elevation grid does not exist, so height comparisons run continuously (ear height →).
    • Rendering an impulse response for loudspeakers. The same switch decides what the file below records, so the file matches what you listened through – and a binaural IR played over speakers passes through a head twice.

    Expect a tone shift, not only a change of placement – and it depends on direction. Both ears summed, referenced to 500 Hz, against plain panning: a ±30° pair reads +3 to +4 dB below 250 Hz, within a dB from 2 to 5 kHz, then −5 to −10 dB from 6 to 10 kHz; over the whole sphere the 2–5 kHz range reads −4 to −5 dB instead, so sideways reflections are coloured differently from the pair in front of you. Binaural sounds thicker and less airy for that reason – the head and outer ear doing their job, not a fault, though on headphones it arrives twice since target curves already contain an average outer ear. And because the colouration carries the direction, no fixed compensation curve removes it without making some directions wrong.

    Critical distance — n m · Q n · R n m² · seat n dB

    The distance at which a real room with this absorption would have its reverberant field overtake the direct sound: rc = √(Q·R/16π), with the room constant R = S·ā/(1−ā). It is theory on this room's absorption, not a reading from the mix you are hearing – the late tail here is a slider and the reflections are first order only, so the model's own ratio at your seat is a different number. That is the seat figure. Compare the distance with your own room rather than with what you hear here.

    It does not depend on how many speakers play: a second one adds direct and reverberant power in the same proportion. The measured ratio does, by about 3 dB, because two mono speakers sum coherently on the centre line while their reverberant fields do not.

    The line prints R rather than the more familiar RT60 on purpose. RT60 is clamped for the tail, so at extreme absorption the printed RT60 and this distance would no longer describe the same room. R is exactly the number rc is computed from, so the arithmetic checks from the line itself. The rule of thumb 0.057·√(V/RT60) is the same formula without the (1−ā) term, and it reads low in a furnished room and further off in a dead one.

    Q is closed form where it is closed form: omni 1, cardioid and dipole exactly 3 – both have a power integral of 4π/3, so they differ in where the energy goes, not in how much of it goes off axis. A measured speaker is not one number, hence the extremes band by band on the second line. A value below 1 in the bass is not a fault: normalised polar data is slightly above 0 dB off axis down there, so the cabinet radiates a little more to the sides than on axis.

    Measured direct vs room — n dB · n dB wetter

    Read from the running audio, not calculated: two analysers sit in the graph, one on the direct sound and one on the room side (every first order reflection plus the late tail). The number is the ratio of their powers as a running average, so it lags while you drag, and it only exists while something is playing – hence press play when it is not.

    It is taken above the crossover and without the mode bank, because below the crossover there is no separate direct sound to compare against, and before the HRTF, because the interaural delay would comb filter the sum and the meter would show a dip neither ear hears.

    The second line compares it with the seat estimate on the critical distance row, and a residual is expected rather than an error. The late tail has the average early energy subtracted from it – averaged over listening positions – so a seat closer to the speakers than that average still reads wet, usually within a decibel: near them the early field really is stronger than a room mean. More than a decibel or two of disagreement with the tail at 100 % is the geometry talking – a seat that close to a wall is not a diffuse field. It is not an invitation to pull Late tail down. Reading drier means the opposite: the tail is below its calibrated 100 %, or surfaces are muted.

    Three short words can appear instead of a number:

    • silent – nothing is coming through above the crossover.
    • direct only – the room side is muted, which is the anechoic reference.
    • room only – the direct sound is muted.

    Stereo triangle —

    The angle at the listening position – the one people mean by the well known "60 degree triangle", where each speaker sits 30° off your nose. Toe-in is a different angle: how far the speaker itself is turned towards you. The two are independent, so an equilateral triangle with the speakers pointing straight down the room is a setting you can have. Aim at listener names the toe-in that puts the axis on your ears.

    Distance to the speakers — Speakers n / n m · Δ n mm (n ms)

    Equal distances mean you are on the centre line, and keeping that is the whole reason the walk buttons exist: they change distance only, so the lateral position is preserved exactly. A mouse drag drifts sideways, and the interaural time difference drifts with it – the image smears while you judge it.

    The delta is in millimetres and in milliseconds because the second one is what you hear: a few centimetres is a fraction of a millisecond, already an image shift rather than a level difference. It is also why the walk is slow – the delay lines retune as you move, and at the default speed that pitch shift is a fraction of a cent; at metres per second it would be audible.

    A / B — Now A · A and B differ in toe-in, separation

    Store A and Store B put the current settings in two slots; A / B – the button or the space bar – switches between them. The line under the buttons names which one you are listening to and what the two differ in. An empty list means the switch is silent, because there is nothing to hear.

    What you are listening in is shared; what you are listening to is not. Once A and B agree on a setting of the first kind, adjusting it is written into both slots as well as into what you hear – nothing is thrown away for a change you never meant as a comparison.

    • Shared: the room and its materials, which of its surfaces are live, the room modes, where the speakers stand, where you sit, which way you are facing, the movement locks, the walking speed, muting one speaker of the pair and cutting the direct sound.
    • Compared: the speaker itself, its directivity, its own response and phase model, the equaliser and the binaural mode. These stay in the slot you stored them in even when both slots agree, because a shared setting cannot be compared – choosing a different speaker would change both slots at once and leave nothing to switch between. A change to one of them counts as an unsaved edit, the line says so, and storing it in the other slot is what turns it into a comparison.
    • In neither: the listening level, the source, the sine frequency and the headphone correction. If the test signal changed with the switch you would be hearing two differences at once.

    The number keys are more of the same, for when two is not enough. Press one to recall a setup, hold Shift and press it to store the current one there, and 0 to flip back to the one you had before – a shelf of loudspeakers compared one after another is what they are for. The line under the buttons lists the ones that have something in them. They hold what A and B hold, but they live in this browser instead of in the page: they survive a reload, and they do not travel in a shared link. A and B are what a link carries.

    Paths — RT60 n s (LF n / HF n) · mean free path n m · n paths

    RT60 is Sabine on the current room and materials. The LF and HF pair is what the synthetic tail decays with – the broadband figure is the reading, and the length of an exported impulse response. Mean free path is the average distance between bounces, and it sets the pre-delay of the tail. The count is the direct sound plus one first order reflection per surface, per speaker. Mute a surface and the path stays: muting removes the energy, not the path.

    Room modes — Modes n · Schroeder n Hz · Q n–n · axial n / n / n Hz

    Below the Schroeder frequency the image source model is replaced by an analytic mode bank – one bounce per surface cannot produce a mode, and a mode is what is left after infinitely many. Each mode is a second-order low-pass whose level is its pressure at the speaker multiplied by its pressure at your ears, so a zero means you are sitting in a null. The filter type is what makes the nulls possible: phase runs from 0 to −180° through resonance, so two adjacent modes on opposite sides of their own resonances are out of phase and cancel. A bandpass never changes sign, and modes could only add. Q comes from the low band RT60, the LF figure on the row above.

    Q also sets how high each mode peaks, not just how narrow it is: a term of the modal expansion peaks in proportion to Q/f ², and Q itself grows with frequency, so the two leave a net 1/f tilt. That is the low end a room adds and a field does not, and why taking a speaker outdoors takes the bottom with it.

    The term with all three indices zero is not a mode: every cosine equals one, so it does not vary with position. It is the room's pressure below its first mode, and it is what you hear when you switch the room off and the bottom octave changes. Low-passed at the lowest mode above, flattened at the bottom of the model's range below – a real room leaks, so the pressure rise cannot continue to DC.

    The axial trio is the lowest width, length and height mode, c/2 divided by each dimension: the ones you can walk into. Capped on the line means the bank ran out rather than the room – the modes above that frequency are missing from what you hear.

    A symmetric pair fed the same signal cannot excite a left–right antisymmetric mode, and that is a little under half of the bank. While Off centre is at zero, every odd width index – the lowest width mode included – gets equal and opposite force from the two speakers. Toe-in does not change it and neither does where you sit; the mode is silent from every seat. Sliding the pair off centre does, and so does a recording whose channels carry different bass. It is also why real rooms do not sound like this: real placement is never quite symmetric and real recordings are not mono.

    Settings — Export JSON · Import JSON · Save to server

    All three carry the same object out of the browser – the room, the seat, the speaker choice, the surfaces, the EQ and your A and B snapshots. Import reads one back.

    • Export writes a file you keep. A measurement you imported yourself travels in it, with its description, so whoever opens the file hears the same speaker without owning the measurement. One of this site’s own speakers travels as a name instead — the reader’s page has it already.
    • Save to server keeps a named room on your account, where it opens on your other machine and survives a cleared browser. It needs a free account and an email address; exporting and importing need neither. How many rooms an account holds is shown under the list rather than promised here, because the server is what decides it.
    • What stays behind, in all three: the listening level, the source, the sine frequency and the headphone correction. A speaker’s private memo is backed up to your account only – never exported, never shared.
    • Nothing from this page reaches the server until you save a room, share a link or back up a speaker.

    Share a link

    A shared link carries the settings, not audio: the room, the seat, the speaker choice, the surfaces, the EQ and your A and B snapshots. The reader’s own browser renders it, so what they hear is what you heard, computed again on their machine. Their listening level, source and headphone correction stay theirs — a link does not carry those.

    • Reading needs no account. Making a link needs a free account – an email address and nothing else – and that is what gives the link an owner: it stays yours, and deleting your account deletes every link you made with it. Taking a link down stops it working everywhere you have pasted it, including that forum thread.
    • Your own speaker measurement travels only if you tick the box that says so. Without it, a link that used one of this site’s speakers still works – the reader’s page fetches the same speaker by name.
    • A link nobody opens expires; one that keeps being opened does not. The clock runs from the last opening. You see how many times a link has been opened, and that is all there is: a count, no addresses, no per-visitor record.
    • Pressing the button twice does not make two links. The link is made from the settings, so as long as those have not changed you get the same address back, with the message updated if you edited it meanwhile. Change the room and you get a new link, because it is a different room. Typing a second address of your own is the way to ask for a second link to the same settings.

    Pro names it. A Pro link has an address you choose (/preset/your-own-address), a short message shown on the page, your nickname and one link back to your own thread or site. The message is the useful part: “listen to the 45° ceiling reflection and tell me if you hear it” is a reason to open a link, a pile of slider values is not. The link back is rel="ugc nofollow" – it is there for people who click it, not for search engines, and this is said out loud so that nobody buys Pro for the wrong reason. Save text edits those afterwards without the address changing, because by then it is already in somebody’s post. Pro links do not expire, and they keep working after a Pro period ends: a dead link would punish the reader, not the person who stopped paying.

    Credits:

    Directivity data:
    Modelled in VituixCAD rather than measured — horizontal and vertical polar responses, normalised to the on-axis response. Each export's own angular grid is read and interpolated between the measured angles. Exception: on the PA three-way the waveguide response is measured from a prototype; its 15″ and 18″ drivers are modelled like everything else. Modelled by Teemu Muikku. VituixCAD by Kimmo Saunisto
    Head related transfer function:
    The browser's own generic HRTF, via the Web Audio API PannerNode — not measured on your head.
    Version history — 60 releases
    1. v1.58

      • Fix The rest of that unfinished change is out too, and the room modes are what they were before 1.55. The mode bank was also being fed the speaker’s power response rather than its on-axis response – the right thing to do, but it moves the level the calibration was set against. Measured across the pair: the difference between an omnidirectional and a cardioid source in the modal band is back to half a decibel, from nearly four.
    2. v1.57

      • Change The coaxial two-way is second in the speaker list, next to the model it is compared against. Same drivers and same LR2 crossover as the row above it, with the drivers on one axis rather than apart – so the difference is one click away instead of a scroll.
    3. v1.56

      • Fix Part of an unfinished change to the room modes is out again. How a speaker’s pattern drives the room went out with 1.55 by mistake and was not calibrated: an omnidirectional source drove the modes about 3.8 dB harder than a cardioid one, loud enough to clip at a moderate volume with the room on. It is out again until the level is calibrated.
    4. v1.55

      • New Stand up or sit down. Your ears move between 0.90 m seated and 1.60 m standing, from a button beside Walk or with Shift and the up and down arrows. The speakers stay where they are – the height between your ears and the drivers is what you are listening to – so the ear-height lock comes off with you, and the audio is heavier without it.
      • Change On a wide screen the spectrum and the directivity check sit side by side. The plan takes a row of its own above them, so an equaliser move and what it does to the curves towards each surface are in view at the same time.
    5. v1.54

      • Change On a wide screen the cards sit side by side instead of one graph growing to fill it. The spectrum and the directivity check are drawn into fixed buffers, so width past that stretches them rather than sharpening them. They stop there and the space goes to the next card, which puts the plan, the spectrum and the directivity check on screen at once.
      • Fix Collapsing a card on a wide screen left the box its full height with the contents gone.
      • Change The scrollbars in fullscreen are visible. Each column scrolls on its own there, and nothing said so.
    6. v1.53

      • New The room size and the toe-in are on the keyboard. T and G set the width, Y and H the length, U and J the height, held down like the other movement keys – and the sliders they would hit stay out of the way as the room shrinks. Shift with A or D is toe-in, the same as N and M, so the hand that moves the speakers can aim them without leaving the keys.
    7. v1.52

      • Change More headroom against crackle while you walk. Moving makes several paths cross a directivity cell at once, and the filters for them are rebuilt in a burst; too small an output buffer leaves a gap, which is heard as crackle. The page now asks the browser for a buffer sized for playback rather than for the lowest possible latency. The rendering is unchanged – the buffer sits after the whole chain, so the only cost is that keys and the A/B switch act a little later.
    8. v1.51

      • Fix The clipping warning shows itself, and says how far to turn Volume down. It was a yellow dot on a button called Performance, with the text a click away – so distortion in the bass read as a fault rather than as a level. The figure is measured from what is playing, and a button beside it sets that level for you.
    9. v1.50

      • Change The rest of the reference is shorter too. The room, the listener, the signal and the sharing entries now say what they said without the prose around them, and what this models says its limits and links to the entry that explains them rather than explaining them twice.
      • Fix The mode bank was described as a bank of bandpasses. Each mode is a second-order low-pass, and that is what makes the nulls possible: phase runs through resonance, so two adjacent modes on opposite sides of their own can cancel. A bandpass never changes sign and modes could only add – so the old wording contradicted the one thing the mode bank is for.
      • Fix Two figures were read off the wrong thing. The modal Q was said to come from a low-band decay longer than the broadband one, which is the wrong way round for panelled surfaces – including the default room. And the binaural tone figures were the average over a whole sphere, where the sentence was about what you hear from a stereo pair: at 2–5 kHz the pair reads within about a decibel, and the dip is higher up.
      • Fix A/B said muting a speaker was one of the things it compares. Muting a speaker, the direct sound and the mode bank are shared between the slots, and have been for a while; the reference had not caught up.
      • Fix A shared link carries an imported measurement, not one of ours. Picking a speaker from the list sends its name rather than its polar data, which is what the page already did without saying so.
      • Change The line above a shared setup now names the headphone correction too. Your level, your source and your correction stay yours: none of the three is in an export, a room saved to your account or a shared link.
      • New Ten things the listener controls did but never said. Chief among them: the binaural filter is chosen in fifteen-degree bands of elevation, and ten of the fourteen paths sit on the same band boundary at ear height – which is what the height lock is for, rather than merely what it does.
    10. v1.49

      • Change Every explanation on this page is shorter. The opening text, the credits and the speaker and directivity entries in the reference say the same things without the prose around them; nothing was dropped except words.
      • Change The version history is one line per change. It read as an essay per release, which is not what a changelog is for. The older entries are tagged the same way the newer ones already were.
      • Fix Three figures on the page had gone stale, and two of them were wrong. The extra group delay of a three-way is two orders of magnitude above a two-way rather than ten times, and it is no longer the only one on the list with a real 40 Hz high-pass. The angular cell size and the axial latency are read from the live lines instead of being written out in the prose, where they had drifted.
      • New Four things the page did but never said. The pattern control is a total −6 dB angle rather than one side of it. A synthetic radiator has no rear lobe, where a real waveguide or a sphere does. Beyond the last measured angle the edge value is held rather than extrapolated, and the line under the file picker says so.
      • Fix The VituixCAD link in the credits went to a page that no longer exists.
      • Change Room + listener is now Room + positioning. It brings the speaker placement as well as your seat, so the old name told half the story.
    11. v1.48

      • Change A polar set can come from any tool, and the format it has to be in is written down. The import has always read plain text rather than anything specific to VituixCAD. The reference now spells out both halves: the file name ends in the plane and the angle – hor or ver, the angle in degrees, .txt, anything at all before that – and inside each file a line carries frequency in hertz, level in decibels, and phase in degrees if you have it. Columns may be separated by spaces, tabs, commas or semicolons, the decimal separator may be a point or a comma, and any line that is not two readable numbers is skipped, so headers and comments can stay. There is a sample file to copy, the frequency spacing is yours to choose, and the on-axis hor 0 file is required because every other angle is read against it. Phase is worth generating if your tool can: without it the directional phase model falls back to minimum phase.
    12. v1.47

      • New You can load your own room over a shared listening test and keep the test. Every saved room and every import now offers three: All is what loading has always done, Room brings the walls, their materials, the late tail and which surfaces are live, and Room + positioning brings the speaker placement, your seat and the locks as well. The speakers, their directivity, their response and the equaliser are left as they were, in both stored setups as well as the one playing. Anything that will not fit your room is trimmed to fit and the trim is named, and if the two stored setups disagreed about something your room settles, the page says which comparison you just lost. Ctrl+Z puts the whole thing back, stored setups included.
      • Change A shared link stops greeting you after a few hours. The name, the note and the Reset to shared room button fade on their own instead of coming back on every later visit, and the link brings them back if you open it again. Your own settings are kept separately and are not touched.
    13. v1.46

      • Fix Session identifiers are issued by the site itself: a cookie carrying an identifier the server never issued is discarded rather than adopted.
    14. v1.45

      • Fix A file that will not load says why. Your own file is decoded by the browser and never leaves your machine, so nothing about a failure reaches anyone who could look at it. The page now reads the first bytes before handing them over and says what it found — the container, and for an MP3 the MPEG version, the layer, the sample rate and what sits in front of the first frame — with the browser’s own words quoted separately.
      • Change The synthetic radiator says why it will not sound like a speaker from the list. The difference is frequency rather than size: a real cabinet’s pattern narrows, widens again across a crossover and narrows once more, while a synthetic one settles on the angle you set and holds it. Since a room is heard mostly through its reflections, the two colour the same room differently at any size.
    15. v1.44

      • Fix Turning a speaker on its side no longer changes the level of the reverberation. The tail took its level from the early reflections read at the exact angle the pattern happened to face, so rotating a speaker moved the tail by up to a decibel — and in the wrong direction, since aiming into an absorbing floor made the reverberation louder. The tail now reads the pattern averaged around its own axis. What the pattern aims at still shades the tail through the surface it meets: a pattern that fires into an absorbing floor loses more of its top end on the first bounce than one that fires at the walls. The bass is left alone, and the ideal shapes are not shaded.
      • New A synthetic radiator you can set: pattern and physical size, horizontal and vertical separately. Choose the −6 dB angle you want and how wide and tall the object is, and listen to what that combination does in the room. The two are not independent — a pattern only holds as far down as its own dimension allows, so a narrow vertical costs height — and the line below each pattern says where its own limit falls. The shape is fitted to the measured spheres and to a measured waveguide rather than invented.
      • Change The account icon is within reach in fullscreen. A small figure sits at the right end of the bar while fullscreen is on, and it returns you to this page afterwards.
      • Fix The reverb tail no longer breaks when you move a wall. Changing a room dimension rebuilds the tail, and the old one was cut off mid-decay when the new one took over, audible as a step several times during a single drag. The two now cross over each other. Resizing still does not stretch the tail you are hearing: a new one is built and takes over once the dimension settles.
    16. v1.43

      • Fix An address you choose is no longer cut short without saying so. The field silently dropped anything past its limit, and the address of a shared link cannot be changed afterwards. It now keeps what you type, counts the characters beside the field, and says it is too long instead of deciding for you.
    17. v1.42

      • Fix What a shared link records is described accurately. Opening one adds to the link’s counter, and the sharer can see the date it was last opened, because that date is what the expiry is counted from. Neither tells them who you are or where you are, and the privacy policy says the same.
      • Fix A long nickname no longer pushes the page sideways on a narrow phone. It was the one field in the shared-room banner without a rule for breaking a word.
      • Change Opening a shared link is lighter on the server: the settings travel as they are rather than being taken apart and put back together, which matters when a thread sends a lot of readers at once.
    18. v1.41

      • Change A shared link lives a year from the last time it was opened, rather than three months. The date each of your links expires is on your account page beside it, and the privacy policy reads the same number from the same place the code does.
    19. v1.40

      • Change A shared link goes straight into the tool, with no page in between. What a forum shows in its preview — the room’s name and the sender’s note — is unchanged, because the tool page carries that description itself. An expired link still stops with a message rather than opening an empty room.
      • Change Opens on your account page counts one visit as one, rather than twice. A forum’s link preview no longer counts at all, so a link nobody has opened expires on schedule instead of being kept awake by crawlers.
    20. v1.39

      • New A shared link can be copied from your account page. The row could open it in the tool and take it down but not hand you the address; the address itself is still on the row.
    21. v1.38

      • Change The shared-room bar folds away. A small tab on its lower edge folds it down to the title row and Reset to shared room, and it stays folded until you open it again.
      • New Start fresh beside Reset to shared room drops the shared link entirely — the bar goes and the address loses its ?share= — without touching what you are listening to.
      • Change The keyboard shortcuts moved into their own panel, on a keyboard button next to Performance, instead of small print under the plan view.
      • Change Update while dragging is gone and is always on. The load light in the bar is the better answer to a machine that cannot keep up: it says when the audio thread is struggling and offers the control that helps.
      • Change Signing in brings you back to the page you were on, with the shared room you arrived in still in the address. Before this the sign-in link led to your library wherever you had come from.
      • Change The controls follow the room: the room, then where you sit, then the loudspeakers — the same order as the views beside them. The loudspeaker library sits directly under the loudspeaker controls.
      • Change Saving a room moved into Settings, beside Export and Import. Exporting a file and saving to your account write the same thing — the room, the seat, the speaker, the surfaces, the EQ — so they are one card now, and the list of saved rooms is where the save button is.
      • Change The line under the directivity graph is a line again rather than a paragraph that redrew itself while you were dragging a speaker. What changes as you move stays on the line, the state of the graph is a word or two beside it, and what the heavier curves include and where the model stops being true is a paragraph in the reference.
      • Change The critical distance line says what it is rather than r_c.
      • Change The note about AI is at the end of the introduction rather than between the menu and the title, and the menu links open on the same side as the button that opens them.
      • Change The dialog for adding a loudspeaker lost two paragraphs about incomplete exports: the import says at the time if the on-axis file is missing, and the rest of the rules are in the reference. What the dialog accepts is unchanged.
      • Change A shared link opens the tool directly rather than landing on a page describing the room. That page is still what a forum shows in its link preview, and an expired link still stops there.
    22. v1.37

      • New The three ideal sources are in the graphs. Omni, Cardioid and Dipole drew nothing, because every view reads a polar dataset and an ideal pattern had none; they now come with a dataset built from the same formula the sound uses, so the map, the curves, your seat and the reflection view work as they do for a measured speaker. The difference map and group delay stay off, since both need a measurement to compare against, and an ideal pattern has no frequency dependence, so its curves are straight lines.
    23. v1.36

      • Fix Muting a speaker, the room modes or the direct sound survives an A / B switch. They were treated as things you compare rather than things you use, so pressing space put them back. They now follow the same rule as the room and the seat: a setting both sides agree on is shared. To compare them instead, clear one side first and store the two states separately.
      • Fix Save / Load and Performance stay in the top left corner. On a narrower window the bar wrapped onto two lines and the left-hand pair drifted to the right edge.
      • Fix Taking a shared link down no longer jumps the page. The confirmation appears where the button was instead of reloading the page.
    24. v1.35

      • Fix The reason given for a bigger room having a quieter tail was the wrong one. It said the budget is shared rather than stacked, which would work the other way round. What happens is that the budget itself shrinks: the critical distance grows with the room, and the budget is the diffuse level at that distance. The tail does get quieter, so what you hear was right; the sentence explaining it was not.
    25. v1.34

      • New A and B can be cleared, which is what lets you compare a listening position. Room, surfaces and where you are sitting are shared as long as A and B agree about them, so once both sides were stored there was no way to make your own position the thing being compared. Clear B, sit in the first spot, Store A, move to the second, Store B, and the two stay apart. Same two-click x as the memory slots, undoable, and it does not touch what is playing.
      • Change Shift+Z also undoes, and Shift+Y redoes. On a Mac Ctrl+Z belongs to the system and switches tab; Cmd+Z worked already.
    26. v1.33

      • Fix The reverberant tail is fed by the power response, not by the on-axis one. A diffuse tail is sound arriving from every direction at once, so what feeds it is the speaker’s total radiated output rather than what one microphone in front of it would read. The old feed tilted the tail end to end on every speaker, and neither the graphs nor an A/B could show it — it was found by ear, from the colour of the tail changing when the phase model was switched.
      • Change The tail is slightly louder than it was, as a consequence rather than a choice. Its level is calibrated to the critical distance printed beside the plan, and putting the right colour into the tail moves its total level up. Removing the shift would break the relationship with the critical distance the page shows you, so the Late tail slider is where you set the amount you want.
      • Fix Changing speaker no longer mutes the tail for a moment. Rebuilding a convolution kernel silences it while it happens, and the tail was fed through a single one, so every speaker change and every phase-model switch cut its input.
      • New Undo. Ctrl+Z puts back a setup that loading a slot, a preset or Reset replaced, and it covers the memory slots themselves — storing over a slot by accident is undoable too. Slots that hold something show as numbered buttons in the top bar, each with a two-click clear.
      • Change The load warning is a light in the bar instead of a paragraph in the column, so it no longer moves every control below it while you are adjusting them. A dot blinks beside a Performance button and the text is inside it, along with the Reflection detail switch the warning tells you to use. It also reports a single short stall, which was previously not reported at all.
      • Change Cards say what they are doing while collapsed. The headphone correction and the speaker EQ show on or bypassed on their title row, so a folded card is no longer a closed box. All on and Room off have moved next to the surfaces they switch.
    27. v1.32

      • Change Space switches A / B, and R turns the room on and off — everything R does is what space did before. The A / B buttons have moved to the bar at the top of the app, where they stay in view while you are working in another card, and the Paths card is gone: its sliders are in Room now, keeping their own colour.
      • New Six memory slots on the number keys. Shift and a number stores the current setup, the number alone loads it, and 0 flips between the last two you loaded. The slots hold the same thing A and B hold, they stay in this browser between visits, and they are not part of a shared link. Enter starts and stops the sound.
      • Fix The EQ is at the front of the chain, where an equaliser belongs. It sat after the loudspeaker’s own response, which is not something you can do to a real loudspeaker. The direct sound is unchanged; what changes is everything the signal reaches afterwards.
      • Fix Directivity only shows the EQ it has been playing. It was left out on the grounds that the view is normalised to the axis, so a filter applied to every angle cancels out of it — which was wrong: you could hear a cut that the curve did not draw. The switch removes the loudspeaker’s own response, and your EQ is ahead of the loudspeaker rather than part of it, so it stays in every view.
    28. v1.31

      • Fix The curves stopped halfway through a crossfade and stayed there. Switching the phase model appeared to change Towards each surface at random: the drawing happened in the same instant as the switch, so it caught the fade mid-way and nothing drew it again afterwards. The graph is now redrawn once the sound has settled. Worth knowing while reading these curves: minimum and measured phase are two phases of the same magnitude, so a single path barely changes between them — where they differ audibly is in how the paths sum at your seat.
      • Change Card headings are a little larger and no longer grey against grey. The one-off cards — settings, saved rooms, sharing, the impulse response — have no subject colour and had faded into the text below them.
      • New A Save / Load button beside Fullscreen takes you to the four cards that save and load: your speakers, your rooms, your library and the JSON export.
    29. v1.30

      • Change Each filter in the speaker EQ has its own colour, and the handle on the curve above carries the same one, so you can see which knob moves which dot without reading labels. The numbers under every knob are unchanged, so nothing here depends on telling the colours apart.
      • Change The button that sets the preamp to the tallest boost is on the same row as Bypass and Flat instead of a row of its own, which makes the card short enough to fit beside its graph on a laptop screen.
    30. v1.29

      • Fix The curves follow the crossfade instead of stepping. Directivity is played from a grid of measured cells and moving between them is a crossfade, but Towards each surface and At your seat drew the cell the geometry pointed at — so what you saw was a step where what you heard was a glide, and during a drag the curve ran ahead of the sound. Both curves are now read from the pair of filters that is actually playing, summed the way the audio graph sums them.
      • Fix The speaker EQ is in those curves too. It sits in the chain above the point where the paths split, so it is in every one of them, and a curve that leaves it out draws a loudspeaker nobody is listening to. The curve follows the sliders as you drag them, and the line under the graph says when the EQ is part of what you are reading. In Directivity only it stays out, since that view is normalised to the axis.
      • Change The headphone correction card is one line and a link: where the file comes from and what the buttons do. The rest moved to the (?) beside the title. The link points at the AutoEq repository rather than the web app, which does not have every headphone the repository does.
    31. v1.28

      • Change The graphs read +12 to −36 dB instead of +6 to −42. The window is the same height, so a given ripple looks as steep as before, but the sum of the direct sound and the reflections runs into the top of the frame far more often than the bottom.
      • Change The coloured stripe down the left edge of each card is gone; the colour is carried by the heading and the dot in front of it.
      • Change The controls are colour-coded by subject, and the same colours are in the plan view above them: the room, the loudspeakers, the listener and the reflections each have one, and the buttons and sliders inside a card follow it. The one-off cards — settings, library, sharing, the impulse response — stay grey. Every card still says what it is in words, so nothing here depends on telling the colours apart.
      • New Focus collapses everything except the card you are working on, and the two columns scroll independently, so a graph can stay in view while you adjust something at the other end of the page.
      • Change The (?) links open the Reference entry where you are rather than jumping you to the end of the page. The text still lives in one place, and some of the longer explanations beside the controls moved down there as well — the spectrum card and the directivity table say what they are and leave what they mean to the (?).
      • Fix Shorter filters says what it changes about the reflections: with it on they are minimum phase whichever phase model you pick, so the model you choose applies to the direct sound alone. The phase menu says so too, because comparing the phase models with it on is a comparison of the direct sound only.
    32. v1.27

      • New A PA-sized three-way joins the list: a 15″ waveguide over a 15″ midrange and an 18″ woofer, on a baffle far larger than anything else here, so the pattern stays narrow far lower and the side walls hear much less of it. Its directivity below the woofer’s passband is a property of how the model was built rather than a measurement of a real box.
      • Fix The credits described the directivity data in two ways that had stopped being true: the polar grid is read from each export rather than fixed, and the list is modelled rather than measured except for one driver — the PA three-way’s waveguide response, which is measured from a prototype.
    33. v1.26

      • Change At your seat draws what reaches the seat: the direct sound and the reflections added as a complex sum, delays and all, so what you read is the interference rather than an energy average. The direct curve stays alongside it, so the distance between the two is what this room does to that loudspeaker. Below the crossover the room is carried by the mode bank rather than by these paths, and the curve is the pressure at the seat rather than at your ears.
      • Fix Changing the loudspeaker from the list played a third loudspeaker for a moment: the new speaker’s directivity with the previous one’s response and phase. Switching with the A/B buttons never had this.
      • Fix Pressing Play immediately on arriving could start the sound before your speaker’s measurement had loaded, so the first seconds played an ideal pattern and then changed under you. Play now waits for the measurement and says so.
    34. v1.25

      • Change Linear phase models what a real correction does: a DSP filter at the input straightens the axis it was tuned on, and every other direction keeps its own difference to that axis. The page used to make every direction linear-phase at once, which no loudspeaker can be. A response you linearised in VituixCAD still plays with the phase it was exported with.
      • Fix Importing your own measurement rejected the files unless the name contained “polarfr”. The plane and angle at the end of the name are enough now, and the beginning is yours. If you pick two sets at once, the page names the files that collide instead of folding them into one speaker.
      • Fix The import receipt could fail to appear at all, leaving the dialog on “Reading files” with no angle count, no warning about missing vertical files and no line about phase.
      • Fix Also here: a batch of text corrections published on 27 August without a version of its own — loudspeaker names shortened, claims corrected against what the code does, and the reference section trimmed of explanation about the implementation.
    35. v1.24

      • Fix The credits were wrong about where the directivity data comes from: every loudspeaker in the list is modelled in VituixCAD rather than measured, and the polar grid is 10 degrees rather than the 15 the credits claimed.
      • Fix Rendering an impulse response said it was “exactly what you are hearing right now”. It is the room and the loudspeaker: the headphone correction sits at the end of the chain and is left out of the file.
      • Fix The clipping warning blamed the room whichever way the level got there — speaker EQ boosts with no preamp will clip in the middle of an empty room. It now reads the chain and names what is adding the level, and the fixed figures it quoted alongside, true of the default room only, are gone.
      • Fix Two claims about symmetry contradicted each other in the same paragraph: a symmetric pair cannot excite the odd width modes, but only while Off centre is at zero — sliding the pair sideways wakes them.
      • Fix Two places said your measurements are never uploaded. They stay in your browser until you back a speaker up to your account or tick it into a shared link, and then they go to the server; the wording now says when that happens.
      • Fix Fetching a speaker from your account updated its name, description and notes but silently kept the old response and phase.
      • Fix Every page on this site was loading JavaScript libraries that only two pages use, and this one used neither — on a phone that is seconds before anything appears.
      • Fix A shared link page could scroll sideways: one long unbroken word in the title, message or nickname made the heading far wider than a phone screen.
      • Fix Signing up for the first time wrote a rejected-attempt line into the log the firewall reads, so honest sign-ups from one shared address could have blocked that network. Refused attempts are still counted; successful ones are not.
      • Fix The privacy policy described the logging wrongly in two places: your address is also recorded when an account asks for more sign-in links than the hourly limit allows, and the site’s own log is the same server log rather than a separate one without personal data.
    36. v1.23

      • Fix The page no longer scrolls sideways on a phone. A menu is as wide as its longest entry and the loudspeaker names had got longer; the menus now shrink to fit and the name is shortened with an ellipsis.
      • Fix Bypassing the headphone correction plays at the preamp level written in your correction file, the figure printed beside it, rather than at a level calculated from the correction. The trim is still there for the rest.
      • Fix The reflection panel no longer prints the depth of the sharpest hole in each direction. Its trend line was set when the polar data was coarser, so it was picking narrow holes far above the range the sentence beside it described. The curves show the same thing correctly, so the number went rather than the graph.
    37. v1.22

      • New A trim beside the bypass, for when the average-level match does not agree with your ears. It moves the bypass only, so the level you are listening to does not shift while you set it.
      • Fix The cost of reading the crossover’s phase off axis was given as one figure, measured on the ideal two-way. Drivers further apart cost more, so the figure for the classic three-way is given as well, with the note that it is the speaker the effect exists for.
    38. v1.21

      • Fix Bypassing the headphone correction no longer changes the volume: the bypass plays at the level the correction plays at. It matches the correction’s average level rather than its loudness, so a file that only lifts the bass can still sound different when the music is mostly bass, and a tick gives you the raw signal instead.
      • New Filters you paste can be given a name, so the line under the box says which headphones the correction is for rather than just Pasted filters.
      • Fix The assumptions list says that nothing in the chain is level dependent: no distortion, no power compression, no woofer running out of excursion, no port noise. Turn it up and it is the same sound louder, which is not what a real loudspeaker does.
    39. v1.20

      • New The headphone correction is drawn, read from the filters that are actually playing rather than from the numbers in the file — so shelf filters show the slope the browser gives them. The preamp is printed as a figure beside the curve rather than folded into it, and the vertical scale grows with the file you loaded.
    40. v1.19

      • New Headphone correction: load or paste an AutoEQ Parametric EQs file and it is applied last, after everything else, so nothing the page measures moves when you switch it on. It lives in this browser only and is not part of a shared link. Filter types this page does not read are counted and named rather than dropped in silence, and shelf filters are played at a fixed slope.
      • Fix A shared link no longer changes how you are listening: room, speakers and the comparison travel, while level, source and headphone correction stay where you left them. Before this, opening a link could put you on a test tone at whatever volume you had set.
      • Fix The clipping warning names which of the two is doing it: the room, or a headphone correction adding gain of its own after everything else.
      • Fix Pressing A or B no longer flips Update while dragging, which is a setting about how you work rather than one of the things being compared.
    41. v1.18

      • Fix A claim that was wrong: the page said a real loudspeaker cannot have linear phase. A passive crossover cannot, an FIR filter can. What the switch is for is the comparison without the build — the same speaker in the same room, with and without the phase its crossover adds.
      • Fix Passages about how the page came to be the way it is have been taken out, along with the internal numbers that went with them.
    42. v1.17

      • Fix Towards each surface was normalised whether or not the speaker’s own response was switched on. Turn the response on and the white direct line is the real thing now, dips and all. One switch governs it: Directivity only normalises, the measured response does not, and the caption says which one you are reading. The dip figure beside each surface is unchanged.
      • New The listening tests start with ones that need nothing of yours: take one thing, change only that, and A/B it until you can say whether you hear a difference at all. Calibrating the room to your own comes after that, as something worth doing rather than a prerequisite, and it is described as what it is — six flat surfaces with one reflection each, not your room.
    43. v1.16

      • Fix Sharing a speaker you imported yourself was refused: after the import resolution went up the browser built more bands than the server would accept. The limit is the same number at both ends now. A ceiling still exists, because a polar at this resolution is slower to lay out the first time a chart view is opened — the sound is convolved from the same data either way.
      • New A speaker can carry two texts of your own. The description travels with an exported file, with a copy saved to your account and with a shared link; the memo is backed up to your account but stays out of exported files and out of every link.
      • New The page is called what it is: the title names the listening tests instead of describing the model, and the front page leads with it rather than listing it among the calculators.
      • Fix Pages are compressed on the way to your browser, which is most noticeable on a phone and on a first visit.
    44. v1.15

      • New Every release of this page is listed at the bottom, newest first, and the version badge next to the title jumps to it. If you report something and it gets fixed, this is where you can see that it did.
      • Fix Hardened file access on the server.
      • Fix The cost of Shorter filters is measured on every speaker on the list rather than most of them, and the note beside it no longer claims a wide baffle is not reproduced at all without the full length — it is reproduced, at a cost that rises with cabinet width. The measurement also refuses to write a partial result.
    45. v1.14

      • Fix The table under the directivity graph says what its worst column can be: on a speaker whose pattern has a deep null in it, that figure is the filter’s floor rather than the cost of rounding your angle to the nearest cell.
      • Fix A/B could not tell you that a slot’s loudspeaker was gone — deleted since, or named by a shared room this browser does not have. The page dropped to an ideal pattern correctly but crashed on the way to saying so.
      • Fix Loading a speaker named by a preset or a shared link rebuilt the whole chain twice.
    46. v1.13

      • New Two floorstanders: the same two-way as the bookshelf already on the list, in a narrow tower and a wide one, so the width of the front baffle is what changes and the drivers are not moved. They are exported at three metres like the others, so the same caution applies if you sit closer than two.
      • New What the width does is where the speaker starts to become directional: the wide cabinet turns directional a good octave lower than the narrow ones, and height is not doing that work.
      • New The vertical null the driver spacing produces stays at the same frequency in both towers, as it should when the drivers have not moved, but it changes side and gets shallower — which looks like cabinet diffraction filling it in.
    47. v1.12

      • Fix The horizontal polar is read with its sign. The angle off the speaker’s axis was taken as a magnitude, so the left half of every measured horizontal response was never read: a reflection off the left wall and one off the right wall were given the same response, and no loudspeaker on the list could be asymmetric even if its measurement was.
      • New A classic three-way whose midrange and tweeter sit off centre, so its response toward one side wall differs from the other. It is the left cabinet of a mirrored pair and the list says so; the pair is an assumption, since a measurement cannot tell you whether you own two cabinets of the same hand.
      • Change The curve set draws both halves of the horizontal polar when they differ, so an asymmetry you can hear is one you can also see.
      • Change The directivity cache doubles for an asymmetric speaker, and only for that speaker.
    48. v1.11

      • Change A / B shares the room, its materials, which of its surfaces are live, where the speakers stand, where you sit and the movement locks. It no longer shares the loudspeaker, its directivity, its response and phase model, the equaliser, the binaural mode or muting one speaker of the pair. The line under the buttons says the rule, and the reference says which side of it each control is on.
      • Fix With the same speaker in both slots, choosing a different one used to write it into both at once, so there was nothing left to switch between.
      • Change The test signal is unchanged by a switch: the level, the source and the sine frequency stay where they are.
    49. v1.10

      • Fix A/B switches the loudspeaker as well. The line under the button listed the speaker as a difference between A and B, but pressing the button restored everything except the speaker, so both slots played whichever speaker happened to be loaded. If the other slot’s measurement cannot be loaded, the page says so instead of claiming the switch happened.
      • Change Two slots on the same speaker are as immediate as before, and switching between two speakers you have already listened to does not go to the network.
      • Change The reference note on Shorter filters gives its cost at the wide-cabinet end as a measured figure rather than an adjective.
    50. v1.9

      • Fix Numbers in the explanations had been left behind by the resolution and material changes. A number in an explanation is now either printed from the same variable the audio uses or not written at all: the error map’s note reads its resolution, cell size, filter length and floor from the code, the reference headings show the shape of each line instead of an example reading, and a figure that varies points at the live reading instead of giving one value.
      • Change The error map says when its worst point is past the ends of the colour scale, angles below the filter floor have their own key instead of the hottest colour on it, and the scale’s end labels are no longer rounded to whole decibels.
      • New A procedure for anchoring the simulation to your own room: your speakers, your dimensions, your materials, then save it and change only the loudspeaker.
      • New The example speakers say what distance they were exported at, what that means if you sit closer, and how to export your own at your own distance.
      • New A group of ideal spheres at the bottom of the speaker list, a point source on the surface of each. They have no design choices in them: only size changes, which makes them the cleanest way to hear what a cabinet’s width does on its own.
    51. v1.8

      • New Three new loudspeakers: the same 6.5″/1″ two-way, differing one thing at a time — two in driver spacing, two in whether the cabinet edges are rounded.
      • Change The 8″ pair differs only in crossover order, so each comparison on the list changes one thing.
      • Change The fifteen-inch waveguide example is gone: its vertical data claimed more output straight down than on axis in the deep bass, where nothing that size has any directivity at all. The fault is in the model it was exported from, and it will come back when the export is fixed.
      • Change No measured directivity data ships inside the page any more. It is fetched when you pick a speaker, and the default pattern needs none of it.
      • Fix A selected speaker that is no longer here, or fails to load, is reported and the page drops to an ideal pattern rather than quietly playing a different speaker.
    52. v1.7

      • Change Walls and ceiling have a material instead of one absorption slider. Each material carries two published bands, so a concrete box and a curtained room are different things to listen to rather than the same grey tail at two levels.
      • Fix Absorption was distributed across the spectrum by a fixed rule that got it backwards: the harder the room, the more treble the model claimed it absorbed. Bare concrete does the opposite.
      • Fix Reverberation time was clamped per band independently, which flattened different decay times to the same number and left a white tail. The clamp is now one factor shared by both bands, so the length is limited but the ratio is not.
      • Fix The band split of the tail was a subtraction rather than a filter, which let bass through the treble branch. It is an LR4 crossover now.
      • New Absorption curves in the reference section: the published octave-band data with the two-band step the model uses drawn on top of it, and a check that flags where the two disagree. The values are typical published ones rather than measurements, and two entries are marked as estimates.
      • Change A preset, a saved room or a link no longer carries the measurement of this page’s own example speakers: they travel as a name and are loaded on the other end, so the setup arrives under the speaker’s name rather than as “From an imported preset”. Only a measurement you brought in yourself travels as data.
      • Fix Presets and saved rooms carry a version, so an older file is brought up to date instead of refused and a newer one says so. Before this, a preset opened in another browser could change the wall material without saying anything.
      • New The listening tests link to the sharing card where a result appears.
    53. v1.4

      • Change Your own loudspeaker is ready as soon as you have added it: the Prepare button and its wait are gone, and what you hear is the measurement itself rather than an approximation of it. Nothing has to be stored and fetched back, so a browser that clears its storage costs you nothing.
      • Fix Switching to another speaker no longer left the directivity out entirely until you happened to move something.
      • Change The directivity check shows the measurement in the cell your angle rounds to — what is actually playing — and the error map shows that rounding instead of a fitting error.
      • Change The seat spectrum, the response towards each surface and the group delay follow you during a drag, not only when you stop. The graphs that answer a question about the loudspeaker stay still.
      • Change The equaliser high pass and low pass ranges now overlap, so the pair works as a band pass as well: you can give the room a single octave, or listen to one driver’s own band on its own.
      • Fix When the two filters are run across each other the chain goes silent, and the page now says so rather than looking broken.
    54. v1.3

      • Fix Room modes peak. Every mode was a bandpass with unity gain, so all of them stood the same height, which no room does; each mode is now weighted the way the modal expansion says. The lowest modes are the loudest, and peaks and nulls at one seat are far enough apart that equalising this room is the same exercise as equalising a real one.
      • New A shared link says whose room you are listening to inside the tool, and a button beside the name puts everything back the way the link had it.
      • New A and B travel with the link, so a shared setup can carry the comparison its author set up.
      • Change The line under the A / B buttons names which one you are listening to and what the two differ in, so a switch that changes nothing looks like one.
      • Fix A setting both slots agree on follows you into both of them instead of being thrown away on the next switch.
      • Fix Pressing the share button twice no longer makes two links: the same settings give you back the same address, and a new one appears when you have changed something.
      • New A Pro link is named rather than numbered, and its landing page can carry a message, your nickname and one link back to your own thread or site. The message is what the forum preview shows. The link back is marked nofollow. Text can be fixed afterwards without the address changing, and a named link does not expire when a Pro period ends.
    55. v1.0

      • Change Out of prototype: the model is calibrated against itself rather than against a guess — the late tail against the early reflections, the mode bank against an average of listening positions, the directivity model against the measurement it is fitted to — and every number the page prints says which of those it is reading.
      • Change The page no longer promises a prediction of your room. It models an idealised rectangular one and the opening paragraph says so first.
      • Change On a wide display the settings, library and impulse response cards sit beside the graphs instead of stretching across the bottom, and the spectrum and directivity graphs sit directly under the plan view they answer.
      • Change Long explanations moved out of the cards and behind the same (?) links as everything else.
      • Change The saved library has stated limits: two rooms and one loudspeaker of your own for free, a hundred of each with Pro. Importing a measurement and listening to it stay free.
    56. v0.9

      • New Listening tests at the bottom of the page, with what to set before you start and two limitations said out loud: floor and ceiling reflections do not sound very natural, and height is the axis where a generic HRTF is at its weakest.
      • New A listening guide after the tests, written in the first person — one listener calibrating himself rather than a claim about what you should hear.
      • Change The live lines beside the sliders are numbers rather than prose, so the card no longer reflows while you are moving a slider.
      • Change The explanations moved to a Reference section at the end of the page, and each line has a (?) that links to its entry. Warnings stayed on the line.
      • Change A Pro feature is visible to everyone and the click says what it costs, instead of the feature being hidden. The free version keeps one speaker of your own at a time; importing and listening stay free.
      • New Turning Ears off in the Listener card drops the chain to plain amplitude panning while you listen, so direction still follows where you face but nothing goes through a head. The impulse response reads the same switch.
    57. v0.7

      • Change Locking your head to the speakers aims at the speaker that is playing, so muting one puts you on its axis. Worth knowing if you use muting as an A/B: the head turns with it, so you are comparing one speaker on axis against two in front of you.
      • Fix Adding a speaker no longer loses what you typed — clicking outside the dialog or pressing Escape asks once before discarding.
      • New The dialog says where the export comes from in VituixCAD, that a complete set is not required, and what arrived: the angles on each plane, the step between them, the widest gap, and what a partial export means for the reflections it cannot cover.
      • Fix Files that could not be read are named instead of silently skipped.
      • Fix The reverb tail is no longer rebuilt when the room changed too little to hear it, which paused every adjustment.
      • Fix The load meter stops its loop on a paused page.
      • New Saved rooms and speakers open straight from your account library, and a speaker keeps its precomputed model instead of being solved again.
    58. v0.6

      • New A speaker library: ideal patterns, the example measurements and your own VituixCAD exports in one list. Adding your own is a dialog with a name, notes, the files and the polar map drawn straight away, so you can see whether the right data arrived.
      • Change Each speaker carries its own precomputed directivity model, solved in the background when you add it and stored with it. The Live / Precomputed buttons are gone.
      • New A saved speaker travels with your account, taking its precomputed model with it, and that copy is also what brings a model back when the browser has cleared it.
      • Change Backing up, fetching and removing are separate buttons: deleting a speaker from this browser leaves the copy in your account, and removing it from the account leaves the copy in this browser.
      • Change Rooms and speakers have separate limits, so saving a speaker no longer costs a room.
    59. v0.4

      • New You can turn your head: a yaw slider, hold-to-turn buttons and a draggable sight line on the plan.
      • New Arrow keys, WASD and N/M do everything that used to need a drag.
      • New Directivity check: the measured polar against the filter model as curves, as a polar map and as an error map.
      • Fix Two faults the error map exposed in the filter model: the fit could not see the bass at all, and the lowest shelf was too high to reach it.
      • New Optional precomputed directivity model, solved in a background worker and switchable against the live one.
      • Change The late tail level is calibrated against the early reflections rather than on its own.
      • New Critical distance and the measured direct-to-room ratio beside the listening position.
    60. v0.1

      • New First public version. Prototype: the mode bank level and the modal Q are not calibrated yet.