Skip to main content

Python text-to-speech library with built-in voice effects and support for multiple TTS engines.

Project description

voicebox

python-package PyPI - Python Version PyPI - Version Documentation Status

Python text-to-speech library with built-in voice effects and support for multiple TTS engines.

| GitHub | Documentation 📘 | Audio Samples 🔉 |

# Example: Use gTTS with a vocoder effect to speak in a robotic voice

from voicebox import SimpleVoicebox
from voicebox.tts import gTTS
from voicebox.effects import Vocoder, Normalize

voicebox = SimpleVoicebox(
    tts=gTTS(),
    effects=[Vocoder.build(), Normalize()],
)

voicebox.say('Hello, world! How are you today?')

Setup

  1. pip install voicebox-tts
  2. Install the PortAudio library for audio playback.
    • On Debian/Ubuntu: sudo apt install libportaudio2
  3. Install dependencies for whichever TTS engine(s) you want to use (see section below).

Supported Text-to-Speech Engines

Classes for supported TTS engines are located in the voicebox.tts package.

Amazon Polly 🌐

Online TTS engine from AWS.

ElevenLabs 🌐

Online TTS engine with realistic voices and support for voice cloning.

Minimal example:

from voicebox.tts import ElevenLabsTTS

vb = SimpleVoicebox(tts=ElevenLabsTTS(
    voice_id="JBFqnCBsd6RMkjVDRZzb",
    api_key="...",
))

eSpeak NG 🌐

Offline TTS engine with a good number of options.

Google Cloud Text-to-Speech 🌐

Powerful online TTS engine offered by Google Cloud.

gTTS 🌐

Online TTS engine used by Google Translate.

  • Class: voicebox.tts.gTTS
  • Setup:
    1. pip install "voicebox-tts[gtts]"
    2. Install ffmpeg for audio decoding.

🤗 Parler TTS 🌐

Offline TTS engine released by Hugging Face that uses a promptable deep learning model to generate speech.

Pico TTS

Very basic offline TTS engine.

pyttsx3 🌐

Offline TTS engine wrapper with support for the built-in TTS engines on Windows (SAPI5) and macOS (NSSpeechSynthesizer), as well as espeak on Linux. By default, it will use the most appropriate engine for your platform.

  • Class: voicebox.tts.Pyttsx3TTS
  • Setup:
    1. pip install "voicebox-tts[pyttsx3]"
    2. On Debian/Ubuntu: sudo apt install espeak

Voice.AI 🌐

Online TTS engine with realistic voices and support for voice cloning.

Minimal example:

from voicebox.tts import VoiceAiTTS

vb = SimpleVoicebox(tts=VoiceAiTTS(api_key="..."))

Effects

Built-in effect classes are located in the voicebox.effects package, and can be imported like:

from voicebox.effects import CoolEffect

Here is a non-exhaustive list of fun effects:

  • Glitch creates a glitchy sound by randomly repeating small chunks of audio.
  • RingMod can be used to create choppy, Doctor Who Dalek-like effects.
  • Vocoder is useful for making monotone, robotic voices.

There is also support for all the awesome audio plugins in Spotify's pedalboard library using the special PedalboardEffect wrapper, e.g.:

from voicebox import SimpleVoicebox
from voicebox.effects import PedalboardEffect
import pedalboard

voicebox = SimpleVoicebox(
    effects=[
        PedalboardEffect(pedalboard.Reverb()),
        ...,
    ]
)

Examples

Minimal

# PicoTTS is used to say "Hello, world!"
from voicebox import SimpleVoicebox

voicebox = SimpleVoicebox()
voicebox.say('Hello, world!')

Pre-built

Some pre-built voiceboxes are available in the voicebox.examples package. They can be imported into your own code, and you can run them to demo:

# Voice of GLaDOS from the Portal video game series
python -m voicebox.examples.glados "optional message"

# Voice of the OOM-9 command battle droid from Star Wars: Episode I
python -m voicebox.examples.battle_droid "optional message"

Advanced

# Use eSpeak NG at 120 WPM and en-us voice as the TTS engine
from voicebox import reliable_tts
from voicebox.tts import ESpeakConfig, ESpeakNG, gTTS

# Wrap multiple TTSs in retries and caches
tts = reliable_tts(
    ttss=[
        # Prefer using online TTS first
        gTTS(),
        # Fall back to offline TTS if online TTS fails
        ESpeakNG(ESpeakConfig(speed=120, voice='en-us')),
    ],
)

# Add some voice effects
from voicebox.effects import Vocoder, Glitch, Normalize

effects = [
    Vocoder.build(),    # Make a robotic, monotone voice
    Glitch(),           # Randomly repeat small sections of audio
    Normalize(),        # Remove DC and make volume consistent
]

# Build audio sink
from voicebox.sinks import Distributor, SoundDevice, WaveFile

sink = Distributor([
    SoundDevice(),          # Send audio to playback device
    WaveFile('speech.wav'), # Save audio to speech.wav file
])

# Build the voicebox
from voicebox import ParallelVoicebox
from voicebox.voiceboxes.splitter import SimpleSentenceSplitter

# Parallel voicebox doesn't block the main thread
voicebox = ParallelVoicebox(
    tts,
    effects,
    sink,
    # Split text into sentences to reduce time to first speech
    text_splitter=SimpleSentenceSplitter(),
)

# Speak!
voicebox.say('Hello, world!')

# Wait for all audio to finish playing before exiting
voicebox.wait_until_done()

Command Line Demo

python -m voicebox -h               # Print command help
python -m voicebox "Hello, world!"  # Basic usage

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

voicebox_tts-1.0.0.tar.gz (37.4 kB view details)

Uploaded Source

Built Distribution

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

voicebox_tts-1.0.0-py3-none-any.whl (49.1 kB view details)

Uploaded Python 3

File details

Details for the file voicebox_tts-1.0.0.tar.gz.

File metadata

  • Download URL: voicebox_tts-1.0.0.tar.gz
  • Upload date:
  • Size: 37.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for voicebox_tts-1.0.0.tar.gz
Algorithm Hash digest
SHA256 096e8cef83008c15685fb10d565e3f1b789f2f31db166630e9a2abcc6530603d
MD5 08bb43bbd5b7c4544a79bfaa50c98ddd
BLAKE2b-256 85713d105b81a7b8745a046fb3f04449a453eb5474480af47e72932d2eb5a04f

See more details on using hashes here.

File details

Details for the file voicebox_tts-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: voicebox_tts-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 49.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for voicebox_tts-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d85f536a07d0679b56a68287bb329fc53288cae8427337d8c542a69e195b7775
MD5 ab0a64dbcc14b4bb4275dd6420a842ca
BLAKE2b-256 91ff676e4694845233752bfa85c5eb755e1f4285946a72e8075c27021a1c3e55

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