# Bark TTS

Генерируйте реалистичную речь и аудио с Bark AI.

{% hint style="success" %}
Все примеры можно запускать на GPU-серверах, арендуемых через [CLORE.AI Marketplace](https://clore.ai/marketplace).
{% endhint %}

## Требования к серверу

| Параметр      | Минимум      | Рекомендуется  |
| ------------- | ------------ | -------------- |
| ОЗУ           | 8GB          | 16 ГБ+         |
| VRAM          | 4 ГБ (small) | 8 ГБ+ (обычно) |
| Сеть          | 200 Мбит/с   | 500 Мбит/с+    |
| Время запуска | 3–5 минут    | -              |

{% hint style="warning" %}
**Время запуска:** При первом запуске загружаются модели Bark (3–5 минут в зависимости от скорости сети). HTTP 502 в это время — нормально.
{% endhint %}

## Аренда на CLORE.AI

1. Посетите [CLORE.AI Marketplace](https://clore.ai/marketplace)
2. Отфильтруйте по типу GPU, объему VRAM и цене
3. Выберите **On-Demand** (фиксированная ставка) или **Spot** (цена по ставке)
4. Настройте ваш заказ:
   * Выберите Docker-образ
   * Установите порты (TCP для SSH, HTTP для веб-интерфейсов)
   * Добавьте переменные окружения при необходимости
   * Введите команду запуска
5. Выберите способ оплаты: **CLORE**, **BTC**, или **USDT/USDC**
6. Создайте заказ и дождитесь развертывания

### Доступ к вашему серверу

* Найдите данные для подключения в **Моих заказах**
* Веб-интерфейсы: используйте URL HTTP-порта
* SSH: `ssh -p <port> root@<proxy-address>`

## Что такое Bark?

Bark от Suno AI может генерировать:

* Реалистичную речь на нескольких языках
* Различные голоса говорящих
* Невербальные звуки (смех, вздохи)
* Музыку и звуковые эффекты
* Многоязычная речь

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

| Качество  | VRAM | Рекомендуется |
| --------- | ---- | ------------- |
| Небольшая | 4 ГБ | RTX 3060      |
| Обычно    | 8GB  | RTX 3070      |
| Высокий   | 12GB | RTX 3090      |

## Быстрое развертывание

**Docker-образ:**

```
pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime
```

**Порты:**

```
22/tcp
7860/http
```

**Команда:**

```bash
pip install git+https://github.com/suno-ai/bark.git gradio scipy && \
python -c "
import gradio as gr
from bark import SAMPLE_RATE, generate_audio, preload_models
import scipy.io.wavfile as wav
import numpy as np
import tempfile

preload_models()

def generate(text, voice):
    audio = generate_audio(text, history_prompt=voice)
    with tempfile.NamedTemporaryFile(suffix='.wav', delete=False) as f:
        wav.write(f.name, SAMPLE_RATE, (audio * 32767).astype(np.int16))
        return f.name

voices = ['v2/en_speaker_0', 'v2/en_speaker_1', 'v2/en_speaker_2', 'v2/en_speaker_3',
          'v2/en_speaker_4', 'v2/en_speaker_5', 'v2/en_speaker_6', 'v2/en_speaker_7',
          'v2/en_speaker_8', 'v2/en_speaker_9']

demo = gr.Interface(fn=generate, inputs=[gr.Textbox(lines=5), gr.Dropdown(voices)],
                   outputs=gr.Audio(), title='Bark TTS')
demo.launch(server_name='0.0.0.0', server_port=7860)
"
```

## Доступ к вашему сервису

После развертывания найдите ваш `http_pub` URL в **Моих заказах**:

1. Перейдите на **Моих заказах** страницу
2. Нажмите на ваш заказ
3. Найдите `http_pub` URL (например, `abc123.clorecloud.net`)

Используйте `https://YOUR_HTTP_PUB_URL` вместо `localhost` в примерах ниже.

### Проверьте, что всё работает

```bash
# Проверьте, доступен ли интерфейс Gradio
curl https://your-http-pub.clorecloud.net/
```

{% hint style="warning" %}
Если вы получаете HTTP 502, подождите 3–5 минут — сервис загружает модели.
{% endhint %}

## Установка

```bash
pip install git+https://github.com/suno-ai/bark.git
pip install scipy
```

## Базовое использование

```python
from bark import SAMPLE_RATE, generate_audio, preload_models
import scipy.io.wavfile as wav
import numpy as np

# Предзагрузка моделей (загрузка при первом запуске)
preload_models()

# Генерация аудио
text = "Hello, this is a test of Bark text to speech."
audio = generate_audio(text)

# Сохранить как WAV
wav.write("output.wav", SAMPLE_RATE, (audio * 32767).astype(np.int16))
```

## Выбор голоса

### Встроенные голоса

```python

# Англоязычные говорящие (0–9)
audio = generate_audio("Hello!", history_prompt="v2/en_speaker_0")
audio = generate_audio("Hello!", history_prompt="v2/en_speaker_3")
audio = generate_audio("Hello!", history_prompt="v2/en_speaker_9")

# Другие языки
audio = generate_audio("Bonjour!", history_prompt="v2/fr_speaker_0")  # Французский
audio = generate_audio("Hallo!", history_prompt="v2/de_speaker_0")    # Немецкий
audio = generate_audio("Hola!", history_prompt="v2/es_speaker_0")     # Испанский
audio = generate_audio("Ciao!", history_prompt="v2/it_speaker_0")     # Итальянский
audio = generate_audio("Olá!", history_prompt="v2/pt_speaker_0")      # Португальский
audio = generate_audio("Привет!", history_prompt="v2/ru_speaker_0")   # Русский
audio = generate_audio("こんにちは!", history_prompt="v2/ja_speaker_0") # Японский
audio = generate_audio("你好!", history_prompt="v2/zh_speaker_0")      # Китайский
```

### Доступные языки

| Язык          | Код | Говорящие |
| ------------- | --- | --------- |
| Английский    | en  | 0-9       |
| Немецкий      | de  | 0-9       |
| Испанский     | es  | 0-9       |
| Французский   | fr  | 0-9       |
| Хинди         | hi  | 0-9       |
| Итальянский   | it  | 0-9       |
| Японский      | ja  | 0-9       |
| Корейский     | ko  | 0-9       |
| Польский      | pl  | 0-9       |
| Португальский | pt  | 0-9       |
| Русский       | ru  | 0-9       |
| Турецкий      | tr  | 0-9       |
| Китайский     | zh  | 0-9       |

## Невербальные звуки

Bark может генерировать невербальное аудио:

```python

# Смех
audio = generate_audio("Hello! [laughs] That's so funny!")

# Вздохи
audio = generate_audio("[sighs] I'm so tired today.")

# Задыхание
audio = generate_audio("[gasps] Oh my god!")

# Окашливание
audio = generate_audio("[clears throat] Ahem, attention please.")

# Музыкальные ноты
audio = generate_audio("♪ La la la ♪")
```

## Длительное аудио

Для текста длиннее 13 секунд:

```python
from bark import generate_audio
from bark.generation import SAMPLE_RATE
import numpy as np

def generate_long_audio(text, voice="v2/en_speaker_6"):
    # Разбить на предложения
    sentences = text.replace(".", ".|").replace("?", "?|").replace("!", "!|").split("|")
    sentences = [s.strip() for s in sentences if s.strip()]

    audio_segments = []
    for sentence in sentences:
        audio = generate_audio(sentence, history_prompt=voice)
        audio_segments.append(audio)
        # Добавить небольшую паузу между предложениями
        audio_segments.append(np.zeros(int(0.25 * SAMPLE_RATE)))

    return np.concatenate(audio_segments)

long_text = """
Это более длинный фрагмент текста, который будет разбит на несколько сегментов.
Каждый сегмент будет сгенерирован отдельно. Затем они будут объединены.
Это позволяет генерировать аудио любой длины.
"""

audio = generate_long_audio(long_text)
```

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

Создание пользовательских голосовых подсказок:

```python
from bark.generation import preload_models, generate_text_semantic
from bark.api import semantic_to_waveform
from bark import generate_audio, SAMPLE_RATE
import numpy as np

# Генерировать с определёнными характеристиками

# Подсказка может включать описание говорящего

# Сначала сгенерируйте эталон
voice_prompt = "v2/en_speaker_6"
text = "This is how I sound when I speak normally."
audio = generate_audio(text, history_prompt=voice_prompt)

# Сохранить как пользовательский голос (упрощённый пример)
np.savez("custom_voice.npz", audio=audio)
```

## Пакетная обработка

```python
import os
from bark import generate_audio, SAMPLE_RATE
import scipy.io.wavfile as wav
import numpy as np

texts = [
    "Welcome to our podcast.",
    "Today we'll discuss artificial intelligence.",
    "Let's get started with the introduction.",
]

output_dir = "./audio_clips"
os.makedirs(output_dir, exist_ok=True)

voice = "v2/en_speaker_6"

for i, text in enumerate(texts):
    print(f"Generating {i+1}/{len(texts)}")
    audio = generate_audio(text, history_prompt=voice)
    wav.write(
        os.path.join(output_dir, f"clip_{i:03d}.wav"),
        SAMPLE_RATE,
        (audio * 32767).astype(np.int16)
    )
```

## API-сервер

```python
from fastapi import FastAPI
from fastapi.responses import FileResponse
from bark import generate_audio, preload_models, SAMPLE_RATE
import scipy.io.wavfile as wav
import numpy as np
import tempfile
import os

app = FastAPI()
preload_models()

@app.post("/generate")
async def generate_speech(text: str, voice: str = "v2/en_speaker_6"):
    audio = generate_audio(text, history_prompt=voice)

    with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f:
        wav.write(f.name, SAMPLE_RATE, (audio * 32767).astype(np.int16))
        return FileResponse(f.name, media_type="audio/wav")

# Запуск: uvicorn server:app --host 0.0.0.0 --port 8000
```

### Использование

```bash
curl -X POST "http://localhost:8000/generate?text=Hello%20world&voice=v2/en_speaker_6" \
    --output speech.wav
```

## Оптимизация памяти

### Для ограниченной видеопамяти (VRAM)

```python
import os

# Используйте меньшую модель
os.environ["SUNO_USE_SMALL_MODELS"] = "1"

# Выгрузить на CPU
os.environ["SUNO_OFFLOAD_CPU"] = "1"

from bark import generate_audio
audio = generate_audio("Hello world")
```

### Включить FP16

```python
os.environ["SUNO_ENABLE_MPS"] = "0"

from bark import generate_audio
audio = generate_audio("Hello!", history_prompt="v2/en_speaker_6")
```

## Комбинирование с другим аудио

```python
from pydub import AudioSegment
import numpy as np
from bark import generate_audio, SAMPLE_RATE
import scipy.io.wavfile as wav
import tempfile

def bark_to_pydub(audio_array):
    with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f:
        wav.write(f.name, SAMPLE_RATE, (audio_array * 32767).astype(np.int16))
        return AudioSegment.from_wav(f.name)

# Сгенерировать речь
speech = generate_audio("Welcome to the show!")
speech_audio = bark_to_pydub(speech)

# Загрузить фоновую музыку
music = AudioSegment.from_mp3("background.mp3")

# Смешать вместе
music = music - 20  # Понизить громкость музыки
combined = speech_audio.overlay(music)
combined.export("output.mp3", format="mp3")
```

## Производительность

| Режим     | GPU      | Время (10 слов) |
| --------- | -------- | --------------- |
| Обычно    | RTX 3090 | \~5 с           |
| Обычно    | RTX 4090 | \~3s            |
| Небольшая | RTX 3060 | \~8s            |
| CPU       | -        | \~60 с          |

## Сравнение с другими TTS

| Функция      | Bark     | Coqui   | Piper  |
| ------------ | -------- | ------- | ------ |
| Качество     | Лучшее   | Отлично | Хорошо |
| Скорость     | Медленно | Средне  | Быстро |
| Языки        | 13+      | 20+     | 30+    |
| Невербальные | Да       | Нет     | Нет    |
| VRAM         | 8 ГБ+    | 4 ГБ    | 1GB    |

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

### Недостаточно памяти

```python

# Использовать маленькие модели
os.environ["SUNO_USE_SMALL_MODELS"] = "1"
os.environ["SUNO_OFFLOAD_CPU"] = "1"
```

### Медленная генерация

* Использовать GPU (не CPU)
* Держать модели загруженными между генерациями
* Генерировать более короткие сегменты

### Проблемы с качеством аудио

* Попробуйте разных говорящих
* Разбивайте длинный текст на предложения
* Избегайте специальных символов

## Оценка стоимости

Типичные ставки на маркетплейсе CLORE.AI (по состоянию на 2024):

| GPU       | Почасовая ставка | Дневная ставка | Сессия 4 часа |
| --------- | ---------------- | -------------- | ------------- |
| RTX 3060  | \~$0.03          | \~$0.70        | \~$0.12       |
| RTX 3090  | \~$0.06          | \~$1.50        | \~$0.25       |
| RTX 4090  | \~$0.10          | \~$2.30        | \~$0.40       |
| A100 40GB | \~$0.17          | \~$4.00        | \~$0.70       |
| A100 80GB | \~$0.25          | \~$6.00        | \~$1.00       |

*Цены варьируются в зависимости от провайдера и спроса. Проверьте* [*CLORE.AI Marketplace*](https://clore.ai/marketplace) *для текущих тарифов.*

**Экономьте деньги:**

* Используйте **Spot** рынок для гибких рабочих нагрузок (часто на 30–50% дешевле)
* Платите с помощью **CLORE** токенов
* Сравнивайте цены у разных провайдеров

## Дальнейшие шаги

* [Клонирование голоса RVC](https://docs.clore.ai/guides/guides_v2-ru/audio-i-golos/rvc-voice-clone)
* [Whisper Transcription](https://docs.clore.ai/guides/guides_v2-ru/audio-i-golos/whisper-transcription)
* [AudioCraft Music](https://docs.clore.ai/guides/guides_v2-ru/audio-i-golos/audiocraft-music)
