A measurement sweep is running and its result has not been fully read back yet.
Changing filters, re-pushing, or starting another run now would apply to the sweep already in flight.
This clears on its own. "Stop After Current Test" still works.
This tool can capture frequency-response measurements through the REW API or built-in Chrome audio.
Complete the setup relevant to the capture method selected in Step 2:
Launch commands / troubleshooting
macOS:
open -a REW.app --args -api
Windows:
"C:\Program Files\REW\roomeqwizard.exe" -api
If the API isn't reachable, check Preferences > API > "Enable API" is ticked and that
nothing else is bound to port 4735. REW sends Access-Control-Allow-Origin: * on every
endpoint this page needs (including preflight for POST/PUT), so no proxy is required —
this page's fetch() calls go straight to http://127.0.0.1:4735.
This page uses ES module imports, which browsers block under file:// — serve it from a
local static server instead of double-clicking the file, e.g. from the repo root:
python3 -m http.server 8000
then open http://localhost:8000/testing/html-tools/devicepeq-rew-verification.html
Step 1 — Connect the Device Under Test
Connect a device above to see its resolved PEQ constraints here.
Step 2 — Capture method
For automatic REW capture and read-back, run REW with its API enabled and an active REW Pro licence. Then click Check REW API before starting the baseline or test plan.
The REW API could not be reached. Confirm that REW is open with API enabled, REW Pro is active, and the API is listening on 127.0.0.1:4735. If you changed the port, update the page configuration. Keep this page on a local HTTP server or HTTPS, then restart REW and click Check REW API again.
Chrome permission is required.
The built-in path uses the selected Chrome input/output devices and feeds the same verification comparison pipeline. Use a local HTTP server or HTTPS.
not checked
Step 3 — Baseline Measurement
This is the reference every test below is measured against. Click below to have this page push
every filter band, set to 0 dB gain and disabled, to the connected device, then
trigger a measurement automatically (or prompt you to start it manually when the selected method requires it) and
adopt that measurement as the baseline (frequency response cached in this page).
no baseline
Prefer to set the device up yourself instead (e.g. picking a dedicated "PEQ disabled"
preset in the device's own app)? Run that measurement with the selected capture method, then use the fallback below to adopt
the latest available measurement, without this page touching the device.
Built-in baseline frequency response
Measured baseline
Step 4 — Build the Test Plan
Test cases are generated from the connected device's resolved PEQ constraints (min/max gain, min/max Q,
supported filter types). Each case applies a single isolated filter, pushes it to the device, triggers a
measurement, and compares the whole measured frequency-response curve against the
theoretical biquad shape (log-spaced points across 20Hz–20kHz, not just one frequency) for any filter
type with an RBJ model — PK/LSQ/HSQ plus LPF/HPF/BPF/NOTCH/BSF/APF/CQ. Many devices automatically
reduce overall output level ("pregain") when a boost filter is applied, to protect headroom — that
shows up as a constant broadband offset, not a shape error. This tool detects that offset (median
residual across the whole curve), subtracts it out, and reports it separately from the actual
filter-shape fit. Any type code without a theoretical model falls back to a single-point measurement
and is always record-only.
Test groups
Run parameters
Settle time after push
ms
Shape fit tolerance (RMSE)
dB
Sweep timeout
ms
Device DSP sample rate
Hz
Gain/Q sweep frequencies
Hz
ⓘ
The device is now being pushed to without a forced disconnect. If it really does
drop the connection, the run will stop at the first push with “no device connected”
— which is itself the answer. If it keeps running, disconnectOnSave is
wrong for this model in usbDeviceConfig.js and should be set to false.
Shape fit tolerance is the max allowed RMSE (dB) between the measured and theoretical
curves; default 0.3dB leaves margin above real noise while still catching real filter defects.
"Effective Q" (on failing rows) is the Q that would best explain the measured curve, when that's a
meaningful finding and not just search noise.ⓘ
#
Group
Type
Freq (Hz)
Gain (dB)
Q
Measure @ Hz
Expected Δ
Check method
Label
Step 4b — Measure a filter set by another tool
optional
For filters applied outside this tool — a vendor web app, a phone app, anything that
isn't the connected-device path above. Set one filter in that tool, capture a sweep
here, and the tool works out which filter actually reached the output.
Needs the Step 3 baseline, measured with that tool's EQ off.
Step 5 — Run
●
REW Pro sweep trigger isn't available — start the sweep yourself in REW now (click Start Measurement
in the REW window), then click Continue below once it finishes.
#
Group
Label
Expected Δ
Measured Δ (raw)
Pregain
Shape RMSE
Max Err
Corr
Effective Q
Status
Capture ID
Step 6 — Summary & Export
Run the test plan to see a summary here.
Insights looks for a systematic cause across every measured
case — a constant level offset, a gain/Q/frequency scale factor, or an error that
trends with frequency — and works out the numbers behind it.