Skip to main content

CLI tool to manage piper voices.

Project description

piper-whistle

Tool to manage voices used with the piper speech synthesizer. You may also browse the docs online at https://think-biq.gitlab.io/piper-whistle/ There is also a quick guide on how to setup and use piper and (piper-)whistle.

usage

usage: piper_whistle [-h] [-d] [-v] [-V] [-P DATA_ROOT] [-R]
                     {refresh,guess,path,speak,list,preview,install,remove}
                     ...

positional arguments:
  {refresh,guess,path,speak,list,preview,install,remove}

optional arguments:
  -h, --help            Show help message.
  -d, --debug           Activate very verbose logging.
  -v, --verbose         Activate verbose logging.
  -V, --version         Show version number.
  -P DATA_ROOT, --data-root DATA_ROOT
                        Root path where whistle should store config and data in.
  -R, --refresh         Refreshes (or sets up) language index by downloading the latest lookup.

commands

guess

usage: piper_whistle guess [-h] [-v] language_name

positional arguments:
  language_name  A string representing a language name (or code).

optional arguments:
  -h, --help     Show help message.
  -v, --verbose  Activate verbose logging.

Tries to guess the language you are looking for (and is supported by piper) from the name you provide.

path

usage: piper_whistle path [-h] [-v] voice_selector

positional arguments:
  voice_selector  Selector of voice to search.

optional arguments:
  -h, --help      show this help message and exit
  -v, --verbose   Activate verbose logging.

Shows the local path to a specific model. The voice_selector has the format:

${CODE}:${NAME}@${QUALITY}/${SPEAKER}

The ${SPEAKER} part is optional; as is the ${CODE} part. So if you want to select the voice named 'alba' in quality 'medium', you could simply query: alba@medium

The language code is infered. Alternatively, you can just query with the model name listed by the list command.

${CODE}-${NAME}-${QUALITY}

So for the example above, that would be en_GB-alba-medium

speak

usage: piper_whistle speak [-h] [-c CHANNEL] [-j] [-r] [-o OUTPUT] [-v]
                           something

positional arguments:
  something             Something to speak.

optional arguments:
  -h, --help            Show help message.
  -c CHANNEL, --channel CHANNEL
                        Path to channel (named pipe (aka. fifo)) to which piper is listening.
  -j, --json            Encode the text as json payload. Is on by default.
  -r, --raw             Encode the text directly.
  -o OUTPUT, --output OUTPUT
                        Instead of streaming to audio channel, specifies a path to wav file where speech will be store in.
  -v, --verbose         Activate verbose logging.

Currently only works on linux / bsd systems, with a FIFO (aka. named pipes) setup. The basic idea is, having one pipe accepting json input (provided by this command), which is listened to by piper. After piper has processed the audio, it is either saved to file or passed on to another FIFO, which can then be read by a streaming audio player like aplay.

Example: Assuming piper is installed at /opt/wind/piper, the named pipes are located at /opt/wind/channels and whistle is available in $PATH, the aformentioned setup could look like the following:

pipes:

  • /opt/wind/channeld/speak - accepts json payload
  • /opt/wind/channeld/input - read by piper
  • /opt/wind/channeld/ouput - written by piper

processes:

  • tty0: tail -F /opt/wind/channels/speak | tee /opt/wind/channels/input
  • tty1: /opt/wind/piper/piper -m $(piper_whistle path alba@medium) --debug --json-input --output_raw < /opt/wind/channels/input > /opt/wind/channels/output
  • tty2: aplay --buffer-size=777 -r 22050 -f S16_LE -t raw < channels/output

The tail command makes sure, that the payload on speak is send to input, thereby keeping the file open after processing. Otherwise, the setup would exit after piper has finished the first payload. This way you can continually prompt.

list

usage: piper_whistle guess [-h] [-v] language_name

positional arguments:
  language_name  A string representing a language name (or code).

optional arguments:
  -h, --help     Show help message.
  -v, --verbose  Activate verbose logging.

This command lets you investigate available voices for specific languages, or simply list all available voices. Using the --installed switch, you can filter voices that are currently installed in the local cache directory. The cache is located in the user app path, as provided by userpaths pip package. On linux this would be ${HOME}/.config/piper-whistle. You may also get the model path on the remote host using -U.

preview

usage: piper_whistle guess [-h] [-v] language_name

positional arguments:
  language_name  A string representing a language name (or code).

optional arguments:
  -h, --help     Show help message.
  -v, --verbose  Activate verbose logging.

With preview, you can download and play samples audio files, for any voice supported by piper. It currently uses mplayer to play the audio file.

install

usage: piper_whistle guess [-h] [-v] language_name

positional arguments:
  language_name  A string representing a language name (or code).

optional arguments:
  -h, --help     Show help message.
  -v, --verbose  Activate verbose logging.

With install you can fetch available voice models and store them locally for use with piper. You may first want to search for a voice you like with list and then note the language code and index, so install knows where to look. The model file (onnx) as well as its accompanying config (json) file, will be stored in the local user data path as provide by userpaths. On linux this would be ${HOME}/.config/piper-whistle.

remove

usage: piper_whistle guess [-h] [-v] language_name

positional arguments:
  language_name  A string representing a language name (or code).

optional arguments:
  -h, --help     Show help message.
  -v, --verbose  Activate verbose logging.

Any installed voice model can be deleted, via remove. You may pass the model name or shorthand selector.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

piper_whistle-1.6.133.tar.gz (19.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

piper_whistle-1.6.133-py3-none-any.whl (22.5 kB view details)

Uploaded Python 3

File details

Details for the file piper_whistle-1.6.133.tar.gz.

File metadata

  • Download URL: piper_whistle-1.6.133.tar.gz
  • Upload date:
  • Size: 19.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.10

File hashes

Hashes for piper_whistle-1.6.133.tar.gz
Algorithm Hash digest
SHA256 45bc2809b3c05f29de1f8b1ac1b1d73ffc806986cf547f3daabfc631a51787b7
MD5 372e507ee9f83283d9d59fc66056f58c
BLAKE2b-256 e47c5f20f01daab28be68dbe11ee7125421d010402345055a9a780df861f818c

See more details on using hashes here.

File details

Details for the file piper_whistle-1.6.133-py3-none-any.whl.

File metadata

File hashes

Hashes for piper_whistle-1.6.133-py3-none-any.whl
Algorithm Hash digest
SHA256 c91d22d5066b86a6a4915270d0beda1bb63a7da3c40d39aea7403e0384ca0f3e
MD5 f4cd71be6c5158efbc341da3ea5e411c
BLAKE2b-256 f5446fe3b29b3dc9a229c9e440152de04d7cca49f5fe1a4640ca42bc5d8dc170

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page