Piper-tts 1.4.0: "TTS synthesis/playback failed: # channels not specified"

piper-tts 1.4.0: “TTS synthesis/playback failed: # channels not specified”

The Error

After upgrading piper-tts to version 1.4.0, you may see this error when using text-to-speech:

ERROR | TTS synthesis/playback failed: # channels not specified

NOTE: This can also be installed automatically if the specific version is not defined in pyproject.toml (Currently it is not).

Check your version by running this command after sourcing setup_env.sh

pip list | grep piper-tts

Why This Happens

This error comes from Python’s wave module when trying to write audio data to a WAV file without first setting the number of audio channels.

In piper-tts 1.4.0, the synthesize() method added a new check that skips empty phoneme lists:

for phonemes in sentence_phonemes:
    if not phonemes:
        continue  # <-- Added in v1.4.0

When certain text inputs result in empty phonemes, no audio chunks are generated. This causes synthesize_wav() to never set the WAV file format (channels, sample rate, sample width), and Python’s wave module raises:

wave.Error: # channels not specified

Additional Issues with 1.4.0

piper-tts 1.4.0 is not backwards compatible. It changed from a self-contained platform-specific wheel to a pure Python package that requires additional system dependencies:

  • v1.3.0: Includes bundled espeakbridge.so native library and espeak-ng-data/ (~13.8 MB wheel)
  • v1.4.0: Pure Python - requires you to install espeak-ng system-wide

If you try to use 1.4.0 without the system dependencies, you’ll also see:

ImportError: cannot import name 'espeakbridge' from 'piper'

The Fix: Downgrade to 1.3.0

The fastest and most reliable solution is to downgrade to piper-tts 1.3.0, which works out of the box without additional system dependencies.

Step 1: Update your dependencies file

# pyproject.toml
"piper-tts==1.3.0",

or

# requirements.txt
piper-tts==1.3.0

Step 2: Downgrade the package

pip install piper-tts==1.3.0

Summary

Version Status Notes
1.3.0 :white_check_mark: Recommended Self-contained, works out of the box
1.4.0 :warning: Breaking changes Requires system espeak-ng, has phoneme handling bugs