Natural screen reader voices on Linux

2 min read Original article ↗

Many users of screen readers on Linux have highlighted that the default TTS (text-to-speech) espeak speech synthesizer is very robotic. As Terence Eden notes, there are some screen reader users who prefer this voice:

For some people, this is a feature, not a bug. I have blind friends who are so used to eSpeak that they can crank it up to hundreds of words per minute and navigate through complex documents with ease.

For the rest of us, it is a steep and unpleasant learning curve.1

Eden suggests using Piper, configured using a GUI, Pied. This is an excellent option, particularly for long-form TTS, but I found there to be a bit of a delay when using it with a screen reader.

I prefer the below setup for faster response times.

RHVoice

RHVoice is an open source multilingual speech synthesizer which uses a different model to Piper, meaning there’s less of a delay:

Voices are built from recordings of natural speech. They have small footprints, because only statistical models are stored on users’ computers. And though the voices lack the naturalness of the synthesizers which generate speech by combining segments of the recordings themselves, they are still very intelligible and resemble the speakers who recorded the source material.2

Setup

On Arch-based distributions, this can all be installed from the official ‘extra’ package set. RHVoice is also available through the Snap Store.

First, ensure you have speech-dispatcher and eSpeak installed:

sudo pacman -S speech-dispatcher espeak-ng

Note: While eSpeak isn’t required when using RHVoice, it’s a good idea to have it installed as a fallback.

Now install RHVoice along with a voice of your choice. I personally like the American English ‘SLT’ voice, so:

sudo pacman rhvoice rhvoice-voice-slt

To ensure RHVoice is used by default we’ll need to add a configuration file at ~/.config/speech-dispatcher/speechd.conf with the following contents:

AddModule "rhvoice" "sd_rhvoice" "rhvoice.conf"
DefaultModule rhvoice

We will need to restart the speech dispatcher, if it’s already running, with:

killall speech-dispatcher

Then we can test the voice works by adding a string after the command spd-say:

spd-say "Hello, this is a test"

Now, when using a screen reader like Orca, the chosen voice from RHVoice will be used and the TTS will sound much more natural.

  1. Terence Eden, Better TTS on Linux (2026) ↑

  2. RHVoice, README ↑