Sonir Remote
iOS 15+ / AndroidRemote measures your listening position with a phone and sends a room correction to Bench. It is a measuring instrument: it does not play your music and it does not keep your recordings.
What you need
Bench is what makes the sound.
The sweep is played by Bench through your own system. The phone records, analyses and sends; it never plays the test signal itself.
It does not play your music.
There is deliberately no listening mode. A phone cannot deliver what your chain is designed to sound like, and offering it would hand you a misleading basis for a judgement.
How a measurement runs
Bench sends the definition of the sweep (numbers, not audio)
→ the phone builds the same sweep at its own recording rate, and its inverse filter
→ Bench plays, the phone records
→ impulse response, extracted with drift correction
→ frequency response, normalised to 0 dB across 300 to 3,000 Hz
→ microphone correction applied
→ spatial average over the positions measured
→ automatic PEQ → sent to BenchHow the numbers are worked out
The sweep is a logarithmic chirp, deconvolved by its inverse.
Recording a sweep and convolving it with the inverse of that sweep gives the impulse response, with the harmonic distortion of the system separated out ahead of the linear response rather than smeared across it.
The two clocks are corrected for.
Your DAC and the phone run on separate clocks, so the recording is slightly stretched relative to what was played. The impulse response is extracted with that drift corrected. A 50 ppm difference leaves a smoothed frequency response essentially intact; what it damages is the shape of the impulse in time.
The response is normalised, not calibrated.
It is set to 0 dB across 300 to 3,000 Hz, a band where the room is comparatively well behaved. The result describes the shape of your response, not its absolute level, which is what a room correction needs.
Several positions are averaged.
A single point describes that point, including the comb filtering that belongs to it alone. Averaging a few describes the seat instead.
error(f) = measured(f) - target(f)
the PEQ is built by taking the largest remaining error and placing a filter on it,
then repeating on what is left (a greedy residual fit)
below the limit (about 300 Hz by default) bells, placed where the modes are
above it one high shelf, plus a few bells
cuts are preferred to boosts, and a boost is held to a minimum Q
the maximum boost and cut are clamped on the combined EQ, not per band
a negative preamp is computed so the result cannot clip- Target curves: flat, a tilt, Harman and B&K.
- The predicted result shown on the phone is evaluated as an analogue prototype, which is what Bench runs at the internal rate. Predicting it at the recording rate instead would show a high shelf squashed towards the Nyquist of the phone, and the graph would quietly disagree with what you hear.
- The bands come out in order of frequency. They are in series, so the order does not change the sound.
What a measurement has to meet
Still being verified on real hardware.
The round trip has been confirmed as far as connecting to Bench and reading its state. Recording a sweep and sending the correction back is still being checked on devices, as is the direction in which a calibration file should be applied.
What stays on the phone
- The recording never leaves the phone. It is turned into a frequency response and a PEQ on the device.
- A measurement is not kept. The app has no database of past sessions.
- Only two things are stored: your calibration files, and the address of the last Bench you connected to.
- It does not record or export audio. Nothing you measure can be saved as a file.