# Клонирование голоса Chatterbox

Chatterbox — это семейство современных open-source моделей синтеза речи от [Resemble AI](https://resemble.ai). Она выполняет нулевое клонирование голоса по короткому эталонному фрагменту (\~10 секунд), поддерживает паралингвистические теги, такие как `[laugh]` и `[cough]`, и предлагает мультилингвальный вариант, охватывающий более 23 языков. Доступны три варианта модели: Turbo (350M, низкая задержка), Original (500M, креативные настройки) и Multilingual (500M, 23+ языков).

**GitHub:** [resemble-ai/chatterbox](https://github.com/resemble-ai/chatterbox) **PyPI:** [chatterbox-tts](https://pypi.org/project/chatterbox-tts/) **Лицензия:** MIT

## Ключевые особенности

* **Клонирование голоса в нулевой настройке** — клонирует любой голос по \~10 секундам эталонного аудио
* **Паралингвистические теги** (Turbo) — `[laugh]`, `[cough]`, `[chuckle]`, `[sigh]` для реалистичной речи
* **23+ языков** (Multilingual) — арабский, китайский, французский, немецкий, японский, корейский, русский, испанский и другие
* **Настройка CFG и преувеличения** (Original) — креативный контроль выразительности
* **Три размера моделей** — Turbo (350M), Original (500M), Multilingual (500M)
* **Лицензия MIT** — полностью открыто для коммерческого использования

## Требования

| Компонент | Минимум        | Рекомендуется       |
| --------- | -------------- | ------------------- |
| GPU       | RTX 3060 12 ГБ | RTX 3090 / RTX 4090 |
| VRAM      | 6 GB           | 10 ГБ+              |
| ОЗУ       | 8 ГБ           | 16 ГБ               |
| Диск      | 5 ГБ           | 15 ГБ               |
| Python    | 3.10+          | 3.11                |
| CUDA      | 11.8+          | 12.1+               |

**Рекомендация Clore.ai:** RTX 3090 (~~$0.30–1.00/день) для комфортного запаса VRAM. RTX 3060 подходит для модели Turbo. Для Multilingual с длинными текстами рассмотрите RTX 4090 (~~$0.50–2.00/день).

## Установка

```bash
# Установить из PyPI
pip install chatterbox-tts

# Или установить из исходников
git clone https://github.com/resemble-ai/chatterbox.git
cd chatterbox
pip install -e .

# Проверка
python -c "from chatterbox.tts import ChatterboxTTS; print('Chatterbox ready')"
```

## Быстрый старт

### Модель Turbo (наименьшая задержка)

```python
import torchaudio as ta
from chatterbox.tts_turbo import ChatterboxTurboTTS

model = ChatterboxTurboTTS.from_pretrained(device="cuda")

# Базовый TTS с паралингвистическими тегами
text = "Hey, welcome back! [chuckle] I've got some great news for you today."

# Клонирование голоса — предоставьте эталонный клип длительностью 10+ секунд
wav = model.generate(text, audio_prompt_path="reference_voice.wav")

ta.save("output_turbo.wav", wav, model.sr)
print(f"Saved at {model.sr} Hz")
```

### Модель Original (английский, креативный контроль)

```python
import torchaudio as ta
from chatterbox.tts import ChatterboxTTS

model = ChatterboxTTS.from_pretrained(device="cuda")

text = "The quick brown fox jumps over the lazy dog. It was a beautiful morning."

# Генерация без клонирования голоса (используется голос по умолчанию)
wav = model.generate(text)
ta.save("output_default.wav", wav, model.sr)

# Генерация с клонированием голоса
wav = model.generate(text, audio_prompt_path="my_voice_sample.wav")
ta.save("output_cloned.wav", wav, model.sr)
```

## Примеры использования

### Мультилингвальное клонирование голоса

```python
import torchaudio as ta
from chatterbox.mtl_tts import ChatterboxMultilingualTTS

model = ChatterboxMultilingualTTS.from_pretrained(device="cuda")

# Французский
french_text = "Bonjour, comment allez-vous? Bienvenue dans notre démonstration."
wav_fr = model.generate(french_text, language_id="fr")
ta.save("output_french.wav", wav_fr, model.sr)

# Japanese
japanese_text = "こんにちは、テキスト読み上げのデモンストレーションです。"
wav_ja = model.generate(japanese_text, language_id="ja")
ta.save("output_japanese.wav", wav_ja, model.sr)

# Русский с клонированием голоса
russian_text = "Привет! Это демонстрация синтеза речи на русском языке."
wav_ru = model.generate(
    russian_text,
    language_id="ru",
    audio_prompt_path="russian_speaker.wav"
)
ta.save("output_russian.wav", wav_ru, model.sr)

print("Multilingual generation complete")
```

### Паралингвистические теги (Turbo)

```python
import torchaudio as ta
from chatterbox.tts_turbo import ChatterboxTurboTTS

model = ChatterboxTurboTTS.from_pretrained(device="cuda")

samples = [
    ("greeting", "Hi there! [laugh] It's so good to see you again."),
    ("nervous", "Um, well [cough] I'm not really sure about that."),
    ("excited", "Oh my gosh! [chuckle] That's absolutely incredible news!"),
]

for name, text in samples:
    wav = model.generate(text, audio_prompt_path="speaker_ref.wav")
    ta.save(f"para_{name}.wav", wav, model.sr)
    print(f"Создано: {name}")
```

### Скрипт пакетной обработки

```python
import torchaudio as ta
from chatterbox.tts import ChatterboxTTS
import os

model = ChatterboxTTS.from_pretrained(device="cuda")

# Обработать список строк (например, для глав аудиокниги)
lines = [
    "Глава первая. Приключение начинается.",
    "Была тёмная и бурная ночь.",
    "Герой стоял на распутье, не зная, какой путь выбрать.",
]

os.makedirs("output_batch", exist_ok=True)

for i, line in enumerate(lines):
    wav = model.generate(line, audio_prompt_path="narrator_voice.wav")
    ta.save(f"output_batch/line_{i:03d}.wav", wav, model.sr)
    print(f"[{i+1}/{len(lines)}] {line[:40]}...")

print("Batch processing complete")
```

## Советы для пользователей Clore.ai

* **Выбор модели** — используйте Turbo для агентов с низкой задержкой, Original для креативной работы на английском, Multilingual для контента на других языках
* **Качество эталонного аудио** — используйте чистый, безшумный клип длительностью 10–30 секунд для лучшего результата клонирования голоса
* **Настройка Docker** — базовое изображение `pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime`, открыть порт `7860/http` для Gradio
* **Управление памятью** — вызовите `torch.cuda.empty_cache()` между крупными пакетами для освобождения VRAM
* **Поддерживаемые языки** — ar, da, de, el, en, es, fi, fr, he, hi, it, ja, ko, ms, nl, no, pl, pt, ru, sv, sw, tr, zh
* **HuggingFace Space** — попробуйте перед арендой на [huggingface.co/spaces/ResembleAI/Chatterbox](https://huggingface.co/spaces/ResembleAI/Chatterbox)

## Устранение неполадок

| Проблема                         | Решение                                                                                                           |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| `CUDA — недостаточно памяти`     | Используйте Turbo (350M) вместо Original/Multilingual (500M) или арендуйте более мощный GPU                       |
| Клонированный голос не совпадает | Используйте более длинный (15–30 с), чистый эталонный клип с минимальным фоновым шумом                            |
| `numpy` конфликт версий          | Запустите `pip install numpy==1.26.4 --force-reinstall`                                                           |
| Медленная загрузка модели        | Модели загружаются с HuggingFace при первом запуске (\~2 ГБ); предварительно скачайте с помощью `huggingface-cli` |
| В аудио присутствуют артефакты   | Уменьшите длину текста на одну генерацию; очень длинные тексты могут ухудшать качество                            |
| `ModuleNotFoundError`            | Убедитесь, что `pip install chatterbox-tts` завершено без ошибок; проверьте совместимость с Python 3.11           |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-ru/audio-i-golos/chatterbox-tts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
