03 / Audio engineering Public alpha · v0.4.0

EARS BridgeAn app that connectsa headphone test jig to Dirac Live.

Dirac Live is software that measures a sound system with test sounds and one microphone, then builds a filter that corrects it. The miniDSP EARS is a test jig for headphones, with a microphone in each ear. My app, EARS Bridge, lets Dirac Live measure and correct headphones on the jig.

Role
Sole developer
Built
June 2026 to now
Software
C++20, JUCE 8, Catch2
Runs on
Windows 11
The EARS Bridge window. Left: input miniDSP EARS, combine mode Auto per-ear (Dirac), output CABLE Input (VB-Audio), 48 kHz, 24-bit. Right: the left-ear and right-ear calibration curves, and level meters with both ears at −14 dB in the green band.
EARS Bridge on Windows, ready to measure. Each ear has its own calibration curve, and the meters show the level target. The serial numbers are placeholders.

Dirac Live takes one microphone, and the EARS jig has two.

The jig and Dirac Live, without EARS BridgeIllustrative

EARS Bridge solves both: it sends Dirac one calibrated ear at a time, with steady timing.

What goes wrong, in technical terms

Dirac Live builds a correction filter from test sweeps that one calibrated microphone records. The miniDSP EARS has a microphone capsule in each ear, and each capsule has its own factory calibration.

A simple mix of the two capsules gives Dirac the wrong signal. Open-back headphones leak sound into the other capsule, so a mix folds that leakage into every sweep. The jig and the virtual cable to Dirac also run on separate clocks. If the timing drifts from sweep to sweep, Dirac rejects headphone captures as "imprecise".

EARS Bridge calibrates each ear and gives Dirac one ear at a time.

How one ear at a time reaches DiracSchematic
One calibrated ear at a timeDirac plays a test sound in the left ear, then in the right. Each microphone records it with its own uneven response, and its own calibration filter makes it flat. A switch sends only the ear being measured to Dirac's one microphone input. EARS Bridge is the part between the jig and Dirac Live. LCALIBRATE RCALIBRATE EARS BRIDGEEARSDIRACSELECT ONE EAR

miniDSP makes the jig, and Dirac makes Dirac Live. My app sits between them: it calibrates each ear, picks the one Dirac is measuring, and keeps the timing steady.

How the signal path works, in technical terms

EARS Bridge captures both ears and applies each ear's calibration as a minimum-phase inverse filter. In the default Auto per-ear mode, it follows Dirac's left-then-right sweep and forwards only the ear that Dirac is measuring. A virtual audio cable carries that signal to Dirac as its microphone.

A lock-free, drift-correcting sample-rate converter joins the two clocks. During a sweep, it holds one fixed ratio, so every sweep has the same timebase. The calibration filters rebuild on a background thread when a file or the sample rate changes.

Five design choices protect each measurement and remove a setup error.

What each design choice doesFive choices

Dirac gets one ear with steady timing, the rate is checked, error 600007 takes one click to fix, and the network is used only for updates.

How each choice works, in technical terms

Never mix the two ears for Dirac. Auto per-ear is the default and the only mode that works with Dirac. The mixing modes, such as average and sum, stay available for other tools, and the app labels them "not for Dirac".

Hold the clock still during a sweep. The converter normally corrects drift on every audio block. During a sweep it freezes the ratio and lets buffer headroom absorb the drift. If the drift outruns the headroom, the capture is marked invalid. The app never retimes a capture silently.

Check the rate Windows really uses. To learn whether Windows resampled the EARS stream, the app compares the requested sample rate with the rate Windows actually runs the device at. When it can't prove the stream is untouched, it shows "clip detection approximate".

Fix the setup error in one click. Dirac opens its recording device in exclusive mode by default, and the standard virtual cable has no exclusive format. The result is Dirac error 600007. One button sets Dirac's own shared-mode switch for the user.

Use the network only to check for updates. The only network request is one call per launch to GitHub's public releases API. The app shows an update link and never downloads or installs anything. A setting turns the check off.

A code audit made the clipping checks stricter.

Audit results and testsJune 2026

What the clipping audit changed

  • A clipped test soundReported as cleanMarks it invalid
  • Broken samplesNot checkedMarks it invalid
  • Part of the run checkedThe whole runOnly Dirac's test sound
  • Timing correction in a test soundAdjusted all the timeHeld still
  • Audio format change in a runNot detectedDetected, marks it invalid
Read the audit

Automated tests

  • 62unit-test files
  • 2systems they run on: Windows and macOS

Each release waits for every test to pass.

A clipped or damaged measurement is now marked invalid, and each release waits for the tests to pass.

The audit, in technical terms

The app reports whether any clipping reached Dirac. In June, a read-only audit tested every code path behind that report. Parallel reviewers traced each path to a file and line, and separate verifiers tried to disprove each finding. I fixed each blocking finding and kept the audit in the repository.

Clipping and stream-integrity audit, June 2026
FindingBeforeNow
A clipped sweepStill reported as cleanA confirmed clip invalidates the capture
NaN or infinite samplesNot checkedInvalidate the capture
Checked windowThe whole Start-to-Stop runOnly Dirac's sweep
Converter ratio in a sweepAdjusted every blockFrozen. A forced correction invalidates
Format change during a runNot detectedDetected. Invalidates the capture

Guidance flags, such as a low level or a possible Windows resample, warn without invalidating. The 62 unit-test files run on Windows and macOS in CI, and each release waits for the suite to pass.

Contact

Get in touch.

I'm open to full-time AI product engineering roles.

Email hello@shayanbianconi.com or see more of my work on GitHub.

Email me