Skip to main content
RunAnywhere runs neural Piper VITS voices on-device through the Sherpa-ONNX backend. The platform’s own TTS engine is available separately as a fallback.

Voice id versus model id

A Piper voice is a registered model, and its model id is what you pass to RunAnywhere.tts.loadVoice(...). Multi-voice engines additionally expose voice ids inside one model; those go in TTSOptions.voice or in initializeVoiceAgentWithLoadedModels(ttsVoiceID: ...). The two are not interchangeable.

Piper voices

The example app catalogues vits-piper-en_US-lessac-medium (US English) and vits-piper-en_GB-alba-medium (British English), both at roughly 65 MB of memory. Any Piper VITS tarball from the same release works; register it the same way and it becomes selectable.

Registering Voices

Listing what is registered

availableVoices() queries the model registry for MODEL_CATEGORY_SPEECH_SYNTHESIS and returns the model ids.

Switching Voices

Voice Selection UI

System voice

The SDK registers a synthetic entry for the platform’s built-in TTS engine so it competes in model selection alongside downloadable voices. It needs no download. Load it the same way as any other voice, using the constant rather than the literal string:

Choosing between Piper and the system voice

Piper voices are consistent across devices and give you control over rate, pitch, and volume, at the cost of a per-voice download. The system voice ships with the OS, so it costs nothing to install and starts faster, but its quality and available languages vary by device and OS version. Both run offline.

See Also

synthesize()

Basic synthesis

Voice Agent

Complete voice pipeline