Skip to content
JP Hein edited this page May 10, 2026 · 6 revisions

Voices

storyvox ships two local voice families wrapped in VoxSherpa-TTS (an in-process neural-TTS engine that re-projects k2-fsa/sherpa-onnx plus the Piper and Kokoro wrappers into a single Android AAR — no second APK, no TextToSpeech framework, no engine-binding handshake), plus one optional cloud backend:

Voice families

Piper (local, in-process)

  • 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

Kokoro (local, in-process)

  • 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

Azure HD (cloud, BYOK)

  • 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. storyvox 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

Voice 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.

Voice library UI

Settings → Voice & Playback → "Voice library." Engine-grouped picker:

  • Piper section — alphabetical by voice name
  • Kokoro section — by speaker
  • 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.

Per-voice tuning

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.

Punctuation cadence: a slider in Settings → Performance & Buffering 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, two 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.

Tier 3 multi-engine (Settings → Performance)

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.

Adding a voice

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 storyvox (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.

Clone this wiki locally