Skip to content

Silero TTS backend service. Can be used with Home Assistant and Rhasspy.

License

Notifications You must be signed in to change notification settings

Navatusein/Silero-TTS-Service

Repository files navigation

Supports aarch64 Architecture Supports amd64 Architecture Supports armhf Architecture Supports armv7 Architecture Supports i386 Architecture MIT License

Silero TTS Service

Содержание

Информация

Данный проект я создал, чтобы обеспечить свой умный дом нормальным синтезом речи. Также, чтобы обеспечить rhasspy нормальным синтезом речи. Уже готовые решения меня не устроили и было решено изобрести свой велосипед. За основу были взяты модели Silero.

Вдохновился я проектом silero-ha-http-tts от Gromina. Он был сыроват и я решил сделать всё по уму разуму, с настройками и готовыми контейнерами.  

Установка сервера

Установка через Docker:

Выполните команду:

docker run -p 9898:9898 -m 1g -e NUMBER_OF_THREADS=4 -e LANGUAGE=ru -e SAMPLE_RATE=48000 --name tts_silero -d navatusein/silero-tts-service

Установка через Docker Compose:

Создайте файл docker-compose.yml и перенесите в него содержимое:

version: '3'

services:
  silero-tts-service:
    image: "navatusein/silero-tts-service"
    container_name: "silero-tts-service"
    deploy:
      resources:
        limits:
          memory: 1G
    ports:
      - "9898:9898"
    restart: unless-stopped
    environment:
      NUMBER_OF_THREADS: 4
      LANGUAGE: ru
      SAMPLE_RATE: 48000

Выполните команду:

docker-compose up

Настройки сервера

Все настройки сервера передаются как параметры окружения docker контейнеру при запуске.

Количество ядер для обработки речи NUMBER_OF_THREADS:

NUMBER_OF_THREADS: 4 

Количество потоков от 1 до количества ядер процессора сервера.
По умолчанию: 4

Язык синтеза речи LANGUAGE:

LANGUAGE: ru

По умолчанию: ru

Поддерживаемые языки, с доступными для них голосами:

Язык Код языка Поддерживаемые голоса
Русский ru aidar baya kseniya xenia eugene random
Українська uk mykyta random

Частота дискретизации SAMPLE_RATE:

SAMPLE_RATE: 48000 

Возможние значения: 48000, 24000, 8000
По умолчанию: 48000


Параметры утилиты sox SOX_PARAM:

SOX_PARAM: "reverb 50 50 10" # Добавляет эхо на речь

По умолчанию: Пустой

Выходной файл проходит через утилиту sox. Ей можно передать параметры, чтобы наложить эффекты на речь: поднять тембр, добавить эхо, бас буст включить.

Ссылка на документацию утилиты sox: https://linux.die.net/man/1/sox


Исправление обрубания окончания фразы HA_FIX:

HA_FIX: True 

Может принимать значения: True False
По умолчанию: False

Исправляет ошибку, при которой Home Assistant не договаривает конец фразы. Добавляет секунду молчания в конец речи.


Настройка в Home Assistant

В файле configuration.yaml добавьте запись:

tts:
  - platform: marytts
    host: localhost # Адрес сервера
    port: 9898
    codec: WAVE_FILE
    voice: xenia # Имя голоса который хотите использовать.
    language: ru # Не используется. Настройки языка указываются в настройках сервера.

Настройка в Rhasspy Assistant

  1. В настройках, в разделе Text to Speech. Выберете модуль MarryTTS.
  2. Примените настройки Rhasspy Assistant (он перезагрузиться).
  3. Укажите адрес вашего сервера с путём /process.
  4. Нажмите на кнопку Refresh.
  5. В списке доступных голосов, выберите голос который вам нужно.
  6. Примените настройки Rhasspy Assistant (он перезагрузиться).

RhasspyConfig


Функциональные возможности

Нормализация цифр

Сервис умеет переводить цифры в текст.
Пример:

Текст с цифрой 1.

Нормализация Пример 1


Склонение существительных после цифры

Сервис умеет склонять существительных после цифр.
Для этого слово которое нужно склонить после цифры, возьмите в тег <d>слово</d>.
Пример:

У меня было 15 <d>яблоко</d>.

Склонение Пример 1

Если нужно склонить несколько слов, то каждое нужно брать в тег <d>слово</d> отдельно.

Мне осталось работать 15 <d>рабочий</d> <d>день</d>.

Склонение Пример 2


Произношение транслита

Сервис умеет произносить транслит.
Пример:

Lorem ipsum dolor sit amet.

Транслит Пример 1


SSML

С помощью SSML вы можете управлять паузами и просодией синтезированной речи.

<p>
  Когда я просыпаюсь, <prosody rate="x-slow">я говорю довольно медленно</prosody>.
  Потом я начинаю говорить своим обычным голосом,
  <prosody pitch="x-high"> а могу говорить тоном выше </prosody>,
  или <prosody pitch="x-low">наоборот, ниже</prosody>.
  Потом, если повезет – <prosody rate="fast">я могу говорить и довольно быстро.</prosody>
  А еще я умею делать паузы любой длины, например две секунды <break time="2000ms"/>.
  <p>
    Также я умею делать паузы между параграфами.
  </p>
  <p>
    <s>И также я умею делать паузы между предложениями</s>
    <s>Вот например как сейчас</s>
  </p>
</p>

SSML Пример 1


Endpoints

  • GET /clear_cache - Очищает кэш уже синтезированных сообщений.
  • GET /settings - Возвращает текущие настройки сервера.
  • GET /voices - Возвращает список доступных голосов для выбранного языка.
  • GET /process?VOICE=[Выбраный голос]&INPUT_TEXT=[Текст для обработки] - Возвращает аудио файл синтезированной речи.
  • POST /process в теле запроса VOICE=[Выбраный голос], INPUT_TEXT=[Текст для обработки] - Возвращает аудио файл синтезированной речи.

Вывод звука на Bluetooth колонку

  1. Если Home Assistant как основная ОС (HAOS), то читаем эту документацию TTS Bluetooth Speaker for Home Assistant
  2. Если Home Assistant стоит на Debian, то делаем следующее:

Отредактируем client.conf

nano /etc/pulse/client.conf

Добавим следующее:

default-server = unix:/usr/share/hassio/audio/external/pulse.sock
autospawn = no

ClientConf

Перезапускаем pulseaudio.

pulseaudio -k && pulseaudio --start

Ставим аддон Mopidy версии Current version: 2.1.1 и ставим только эту версию. Mopidy 2.2.0 не ставить - она сломанная. Подробнее про поломанную версию Mopidy 2.2.0 читать здесь.

Добавляем в configuration.yaml

media_player:
  - platform: mpd
    name: "MPD Mopidy"
    host: localhost
    port: 6600

Перезагружаем Home Assistant полностью, чтобы перезагрузился сам Debian.

RebootHa

Подключаем bluetooth колонку к Debian, kb,j через GUI, либо через консоль используя команду bluetoothctl

Включим bluetooth:

power on

Запуск сканирования девайсов:

scan on

Как увидели свой девайс, спариваемся с устройством:

pair [mac адрес девайса]

Подключаемся к устройству:

connect [mac адрес девайса]

Добавляем устройство в доверенные:

trust [mac адрес девайса]

Далее, как добавлен bluetooth девайс то в двух аддонов Rhasspy Assistant и Mopidy нужно указать источник вывода звука bluetooth девайса:

  1. В Rhasspy Assistant указываем так:

RhasspyAssistantConfig

  1. В Mopidy указываем так:

MopidyConfig

Проверяем работоспособность:

TtsSay

Код:

service: tts.marytts_say
data:
  entity_id: media_player.mpd_mopidy
  message: >-
    Спустя 15 лет жизнь некогда бороздившего космические просторы Жана-Люка
    Пикара

About

Silero TTS backend service. Can be used with Home Assistant and Rhasspy.

Topics

Resources

License

Stars

Watchers

Forks