TomeVoice
A document reader with a serious text-to-speech engine — Android and Windows — that controls the gap between words.
Word-gap injection on derived timings. Replayed from the documented audio pipeline.
Every format becomes one document model. Every engine returns PCM plus word timings. Neither side knows what a PDF is.
SynthesisResult
pcm mono samples
wordTimings char range → frame range
source engineReported
| modelDurations
| aligned
| estimated
pipeline, in order
1 edge trim
2 time stretch
3 word-gap injection
4 punctuation pauses
5 sentence pause
6 gain
highlighting reads the
post-processed timings.
Stage order is load-bearing. Stretch after the gaps and the gaps stretch too. Estimated timings are labelled, and the UI falls back to the sentence rather than highlighting the wrong word.
The hard part
Neural voices return no word timings — only samples. Highlighting and gap injection both depend on them, so they are derived in stages and honestly labelled. System voices hand timings over for free.
The best-sounding open model is too heavy for cheap phones. Kokoro is device-gated and never the default. PDF is not a text format: reconstructing reading order from glyph positions is the largest cost in the document pipeline, and it is never perfect, so the product lets users correct it.
Licence as architecture
GPL-3.0 was not a formality. eSpeak-NG, Piper’s engine and the best pitch/time library are all GPL. Matching their licence turned three blockers into ordinary dependencies.
Status, honestly
You can use it. The audio-engine spike is proven on a real device. The app opens EPUB, TXT and Markdown from the library and reads them aloud sentence by sentence, with the same word-gap, pause and speed controls.
APKs still come from CI — there is no local Flutter install. DRM-protected books are permanently out of scope.
Android APK with the screen off; a Windows exe with media keys. Nothing leaves the device.
TomeVoice
Valorant esports intelligence — live match, team and player data from VLR.gg, paired with CYPHER, an analyst grounded in it.
continue