NIGHTSHAPE

Christopher "Kit" Yarber

Technical Support / Troubleshooting / Documentation

01 /

Operator

NameChristopher "Kit" Yarber
LocationHudson, FL / Remote
Contactcontact@kityarber.com
NowBuilding and supporting my own iOS software
BeforeTen years of customer operations, bar and restaurant management
02 /

Incident Writeup

How I work a problem

No sound over Bluetooth. Everything reporting healthy.

DRUMKIT / Reported by beta testers / Owned from report to resolution

Symptom

Testers on Bluetooth headphones and speakers got silence. The same build on the phone's own speaker was fine. The app looked like it was playing: transport running, meters moving, no error anywhere.

Why it was hard

Every health signal read normal. The audio graph was running, the nodes were connected, output was at full level, and nothing threw an error. The failure was not that something broke. Audio was being rendered correctly into a destination that was no longer the real one.

It also never reproduced in the simulator, which has no Bluetooth audio route. Every reproduction had to happen on physical hardware with real headphones.

Isolation

I stopped trusting the summary status and started recording what the system actually had rather than what the app had asked for: which specific output device was attached by name, the buffer size the operating system granted instead of the one requested, and the route's real latency. Read together, those three say whether the audio session genuinely believes it is on Bluetooth or is still set up for the built-in speaker.

Root causes
  1. Four audio-session configuration calls shared one error handler. When one was refused, the rest were skipped, including the call that actually activates the session. The app was left holding a configuration that had never been switched on, and no error appeared anywhere near the real cause.
  2. The app requested a 44.1 kHz hardware rate. Bluetooth runs at 48 kHz and refused, and that mismatch alone was enough to make output inaudible.
  3. The app requested a 5 ms audio buffer. That is reasonable for the built-in speaker and impossible over Bluetooth, where real latency runs 150 to 200 ms.
  4. The engine started at app launch, before the output route had settled. On the speaker that happened to work. On Bluetooth it bound to a route that was not yet the real one and played into nothing.
Fix

Each configuration call got its own error handling, so one refusal can no longer cancel the others. The hardware rate request was dropped, since the app can run at its own rate and let the system convert on the way out. Buffer size is now requested according to the route, larger on wireless. And the engine is rebuilt once the screen is actually active, so it binds to the route that ended up being real.

Prevention

The rebuild looks redundant when the app is working, and deleting it is the obvious cleanup. It had already been deleted once, which is what caused the failure. So the reason it exists is written directly above it in plain language, saying what breaks if someone removes it. The diagnostic logging stayed in as well, so the next report of this kind starts with evidence instead of guesswork.

03 /

Writing it down

Release notes, build 25
What actually changedWhat the tester read, verbatim
Sample playback now begins at the first detected transient rather than at the start of the file. "Samples now start at the hit. Anything with silence in front used to land late and leave a hole between two quick hits on the same track."
Track gain no longer varies with pan position. "Panning doesn't change how loud a track is anymore."
Corrected the tuning on the Cinema snare preset. "Fixed the Cinema snare, it was sounding like a kick."
The offline mixdown renderer now applies per-track mute and solo state. "Mixdown export respects MUTE and SOLO now."

Every build ships with notes written this way, plus a test plan saying what to check. A tester should read one line and know whether it affects them. The product site carries the same material as a plain-language FAQ, so the common questions get answered before anyone has to ask them.

04 /

Working with AI tools

05 /

The products

Built and supported solo

NIGHTSHAPES

Live / App Store

A published iPhone game. I handle the store listing, the release process, and anything a player reports. When ads started showing a black screen after launch, the fix was out the same week.

Released
2026.07.28
Version
1.0.2
Min iOS
16.0
Rating
5.0
Open App Store listing

DRUMKIT

In beta / TestFlight

A music production app in beta with testers. This is where the support work lives. A tester reports something, I reproduce it on a real device, fix it, and write the note that explains what changed.

Build
25
Started
2025.09
Min iOS
17.0
Testers
Active
Open drumkit.nightshape.net
06 /

The ten years before this

Customer operations, 2013 to 2025