The voice server
The voice server is optional. It gives your node a natural voice that can say any text. Your node sends the text, and the voice server sends back the speech. It runs on a PC or server on your network, not on the node's Raspberry Pi.
What it does
- Weather alerts. The node speaks each new alert for your area. The built-in voice cannot read an alert, so spoken alerts need the voice server.
- Node names and announcements. Link and status announcements, node names, the time, the current weather and your voice ID use the natural voice.
- English voices. You can select from 28 voices with a US or a UK accent. The default voice is Sarah (US).
- Copies of the speech. The voice server and the node both keep a copy of each sentence. So each sentence is made only one time, and a repeated announcement plays at once.
- Urgent speech first. The node asks for most speech ahead of time: the ID, the timed reports and the names. These requests can wait. They go one at a time, and each has a time limit: the time when the announcement plays. A request that a listener waits for goes at once, before the requests that can wait. A busy voice server can ask the node to send a request that can wait again later. An older voice server also works; it makes the requests in the order that they come.
- Allison as the backup. If the voice server does not answer in 5 seconds, the node uses the built-in Allison voice. A weather alert waits up to 30 seconds. If there is no answer, the node does not speak the alert, and the dashboard log tells you.
Listen
These samples use example data. The voice server made them.
"Node 2, 1, 0, 0, connected to node 2, 2, 0, 0. Weather alert. A severe thunderstorm warning is in effect for Example County until 9 PM."
What you need
- A Linux PC or server with a 64-bit x86 processor (x86-64), 4 or more cores and 4 GB or more memory. It must be on all the time, as the node is.
- Docker Engine on that computer.
- Approximately 1.5 GB of disk space: 420 MB for the Docker image, 350 MB for the model files, and up to 500 MB for the copies of the speech.
- A network path from your node to the computer: the same computer, your home network or Tailscale.
We test the voice server on x86-64 Linux. On our test computer, with 8 cores and no AVX2, the voice server makes 3 seconds of speech in approximately 2 seconds, and a long weather alert in approximately 4 seconds.
Install
The voice server is a separate program, outside the node. Its source and its installer are in the mutara-radio/voiceserver project on GitHub. The installer is a script, install.sh. The voice server does not contain the model. You download the model yourself.
- Install Docker Engine on the computer. See the Docker instructions.
- Get the voice server. Clone the project from GitHub, then go into its folder:
The README of the project has all the installer options.git clone https://github.com/mutara-radio/voiceserver.git cd voiceserver - Download the model files. The voice is Kokoro-82M. Get the two model files,
kokoro-v1.0.onnxandvoices-v1.0.bin, from the kokoro-onnx project (the release "model-files-v1.0"). Put them in one folder, for example~/mutara-voice/models. - Do the checks. In the voice server folder, enter this command. Use your computer's Tailscale or home network address, or
127.0.0.1if the node is on the same computer:
The script checks the computer, Docker, the model files and the address. It changes nothing. If a check fails, the script tells you what to do../install.sh --check --models ~/mutara-voice/models --listen 100.64.0.5:7374 - Install. Enter the same command without
--check. The script builds the Docker image and starts the voice server. The voice server starts again after a reboot. At the end, the script makes a test sentence, and shows the time that it took and the address for your node. - Set up the node. In the Mutara dashboard, open Settings → Announcements. In Voice server, enter the address, for example
http://100.64.0.5:7374. Select a voice, and click Save.
To install a new version of the voice server, enter git pull in the voice server folder. Then enter the install command again with --replace. The copies of the speech stay.
What the checks do
- The computer runs Linux. It is not a Raspberry Pi or another small ARM board. It has an x86-64 processor (we have not tested ARM, so the installer stops on it), 4 or more cores and 4 GB or more memory. There is no option to skip this check.
- Docker is installed and answers.
- Both model files are in the folder, and their SHA-256 checksums are correct for version 1.0.
- The address is localhost or a private address, and no other program uses the port.
Security
- Use
127.0.0.1when the node and the voice server are on the same computer. Otherwise, use the computer's Tailscale address or home network address. - The installer refuses a public address and
0.0.0.0(all addresses). - Do not forward a router port to the voice server.
- The voice server uses the computer's own network, so your firewall rules apply to its port. With ufw and Tailscale, this command lets only Tailscale reach it:
sudo ufw allow in on tailscale0 to any port 7374 proto tcp
See it in the dashboard
Open Settings → Health. The Voice server section refreshes every 10 seconds. It shows:
- This node: the requests to the voice server, the round trip time (last, average and 95%), the requests that were too slow or failed, the node's copies of the speech, how often Allison spoke in place of the voice server, the alerts that the node did not speak, and the last error with its time.
- Made ahead: the speech that the node asks for ahead of time. It shows the requests in the queue, the requests made, the waits for a busy server, the tries again after an error, and the requests dropped. The node drops a request when its announcement has played, or when the queue is full (256 requests).
- Listener wait: the round trip of the last request that a listener waited for.
- The server: the version, the model, the time since it started, the requests, the time to make speech (last, average, median and 95%), the server's copies of the speech, and the requests that wait now.
Click Test voice to make a test sentence. It plays in your browser, not on the air, and the dashboard shows the round trip time.