Skip to content

kiraping1337/ChatTwitchTTS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ChatTwitchTTS

Бот для озвучивания сообщений из чата Twitch за баллы канала с использованием OmniVoice

Проект позволяет зрителям обменивать баллы канала на озвучивание своих сообщений. Бот подписывается на событие через EventSub, отслеживает активацию определённой награды канала и синтезирует речь в реальном времени с помощью нейросетевой модели OmniVoice

Основные возможности

  • Интеграция с Twitch EventSub через награды канала (Channel Points)
  • Синтез речи на основе OmniVoice
  • Поддержка русского языка
  • Использование собственных голосовых датасетов
  • Возможность обработки на GPU
  • Автоматическое переподключение при обрыве связи

Требования

  • Python 3.12 (проект разработан и протестирован на этой версии)
  • NVIDIA GPU с CUDA (опционально, для ускорения генерации)

Установка

1. Клонирование репозитория

git clone kiraping1337/ChatTwitchTTS
cd ChatTwitchTTS

2. Создание виртуального окружения

python -m venv .venv
.venv\Scripts\activate  # Windows

3. Установка зависимостей

PyTorch

Для GPU (NVIDIA):

  1. Проверьте версию CUDA:
nvidia-smi

Посмотрите на строку "CUDA Version" в правом верхнем углу вывода.

  1. Установите PyTorch с поддержкой CUDA. Пример:

CUDA 12.8:

pip install torch==2.8.0+cu128 torchaudio==2.8.0+cu128 --extra-index-url https://download.pytorch.org/whl/cu128
pip install omnivoice

Остальные зависимости

pip install sounddevice websockets requests 

Настройка

1. Создайте файл login.json

В корневой директории проекта создайте файл login.json со следующим содержимым:

{
  "token": "ваш oauth токен",
  "client_id": "ваш client id",
  "broadcaster_id": "id пользователя",
  "reward_id": "id награды канала"
}

Как получить данные:

  • token — OAuth токен. Получить можно несколькими способами:
    • Простой способ: https://twitchtokengenerator.com/ (выберите "Bot Chat Token" и авторизуйтесь)
    • Официальный способ: создайте приложение на https://dev.twitch.tv/console/apps и получите токен через OAuth flow
    • Важно: token в файле указывается БЕЗ префиксов oauth: или Bearer
  • client_id — ID клиента. Получается аналогично OAuth токену через https://twitchtokengenerator.com/ или через запрос к API
  • broadcaster_id — ID пользователя. Получается через запрос к API либо через скрипт test_token.py в данном репозитории. Для получения необходим OAuth token и client id
  • reward_id — ID награды канала. Как получить:
    • Создайте награду канала в панели стримера (Creator Dashboard → Community → Channel Points → Manage Rewards & Challenges)
    • Активируйте эту награду в чате
    • Используйте скрипт test_token.py в данном репозитории или запросите ID через Twitch API

2. Добавление своих голосов

Перейдите в папку refs_wavs и поместите туда:

  • Отдельные .wav файлы с образцами голоса

Перейдите в папку refs_texts и поместите туда:

  • Отдельные .txt файлы с расшифровкой образца голоса

Укажите путь к файлам в переменной refs в формате:

refs = {"refs_wavs/НАЗВАНИЕ_ФАЙЛА.wav":"refs_texts/НАЗВАНИЕ_РАСШИФРОВКИ.txt"}

Требования к аудио:

  • Формат: WAV (обязательно)
  • Частота дискретизации: любая (автоматически ресэмплируется)
  • Каналы: mono или stereo (stereo автоматически конвертируется в mono)
  • Качество: чистая речь без фонового шума, эха и посторонних звуков
  • Длительность: минимум 6 секунд, рекомендуется 20 секунд для качественного клонирования голоса
  • Содержание: эмоционально нейтральная речь даёт лучшие результаты

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

Запуск

python main.py

Работа с Twitch

  1. Бот подписывается на событие через EventSub, отслеживает активацию определённой награды канала
  2. Зрители активируют награду канала (указанную в reward_id), вводят текст
  3. Сообщение автоматически попадает в очередь и озвучивается
  4. При каждом запросе случайным образом выбирается один голос из доступных датасетов
  5. Озвучка воспроизводится через системный аудиовыход

Логи

В консоли вы увидите:

Устройство: cuda  # или cpu
Загрузка модели
Подключено к Twitch EventSub
Session ID: #айди сессии
Подписка создана

Получено событие
Награда: Озвучить сообщение (ID: #айди активируемой награды )
Пользователь: 
Текст: 'текст сообщения'
Ожидаемый ID: #айди ожидаемой награды
Совпадение: True       # или False если была активирована другая награда

Решение проблем

Бот не подключается к Twitch

  • Проверьте правильность введенных данных в login.json
  • Убедитесь, что токен действителен (они могут истекать). Для проверки используйте скрипт test_token.py
  • Проверьте, что в token НЕ указан префикс oauth: или Bearer
  • Попробуйте сгенерировать новый токен

Сообщения не озвучиваются

  • Проверьте, что reward_id соответствует созданной награде канала
  • Убедитесь, что награда активна в настройках канала
  • Попробуйте активировать награду сами для теста

Ошибки при загрузке модели

  • Убедитесь, что установлен PyTorch правильной версии
  • Проверьте наличие интернета при первом запуске (модель скачивается ~3GB)
  • Проверьте свободное место на диске

Плохое качество голоса

  • Используйте более качественные датасеты (чистая запись, хороший микрофон)
  • Увеличьте длительность референсных аудио
  • Проверьте правильность текстовой расшифровки
  • Экспериментируйте с параметрами position_temperature и num_step

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

  • Это нормально для CPU, рассмотрите использование GPU
  • Уменьшите длину сообщений (установите лимит символов в награде)
  • Закройте другие программы для освобождения ресурсов

Настройка и кастомизация

Изменение параметров синтеза речи

В функции text_to_speech можно настроить:

  • position_temperature: стабильность vs. естественность (по умолчанию 4.0). Более высокие значения увеличивают случайность
  • num_step : Количество итеративных шагов демаскировки. Более высокие значения улучшают качество, но замедляют генерацию (по умолчанию 64)

Изменение размера очереди

Строка 22: Поменяйте на speech_queue = queue.Queue(maxsize=РАЗМЕР ОЧЕРЕДИ)

About

Twitch TTS бот с клонированием голоса через OmniVoice. Озвучивание сообщений за баллы канала.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages