-
Notifications
You must be signed in to change notification settings - Fork 2
Voices
Candela ships four local voice families wrapped in VoxSherpa-TTS (an in-process neural-TTS engine that re-projects k2-fsa/sherpa-onnx plus the Piper, Kokoro, KittenTTS, and Supertonic wrappers into a single Android AAR — no second APK, no TextToSpeech framework, no engine-binding handshake), plus one optional cloud backend:
- Size: ~14–30 MB per voice
- Speakers: one per model
- Strength: fast, low memory, good on slow devices (Tab A7 Lite class)
- Best: all the en_US Piper voices for English serial fiction
- Count: 45 voices in catalog
- Size: ~330 MB total (multi-speaker model)
- Speakers: dozens of speakers in a single model
- Strength: more expressive intonation, better long-form pacing
- Best: when you have a tablet or modern phone and want premium quality
- Count: 53 speakers in catalog
KittenTTS (local, in-process — shipped v0.5.36, #119)
- Size: ~24 MB (shared model across 8 en_US speakers)
- Speakers: 8 en_US speakers from one shared model
- Strength: lightest tier — designed for slow devices where Piper-high struggles. The "first chapter in 10 seconds" voice family.
- Best: entry-level Android phones, very-slow-CPU situations, "first install just wants to hear the thing read aloud"
- Count: 8 speakers in catalog
- Size: ~139 MB of model files, downloaded on first use (#1236)
- Speakers: 10 en_US speakers (5 female, 5 male) from a shared model
-
Strength: the newest neural family — a step up in naturalness. The engine was wired in v1.2.0 (#1191); the voices went live once the
SupertonicEnginesynthesizer was enabled and its models were hosted in v1.2.3–v1.2.4 (#1237 / #1236). - Best: modern phones and tablets that want the latest-quality English narration
- Size: zero — synthesis is remote
- Speakers: Dragon HD generative tier (4 voices) + HD Neural across en-US/en-GB/en-AU/en-IN/en-CA (16 voices)
- Strength: studio-grade quality on any device, no local synthesis cost
- Cost: ~$30 / 1M characters, billed by Microsoft to your Azure subscription. Candela shows a per-chapter cost estimate before playing.
- Setup: Settings → Voice & Playback → Azure → key + region. Hit Test connection.
- Fallback: if your key fails or the network drops mid-chapter, playback falls back to your selected local voice for the rest of the chapter — never just stops on you.
- Count: 20 voices in catalog
The flat reference of every voice lives at the Voice catalog wiki page. The narrative version is on the Voices page of the website. Local-engine voices download on demand from the voices-v2 release — no bundled weights in the APK.
Settings → Voice library (top-level entry post-v0.5.42, no longer nested inside Voice & Playback). Engine-grouped picker:
- Piper section — alphabetical by voice name
- Kokoro section — by speaker
- KittenTTS section — 8 en_US speakers from one shared model
- Azure HD section — only visible after key + region setup
- ★ Starred — your favorites at the top, regardless of engine
Tap a voice to install (download + extract for local; just select for Azure). Star toggle to favorite. Tap to preview before committing.
Speed: 0.5×–4× (#194 widened from 2× cap). Pitch: ±20%. Both have per-voice defaults (#195, shipped) — tweak speed/pitch on a voice and the values stick when you switch back to it.
Per-voice lexicon override (#197, shipped) — long-press the brass voice-settings icon on the play screen → Advanced expander. IPA pronunciation dictionaries per voice for the names that always come out wrong. Entries persist across reinstalls when InstantDB sync is on.
Kokoro phonemizer-lang override (shipped) — pin Kokoro to a specific language tag when the auto-detected one mispronounces proper nouns. Per-voice setting in the same Advanced expander.
Punctuation cadence: a slider in Settings → Performance controls how much extra silence to insert at sentence-terminal punctuation (. , ? ! ; :). Neural TTS engines rarely breathe at sentence boundaries; this slider compensates (#90 / #109). On Kokoro, the same slider also drives the model's silence_scale parameter for within-sentence pauses (#196) — one slider, three engines, consistent feel.
Buffer slider: how many sentences of PCM to render-ahead. Default 64; experimental zone unlocks up to 3000 chunks (#138). Higher = smoother on slow voices but eats RAM.
The full PCM-cache series shipped across the v0.5.47–v0.5.49 line: streaming-tee writes the synthesized PCM to disk while it plays; cache-hit playback replays from disk on subsequent listens without re-synthesizing; background pre-render warms the next chapter ahead of time; Settings UI in Settings → Performance lets you size the cache and choose eviction priority; status icons show per-chapter cache state in the chapter list. The result: slow voices are gapless on replay and warm-ahead reads end up free.
For slow hardware that struggles with single-engine Piper-high or Kokoro:
- Engines — 1–8 VoxSherpa instances running in parallel.
- Threads / engine — thread-pool size per instance.
Each engine adds ~50 MB memory pressure (Kokoro). Bump engines first; bump threads second. The producer thread is pinned to URGENT_AUDIO priority so it doesn't get descheduled by background work mid-chapter.
The voice catalog is published as a GitHub release on voices-v2. Adding a voice means dropping new model files in that release, tagging a release, and bumping the catalog cursor in Candela (core-playback/.../VoiceCatalog.kt). The script at scripts/voices/refresh-voices-v2.sh handles the diff-and-upload; the VoiceCatalog.kt edit is a deliberate human review.
A monthly drift-detection workflow (.github/workflows/voice-catalog-check.yml) opens an issue when upstream k2-fsa adds voices we haven't picked up.
For the operational details, see the website's Voices page.
Start here
Using Candela
- Fiction sources
- Reading & library
- Export & extras
- Voices
- Voice catalog
- AI chat
- Cloud sync
- Accessibility
- Settings reference
- Troubleshooting
Developer
Project