CaptionCompass — see the words, sense where they come from
Een caption-first accessibility-app voor doven en slechthorende Android-gebruikers. Live captions zijn altijd zichtbaar. Een grove richting-hint van de spreker verschijnt alleen als hij betrouwbaar is.

Whiteboard-schets · de audio-pipeline
De productfilosofie in vijf zinnen
De richting-hint is opt-in en gated. Hij verschijnt alleen als:
- De gebruiker hem aan heeft gezet in settings, én
- Het device twee bruikbare microfoons exposeert via de UNPROCESSED audio-source, én
- De telefoon plat en stabiel ligt (gyroscoop-check), én
- Confidence hoog of medium is.
Als één van die voorwaarden wegvalt blijven de captions onveranderd werken en faded de richting-arc weg. "Show less, not more" — niet een feature uitzetten, maar de feature respectvol terugtrekken als hij niet hard genoeg te onderbouwen is.
Wat er in de MVP zit
| Laag | Status |
|---|---|
| Project / Gradle / Manifest | ready |
| Domain-model + fallback-policy | ready, unit-tested |
| Capability-probe (zoekt naar UNPROCESSED + stereo) | ready |
AudioRecord stereo capture | ready |
| Energy VAD (voice activity detection) | ready |
| GCC-PHAT DoA + zone-smoother | ready, unit-tested op τ→zone-mapping |
Android SpeechRecognizer adapter | ready |
| Mock audio + mock ASR (voor emulator-werk) | ready |
| Foreground service (Android 14 mic-type) | ready |
| Compose UI (status-balk, direction-arc, captions, controls) | ready |
| Phase 2 | Vosk fallback ASR, Silero-VAD ONNX |
| Phase 4 | Stereo BLE input (externe stereo-mics) |
Stack
AudioRecord met UNPROCESSED source en stereo channel-maskSpeechRecognizer (online), Vosk (Phase 2, offline fallback)microphone foreground-typeWaarom GCC-PHAT en geen ML-model voor richting
DoA met twee microfoons is een opgelost wiskundig probleem als je het correct framet. GCC-PHAT geeft een time-difference-of-arrival waaruit één azimut volgt. Op een telefoon met ~14cm tussen de mics levert dat geen graden-precisie, maar wel een betrouwbare links / midden / rechts / achter-links / achter-rechts indicatie (vijf zones). Dat is genoeg voor de use-case zonder ML-modellen die latency en batterij kosten.
Voor confidence-evaluatie wordt de cross-correlation-peak-sharpness gebruikt — een hoge piek betekent één duidelijke bron; een platte piek betekent meerdere sprekers of ruis, en dan wordt de arc faded in plaats van een misleidende richting tonen.
Status + roadmap
Nu: MVP scaffold ready. Domain-laag unit-tested, Compose-UI
draait, stereo capture werkt, captions werken via
SpeechRecognizer. Mock-modus voor emulator-ontwikkeling.
Phase 2: Vosk offline ASR + Silero-VAD ONNX (betere VAD, device-onafhankelijk).
Phase 4: Stereo BLE input — externe stereo-mics aansluiten via Bluetooth voor betere DoA-precisie dan de built-in telefoon-mics.