Sonir Remote

iOS 15+ / Android

Remote 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

Operating systemiOS 15 or later. Android is built from the same source
AvailabilityClosed beta, distributed to a limited group of testers. Not yet on the App Store or Google Play
MicrophoneThe built-in microphone works. A calibrated measurement microphone is recommended
Calibration filesUMIK, REW and FRD files can be loaded. Measuring without one is possible
ConnectionThe phone and Bench on the same local network. Connect by scanning the QR code Bench shows
PermissionMicrophone
  • 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

STEPWHAT YOU DOTO MOVE ON
ConnectScan the QR code Bench shows. The last address is kept, so next time it connects on its ownConnected
MicrophoneChoose the input and load a calibration file. Optional; without one, no correction is applied
LevelPlay a test tone and set your amplifier so the input sits between -12 and -6 dBFS
MeasureBench plays the sweep and the phone records it. Add positions to average themOne position or more
SendChoose a target curve and a limit, and send the automatic PEQ to slot B in Bench
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 Bench
Bench sends numbers and receives filter settings. At no point does audio travel in either direction.

How 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
The correction concentrates below the Schroeder frequency, where the room behaves modally and a filter can actually fix something. Higher up, what a microphone sees is largely position-dependent comb filtering, and chasing its teeth would make the correction wrong everywhere except the exact point you measured.
  • 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

LevelAim for the input between -12 and -6 dBFS while the test tone plays
Too quietA recorded peak below -40 dBFS is rejected rather than turned into a curve
SaturatedRejected once 1% of the samples are clipped
FailuresMicrophone permission, Bench not running, another measurement in progress, stopped at the Bench end, too quiet, saturated, disconnected. Each is reported as itself
  • 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.