Weekend nerd challenge: home hearing test
- Robbie
- Apr 17
- 6 min read
Updated: Apr 18
So a couple of days ago we got the results of 15 months of waiting. 4 GP appointments, 3 sets of antibiotics, and a 12 month wait, and my young child had been able to meet with ENT to find the source of his ongoing ear pain... was immediately referred to audiology, who saw him a month later, then again a month later, and this this week (yep, another month later), the diagnosis is "glue ear".
We'd never heard of this condition before, and its apparently extremely common in youngsters. Long story short, he struggles to hear us, and that's going to stay the case for a while.
What struck me about the final set of tests was how they were conducted... some air blown in to his ear to check for movement, then a set of tests using headphones, and then another set of tests with bone conducting headphones. The idea being that if the headphone (audio through the air, hitting the ear drum, transferring through the air of the inner ear into the cochlea) were significantly more degraded than bone conducted audio (audio through the cheek bone, into the cochlea), then the issue must be in the area between the drum and cochlea... so a large gap could indicate glue ear.
Now this got me thinking - just before I left my last role, I was experimenting with Shokz, bone conducting headphones on the general open market. At the time, I was trying to find Teams devices for deaf / hard of hearing community, and for people who want to take work calls whilst also being able to listen to risks around them - maybe in city centres, or near roads.
I wondered - if I could've given my kid a test, once with headphones, and then with bone conducting headphones, and use an app to simulate the hearing test on both devices, and graph the results, and make an observation from that, then could that 15 months of immense pain, the repeated doctors appointments, the unnecessary antibiotics... could it have made those avoidable?
So I set to work.
The bill of materials for this demo is:
A set of headphones. I'm using generic Sony in-ears on the laptop, or Airpods with my iPhone.
A set of bone conducting headphones. I'm using Philips TAK4607.
To use the app:
Press calibrate. Set the system audio as loud as feels safe, and then press "go", and adjust the slider upwards until the sound is at a loud but comfortable level. If its louder than someone speaking to you nearby, then its too loud. Then it'll ask you to set the quietest volume - just drag the slider down to where the warble just disappears, or set it to 0%.
Press Practice. This will play a tone, and your job it to hit the button when you hear it. You can have the visual indicator on / off by using the check box.
Once you're calibrated and practiced, connect your standard headphones to the computers / smartphone, and start the Test (Standard). If you're using "Quick" mode (by checking the box), then the test will run uninterrupted, just press the "heard it!" button when you hear the tone... be quick, you've only got 3.5 seconds before the volume increases gradually! There are 12 tests to complete. Once the test is complete, add a comment to the popup to say what headphones you were using (if you want to). At this point, if you're interested, you can press "Graph" to have a look at your hearing profile.
Now that the Standard test is done, disconnect your headphones, and connect your bone conducting headphones. In my setup, that involves 1) taking out the airpods and putting them back in their case, and 2) switching on the Philips TAK bone conducting headphones and waiting for the connected tones.
Now run the Test (Bone) workflow. Its the same process as the Standard ones, although this time you're using bone conducting headphones instead of air conductive ones.
Once it's done, press "Graph"
If you can see a major gap between the "air" readings and the "bone" readings, then that might suggest a blockage in the inner ear, like glue ear. If the air and bone readings are roughly the same, then that could indicate that everythings fine, or that there's another issue to look at.
Work to do
There's still some work to go here... realistically, the audio levels need recalibrating each time a new device is connected - since the bone conductors might allow better depth of hearing, there's no point using a "low" that isnt 0%, so maybe I'll just remove that calibration step and just have the top-line / safety level.
I also need to work on the graph, it currently refers to dB, which is an artefact of a previous build, where I was calibrating using a sound pressure meter (before i realised that to make this generally available, I needed to use relative, not absolute readings, because most people dont own a sound pressure meter).
I also need to run the whole thing past a lawyer and an audiologist (if anyone did a combined legal / audiology degree, this is your time to pitch me your volume discount deal. And yes, volume discount pun is 100% intended)... I'm not a doctor, and this isnt a medical product, and you shouldnt use it as such... its a proof of concept thing that might be utter nonsense. Hopefully that's enough disclaimers.
I think I want to adjust the timings too, I've noticed that the tones can move on a little quickly. I might build some confirmatory logic that goes back and retests areas that look anomolous - when I tested this on myself, I noticed that my tinnitus (long story - caused by a guitar amp error of my own making several years ago) was covering over the sound of some of the tones. I experimented with warble tones (hence their presence in the Practice tab), and wondered if a warble tone could be used either in initial scoping / to understand potential confidence, of if they could be used post-test to improve the resolution of the test.
Where does it go?
So as I mentioned, it's been tough to see the little un go through so much pain for such a long time, and most of that time was in waiting for the ENT backlog to clear.
My GP delights in reminding us in letters that each appointment is £150 each (I cant remember the exact number, its there or thereabouts), and the cost of the Philips bone conducting headphones is £49.99, and the Sony headphones £28. (I've also bought a Jabees Hearlink bluetooth streamer for £62... effectively a bluetooth mic, which I'll pair with the Philips headphones, to create a sort of makeshift bone conducting hearing aid... with my huge thanks to the amazing folks over at the Hear Glue Ear app for the device selection and sourcing advice).
But you can do this test, and get some form of result for £28 (headphone component only), or run the full test for £78... and thats to buy all of the kit, which of course, you could pass around to other kids at the school, or leave at the GP surgery for folks to borrow / use. So for half the cost of a GP appointment, you could run a hearing test using air and bone conduction.
I've no idea at all if this is clinically valid - I'd guess that if it really were this easy, it'd've been done already. But at the end of the day, my weekly nerd challenges are about trying out new things, and seeing what happens. In this case, I had a need, I imagined a solution, I ordered the parts for my makeshift hearing aid, and I wondered whether those parts could be used to diagnose as well as treat.
I had no clue how to build such a complex bit of code, with almost no exposure to the audio APIs in Javascript, so I used my Gemini subscription (a hangover from the podcast demo I did a few weeks ago) to help me "vibe code" it. (Vibe coding, by the way, is a newly fashionable idea of programming apps by just prompting an AI / LLM tool using natural language, and letting it wholly generate the code for you - that's how this code was developed, with only very, very minor manual changes - fellow nerds can take a look at my very, very comprehensive notes in the Console, using CTRL+Shift+I and clicking on the Console button :-))
The app
Here's v3.5 of the app. There'll be some replacement versions at some point - I challenged myself to finish this one today, and ran out of time, will probably come back to it at some point.
Cover image by Gemini / Imagen 3.
18/4: v3.6 includes a warble tone. User can go straight to "test", and app triggers calibration before test to prevent reuse of previous calibration without high-volume safety in place. Use "Quick" and "Warble" settings. Audio output escalates quieter, so first 2-3 samples may be inaudible.