e↗entertrainment
← All project stories
Science & computation / PROJECT STORY

Hearing & tinnitus research

Explore the hearing-test and notched-sound experiments in the studio archive. Research software whose calibration and validation limits matter.

Research prototype12 MIN READDEVELOPMENT ARCHIVE · OCT 2026
LIVE WEBSITE

Hearing & Tinnitus Panel

Open the research panel ↗Open full site ↗

Interactive hearing and tinnitus research panel. Measurements are relative and equipment-dependent, not calibrated clinical audiometry or evidence of hearing damage. Open the panel directly, or browse the full website and methods below. Sound starts through the panel’s own controls; results remain subject to the panel’s stated limitations.

PROJECT REVIEW · 18 October 2026

Inside the project

Prepared with the project’s development agent from source and retained evidence. This is a project-owner assessment, not an independent customer review. Dated checks were not rerun for this website.

A single-page, offline-capable hearing and tinnitus instrument whose defining quality is restraint: it measures what uncalibrated browser audio can honestly support and labels everything else. Its strongest, genuinely working parts are the adaptive per-ear audiometry (Bayesian ZEST-inspired thresholds reported with a credible interval, a downloadable self-referenced profile, catch-trial false-alarm rate and one-tap retest), the slow tinnitus pitch-match with a live oscilloscope/spectrum fine-tuner, a calibration-free speech-in-noise screen, and an exploratory research-test suite. A persistent safety spine, local-by-default storage and an emergency stop sit above every tab. It is explicitly a research/self-observation prototype, not a diagnostic device, and never claims calibrated dB HL.

What stands out

  • Honest, uncertainty-first design: thresholds carry 95% credible intervals + trial counts; the plot is a self-referenced profile, not a dB HL audiogram
  • Adaptive audiometry engine (ZEST-inspired posterior, informed priors, catch trials, shuffled interleave) with a downloadable PNG audiogram
  • Breadth of auditory tests in one dependency-free page: Quick sweep/pitch-match, audiology battery, speech-in-noise, 8+ research tests
  • Strong safety + privacy posture: protocol-wide safety gate reconfirmed each load, pain interlock, no microphone, local-only by default, explicit-consent send
  • Runs anywhere with no install/build; self-contained index.html

Current limits

  • Uncalibrated: no dB HL/SPL; results are relative/within-session, device- and headphone-dependent
  • No automated test suite; performance figures are the author's own simulations, not independently validated
  • Several recent modules (measurement spine, Sound Lab, prospective A/B, newer research tests) are committed but not independently runtime-verified
  • Extended highs (10-16 kHz) hardware-limited; per-ear work needs headphones
  • No real UI screenshot/audio/video demo assets exist yet (only a share card + logo)

Features & evidence

Quick test (sweep + pitch-match scope)

released

Set a 1 kHz level, run a 250 Hz-20 kHz hearing-range sweep, then a slow pitch-match with a live oscilloscope + spectrum fine-tuner (÷2/×2 octave jumps), averaged over up to 3 passes; rule-based tinnitus-character suggestion.

Recorded evidence

source+deployed; initial commit ~2026-08 (e12dfbd), Pages site 8c2ea9d; pitch-match scope observed running in original build session; live status not re-verified 2026-10-18

Audiology panel (adaptive thresholds + audiogram)

released

Per-ear warbled-chirp thresholds 250 Hz-8 kHz (optional 10-16 kHz EHF); Bayesian/ZEST-inspired posterior with credible interval; downloadable PNG audiogram with CI whiskers + ISO-7029-style age overlay; device/stereo check; catch-trial false-alarm rate; one-tap test-retest.

Recorded evidence

source+deployed ~2026-08 (e12dfbd); author simulation in README (~6 trials/freq, ~1.8 dB mean error) — not independently verified; no automated test suite

Speech-in-noise (digits-in-noise)

released

Calibration-free three-digit-in-noise screen, 1-up/1-down SNR track, relative SRT.

Recorded evidence

source+deployed ~2026-08; README author simulation SRT recovered to ~0.8 dB; relative (TTS, uncalibrated)

Research tests — spectrum / RI function / tuning curve / gap detection

installed-tested

Tinnitus spectrum-likeness map, residual-inhibition function, tinnitus tuning curve, adaptive gap-detection.

Recorded evidence

committed 7bfe34e ~2026-09-14 (codex/publish-research-tests, FF-merged); these four were driven in-browser during their original build session

Research tests — frequency discrimination / temporal-modulation / binaural ILD-ITD / dichotic stream

source

Additional adaptive psychoacoustic tasks; results captured in the JSON export.

Recorded evidence

committed ~2026-09-14; NOT independently runtime-verified this pass

Measurement spine

source

Safety gate (seek-care / self-report-only), device/capability + master-bus dBFS monitor, momentary check-ins + trends, auditable event stream, emergency stop, Session Trace export/merge/delete (schema v4).

Recorded evidence

committed ~2026-10-03/04 (1dd4032, b05ec98); not independently runtime-verified

Sound Lab + prospective personal A/B

source

Bounded comfort sessions (narrowband/notched/pink/white/quiet-rest) with before/after observations; computer-randomised within-person A/B returning a descriptive difference only (no p-value/efficacy).

Recorded evidence

committed ~2026-10-03 (1dd4032) and A/B ~2026-10-04 (ecf7216); not independently runtime-verified

Result delivery (optional Netlify -> Microsoft Graph)

source

On-screen results, JSON/CSV export, audiogram PNG, pre-filled email, and an opt-in server-side send behind a health-data consent prompt.

Recorded evidence

functions present (send-result.js app-only; send-result-delegated.js no-secret); requires Netlify deploy + env vars; runtime unknown

Supporting notched-sound research (embedded)

source

Literature strand (Consensus-reviewed) shaping the notched-noise/Sound-Lab and tinnitus features; cited inline in README + Methods.

Recorded evidence

README references [1]-[18]; no separate repo; not a shippable product

Review updates & corrections
  • No new commits since the 17 Oct biography — HEAD still 3e0a6c77 (last commit ~2026-10-04); repo content unchanged.
  • Site integration now exists: [local evidence archive] and dist/projects/hearing.html (coordinator-curated from yesterday's biography).
  • Coordinator reworded body copy to 'Sound-therapy language is deliberately limited to exploratory research' — but the integrated FAQ 5 still says sound-therapy claims were 'tempered after a 2026 RCT'. Minor internal inconsistency to reconcile (coordinator's copy, not mine to edit).
  • Still no real screenshot/audio/video demo assets in the repo or the site (only og.png + logo.svg). The 'real screenshots and demos' request remains open and needs a permitted operator.

Workflow walkthrough

Explore the live project website above. The steps below describe the development workflow; native operations may require a separate installation.

  1. Open the live app in a modern browser with headphones and answer the safety check (reconfirmed every load)
  2. Set a comfortable level using the 1 kHz reference tone
  3. Run the Quick hearing-range sweep (tap 'I can't hear it anymore'), then the slow pitch-match using the live scope/spectrum fine-tuner
  4. Optionally run the full Audiology panel for a per-ear profile with uncertainty whiskers, and download the audiogram PNG
  5. Review results on screen; export JSON/CSV (everything stays local unless you explicitly send it)
Planned captures · not yet available
  • Landing page, live audiogram + PNG export, pitch-match scope/spectrum, one research test.
  • Short screen-capture walkthrough of a Quick test end-to-end.
  • Example raw-session JSON export + downloadable audiogram PNG (runtime-generated, not committed files).

Development biography · earlier archive

Development profile compiled from project source and retained records in October 2026. Dates and test results describe those records; they do not imply a new build, live acceptance test or public release.

3 · Biography

Most consumer "hearing test" pages overstate themselves: they present a tone player as if it produced a clinical audiogram, ignore that browser audio is uncalibrated, and reduce tinnitus to a single matched pitch. The Hearing & Tinnitus Panel is the opposite wager — an instrument built around the honest question what can a browser actually measure, and how can it say when it doesn't know? Its documented intellectual centre (stated on the Methods page) is a specific, testable relationship: where does a person's tinnitus percept sit relative to their own measurable hearing loss — at the audiometric edge, inside the loss region, or at a displaced frequency — expressed in octaves and an estimated Greenwood tonotopic coordinate. That framing separates research-prototype capability (collecting repeatable within-person relationships) from clinical validation (calibrated dB HL, validated questionnaires), which the app never claims.

The intended audience is threefold: individuals who want to observe and track their own hearing/tinnitus between clinic visits; a producer/technical audience curious about auditory psychophysics; and an audiologist or ENT reading a shared session as context, not a result. The app is careful to be useful to each without misleading any.

What it does, concretely, spans four visible tabs plus a persistent "measurement spine". Quick gives a 1 kHz level-set, a 250 Hz→20 kHz hearing-range sweep, and a slow tinnitus pitch-match with a live oscilloscope + spectrum fine-tuner (with ÷2/×2 octave jumps to defeat octave confusion) averaged over up to three passes. Audiology runs per-ear pure-tone thresholds using warbled pulsed chirps and a Bayesian, ZEST-inspired adaptive estimator: each (ear, frequency) holds a posterior over its threshold, informed by priors from age and neighbouring frequencies/the other ear, and reports a threshold with a 95% credible interval and trial count rather than false single-dB precision. It adds catch trials (false-alarm rate), shuffled interleaving, a self-referenced downloadable audiogram with an illustrative ISO-7029-style age overlay, and a one-tap test–retest repeatability check. Speech-in-noise is a calibration-free digits-in-noise screen with a 1-up/1-down SNR track yielding a relative SRT. Research tests is a directly accessible exploratory suite: frequency-discrimination, gap-detection, temporal-modulation detection, binaural lateralisation, dichotic stream attention, a tinnitus spectrum/likeness map, a residual-inhibition function and a tinnitus tuning curve.

The distinctive ideas are less the individual tests than the discipline around them. A measurement spine ribbon runs above every tab: a protocol-wide safety state (sudden-hearing-change or neuro/vestibular symptoms switch the app to "seek care first"; sound-pain or uncertain tolerance switches to self-report-only and removes sound-provoking tasks for the session, reconfirmed on every load); a device/capability context block (AudioContext state, sample rate, stereo-routing check, a monitored master-bus RMS/peak/clipping in dBFS — explicitly device/signal facts, not acoustic calibration); momentary check-ins (prominence, loudness, distress, stress, tolerance) with local trends; an auditable requested/applied/observed event stream; and a persistent emergency-stop that silences every Web Audio voice and OS speech instantly. A Sound Lab offers bounded comfort sessions (narrowband/notched/pink/white maskers or a quiet-rest comparator) with fixed durations and before/after observations, and a prospective personal A/B comparison that computer-randomises balanced session pairs, conceals later allocations, and returns a descriptive within-person difference — never a p-value or efficacy claim.

A representative user journey: open the page on a phone with headphones; answer the safety check; set a comfort level; run the Quick sweep and pitch-match, or the full Audiology panel for a profile with uncertainty whiskers; optionally run a research test or a Sound Lab session; review everything on-screen. Results stay local in that browser by default. Nothing is transmitted on finishing a test — the user must explicitly export JSON/CSV, download the audiogram PNG, open a pre-filled email, or consent to an optional configured results service.

The honesty is structural, not a footnote: the profile is named a "self-referenced hearing profile", never a dB HL audiogram; speech-in-noise is an "SRT-equivalent (relative)"; the tinnitus "type" is a transparent rule-based suggestion that surfaces red flags (pulsatile, unilateral, sudden-onset-with-vertigo) and routes to an audiologist/ENT. Sound-therapy language is deliberately limited to exploratory research. The result is a tool that behaves like an instrument that knows the limits of its own measurements — which, for uncalibrated browser audio, is the whole point.

4 · Modules & features — what a visitor can see / hear / try

(All authored by the project in index.html; the only external moving part is the optional Netlify/Graph email path.)

  • Quick test — reference-tone level set; hearing-range sweep; slow pitch-match with live oscilloscope + real-time spectrum + A/B-against-silence; rule-based tinnitus-character suggestion. See/hear/try.
  • Audiology panel — per-ear warbled-chirp thresholds (250 Hz–8 kHz; optional 10–16 kHz EHF, flagged exploratory); downloadable PNG audiogram with CI whiskers + age overlay; device/stereo check; catch-trial false-alarm rate; test–retest repeatability; advanced tinnitus battery (pitch, sound-quality audition, loudness in dB SL, minimum masking level, MRIL residual-inhibition search, impact index). See/hear/try + downloadable artifact.
  • Speech-in-noise — adaptive digits-in-noise (TTS + Web Audio noise) → relative SRT. Hear/try.
  • Research tests — frequency discrimination (cents/Hz), gap detection (with catch trials/false alarms), temporal-modulation detection (4/8/16/32 Hz), binaural ILD/ITD lateralisation, dichotic stream attention, tinnitus spectrum/likeness map, residual-inhibition function, tinnitus tuning curve. Try; results in JSON export.
  • Measurement spine — safety gate, capability/quality context, momentary check-ins + trends, auditable event stream, emergency stop, Session Trace (JSON/CSV export, merge-import, per-record + full-history deletion). See/try.
  • Sound Lab + prospective A/B — bounded comfort sessions and computer-randomised within-person A/B (descriptive difference only). Hear/try.
  • Result delivery (authored UI + optional dependency) — on-screen results, JSON/CSV export, audiogram PNG, pre-filled email; optional server-side send via Netlify Function → Microsoft Graph (the only third-party integration).

5 · Technical foundations & integrations

  • Web Audio API throughout — OscillatorNode tones, BufferSource generated/filtered noise, StereoPannerNode L/R split, per-voice GainNode; canvas for audiogram/scope/spectrum. Exponential sweep law f(t)=f0·(f1/f0)^(t/T).
  • Audiometry engine — ZEST-inspired posterior over θ (initPrior/updatePost/postStats), posterior-mean placement, SD-based stop; catch trials; shuffled interleave.
  • Speech-in-noise math (verified in-repo against DiN literature): SNR = 20·log10(RMS_speech/RMS_noise); noise amplitude scaled by 10^(−N/20) ("fix speech, vary noise"); 4 dB→2 dB step after first reversal; SRT = mean of reversal SNRs (first discarded).
  • No bundled local packages / no npm in the web app. Optional functions use Node 18+ global fetch (zero deps). Local packages named in the brief (FIRFilters/Kalman/SpectralProcessor/RemezEngine) are not used by this app — they belong to the sibling native/DSP portfolio; stating otherwise would be inaccurate.
  • Integrations: optional Netlify Forms + Netlify Functions (send-result.js app-only client-credentials; send-result-delegated.js delegated/no-secret) → Microsoft Graph Mail.Send. Credentials live only in Netlify env vars; the recipient is fixed server-side (not an open relay); origin allow-listing, size cap, per-IP rate limit, honeypot, payload validation. tools/get-refresh-token.js mints the delegated token locally.
  • Privacy posture: no microphone; no claimed room-acoustics/SPL/autonomic sensing; local-by-default storage (schema version 4); nothing transmitted without explicit user action + health-data consent.

6 · Maturity by feature (dated; evidence .git/logs/HEAD)

Dates derived from the git reflog (±1 day for timezone, commits +0100).

  • Implemented + committed + public (source-complete): Quick, Audiology (Bayesian thresholds, audiogram, reliability), Speech-in-noise, measurement-quality layer — initial commit ~2026-08 (e12dfbd), Pages site + privacy/social-preview same window (8c2ea9d, 192cf6a).
  • Research-test suite — "Publish research auditory tests" ~2026-09-14 (7bfe34e, codex/publish-research-tests, fast-forward-merged to main).
  • Measurement spine + Sound Lab — ~2026-10-03 (1dd4032/7822f8e); private-by-default + master-bus monitor (b05ec98); prospective Sound Lab A/B (ecf7216); research-test accessibility + safety-lock polish ~2026-10-04 (edafbb7,a9a2a39,3e0a6c7). Last commit ~2026-10-04 (~13 days before this pass).
  • Tests passed: No automated test suite in the repo. The README cites the author's own simulations (Bayesian ~6 trials/freq, ~1.8 dB mean error; SNR steps exact; SRT recovered to ~0.8 dB). Treat as author-stated, not independently verified.
  • Built: N/A (static; no build).
  • Runtime verified: the four earliest research tests (spectrum, residual-inhibition function, tuning curve, gap detection) were driven in-browser during their original build session; the later-added modules (measurement spine, Sound Lab, prospective A/B, and the additional research tests) are committed but NOT independently runtime-verified in this read-only pass — mark unknown.
  • Released/deployed: deployment is configured . Live status not verified here (no network in this pass).

9 · Roadmap (aspirational — not yet built)

  • Native iPhone HRV/pupillometry reactivity probe (sits with iOS Vitals) to add an objective autonomic correlate to the self-reported sound-reactivity log — the in-app text already states the browser does not measure this.
  • Deeper tinnitus-tuning-curve vs psychoacoustic-tuning-curve comparison; richer longitudinal trend visualisations.
  • Optional calibrated-headphone profiles to narrow the uncalibrated gap (still not clinical dB HL).

10 · Known limitations

  • Uncalibrated: no dB HL/SPL; levels depend on device/DAC/OS volume/headphones; results are relative/within-session, not clinical.
  • Headphones required for per-ear work; EHF (10–16 kHz) is hardware-limited and flagged exploratory.
  • Not diagnostic; tinnitus "type" is a rule-based suggestion; research tests are within-session, uncalibrated, not clinical cut-offs.
  • No automated test suite; several recent modules not independently runtime-verified here.

11 · FAQs

  • Is this a medical device / diagnosis? No — an uncalibrated research/self-observation prototype; see an audiologist (calibrated audiogram) or ENT for concerns.
  • Do I need anything installed? No — open the URL in a modern browser; headphones strongly recommended (required for per-ear tests).
  • Where do my results go? Local to your browser by default; nothing is sent on finishing a test. You may export JSON/CSV, download the audiogram PNG, email, or opt into the configured send service.
  • Why "relative" not dB HL? A browser can't produce calibrated sound pressure; the app re-references to your own best threshold and is explicit about it.
  • Does it treat tinnitus? No. The Sound Lab offers bounded comfort sessions and a descriptive personal A/B; sound-therapy claims were tempered after a 2026 RCT — no efficacy is claimed.

12 · Research prototype vs clinical validation (required separation)

  • Prototype capability (real): repeatable within-person relationships — adaptive thresholds with uncertainty, pitch/loudness/masking/residual-inhibition characterisation, speech-in-noise SRT, and the pitch-vs-loss geometry — all self-referenced and local.
  • Clinical validation (explicitly absent): no calibrated dB HL, no booth/transducer calibration, no validated questionnaires (the impact index is original wording "modelled on" validated instruments), no automated/independent test suite, no regulatory status. The product's own copy states this throughout.

13 · Supporting "notched-sound research" (entry 13, repo = none)

Entry 13 ("research") has no separate repository; it is the embedded evidence strand that shaped the panel's notched-noise/Sound-Lab and tinnitus features — a literature review (via Consensus) cited inline in README.md and the Methods page: Bayesian audiometry [13–15]; Digits-in-Noise [4–6]; extended highs [8,9]; tinnitus battery/impact/dB SL/MRIL [10–12]; and the notched-sound-therapy evidence that was deliberately tempered — a 2026 RCT finding notched therapy no better than amplification [16], with tailored notched-music residual-inhibition effects [17,18]. Conclusion: this is supporting research embedded in the hearing panel, not a separate shippable product. The standalone notched-sound therapy app (NoiseColour) is a different deliverable owned by another agent (requests slug noisecolour, entry 14) and is out of scope here.

Explore the connections.

Browse all project stories ↗