Skip to main content

Automate chunking long texts to produce a single audio file from text-to-speech APIs

Project description

tts-joinery

tts-joinery is a Python library and CLI tool to work around length limitations in text-to-speech APIs.

Since currently-popular APIs are limited to 4096 characters, this library will:

  • Chunk the input text into sentences using the NLTK Punkt module
  • Run each chunk through the TTS API
  • Join together the resulting output to produce a single MP3 file

Currently only the OpenAI API is supported, with the intent to add more in the future.

Installation

pip install tts-joinery

or use pipx to install as a standalone tool.

Requires ffmpeg for the audio file processing.

Installation may vary depending on your system. On Linux you can use your system package manager. On Mac brew install ffmpeg should work.

Usage

Command-Line Interface (CLI)

The CLI expects to find an OpenAI API Key in a OPENAI_API_KEY environment variable, or in a .env file.

Syntax

ttsjoin [OPTIONS]

Options

--input-file FILENAME   Plaintext file to process into speech, otherwise stdin
--output-file FILENAME  MP3 result, otherwise stdout
--model TEXT            Slug of the text-to-speech model to be used
--service TEXT          API service (currently only supports openai)
--voice TEXT            Slug of the voice to be used
--no-cache BOOLEAN      Disable caching
--help                  Show this message and exit.

Examples

  1. Using an input file and specifying an output file:
ttsjoin --input-file input.txt --output-file output.mp3 --model tts-1 --service openai --voice onyx
  1. Using stdin and stdout with default options:
echo "Your text to be processed" | ttsjoin > output.mp3
  1. Each chunk of text is cached for performance when the same text multiple times, this can be disabled:
ttsjoin --input-file input.txt --output-file output.mp3 --no-cache

Python Library

You can also use tts-joinery as part of your Python project:

from joinery.op import JoinOp
from joinery.api.openai import OpenAIApi

tts = JoinOp(
    text='This is only a test!',
    api=OpenAIApi(
        model='tts-1-hd',
        voice='onyx',
        api_key=OPENAI_API_KEY,
    ),
)

tts.process_to_file('output.mp3')

Changelog

v1.0.2 (2024-10-03)

  • Fixed crash when running with caching disabled (#3)

Contributing

Contributions welcome, particularly other TTS APIs, check the issues beforehand and feel free to open a PR. Code is formatted with Black.

Contributors

Special thanks to:

License

This project is licensed under the MIT License.

Copyright 2024, Adrien Delessert

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

tts_joinery-1.0.2.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

tts_joinery-1.0.2-py3-none-any.whl (8.2 kB view details)

Uploaded Python 3

File details

Details for the file tts_joinery-1.0.2.tar.gz.

File metadata

  • Download URL: tts_joinery-1.0.2.tar.gz
  • Upload date:
  • Size: 7.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for tts_joinery-1.0.2.tar.gz
Algorithm Hash digest
SHA256 6cf462e002536cfba96346d10899ef1acc4b898d17b1c3103f34c19651bb964f
MD5 b4eed08c80fad01f9cb1c3c28253b266
BLAKE2b-256 5a20dbdc6bc764d9d3fc8fa4ba71356a6e48a00a34e4d5f015d03b723977ab41

See more details on using hashes here.

File details

Details for the file tts_joinery-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: tts_joinery-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 8.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for tts_joinery-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 30d2120186542d32710037dac3684934ea0f4c9e91f29002375948ce209003a5
MD5 af9ae7e2a53264c197d55da78262955d
BLAKE2b-256 cb56b903ae33fba45ec5fe0bb91cdab44aacbffca3a0b7789d21228b0b1233b0

See more details on using hashes here.

Supported by

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