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 full site ↗

The complete live website, hosted by entertrainmentuk on GitHub Pages. Select “Launch the panel” inside the frame to use the app, or browse its methods and supporting pages. Uncalibrated research software; sound starts through the panel’s own controls.

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 ↗