Room: measuring the listening room
Abstract
Every home room correction system measures the response at the listening seat. Audyssey takes up to eight mic positions around the seat. Dirac Live takes nine to seventeen positions. Sonarworks takes thirty-seven. Trinnov takes one position, with a four-capsule mic that also hears where each speaker is. Each system needs a measurement mic on a stand and a diagram showing where the stand goes. Most products also require a license or a processor. No correction system knows where the walls are or which way a speaker faces. A seat-based measurement also misses whatever sits between a speaker and the listener. That's why no correction product can say what to move or where treatment belongs. Correction can only compensate for the current placement of everything in the room.
Room measures the geometry of the room along with its sound. Room Scan, on a LiDAR iPhone or iPad Pro, records depth, camera stills, pose and mic audio on one clock while the listener walks. Room View plays test signals and music through the room's own playback chain, on a clock the phone follows. Room for Mac puts geometry, speakers and acoustics into one coordinate frame. The listener already owns every sensor. A walk replaces the stand and yields a spatial result. Room locates each speaker to about an inch and finds the direction each speaker points to about ±10°. The plan also shows the walls and beams around the speakers, along with the variation of the bass across the floor.
Room is built first for placing the speakers and the seat, and for treatment. In a second phase, the listener sets the level, EQ and delay the receiver already provides, working by hand from Room's measurements. The third phase sets those controls automatically over the receiver's network interface. Room runs before room correction and leaves that correction in place.
The method's weak point is the phone's pose drift. Room anchors height to the floor and ceiling. The height anchor passed a control that the general method, frame-to-model ICP, failed. In one real room, the corrected captures put a beam's underside within about 0.16 in across two separate walks. A guided pass identified six channels and put the left and right fronts level within an inch.
Playback runs from Room View, straight down HDMI to the receiver. The phone and Mac hold the Apple TV's clock to about 2 ms. Latency through the chain holds at a fixed 84 ms. Midrange coherence between the track and the phone was about 0.3 over AirPlay and 0.65 from Room View. The music passes use a track from the listener's own library and give a response at the seat and across the floor.
Claims about the engine and the reconstruction were registered as predictions before measurement. Every broken prediction is reported. Apart from the spacing of the front pair, Room has not been checked against a tape measure or a calibrated mic.
1. The seat and the room
Room correction is standard, and effective, in home theater receivers and studio monitor chains. Audyssey MultEQ XT32 ships inside Denon and Marantz receivers with a mic in the box. MultEQ XT32 takes up to eight positions around the seat. Audyssey then sets each channel's distance, level, polarity and sub crossover from those measurements, and applies EQ. Dirac Live runs on receivers from several makers and as a processor for Mac and PC. Dirac takes nine, thirteen or seventeen positions, depending on the size of the listening area. Dirac's filters correct impulse response as well as magnitude. The Bass Control add-on integrates several subs. Dirac's Active Room Treatment uses every speaker to cancel low-frequency decay. Sonarworks SoundID Reference does the same job for studio monitors, using thirty-seven positions and locating the mic acoustically from the speakers. At the top of the market, Trinnov's Optimizer uses a tetrahedral mic. The Optimizer localizes each speaker to ±2° and ±1 cm from arrival times at four capsules, then remaps the soundtrack to where the speakers actually stand.
All four systems work the same way. The mic sits at the seat, or in a pattern around it. The speakers play sweeps or chirps. The result is a response at the seat and a filter to flatten it. Arrival times add distance and level, and in Trinnov's case direction.
A seat-based system knows only what its mic can sense. The measurement can't show the left speaker six inches from the side wall, or the right speaker fourteen inches from its wall. A center speaker pointed twelve degrees off the seat goes unnoticed. The mic also misses a glass table in the first reflection from the right and a seat placed halfway down the room, in the null of the first axial mode. The setup manual shows where to put the mic. No diagram can show where the speaker belongs, because the system never measured the speaker's position.
Moving a speaker off a wall, turning it to the seat, clearing a reflecting surface or hanging a panel at the first reflection changes the room's transfer function. EQ can only compensate for the result.
The measurement itself is also an obstacle. A session takes a stand, a calibrated mic, a position diagram, a laptop or an app, and twenty minutes of sweeps. The result is only as good as the listener's placement of the mic at each position in the pattern.
A LiDAR iPhone Pro or iPad Pro has a depth sensor, a camera, visual-inertial tracking at sixty poses a second and a mic whose samples share the tracker's clock. The phone is therefore a spatial measurement instrument the listener already owns. Room uses the phone as a capture rig. Room Scan shows where to point and where to walk, and records. Room View plays the signals through the listener's own receiver and puts the guidance on the screen. Room for Mac does the rest. While the listener stands in front of each speaker, Room measures the speaker's position and direction and checks its channel. With the phone held at the seat, Room measures the listening position. A walk maps the bass across the floor.
Room is built in three phases. This paper covers the first phase, placement, which means measuring the room and the speakers and showing what to move. The second phase covers the level, EQ and delay every receiver provides, set by hand from Room's measurements. The third will set the same values automatically, over the network control protocols that Denon, Marantz, Yamaha and Onkyo publish. The second and third phases aren't built. Placement is designed so the later phases can trust its output. Audyssey, Dirac or any other correction the listener uses runs after Room.
This paper makes four claims and gives the evidence for each.
- Cost. A spatial measurement of a listening room can be made with hardware the listener already owns. The measurement costs a fraction of the alternatives and works with the listener's existing receiver and correction.
- Labor. A guided walk and one visit to each speaker replace the stand and the diagram. Along with the response, the walk and the visits record the room's geometry and each speaker's direction and channel.
- Information. Geometry, speakers and acoustics in one frame let a system say what to move. Seat-only correction can't give that advice. The obstacle is the phone's pose drift. A height correction removes the vertical part of that drift.
- Trust. The measurement chain is checked against predictions registered before measurement, with every failure reported. A listener or a receiver maker can see what each number means.
2. What exists
| Audyssey MultEQ XT32 | Dirac Live | Sonarworks SoundID Reference | Trinnov Optimizer | Room (phase 1) | |
|---|---|---|---|---|---|
| Measures | response at up to 8 positions | response at 9, 13 or 17 positions | response at 37 positions | response and 3D direction at the seat | geometry, speaker position and direction, response at the speaker, at the seat and across the floor |
| Microphone | bundled with the receiver | calibrated USB, bundled or bought | bundled calibrated, or third-party | tetrahedral 3D microphone | the phone's own |
| Placement guidance | diagram | diagram, chair or sofa pattern | acoustic tracking of the microphone from the speakers | one position | guided on the phone and on the TV screen, with live distance and coverage |
| Knows the walls | no | no | no | no | yes, from LiDAR |
| Knows where speakers are | distance from arrival time | distance from arrival time | distance to L and R | distance, azimuth and elevation, ±1 cm and ±2° | position to about an inch, direction to about ±10°, from LiDAR and a fitted face |
| Can say what to move, or where to treat | no | no | no | no | planned for phase 1, from the measured geometry |
| Correction | yes, in the receiver | yes, mixed-phase; Bass Control and ART add-ons | yes, as a plugin or system-wide | yes, with speaker remapping | no; uses the receiver's own controls in phases 2 and 3 |
| Cost beyond the receiver | included; MultEQ-X software about $200 | about $99–$349 for correction, $299 Bass Control, up to $299 ART; bundles $549–$899 | about $499, or $549 with microphone, for the multichannel edition | processor hardware in the thousands | $19.99 for Room for Mac and $9.99 for Room Scan; Room View is free |
Two of the products need more than a row. Sonarworks finds its mic by timing test signals from the two speakers, and shows the mic's position on screen. SoundID Reference is the closest existing product to a spatial measurement. The software locates the mic relative to the speakers and knows nothing about the room. Trinnov's tetrahedral mic finds each speaker relative to the seat, in three dimensions, to within half an inch, from one position. Trinnov offers the most complete acoustic localization on the market. The mic comes with a processor priced out of reach of nearly every home. Even so, Trinnov doesn't know where the walls are.
Most enthusiasts measure with Room EQ Wizard, a free tool. REW sets the standard for the measurement itself, using sweeps, a calibrated mic and an acoustic timing reference for the mic's separate clock. Room's engine handles the measurement the same way and shares no code with REW. REW leaves the shape of the room and the positions of the mic and speakers to the user.
REW also offers a route cheaper than Room itself. REW has a REST API, added in its 5.40 betas, that can run a measurement and read out the result. An MCP server over the API could put each speaker's seated measurement, with its impulse response and energy-time curve, in front of Claude. Claude could then do much of Room's placement reasoning from less data. A boundary-interference notch gives the distance to the wall behind a speaker, because the notch sits where the path difference is half a wavelength. Modal peaks against room dimensions the listener types in give the axial modes and where the seat sits on them. A spike in the energy-time curve gives a reflection path length and a short list of surfaces that could have produced the reflection.
The REW route would give no room geometry and no bass map, and would miss which way a speaker points. Each recommendation would carry the uncertainty of a distance inferred from the response. The route would run on REW, which is free, with a mic and a Claude subscription. REW over MCP would also be the cheapest check on Room. Measured by REW at the seat and by Room on a walk, the same room should give the same wall positions.
3. Where the economics change
The hardware is already in the listener's pocket. LiDAR iPhone Pros and iPad Pros have shipped since 2020. A room survey needs the depth sensor and visual-inertial tracking those models carry. Room's first phase adds only the Apple TV already feeding the receiver. Absolute response still needs a calibrated microphone. A later version of Room for Mac will accept a USB measurement mic. Room measures the room's shape, finds the speakers and shows how the bass varies across the floor without any calibration. The prices are $19.99 for Room for Mac and $9.99 for Room Scan on iPhone and iPad, with Room View free. A Dirac license runs $99–$349 plus a mic. Trinnov sells a processor priced in the thousands.
A walk replaces a stand. The usual procedure has the listener mount the mic, check the diagram, move to position n and wait for the sweep, then repeat the cycle eight to thirty-seven times without moving anything else. With Room, the listener stands in front of each speaker for about a minute. The listener then sits in the seat for one track and walks the room during a second play. Room Scan and Room View say where to point and where to go next. Both apps show the distance as the listener approaches each speaker and confirm each channel as it plays. The walk records geometry and audio at every step.
The measurement becomes spatial. A seat measurement is one point in the room's sound field. Nine or seventeen positions make a small patch around the seat. Because Room's walk tracks the mic's position throughout, the bass is measured across the floor. The resulting map shows the room's modes and the effect of moving a speaker or a chair. The speaker pass checks that each channel plays, and records each speaker's position and direction along with the nearby surfaces. Every placement decision depends on that record. No correction product records the surfaces around a speaker.
Measurement is separate from correction. Room writes no filters. The software measures the room and the speakers and leaves the signal alone. That's why Room works alongside whatever correction the listener has. In phase two, Room will tell the listener what to set on the receiver. In phase three, the software will set those values itself. The listener runs Dirac or Audyssey afterwards, as before.
The numbers come with their evidence. Existing systems are closed boxes. The user sees a curve and a filter and takes the rest on faith. Room's engine and reconstruction were built against predictions registered before measurement in a signed Symbia Labs catalog or a git commit. Section 5 reports every prediction that broke. A receiver maker using Room's output, or a listener deciding whether to move a speaker, can see the reference behind each number.
Each claim rests on the method in Section 4 and the measurements in Section 5. Section 6 says which claims are not yet earned.
4. How it works
The frame
Everything in Room lives in the phone's world frame. ARKit sets up the world frame when a session starts, with gravity down and the origin at the phone's starting position. A capture goes through these stages between the phone and the plan:
- Walk — keyframes of depth, still, intrinsics and pose; continuous audio; markers, events and clock comparisons with the Apple TV
- Upload — over the local network, as soon as recording stops
- Anchor — floor and ceiling read from each keyframe's own depth
- Correct — a smoothed height offset per keyframe
- Fuse — the corrected depth into a signed distance field; the surface at its zero crossing
- Level and square — floors, ceilings and beam undersides by histogram; the plan turned to the walls
- Align — a pass from a later ARKit session turned and shifted onto the speaker pass by its walls
- Speakers — marks corrected, faces fitted, channels checked, responses read
- Fine — a music pass compared with the track itself for arrival, transfer function and coherence at each position
- Reply — the next step sent back to the phone, and to the screen
The anchors come from each keyframe's own depth, before any fusion. Fusing drifted poses creates the duplicated surfaces the correction removes. Anchors read from the fused result would already contain the drift the anchors are meant to measure. A mark on a speaker is corrected by the offset of the nearest keyframe in time, then snapped to a face fitted in the corrected surface. The mark, the face and the walls around them carry the same correction.
A measurement takes three passes, covering the speakers, the seat and a free walk. All three passes have to share the frame. ARKit starts a fresh coordinate system with every session. A walk made one session after the speaker pass came back turned exactly 90°, with the walls reading 18′6″ × 17′3″ against 17′1″ × 19′5″. The first reading comes from the later walk. The speaker pass produced the second reading. Section 5's 20′1″ × 19′9″ comes from captures with the height correction and the wall rule. Saving ARKit's world map and relocalizing into it didn't bring the frame back in this room.
Room keeps one ARKit session alive instead. The phone leaves tracking running for ten minutes after a pass, which lets the next pass start in the same frame. A running session is never restarted, because restarting it also restarts the mic. If the frame is lost anyway, after an interruption or a long break, the phone asks the listener to put the crosshair on the left speaker, then the right. LiDAR measures each of the two points. The turn and shift that carry the saved left and right speakers onto the new points also carry every other speaker and the seat.
Behind the shared session and the two-speaker recovery, the Mac checks each pass against the speaker pass by its walls. Wall points 1 to 6½ ft above the floor are drawn top-down with their normals. The turn is searched in 2° steps by FFT cross-correlation on a 3.1 in grid, then refined in 0.25° steps on a 1.6 in grid. The six best candidates are scored by how many wall points land within 1.6 in of a wall point facing the same way. The alignment is accepted when the overlap score is at least 0.5 and beats the next candidate by 0.04. Two seat passes aligned this way against the same speaker pass agree within 3 in.
Capture
Room Scan, the iPhone and iPad app, runs an ARKit world-tracking session with scene depth. The app shows only guidance, as a direction arrow and a small map of the path so far, with chevrons marking where to point next. The same guidance goes to Room View through Room for Mac. At a speaker or in the seat, the listener reads the next step off the TV, along with the distance and the hold ring. The responses and bass map appear on the TV when a pass lands.

The phone keeps a keyframe whenever it has moved 4 in or turned 10°. Each keyframe holds a still, the LiDAR depth and confidence maps, the lens intrinsics and the pose. Frames are dropped while tracking is limited, or when the phone moves faster than 2 ft/s or turns faster than 60°/s. The mic records throughout at 48 kHz in measurement mode, with voice processing and automatic gain off. The mic shares the host clock with the frames, which gives every audio sample a pose. Every few seconds the phone also compares the host clock with the Apple TV's. That's why every sample also carries a time on the Apple TV's clock, which started the sound.
A five-minute walk of a 20 ft room is about 550 keyframes and half a gigabyte. The phone sends the capture to the Mac over the local network when recording stops. Tracking keeps running afterward, which lets the next pass start in the same frame. The phone also monitors its own mic. More than 2 s of exact digital silence means another app has taken the mic. The phone then warns the listener.
The measurement engine
Room's sweep engine is for the phases that need a calibrated mic, and for a mic and source that don't share a clock, such as a USB mic on the Mac with the sweep playing from the Apple TV. The engine plays Farina's exponential sweep, 20 Hz–20 kHz over 10 s, between two identical short reference sweeps a known distance D apart:
The references are found in the capture by cross-correlation with sub-sample peak fitting. The spacing of the two references against D gives the capture clock's rate error, δ = (t_B − t_A)/D − 1. The capture is resampled by that error before deconvolution. The impulse response is the regularized spectral division, tapered to zero outside the sweep's band:
The engine reads a 50 ppm clock offset as 49.90 ppm and recovers a known impulse to the sample. Two of the engine's early predictions broke. Section 5 reports both failures, because each found something a passing test would have hidden. The engine also sets its own level, probing up from −40 dBFS until the input clears the room's noise. A calibration path, which reads per-serial files for miniDSP UMIK mics, is written and will be used when Room for Mac takes a USB mic.
Reconstruction, and the drift
Each keyframe's depth is fused into a truncated signed distance field on 0.8 in voxels. Fusion uses the weighted running average of Curless and Levoy, with a truncation band of three voxels:
The surface sits at the field's zero crossings, with normals from its gradient. Horizontal surfaces come from a 0.4 in histogram of the heights of points whose normals point straight up or down. On a synthetic room with exact poses, the histogram recovers the floor and two ceiling heights to within 0.04 in, in 0.2 s.
On a real walk, the same method recovered two of every horizontal surface. In this room, some of the doubling is real. The floor steps up at a riser. Treatment covers much of the ceiling, bringing the surface down by half an inch to three inches. A second floor level and several ceiling levels belong here.
The early captures showed something else. The first capture fused to two floors 3.1 in apart covering the same cells. A riser can't explain that overlap, because a riser is a different floor in a different place. The second, longer walk gave floors 5.0 in apart sharing 299 of 375 cells. Over its fourteen minutes, the camera's height climbed about 15 in, dropped, and climbed again. Within either layer the room was 7′7″ tall. ARKit's pose drifts slowly, mostly in height. Fusion records the same floor at every height the pose visited. The second walk's two ceilings, 1.3 in apart, could come from the treatment or from drift. That's why this paper draws no conclusion from the pair.
Pose drift is the obstacle to a handheld spatial measurement. A speaker marked at minute nine of that walk would read five inches high. A bass reading would land somewhere else.
The general method failed its control. The general method here is the tracking half of KinectFusion. Each keyframe is aligned to the surface built from the keyframes before it, by minimizing the point-to-plane residual r = n_q · (p − q). Only position and heading are solved, since gravity fixes roll and pitch. Weakly constrained directions are damped. The correction then carries forward. The control for the method is the synthetic room, whose poses are exact and which any refinement must leave alone. KinectFusion's tracking changed the synthetic room's poses. The two ceiling levels that fusion had recovered to 0.04 in spread across 6′0″–7′11″. The camera path drifted about 20 in. The likely cause, untested, is that in a room of large flat surfaces the alignment builds its own bias faster than it removes the tracker's. Room replaced the method before any real-room verdict depended on KinectFusion tracking.
Anchoring to the floor and ceiling. The replacement corrects one thing, height, against the two surfaces every room has. Each keyframe reads the floor from upward-facing points at least 3′3″ below the camera. The floor reading is the 20th percentile of those points' heights, which keeps furniture tops out. Each keyframe also reads the ceiling from the highest distinct downward-facing surface at least 1 ft above the camera. The room's floor is the mode of the floor readings. Each keyframe's offset from that mode is median-smoothed over the fifteen nearest readings in walk order, since drift is slow and a median ignores the odd table. Offsets over 8 in are discarded as misreads. The ceiling is then read in the corrected frame. A second pass combines both anchors. The offsets are added to the poses' heights before the capture is fused again. The whole correction takes 0.1 s for 1,300 keyframes.
The method assumes one floor and one ceiling. This room has neither a single floor nor a single ceiling. A riser under the 8 in gate would be read as drift by every keyframe standing on it, and corrected away. A keyframe that sees only treated ceiling reads the panel face, up to three inches low. How much the riser and the treatment have affected these captures isn't known. The single floor level after correction may include a riser that the correction absorbed. The plan has to confirm the riser. The fix is to treat each anchor as a set of levels. Cluster the floor and ceiling readings into their distinct heights, then match each keyframe to the nearest level it could be seeing before taking its offset. Clustering keeps a riser and a treated patch in the plan as geometry. Nearest-level matching is the next change to the reconstruction.
The beams make the method checkable. The room has two wrapped structural beams running its full width, their undersides about 6′8″ up. The beams are never used as anchors. If the correction is right, the beam undersides should come out at the same height in captures walked, and drifted, separately. The undersides measure 6′8.4″ in one capture and 6′8.2″ in the other, about 0.16 in apart. Because the correction uses only the floor and ceiling, the rest of the room stays available as a check.
Plan and walls
The corrected surface is drawn as a plan on 6 in cells, squared to the dominant wall directions. The main walls come from points 4–6 ft above the floor, above the furniture and below the beams. Each wall is taken as the outermost strong surface on its side. The strongest surface is often a drape or a panel a foot inside the wall. A dial turns the room and snaps to the automatic right angles. The measurement square stays still while the room and the speakers, with their direction arrows, turn within the square. A 3D view shows the same surface, with each speaker at its measured height and an arrow for its direction.
The speaker pass
Room doesn't detect speakers. An open-vocabulary detector run over one capture's stills found seventeen speakers in a room with eight. The detector also had no way to tell which channel drove each speaker. The person setting up a room knows where the speakers are. Nobody can judge a speaker's position to an inch or its direction to a few degrees by eye. Nor can the eye tell whether the receiver's channel reaches a given box. The listener therefore picks the layout, 2.0, 2.1, 3.1, 5.1 or 7.1. Room Scan then walks the listener to each speaker in turn.
- Aim. Stand about 2 ft in front, phone level with the tweeter, crosshair on it. The phone shows the LiDAR distance in feet and inches. Confirm is available only between 1′6″ and 3′0″, where depth is at its best and the whole face is in view. The mark is the camera position plus the view direction times that depth. Marking forces a keyframe, which gives the Mac a still of exactly what was marked.
- Listen. Room View plays pink noise on that channel alone, started on its own clock. A ring fills over 8 s, on the phone and the TV, while the phone is held still.
- Look around. Turn a full circle, tilting the phone up and then down in each of four directions. The sweep brings the speaker's face and the surrounding wall and floor into the surface at LiDAR's best range.


On the Mac, the mark is raised by its keyframe's height offset. The mark is then snapped onto a plane fitted to the surface points within 7 in that face back toward the phone. The fit needs at least forty such points and uses the smallest eigenvector of their scatter. The plane's normal is the speaker's direction. The fit's residual is kept as a measure of how flat the face looked.
The last 4 s of the hold are compared with the room's own noise, recorded before anything played, and with the other speakers. A channel less than 10 dB above the room's noise is marked silent. A channel more than 10 dB below the others' median is marked quiet, a sign that another channel played. A sub must show at least 6 dB more energy from 30 to 120 Hz than from 500 Hz to 5 kHz. A Welch spectrum of the same window gives a near-field response in 1/6-octave bands, for comparing speakers with each other. Because the phone's mic isn't calibrated, the curves aren't absolute. The Mac then sends the phone and the TV on to the seat, or back to the speakers it names, with the reason.
The seat and the walk
The music passes measure the room at the places where people sit and stand. Room View plays one track from the listener's own files, once, from start to finish. The first music pass covers the seat. The listener sits in the listening position with the phone at eye level, crosshair on a target the Apple TV draws on screen. Aiming at the target fixes the seat and locates the screen in the same act. The track then plays to the end.
The second music pass is a free walk. The phone divides the floor it has seen into cells 2½ ft square and tracks how long it has spent in each. The phone then suggests where to go and pause next, starting with the positions around the seat and moving on to floor it has seen but not covered.
Because Room played the track, the software knows the signal that went into the room. At each position, the transfer function from the track to the phone, H = Sₓᵧ/Sₓₓ, gives the relative response. The coherence measures how much of the phone's recording the track explains:
Room treats the level at a position as a measurement only where coherence is high.
The track's start in the phone's recording is known to a few milliseconds before any search. The estimate comes from the Apple TV's scheduled start and the clock comparisons the phone logged. A phase-transform cross-correlation then finds the acoustic delay near the estimated start, once for the pass and again at each position. The phone's audio clock runs about 20 ppm off the phone's own host clock, as measured in Section 5. Over a five-minute track the offset reaches about 6 ms, enough to smear the treble. That's why the seat pass is cut into 8 s pieces, each aligned on its own.
On the walk, a position is any 4 s window, stepped every 2 s, in which the phone stayed within 1½ ft. Windows within 2½ ft of each other merge into one position. Band values sum each bin's magnitude, which keeps phase within a band from canceling its coherence.
Results come in four ranges, chosen on the Mac and shown on the Apple TV as well:
- Low, 20–300 Hz, summarized over 50–120 Hz
- Mid, 200 Hz–5 kHz, over 300 Hz–3 kHz
- High, 2–20 kHz, over 3–12 kHz
- Full
On the TV, every map is drawn with the front of the room at the top. The left and right speakers set the turn, with the surrounds or the seat.

Because the phone's mic isn't calibrated, every level is relative to the other positions and to the room's own average over 200 Hz–2 kHz. With a person behind the phone, the mic isn't omnidirectional either. Facing a speaker, the mic hears 7–10 dB more from 1 to 8 kHz than facing away (Section 5). That's why the seat pass faces the screen. The walk records which way the phone pointed at every position.
Over AirPlay, the first walks held together in the bass and fell apart above a few hundred hertz. From Room View, coherence at the seat stays above 0.6 up to 7 kHz. The passes give a response at the seat and across the floor, in the bands the phone can hear.
Reaching the speakers
In a home theater, the source is usually an Apple TV feeding the receiver over HDMI. An early build of Room reached the Apple TV over AirPlay from the Mac. AirPlay delivered discrete channels only inside a video-wrapped file. Playback took about 3½ s to start and a variable half second to switch. The Apple TV's clock and the phone's drifted 18–32 ms apart over a walk.
Room View now plays from the Apple TV itself. The app asks HDMI for 7.1, or the most the route allows, and reports the channel count it got. Each channel's pink noise plays from a bundled file with signal on that channel alone. The listener's track is fetched from the Mac once, at the moment of selection. Room leaves the Mac's system output alone. Only commands cross the network.
The device that makes the sound, the Apple TV, keeps the reference clock. Every few seconds, the phone and the Mac each ask the Apple TV the time in a short burst of UDP exchanges and keep the quickest round trips. The method is NTP's four-timestamp exchange, with offset = ((t₂ − t₁) + (t₃ − t₄))/2. That's why every phone sample has a time on the TV's clock. Each start is scheduled a quarter second ahead on the same clock. When the sound reaches the phone, the only unknowns left are the receiver and the air.
In this room, the phone holds the TV's clock to ±2–2.6 ms, against ±1.4 ms for the Mac. A start is scheduled 330–390 ms after the request. The noise reaches a phone 1½–2 ft from each of the five main speakers 84–89 ms after the scheduled start. The excess spread, beyond what the distances explain, is where the receiver's own channel delays would show. The sub takes 99 ms, because its low-pass slows its onset. Because the 84 ms through the HDMI link and the receiver is fixed, a delay measurement can subtract it. The 5.1 pass put each channel's noise on the right speaker and identified all six channels. A 7.1 room hasn't been tried.
5. What it measures
Every claim about the engine and the reconstruction was written down as a prediction before the measuring code ran. Each prediction had a target and a failure condition. The predictions were lodged in a signed Symbia Labs catalog, or in a git commit when the catalog couldn't be reached. The speaker pass and music passes were built without advance predictions, apart from one on the phone's directivity. Results from those passes are observations and are marked as such.
All real captures are of one room, walked with an iPhone 14 Pro. The room is about 20 ft square, with a 7′7″ ceiling and two beams. A 5.1 system on a Denon receiver, fed by an Apple TV, shares the room with a pair of studio monitors on a separate system. The September 23 captures played over AirPlay. The September 24 captures played from Room View.
Engine, synthetic
| Prediction | Target | Measured | Held |
|---|---|---|---|
| Impulse position | sample 1000 exactly | 1000 | yes |
| Magnitude error, 30 Hz–18 kHz | ≤ 0.5 dB | 0.463 dB at 37.8 Hz | yes |
| H2 impulse position | ±2 samples | off by 395.9 | no |
| H2 position, band taper moved inside the sweep | ±2 samples | off by 0.85 | yes |
| Magnitude error after the taper move | ≤ 0.5 dB | 1.04 dB at 30 Hz | no |
| Magnitude error, analysis window 200 ms early | ≤ 0.5 dB | 0.053 dB at 30 Hz | yes |
| 50 ppm clock offset, estimate | 48–52 ppm | 49.90 ppm | yes |
| Uncorrected 50 ppm drift, error 10–18 kHz (expected wrong) | > 1 dB | 0.0016 dB | no, as expected |
Both failures found something. The first failure came from a band taper placed below the frequencies where the sweep has energy. The spectral division amplified nothing into a blob that swamped the harmonic impulse. Moving the taper inside the band passed, at 0.85 samples.
The second failure broke in a direction the fix didn't predict, with the low-frequency error growing worse. The worse error pointed at the analysis window. A zero-phase taper rings before the direct sound. The window was cutting off that ringing. Starting the window 200 ms early took the error from 1.04 dB to 0.05 dB.
The last row was registered expecting a failure and failed. 50 ppm of clock error moves magnitude by two thousandths of a decibel over a 10 s sweep. Drift correction exists for timing.
Reconstruction
| Prediction | Target | Measured | Held |
|---|---|---|---|
| Synthetic room, ceiling levels | 2.33 and 2.07 m, ±1 cm [7′7.7″ and 6′9.5″, ±0.4″] | 2.331 and 2.071 m [7′7.8″ and 6′9.5″] | yes |
| Synthetic floor | 0 ± 1 cm [0 ± 0.4″] | 0.000 m [0″] | yes |
| Synthetic fusion time | < 30 s | 0.2 s | yes |
| Full walk, keyframes and size | 300–1,500, < 3 GB | 551, 0.45 GB | yes |
| Lower ceiling as a distinct surface, step | 26 ± 5 cm [10.2 ± 2.0″] | two floors, 7.9 cm apart [3.1″] | no |
| Control: synthetic room unchanged by the correction | ±1 cm [±0.4″] | unchanged | yes, on the replacement |
| One floor after correction | no second level ≥ 5% within 20 cm [8″] | one | yes |
| One ceiling at 2.33 m [7′7.7″] | 2.32–2.34 m [7′7.3″–7′8.1″] | one, at 2.307 m [7′6.8″] | no, narrowly |
| Beam underside, walk 1 against walk 2 | within 2 cm [0.8″] | 2.042 and 2.038 m [6′8.4″ and 6′8.2″] | yes |
| Correction time, 1,303 keyframes (expected wrong) | < 10 s | 0.1 s | yes |
The fifth row is the drift described in Section 4. The control row records the test ICP failed and the replacement passed. Every verdict below the control row applies to the replacement, which means the method changed after registration. The last row was registered expecting a failure and held.
The ceiling target came from the drifted layers, before there was a way to know better. After correction, both walks put the ceiling at about 7′7″. The ceiling treatment is half an inch to three inches thick. A reading under an inch below the bare ceiling is what a treated surface should give. The target was wrong.
The beam row is the paper's best evidence that the reconstruction measures the room itself. Figure 5 shows the height peaks before and after the correction.

The room and its speakers (observations)
With the correction and the wall rule, the room measures 20′1″ × 19′9″ wall to wall. The floor sits 7′7″ below the ceiling and 6′8″ below the beam undersides. Across four captures, the sides agreed within about ±4″. One guided speaker pass of eight minutes gave these results for the six speakers with receiver channels:
| Driver height | Correction applied | Distance at mark | Face RMS | Level at phone | Above room | Channel | |
|---|---|---|---|---|---|---|---|
| L | 2′4″ | +5.2″ | 1′7″ | 2.6″ | −16.8 dBFS | 34 dB | ok |
| C | 1′3″ | +4.7″ | 1′6″ | 2.1″ | −15.4 dBFS | 36 dB | ok |
| R | 2′5″ | +1.1″ | 1′6″ | 1.7″ | −17.8 dBFS | 33 dB | ok |
| SR | 3′6″ | +0.2″ | 2′2″ | 1.9″ | −15.0 dBFS | 36 dB | ok |
| SL | 3′4″ | +1.9″ | 1′7″ | 2.0″ | −14.4 dBFS | 37 dB | ok |
| Sub | 1′5″ | +2.8″ | 2′1″ | 2.3″ | −22.5 dBFS | 29 dB | ok; 37 dB more below 120 Hz than in the mids |
All six channels were identified. Figure 6 shows the near-field response of each channel. The left and right fronts came out level within an inch. Without the correction the left would have read 5 in low, because the left was marked near the end of a stretch of drift that the right missed. The fitted faces point 24° and 26° in from the squared axis. The center points 13° off square. Direction is good to about ±10°. Tilt, which the fits give as a few degrees either way, is less certain. The fronts are 9′8″ apart, matching the owner's measurement. An earlier unguided pass without the correction put the fronts 5′11″ apart, with the right 1′3″ above the left. The spacing error exceeds what drift explains and has no identified cause.

An afternoon speaker pass, with two seat passes aligned to it by their walls, put the seat 6′8″ from the center and 6′9″ from the right front. The same pass measured 8′2″ to the left front, 5′11″ to the left surround and 3′5″ to the right surround. The distances place the seat right of center and close to the right surround. These figures come from the afternoon speaker pass on September 24, the day after the guided pass above. The seat distances in the evening table below come from the evening run of the same day. The two seat passes agree within 3 in. The afternoon speaker pass read the fronts 8′11″ apart. The guided pass the day before and the owner's tape both say 9′8″. The 9 in disagreement between two guided passes isn't explained. Section 6 lists the discrepancy.
Playback over the Apple TV (observations)
The path in Section 4 was measured on September 24, over one 5.1 speaker pass and five music passes. In each pass, the phone compared its clock with the Apple TV's over Wi-Fi.
| Quantity | Measured |
|---|---|
| Phone's clock against the Apple TV's | ±1.9–2.6 ms; drift −3.6 to −5.4 ppm |
| Mac's clock against the Apple TV's | ±1.4 ms |
| Request to scheduled start | 329–386 ms (AirPlay: 3.45 s to start the first time, about 0.5 s to switch after) |
| Noise at the phone after the scheduled start, L / C / R / SR / SL | 83.9 / 85.6 / 85.5 / 89.2 / 86.0 ms, rising 41–48 dB over the room |
| Subwoofer | 99.1 ms |
| Track at the phone after the scheduled start, five passes | 91.7, 92.0, 86.2, 90.9 and 93.8 ms |
| Network clock offset over a 207 s walk | 0.78 ms (AirPlay walks: 18–32 ms) |
| Phone's audio clock against its host clock over a 295 s track | 5.9 ms, about 20 ppm |
Keep the last row in mind. The phone's audio clock runs about 20 ppm off the phone's own host clock, four times the host clocks' drift against the TV. The engine's two references exist to measure exactly this rate error. The music analysis follows the error across the whole track instead of assuming it away.
The music passes, and what broke (observations)
The first two free walks played over AirPlay, about 3½ minutes each, before fixed holds existed, with the receiver's upmixer on. The third walk played the same track from Room View, over eleven positions in 207 s. On one AirPlay walk, the track reached the speakers 0.99 s after the phone asked for it. The Apple TV's clock and the phone's drifted 32 ms apart over one walk. The analysis removed that drift. From Room View, the start is scheduled, with the clocks moving 0.78 ms over the walk. The table gives the coherence between what Room played and what the phone recorded, by band, from the same script for all three:
| Band | AirPlay, track 1, 3 s | AirPlay, track 2, 6 s | Apple TV, track 2, 6 s |
|---|---|---|---|
| 31–63 Hz | 0.10 | 0.50 | 0.32 |
| 63–125 Hz | 0.45 | 0.63 | 0.50 |
| 125–250 Hz | 0.57 | 0.47 | 0.65 |
| 250–500 Hz | 0.40 | 0.36 | 0.58 |
| 500 Hz–1 kHz | 0.2–0.3 | 0.31–0.33 | 0.65 |
| 1–2 kHz | 0.2–0.3 | 0.31–0.33 | 0.62 |
| 2–4 kHz | ≤ 0.12 | 0.18–0.21 | 0.54 |
| 4–8 kHz | ≤ 0.12 | 0.18–0.21 | 0.38 |
Over AirPlay, below 250 Hz, the recording followed the track well enough for the level at a position to mean something. The level varied by about ±7 dB across the floor. Above 500 Hz the number wasn't a measurement. The receiver was upmixing a stereo track across five speakers. Quiet passages gave readings with nothing behind them.
From Room View, coherence in the midrange and treble rose to 0.54–0.65, with lower values in the two bass bands. Several things changed at once, including an exact start, the loss of the AirPlay transcode and a different set of walk positions. No test has isolated the change that raised the coherence.
The engine's own analysis of the same capture aligns each position on its own and reads 1/6-octave bands. Coherence in that analysis is 0.7–0.85 from 90 Hz to 7 kHz. The response is within ±2–3 dB from 226 Hz to 7 kHz, relative to the 200 Hz–2 kHz mean. Lower down, the modes show as −14 dB at 57 Hz, −9 at 71, −6.5 at 90, −5.5 at 113 and −0.3 at 143. The bass, 40–120 Hz, varies 11.4 dB across the eleven positions. The 9–11 kHz band reads +8 to +13 dB in every pass, more likely the phone than the room. The analysis is part of the engine, with the original script kept beside it. That's why these numbers regenerate from the captures.
The first run of the full flow was on September 24. Per-channel trims were set by hand on the receiver beforehand: center −2 dB, right surround −5, left surround −6.5, sub +3. The track played once per pass. Levels are relative to the 200 Hz–2 kHz mean:
| Seat | Free walk | |
|---|---|---|
| Positions | one, in 8 s pieces, each aligned | 34 where the phone paused; 4 s windows within 1½ ft |
| Track at the phone after the scheduled start | 92.0 ms | 86.2 ms |
| Coherence | 0.6–0.87 from 57 Hz to 7 kHz | about 0.5 from 60 Hz to 1.6 kHz, 0.3 above |
| Bass | 57 Hz −8.3 dB, 71 −6.0, 90 −3.7, 113 −7.2, 143 +1.2, 180 −4.7, 226 −9.2 | means over positions: 63 Hz −6.6, 80 −2.6, 101 −5.2 |
| Midrange | 450 Hz–1.1 kHz +2.5 to +6.4; 1.4–7 kHz within ±5 | 127–800 Hz within ±2; 2.5 kHz −6.2 |
| 9–11 kHz | +12.6 | +10.9 |
| Bass range, 40–120 Hz | — | 22.8 dB across positions; spread 5–9 dB per band |
The seat has a dip at 226 Hz that the floor's average doesn't show. The walk's bass range doubled, from 11.4 dB over eleven positions to 22.8 dB over 34 positions reaching the corners. The two passes were aligned with each other by their walls. The morning's speaker pass ran in an earlier ARKit session. That's why the seat and walk passes aren't in the speaker pass's coordinates. After this run the sub's own gain was turned up, by an amount not recorded.
The evening run repeated all three passes in one ARKit session, with the sub turned up. The order was speakers, seat and free walk, with one play of the same track per pass. The evening run is the first where all three passes share one frame without help from the walls. Tracking was lost between the speaker pass and the seat. "Find the speakers" put the saved layout back from the left and right alone. The left-to-right distance from that recovery was within 1.8″ of the speaker pass's. The Mac's wall check agreed, with an overlap of 0.83 against 0.69 for the next candidate. Because the phone found the TV target during the seat pass, the seat and the screen are both in the frame.
| Seat to | C | R | L | SL | SR | Sub |
|---|---|---|---|---|---|---|
| Distance | 6′6″ | 7′9″ | 8′1″ | 5′1″ | 4′6″ | 7′1″ |
Relative to the 200 Hz–2 kHz mean:
| Seat, morning | Seat, evening | Walk, evening | |
|---|---|---|---|
| Positions | one | one | 38 |
| Track at the phone after the scheduled start | 92.0 ms | 90.9 ms | 93.8 ms |
| 30–50 Hz | — | −17.3 dB | −14.2 dB |
| 50–120 Hz | about −6 dB | −2.6 dB | −0.7 dB |
| 120–300 Hz | — | −1.9 dB | −0.1 dB |
| 3–12 kHz | — | +5.6 dB | +1.2 dB |
| Bass range, 40–120 Hz, across positions | — | — | 25.7 dB |

At the seat, 50–120 Hz came up from about −6 dB to −2.6 dB (Figure 7). The walk's average sits within a dB of the midrange. Both passes show the sub change. Below 50 Hz, the seat and the walk are still 14–17 dB down. Part of that deficit comes from the phone's mic, which rolls off in that range. Nothing should be turned up on that evidence until a calibrated mic agrees. The morning and evening seat passes used the same chair. Because the morning pass is in a different frame, the two seat positions haven't been shown to be the same point. Across the walk, the bass varies 25.7 dB from position to position. The morning walk varied less, 22.8 dB over 34 positions. Bass is strongest along the front wall and weakest at the back of the room (Figure 8).

The speaker pass also gives each speaker a level from about 1′6″. Comparing the evening levels with the morning levels shows how far the number can be trusted:
| L | C | R | SR | SL | Sub | |
|---|---|---|---|---|---|---|
| Morning, dBFS | −16.2 | −14.8 | −16.8 | −14.8 | −13.2 | −14.0 |
| Evening, dBFS | −19.7 | −16.3 | −17.4 | −14.2 | −15.8 | −7.8 |
| Change | −3.5 | −1.5 | −0.6 | +0.6 | −2.6 | +6.2 |
The sub's +6.2 dB is the receiver's +3 dB trim plus the turn of the knob. The other changes don't match what was done. The center and surround trims of −2, −5 and −6.5 dB show as −1.5, +0.6 and −2.6 dB. The left front moved 3.5 dB with nothing changed. Near-field level from the speaker pass repeats to about ±2–3 dB. Repeatability at that level catches a sub 6 dB hotter. Setting trims needs a tighter figure. That's why the next measurement is each channel in turn at the seat (Section 7).
The phone as a mic (observation, with a prediction)
The speaker pass's look-around turns the phone through a full circle while a speaker plays. The look-around is therefore a polar measurement of the phone with a person behind it. Across 635 quarter-second windows over six speakers, corrected for distance, levels relative to each speaker's median were:
- +3 to +6 dB with the camera within 60° of the speaker
- about 0 dB at 90–120°
- −4 to −5 dB facing away
The pattern is the same at 1, 2, 4 and 8 kHz. Facing against facing away is 7–10 dB from 1 to 8 kHz, for the four speakers with enough windows.
The prediction written before the analysis was under 2 dB at 250 Hz and 8–15 dB at 4–8 kHz. At 250 Hz the difference came in at 2–6 dB. The treble came in lower than predicted. The body shadows more of the low midrange and less of the treble than expected. The consequence is procedural. Phone levels compare only at the same orientation. That's why the seat pass faces the screen, with the walk recording where the phone pointed at every position.
6. What it does not do
Room doesn't correct anything. The software writes no filters and changes no signal. Leaving the signal alone is both a design choice for phase one and a limit. A listener who wants EQ still needs Audyssey, Dirac or an equivalent.
Room hasn't used a calibrated mic. The engine's calibration path is written but has carried no real measurement. The registered repeatability test, three sweeps at one position within ±0.5 dB from 50 Hz to 10 kHz, hasn't been run. Every acoustic figure here came from the phone's own mic, which rolls off below about 60 Hz. The near-field responses compare speakers with each other and aren't absolute. Every correction product measures with a calibrated mic, which Room doesn't yet use.
Room hasn't been checked against a tape measure. Apart from the front spacing, nothing Room measured has been compared with an outside reference. The unchecked figures include the room's dimensions and the speaker positions and heights. The beam agreement shows the correction is consistent between walks. Agreement can't show that the correction is right, because a bias shared by both walks would pass the same check. Room has no accuracy figure for speaker distance to set beside Trinnov's stated ±1 cm.
Room has been tested in a single room with a single phone. Everything real was measured in one 20 ft room with one iPhone 14 Pro. The anchoring needs a floor and a ceiling the phone can see. A vaulted room gives the anchoring only the floor. No vaulted room has been tried.
The anchoring assumes a single floor and ceiling. The room where the method was developed has a riser and a treated ceiling. The nearest-level matching in Section 4 isn't built. Without nearest-level matching, a riser under 8 in can be corrected away. A treated patch can also pull a keyframe's ceiling reading down by the panel's thickness.
Only height is corrected. Horizontal and heading drift are left to the tracker. The one method tried for horizontal and heading drift failed its control. Two guided passes a day apart put the fronts 9′8″ and 8′11″ apart. That's why the horizontal accuracy of a mark isn't characterized. The earlier unguided 5′11″ is unexplained too. Passes from separate ARKit sessions are aligned by their walls. The only check on wall alignment is two seat passes agreeing within 3 in. "Find the speakers" has been checked once, in one run that put the left and right within 1.8″ of the speaker pass.
Delay is measured to the phone. The Apple TV path has a fixed latency. Every phone sample has a time on the TV's clock. Room has read arrival 2 ft from each speaker, and for the whole mix at the seat. Room hasn't read each channel in turn at the seat, the measurement a receiver's distance setting needs. No arrival has been read through a calibrated mic either. Audyssey and Dirac set channel delay from the receiver's own playback. Room View makes the same measurement possible. Room hasn't taken that measurement yet.
The receiver is opaque. Room sends discrete channels. Room can't see the upmixer or room correction between its signal and the speakers unless the listener disables both. The AirPlay walks ran with the upmixer on. The receiver's trims changed between the Apple TV passes. The sub's gain changed after those passes. For both changes, Room's only record is the owner's word.
The music passes are relative. The phone's mic is uncalibrated and, with a person behind the phone, directional by 7–10 dB. Every music-pass response is relative to the room's own average, and compares only between positions where the phone faced the same way. The +8 to +13 dB at 9–11 kHz in every pass is unexplained, and is probably the phone. Room has measured the directivity but applies no correction for it.
Speaker levels aren't trims. Each speaker's level from the speaker pass is measured from about 1′6″ and repeats to only ±2–3 dB between passes. The level doesn't track trim changes on the receiver. Room makes no channel-level recommendation from the speaker-pass level.
Half the results are unregistered. The speaker pass and the music passes have no predictions behind them, apart from the phone's directivity. The unregistered results may reflect what the analysis was tuned to show. The music analysis regenerates from the captures.
Of the four claims in Section 1, cost and labor stand on the design and on the passes reported here. Information stands on the beam agreement and the speaker pass, along with the seat and floor responses. Information is the claim that most needs a tape and a calibrated mic. Trust holds for the engine and reconstruction, in part for the music passes, and not at all for the speaker pass.
7. Where it goes
The near work is to earn the numbers in Section 5:
- a calibrated mic, at the desk and then on the phone
- a tape measure against the geometry
- a walk with the receiver in a direct mode
- a seated measurement of each speaker in turn, for arrival, reflections and decay
The seated measurement comes first, because the speaker pass can't set levels. From the seat, Room View will play each channel in turn. The phone will face the screen, as in the seat pass, and compare the channels directly. The result will be one level and one arrival per channel, measured where the channels are meant to be heard.
Alongside the seated measurement, Room will correct for the phone's directivity. The look-around will calibrate the directivity for each room and phone. Every window of a music pass already records where the phone pointed. The direct sound will be separated from the room's by time, and corrected by angle. The track's two channels, used as two references, will separate the left front from the right.
Phase 1, placement. The plan shows the speakers where they are and how they point, with the walls and beams and the bass across the floor. Placement goes in three steps, each of which Room will turn into a recommendation.
First, Room will recommend a position and direction for each speaker from the geometry already measured. The speaker recommendation covers distance to the front and side walls along with the boundary-interference notch each distance puts in the response. The same recommendation covers symmetry between the pair and equal path length to the seat, with each fitted axis pointed at the seat.
Second, Room will recommend the seat. The room's dimensions give its axial modes and where their peaks and nulls fall along the floor. The walk's bass map shows where the peaks and nulls actually land, with the furniture in the room. The recommended listening position will keep the front triangle and sit clear of the nulls, with the reasons stated.
Third, Room will verify the change. The listener moves what was recommended. A seated measurement with a calibrated mic, on the phone or through REW's API, will be taken against a prediction registered before the move. Every recommendation will carry its own before and after.
A wave simulation of the captured room will sharpen the second step from axial modes to the room as built. The simulation comes after the three steps and isn't started. The simulation's input is already measured, as the voxel surface reduced to planes (walls, ceiling, beams, riser, large furniture) and the speakers where the speaker pass put them. A low-frequency wave solver will run over those planes and speakers. The walk will check the solver against a prediction of the bass at each position the listener measured, registered before the comparison.
Treatment. The same geometry will show where treatment belongs.
With the speakers and seat placed, each first reflection follows from a mirror-image construction, which finds the point on a room surface where the path from speaker to seat bounces once. Room has every one of those surfaces in the plan, in the same frame as the speakers and seat. Room will mark the patch a panel should cover and size the patch from the angle the path makes with the surface. The listener won't need a mirror or a helper.
A seated measurement will confirm each reflection point. A first reflection arrives after the direct sound by the difference in path length divided by the speed of sound. For example, 5 ft of extra path gives 4.4 ms. With both path lengths taken from the plan, Room will label each peak in the energy-time curve with the surface that produced it. A second measurement after a panel goes up will give the level of that peak before and after. Diffusion will be marked the same way, usually on the wall behind the seat, where a reflection is better spread than absorbed.
For bass, Room will use the walk. The 40–120 Hz level at each position shows where the room's modes build pressure. A trap placed at a pressure maximum absorbs the most. Room will rank candidate positions, corners included, by the level measured there, instead of treating every corner as equal.
For each recommendation Room will report the surface, the position on it, the panel size, the reflection or mode it addresses and the measurement before and after. Product and thickness are left to the listener and the treatment maker. Room will supply the reflection delays, angles of incidence and modal frequencies that the listener and the maker need for that choice.
Aim to laser precision. A laser on the baffle puts its spot within an inch of the seat at ten feet, about 0.5°. A LiDAR plane fitted to a cabinet face is good to about ±10°.
LiDAR remains the primary measurement for every speaker, since it needs nothing visible. Where a driver or baffle can be seen, the 12-megapixel still taken at the moment of marking will add a camera fit. A circular driver seen off-axis images as an ellipse, whose axis ratio equals the cosine of the off-axis angle and whose orientation gives the direction. A rectangular baffle gives the plane's full orientation by perspective. Either fit should resolve under 1° from one still. Combining the look-around stills should reduce the error further.
Room will report aim the way a laser does, as the point where the speaker's axis crosses the seat, in inches from center. The first test is a registered prediction against a baffle-mounted laser, with the fitted axis and the laser spot within 1 in at the seat.
In-wall and in-ceiling speakers sit behind grilles. Many front stages sit behind an acoustically transparent screen or a fabric wall. Hidden speakers rule out the camera fit and improve the LiDAR fit. A flush-mounted speaker fires along the normal of its wall or ceiling. A plane fitted to 2 ft of flat surface around the grille gives that normal to a fraction of a degree. No sensor can see a pivoting tweeter behind a grille. The tweeter's angle is entered by hand.
Behind a screen, a speaker's position will come from its sound. Because the mic's position is known at every instant of the pass, the arrival times of that channel's noise at several positions will locate the speaker's acoustic center by trilateration. The laser test will cover visible and flush-mounted speakers. Speakers behind a screen will be checked against the installer's drawings or the screen frame.
Phase 2, the receiver's own controls, set by hand. Every AV receiver has per-channel level and distance. Most receivers also offer per-channel EQ. Audyssey and Dirac set level and distance from arrival times at the seat, which needs playback with a fixed latency. Room View provides that fixed latency. Signals go straight down HDMI to the receiver. The Apple TV keeps the reference clock. Latency through the receiver measured a fixed 84 ms, with each channel's arrival at the phone read to within about 3 ms.
The measurement this phase still needs is each channel in turn, from the seat:
- arrival, which with the geometry gives distance
- level, channel against channel at the seat, since the near-field level doesn't repeat well enough to set a trim
- response, for the receiver's per-channel EQ, through a calibrated mic on the phone
Room will present each result in the units the receiver's menu uses, alongside the measurement behind each value.
Bass management is part of this phase. With the sub and mains measured at the seat through the receiver's crossover, the summed response through the crossover region shows whether they add or cancel. Sub level, sub distance and the crossover frequency can then be set from the measurement. Room View will also guide the listener through the mic positions Dirac Live and Audyssey ask for, located in the room's frame.
The first three-pass run was made after trims were set by hand on the receiver, which is this phase without Room's numbers. Room will add the geometry. Each distance setting will match a measured distance. Each level will be set at a measured seat, with the speaker positions fixed first.
Phase 3, the same controls over the network. Denon and Marantz publish a network control protocol that includes per-channel level. Yamaha's MusicCast Extended Control API and Onkyo's eISCP cover their receivers. This phase establishes which of those protocols also expose distance and per-channel EQ. Room View is already on the receiver's network and will send the commands. The listener will keep the receiver's own calibration, set from a measurement of the room, and will be able to repeat it in the time a walk takes.
Room for REW. Room will export measurements in a format REW opens. An MCP server over REW's REST API comes first, since it needs no new hardware and serves people who already measure. The server will also test Room, by comparing the distance to a wall read from the boundary-interference notch in a REW sweep with the same wall located by LiDAR on a walk. The prediction will be registered before the comparison.
In no phase will Room replace the receiver's correction. Room will help set the speaker positions and give the receiver its distances and levels. The filters stay with the correction system.
8. Conclusion
Home room correction measures the response at the seat, at a pattern of mic positions, and computes a filter. The best products do that job very well. No correction product measures where the walls are or shows what moving a speaker would change.
A LiDAR iPhone or iPad Pro can measure the room. The listener already owns such a device. Walking the room takes less setup than a mic stand.
Two problems stood in the way. The phone's pose drifts, mostly in height. Room corrects height alone, against the floor and ceiling, and uses the rest of the room to check the result. Playback over AirPlay from the Mac had variable latency. Room View plays from inside the chain and keeps the clock the other devices follow. The latency through the chain holds at 84 ms.
In one room, the beam undersides agree to about 0.16 in across two walks. One visit to each speaker gives its position and direction and checks its channel. In the evening run, all three passes shared one frame. The seat and floor responses are relative, and repeatable enough to show a 6 dB sub change at the seat and across 38 positions.
Apart from the spacing of the front pair, no result here has been checked against a tape measure or a calibrated mic. Until those checks are made, the results show that Room is consistent with itself. Accuracy has not yet been shown.
Disclosure
Room, its measurement harnesses and this paper were produced with Claude, an AI system made by Anthropic, working under the author's direction over three days of sessions. The figures were drawn from the captures by a script kept with the paper (tools/paper_figures.py).
The author set the goals and made the design decisions. The decisions include the three-phase scope, having the listener mark speakers instead of detecting them, and keeping Room's playback off the Mac's system output. The author also chose the speaker-pass procedure, the three-pass workflow, and moving playback onto the Apple TV as the reference clock, with guidance and results on the screen. The AI wrote the code and text, which the author reviewed.
Prediction-before-measurement records were kept in a signed Symbia Labs catalog, and in git commits where the catalog couldn't be reached. No source code from any existing room measurement or correction product was consulted. Figures for other products come from their makers' published documentation and price lists as of September 2026, cited below.
References
- A. Farina, "Simultaneous measurement of impulse response and distortion with a swept-sine technique," Audio Engineering Society 108th Convention, Paris, preprint 5093, 2000.
- S. Müller and P. Massarani, "Transfer-function measurement with sweeps," Journal of the Audio Engineering Society, vol. 49, no. 6, pp. 443–471, 2001.
- B. Curless and M. Levoy, "A volumetric method for building complex models from range images," Proc. SIGGRAPH '96, pp. 303–312, 1996.
- R. A. Newcombe, S. Izadi, O. Hilliges et al., "KinectFusion: Real-time dense surface mapping and tracking," Proc. IEEE ISMAR, pp. 127–136, 2011.
- Y. Chen and G. Medioni, "Object modeling by registration of multiple range images," Image and Vision Computing, vol. 10, no. 3, pp. 145–155, 1992.
- P. D. Welch, "The use of fast Fourier transform for the estimation of power spectra," IEEE Transactions on Audio and Electroacoustics, vol. AU-15, no. 2, pp. 70–73, 1967.
- F. E. Toole, Sound Reproduction: The Acoustics and Psychoacoustics of Speakers and Rooms, 3rd ed., Routledge, 2017.
- Dirac Research, Dirac Live Pricing and Dirac Live licenses and features. Accessed September 2026.
- NAD Electronics, How to perform Dirac Live Calibration on NAD products: the 9-, 13- and 17-position patterns.
- Denon, Audyssey Setup, AVR-X3800H: up to eight positions; distance, level, polarity and crossover from the measurements.
- What Hi-Fi?, What is Audyssey?: MultEQ-X software at about $200.
- Sonarworks, Setting up with SoundID Reference on speakers and speaker measurement troubleshooting guide: 37 measurements; acoustic locating of the microphone from the speakers. Sound On Sound, SoundID Reference for Multichannel: $499, $549 with microphone.
- Trinnov Audio, 3D Measurement Microphone: tetrahedral capsules; ±2° and ±1 cm.
- Denon, AVR control protocol; Yamaha, MusicCast Extended Control API.
- J. Mulcahy, Room EQ Wizard, roomeqwizard.com. Referred to for its acoustic timing reference; no code consulted. Its REST API, added in the V5.40 betas (beta 1, December 2023), is documented in the beta release notes at roomeqwizard.com/beta.html.