Skip to content

feat(audio): AutoEQ headphone correction with a native parametric EQ - #359

Merged
ajisth69 merged 2 commits into
Clash-Projects:mainfrom
xppenTC:feat/autoeq
Oct 20, 2026
Merged

ajisth69 merged 2 commits into
Clash-Projects:mainfrom
xppenTC:feat/autoeq

Conversation

@xppenTC

@xppenTC xppenTC commented Oct 19, 2026

Copy link
Copy Markdown
Contributor

What

AutoEQ headphone correction (like Poweramp / Wavelet), on top of a new native parametric EQ. Settings → Audio → Output & Loudness → AutoEQ.

How

  • Data: the public AutoEQ database (MIT, ~8 800 results, every major lab). There is no official API: results/INDEX.md is downloaded on demand and searched locally. Only the chosen profile (ParametricEQ.txt) and, for the chart, its measurement CSV are downloaded. Everything is cached, so a chosen profile keeps working offline.
  • Native EQ (ParametricEq.cpp):
    • up to 20 RBJ biquads (PK, low/high shelf, LP/HP) plus preamp;
    • one process-wide config, picked up lock-free by every instance;
    • filter state is kept per filter across edits, so moving a slider does not click.
  • Where it runs:
    • first in DspProcessor::process, also while Bit-Perfect is on (the user explicitly asked for the correction);
    • in place on the routes that bypass the Float32 DSP: USB exclusive, internal direct output, Bit-Perfect AudioTrack. DirectPcmEq works in the source packing (16/24/32-bit int with TPDF dither for 16-bit, float). The route keeps its format, so AutoEQ + mixer bypass work together.
    • The signal path adds an "AutoEQ" row; badge and verdict show DIRECT + EQ (never bit-perfect).
  • Targets:
    • default = the lab's own target, i.e. the published profile as-is;
    • Harman over-ear 2013/2015/2018, in-ear 2016/2017-1/2017-2/2019 (with and without bass), oratory1990 over-ear/in-ear, AutoEq in-ear, diffuse field ISO 11904-1 / GRAS KE

- AutoEQ database (jaakkopasanen/AutoEq, MIT) fetched on demand from
  GitHub: searchable index (~8800 results), the chosen lab profile
  (ParametricEQ.txt) and its measurement CSV, cached offline.
- Native ParametricEq (up to 20 RBJ biquads: PK, low/high shelf, LP/HP,
  preamp), one process-wide config picked up lock-free. Runs first in the
  DSP chain, also while Bit-Perfect is on, and in place (16/24/32-bit,
  float; TPDF dither for 16-bit) on routes that skip the DSP: USB
  exclusive, internal direct output, Bit-Perfect AudioTrack. AutoEQ and
  the mixer bypass work together; the badge/verdict say "Direct + EQ".
- Targets: lab target by default, plus Harman over-ear 2013/2015/2018,
  in-ear 2016/2017/2019 (with/without bass), oratory1990, AutoEq in-ear,
  diffuse field, applied as deltas to the lab target and refitted with a
  Levenberg-Marquardt PEQ fitter (AutoEQ layout); bass and tilt sliders.
- Manual editing of every filter (type, Fc, gain, Q, on/off, add/remove,
  preamp) switches to "Custom"; choosing the headphone again restores the
  AutoEQ profile.
- Per-device profiles (Bluetooth / USB name, wired, speaker) loaded
  automatically when that output connects.
- Response chart: correction, measured, target and corrected curves.
- Tests: parser, biquad maths, preamp, fitter accuracy, index/CSV parsing,
  bundled target grid.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LR3s8LM4rGRXJiyve854EE
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LR3s8LM4rGRXJiyve854EE
@ajisth69
ajisth69 merged commit 501ef23 into Clash-Projects:main Oct 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants