Skip to content

Qudelix for macOS 1.3.0

Choose a tag to compare

@FrankieMa77 FrankieMa77 released this 05 Sep 12:53
· 70 commits to main since this release

Qudelix for macOS 1.3.0

Equalizer

  • Drag the curve to shape it. Move a band's dot vertically for gain and
    horizontally for frequency; hold Option for Q and Shift for fine steps.
    Hovering shows which band a drag would take. Everything goes through the
    same gated, clamped path as the sliders.
  • Undo and redo for EQ edits, with Cmd-Z and Cmd-Shift-Z and buttons beside
    Flatten. A drag or an import is one step, not a hundred.
  • Auto pre-gain. The editor works out how much attenuation the summed curve
    needs to avoid clipping in the 5K's own DSP and offers the number. It never
    moves a value you set yourself.
  • Per-band mute for an instant A/B of one band. The gain is kept and
    restored exactly, and a mute is never committed to the device's flash.
  • The requested curve, shown. When an import asks for more than the device
    can hold, the requested shape is drawn as a dashed ghost behind the live
    curve with the gap shaded and the worst point labelled.
  • Pre-gain is now written to both stored channels. Previously only the first
    was written, which could leave a left/right level imbalance invisible from
    the app.

Presets and corrections

  • Name preset slots from the app. The name is stored on the 5K, so other
    software sees it. Saving an imported correction into a slot names the slot
    after it, unless the curve has since been edited.
  • Fit to a target of your choice when importing from AutoEq, with bass and
    tilt adjustment on the same fit. Targets are grouped by form factor. The fit
    is asked to stay within the device's limits, so nothing is clamped on
    arrival; the published preset is still offered as-is.
  • Predicted preference rating for over-ear and on-ear corrections, from the
    published AES model, scored on the error that survives the bands this device
    can actually run. In-ear gets no score: those coefficients could not be
    verified from a primary source.
  • Import from the clipboard. Paste a filter list as published sites print
    it.
  • Bandwidth-aware fitting. When stream-quality detection has measured where
    the source stops, an import can be told to stop correcting there.
  • Profiles. Pair an output device with a preset and be offered the switch
    when that output becomes active. It always asks the first time; mark an
    output automatic once you trust it.
  • The EQ snapshot used to repair a device is now kept per EQ group, tagged with
    the device it came from, and never restored onto a different device. A
    damaged snapshot is parked rather than overwritten.

The device itself

  • Device settings drawer: channel trim, a volume ceiling, the DAC
    reconstruction filter, power and battery-care state. Crossfeed is shown but
    not settable.
  • The parser now reads the codec, output jack, gain, mute, charger and
    low-battery fields it used to skip. The low-battery alert takes the device's
    own flag as a trigger, and the header can say "plugged in, not charging"
    when battery care is on rather than implying a fault.

Everything else

  • Signal path inspector in the Level pane: five rows from source to output
    saying what alters the audio and what passes it through.
  • About panel with the version and the exact source revision, and an
    update check that runs only when you press it.
  • Accessibility names for every icon-only control.
  • Copy and Reveal buttons on the diagnostics log.
  • The README and privacy section now list every file the app writes and state
    that a system-wide audio tap is created at launch by default, with the three
    switches that govern it.

Fixes

  • Bluetooth stopped retrying a switched-off device every 18 seconds for the
    whole session. It backs off to once a minute and logs it once.
  • The by-ear tuner read headroom off the largest single band rather than the
    summed response, so it under-read on exactly the curves with the least
    headroom. Tune results derived on top of an import are worth re-running.
  • The by-ear macros and the tone-test correction were applied by band index,
    so in 20-band mode they landed on the wrong frequencies. Both now map by
    frequency.
  • A/B trials were being written to flash and pushed into undo one band at a
    time. A trial now reaches neither.
  • Quitting with the 5K unplugged could save a flat curve as the last EQ and
    write it over the real one on the next connect. Snapshots now require a
    device that has been read.
  • Device reports stopped arriving during any slider drag and landed in a burst
    afterwards, defeating the echo windows. The HID source now runs in common
    run-loop modes.
  • Recording of the listening history now follows its switch alone. It used to
    accumulate whenever the engine ran for stream detection.
  • Auto-rate refuses to renegotiate the 5K from audio that was going to a
    different output device.
  • A tone test that measured nothing at a frequency says so instead of reporting
    typical hearing and writing a "+0 dB" correction through the gap.
  • The Compare session's reliability check no longer flags a listener who
    correctly answered "same" on identical pairs.
  • The Stage soft clipper is anti-aliased.
  • Hardened runtime on the bundle. The audio-recording permission is asked once
    more on first launch of this version because the grant is keyed to the
    signature.
  • Two audit rounds of crash, resource and input-validation fixes: NaN and
    non-finite sample rates, unbounded loops on hostile buffer descriptions,
    throttled logs, bounded caches, state files that refuse anything but a
    regular file.

SHA-256 Qudelix-1.3.0.dmg

90312ca69bbf9a395ff4cf5271b11eab55169e6ec3e365b8c2ec2f2aadf0fc78

Verify before opening:

shasum -a 256 ~/Downloads/Qudelix-1.3.0.dmg

Requires macOS 14 or later. Universal binary (Apple Silicon and Intel; only run on Apple Silicon so far). macOS asks for the System Audio Recording permission again on first launch of this version because the app now runs with the hardened runtime and the grant is keyed to the signature.