Skip to content

Repository files navigation

Auricle

Auricle

macOS 15 or later tests passing MIT licence

How loud you are actually listening, in your macOS menu bar — in dB(A), with a rolling seven-day exposure dose.

Hearing loss from volume is permanent, painless while it happens, and preventable if you can see it coming. iOS has shown headphone levels since iOS 14. macOS never got it. This is it.

Panel: verdict, gauge, this week's dose    Panel with details: device, batteries, protections, history

Install

Download the latest .dmg from Releases, drag Auricle to Applications, open it.

It is not notarised — that needs a paid Apple developer account — so the first launch is blocked. Right-click the app and choose Open, or run:

xattr -dr com.apple.quarantine /Applications/Auricle.app

macOS then asks for permission to capture system audio. Turn on Open at login from the app's Settings menu to have it start with the Mac.

The reading

macOS gives an app two of the three facts needed:

Fact Available? Source
The audio being played Yes Core Audio process tap, A-weighted per IEC 61672
The volume setting Yes kAudioHardwareServiceDeviceProperty_VirtualMainVolume
How loud that is in the ear No Calibration constant
SPL(A) = fullScaleSPL + volumeSlope × (volume − 1) + signal level (dBFS, A-weighted)

Two measured facts worth knowing. On Bluetooth headphones the volume is applied inside the earbuds, so it never appears in the tapped signal — on AirPods Pro 2 the tapped level held at −20 dBFS across volume 63% and 30%. And the volume law is linear in the slider, not logarithmic: volume 4, 8, 12 and 16 of 16 gave 48, 65, 80 and 94 dB(A) — steps of 17, 15, 14.

Calibration

Profiles are keyed on the Bluetooth product ID, not the device name, because a name says nothing about which generation the headphones are.

Model Product ID Full-scale SPL Slider travel Worst residual
AirPods Pro (2nd generation) 0x2024 114.70 dB(A) 61.20 dB 0.90 dB

That row is one pair, one person, once, on firmware 8B41. Good to a couple of decibels — enough to tell 70 from 85, not enough to argue about 1 dB. Unmeasured models fall back to an estimate, and the app says so.

swift run AuricleTools profile reports your model and whether a profile applies.

Contributing a measurement

Everything happens on an iPhone, which already knows these headphones — AirPods only play from one device at a time.

  1. Turn off Reduce Loud Audio, EQ and Headphone Accommodations.
  2. Add the Hearing tile to Control Center.
  3. AirDrop docs/calibration/auricle-reference-pink-20dBFS-A.wav — 30 s of pink noise at exactly −20 dB(A) relative to full scale.
  4. Play it from Files. Set the volume by counting: hold volume-down to silence, then press volume-up 4, 8, 12 and 16 times.
  5. Note the Hearing reading at each, once it settles.
swift run AuricleTools fit --signal -20 0.25:48 0.5:65 0.75:80 1:94

A worst residual under about 1 dB is as good as the reference meter's own resolution. Open a pull request with the readings, the residual and the product ID — a second measurement of a model already listed is just as useful.

The last step is loud: at full volume this signal measured 94 dB(A), which is a week's safe exposure in 1.6 hours. Take the reading, then turn it down.

The gauge

Runs 60 to 105 dB(A), labelled underneath in remaining safe time — unlimited, 40 h, 4 h, 7 min — each half the one before. It starts at 60 because a scale from 20 spends 44% of its width where nothing can hurt you. Below 60 there is no fill.

Exposure follows WHO / IEC 61252, as Apple's does: 40 hours a week at 80 dB(A) is one full week, and every +3 dB halves it.

75 80 85 90 95 100 dB(A)
127 h 40 h 12 h 35 4 h 1 h 15 23 min

Nothing depends on colour alone: the verdict is written, each state has its own symbol, segments grow taller to the right, and a cursor marks the position.

Privacy

Audio is analysed in memory and thrown away. Nothing is recorded or sent anywhere. What persists is a level per minute for seven days and your calibration, in ~/Library/Application Support/Auricle/state.json.

Limits

  • An estimate until calibrated, and labelled as one.
  • Headphones only. Speaker output is not measured.
  • A-weighting matches IEC 61672 within a few tenths of a dB to 8 kHz and reads about 3 dB low at 16 kHz — a known limit of the method, under 0.1 dB on a broadband level. There is a test for it.
  • The louder channel is reported, not the average.
  • Not a sound level meter and not a medical device.

Build from source

Needs macOS 15 and Xcode 16.

./Scripts/install.sh              # build, install to /Applications, launch
./Scripts/dmg.sh                  # build a distributable .dmg
swift run AuricleTools icon       # redraw Resources/AppIcon.icns
swift test

AURICLE_PREVIEW=1 opens the panel in a normal window.

Licence

MIT. See LICENSE.

About

Headphone listening level (dB SPL) and seven-day exposure dose in the macOS menu bar. macOS never got the headphone level readout iOS has had since iOS 14.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages