The idea
Hearing damage is cumulative and dose-based: 85 dB for eight hours does roughly the same harm as 91 dB for two hours or 100 dB for fifteen minutes. Nobody tracks it that way. This is a phone app that runs a calibrated A-weighted sound meter in the background, adds headphone playback levels on top, and shows one number — how much of today's noise budget you've spent. It notifies you at 80 percent, so you can leave the bar before the damage is done rather than learn about it from an audiogram in twenty years.
Why build this
Anyone who goes to shows, rides a loud commute, works in a kitchen or a machine shop, or just wears earbuds for nine hours a day is accumulating exposure with zero feedback. Apple ships pieces of this — the Noise app warns at a threshold, Health stores headphone and environmental exposure — but it warns per-moment, not per-budget, and it never combines the two sources into a single running total. Android ships nothing comparable.
The timing works because the measurement problem is now mostly solved for you. iOS exposes environmentalAudioExposure and headphoneAudioExposure in HealthKit as LAeq samples you can read directly, which means on iPhone you can build the accounting layer without touching the microphone at all. That is the whole product: the arithmetic, the framing, and the nudge.
Stack sketch
- iOS app in Swift/SwiftUI. Read
HKQuantityTypeIdentifier.environmentalAudioExposureand.headphoneAudioExposureviaHKAnchoredObjectQueryfor incremental pulls. - Android app in Kotlin/Compose. No HealthKit equivalent — sample the mic with Oboe or
AudioRecordat 48 kHz, run an IEC 61672 A-weighting biquad cascade, and compute LAeq in one-second bins in a foreground service. - Dose math: NIOSH criterion, 85 dBA for 8 hours with a 3 dB exchange rate. Each one-second bin at level L contributes
10^((L-85)/10)seconds of an 8-hour budget. Sum, divide by 28800, render as a percentage. - Storage: SQLite — GRDB on iOS, Room on Android. One row per minute, not per second; roll up on write.
- Calibration: a per-device-model offset table shipped as JSON, plus a manual trim in settings for users with a real SPL meter.
- Notifications: local only, via
UNUserNotificationCenter/NotificationManager.
Scope for v1
In: one platform (iOS first, because HealthKit removes the hardest engineering), a today view with a dose ring and the top three loudest intervals, a seven-day history, the 80 percent notification, and a manual "I'm at a concert" toggle that raises sampling detail. All data stays on-device; no account, no server.
Out: Watch app, cloud sync, sharing, venue detection, per-source attribution beyond headphones-versus-environment, and anything resembling a hearing test.
Where it could go
The obvious next layer is location. Once you have dose bins with timestamps, joining them to coarse location gives you a crowdsourced loudness map — which gyms, cafés, and subway platforms are quietly costing people their hearing. That is a genuinely new dataset and a defensible reason for the app to exist beyond the individual.
The second path is export. Audiologists have nothing useful when a patient walks in; a signed PDF of twelve months of daily dose is real clinical context. The third is workplace, where the same math is regulated: OSHA and EU directives require dosimetry for noisy jobs, and current badge dosimeters cost hundreds of dollars per worker. A phone-based version sold per-seat to small shops is a different business wearing the same engine, and it can wait until the consumer version proves the measurement holds up.
Watch out for
Calibration is the whole credibility of the product — an uncalibrated phone mic can be off by 10 dB, which on a 3 dB exchange rate means an eightfold error in dose. Ship conservative offsets, show a confidence range rather than a fake-precise number, and keep every claim on the wellness side of the line so you stay out of medical-device territory.