CoolFace
Apppublic

flozi00/Chatterbox-Multilingual-TTS

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
App README

Phone Announcements TTS Engine

A modular text-to-speech engine for generating professional phone announcements with support for 23 languages and voice cloning.

Features

  • โ€”๐ŸŽ™๏ธ Standard Voices (Default): Local voice prompts from .wav files in voices/
  • โ€”๐ŸŒ 23 Languages: German, English, French, Spanish, Italian, and many more
  • โ€”๐ŸŽญ Voice Cloning: Uses Chatterbox Multilingual + reference audio
  • โ€”๐Ÿ”Œ Modular Architecture: Easy to swap TTS backends
  • โ€”๐ŸŽต Background Music: Optional background music mixing
  • โ€”๐Ÿ’พ Caching: Local and HuggingFace Hub caching support

Quick Start

bash
# Install dependencies
pip install -r requirements.txt

# Run the application
python app.py

Architecture

The engine uses a modular backend system that allows easy swapping of TTS providers:

engine/
โ”œโ”€โ”€ __init__.py           # Main exports
โ”œโ”€โ”€ tts_engine.py         # Core TTS Engine
โ”œโ”€โ”€ audio_processor.py    # Post-processing (music, fades)
โ”œโ”€โ”€ cache.py              # Caching system
โ””โ”€โ”€ backends/
    โ”œโ”€โ”€ base.py           # Abstract backend interface
    โ”œโ”€โ”€ chatterbox_backend.py  # Default: Chatterbox Multilingual
    

Usage

Simple Usage

python
from engine import TTSEngine

# Create engine with defaults
engine = TTSEngine()

# Generate a sample announcement (default)
audio = engine.generate("Welcome to our service.")

# Generate with specific language
audio = engine.generate(
    "Welcome to our customer service.",
    language="en"
)

Voice Cloning

python
# Clone a voice from reference audio
audio = engine.generate(
    "Welcome!",
    language="de",
    voice_audio="path/to/reference.wav"
)

Switch Backend

This project currently ships with the Chatterbox backend.

With Background Music

python
# Add background music (place .mp3 files in engine/data/assets/)
audio = engine.generate(
    "Please wait.",
    background_music="hold_music"
)

Creating a Custom Backend

To add a new TTS backend, inherit from TTSBackend:

python
from engine.backends.base import TTSBackend, TTSResult, BackendConfig

class MyCustomBackend(TTSBackend):
    @property
    def name(self) -> str:
        return "My Custom TTS"
    
    @property
    def supports_voice_cloning(self) -> bool:
        return False
    
    @property
    def supported_languages(self) -> dict[str, str]:
        return {"en": "English", "de": "German"}
    
    def load(self) -> None:
        # Load your model
        self._is_loaded = True
    
    def unload(self) -> None:
        # Cleanup
        self._is_loaded = False
    
    def generate(self, text: str, language: str = "de", **kwargs) -> TTSResult:
        # Generate audio
        audio = your_tts_function(text, language)
        return TTSResult(audio=audio, sample_rate=22050)

# Register the backend
from engine import TTSEngine
TTSEngine.register_backend("my_custom", MyCustomBackend)

Configuration

Engine Configuration

python
from engine.tts_engine import TTSEngine, EngineConfig

config = EngineConfig(
    default_backend="chatterbox",
    device="cuda",  # or "cpu", "mps", "auto"
    default_language="de",
    enable_cache=True,
    local_cache_dir="./cache",
)

engine = TTSEngine(config)

Environment Variables

  • โ€”HF_TOKEN: HuggingFace token for model downloads (Chatterbox)
  • โ€”PHONE_SPEAKER_TTS_VOICES_DIR: Override the default voices folder (defaults to ./voices)

Default Voices Folder

Put .wav files into voices/ (or the folder pointed to by PHONE_SPEAKER_TTS_VOICES_DIR). The file name (without extension) becomes the voice name.

Example: voices/flozi.wav โ†’ voice flozi.

If the folder contains no .wav files, the UI will force Voice cloning and require an uploaded reference sample.

Supported Languages

CodeLanguageCodeLanguage
deGermanjaJapanese
enEnglishkoKorean
frFrenchmsMalay
esSpanishnlDutch
itItaliannoNorwegian
ptPortugueseplPolish
ruRussiansvSwedish
zhChineseswSwahili
arArabictrTurkish
daDanishfiFinnish
elGreekheHebrew
hiHindi

License

MIT License