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.
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.appmacOS 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.
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.
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.
Everything happens on an iPhone, which already knows these headphones — AirPods only play from one device at a time.
- Turn off Reduce Loud Audio, EQ and Headphone Accommodations.
- Add the Hearing tile to Control Center.
- AirDrop
docs/calibration/auricle-reference-pink-20dBFS-A.wav— 30 s of pink noise at exactly −20 dB(A) relative to full scale. - Play it from Files. Set the volume by counting: hold volume-down to silence, then press volume-up 4, 8, 12 and 16 times.
- 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:94A 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.
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.
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.
- 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.
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 testAURICLE_PREVIEW=1 opens the panel in a normal window.
MIT. See LICENSE.

