Piper TTS Support
Summary
I added Piper as a new TTS provider.
Motivation
A twitch streamer I watch is using Curses as part of their speech-to-text-to-speech setup. Until now they were using an Azure TTS voice, but they're unhappy with a recent update and now want to switch to a TTS setup they have more control over. Piper is open source, runs locally, and most voice files are CC-licensed, so it seems ideal.
They asked their community for help with integrating Piper into Curses and I volunteered.
Changes Made
UI
I added a new TTS service "Piper" complete with settings:
The user must specify the path of piper.exe as well as the directory containing the voice files.
To this end I added an InputFilePath component, essentially a text input with a button that opens a file dialog.
Backend
The new module services::piper_tts exposes two functions:
get_voicesto scan a directory for Piper voice filesspeakto speak some text out loud
When invoking piper.exe I need to provide it with a file path for the generated .wav file.
I added a dependency on the tempfile crate to handle this.
Translations
I added a few items to the tts section of the translation files.
I don't speak Chinese, so I just copied the en strings to zh_cn and zh_tw.
You'll want to replace these with proper translations.
The error messages produced by the rust module are all in English as well.
This is really amazing. I will complete the Chinese translation work in the future