Данный проект я создал, чтобы обеспечить свой умный дом нормальным синтезом речи. Также, чтобы обеспечить rhasspy нормальным синтезом речи. Уже готовые решения меня не устроили и было решено изобрести свой велосипед. За основу были взяты модели Silero.
Вдохновился я проектом silero-ha-http-tts от Gromina. Он был сыроват и я решил сделать всё по уму разуму, с настройками и готовыми контейнерами.
Выполните команду:
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.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 не договаривает конец фразы. Добавляет секунду молчания в конец речи.
В файле configuration.yaml добавьте запись:
tts:
- platform: marytts
host: localhost # Адрес сервера
port: 9898
codec: WAVE_FILE
voice: xenia # Имя голоса который хотите использовать.
language: ru # Не используется. Настройки языка указываются в настройках сервера./process.
Сервис умеет переводить цифры в текст.
Пример:
Текст с цифрой 1.
Нормализация Пример 1
Сервис умеет склонять существительных после цифр.
Для этого слово которое нужно склонить после цифры, возьмите в тег <d>слово</d>.
Пример:
У меня было 15 <d>яблоко</d>.
Склонение Пример 1
Если нужно склонить несколько слов, то каждое нужно брать в тег <d>слово</d> отдельно.
Мне осталось работать 15 <d>рабочий</d> <d>день</d>.
Склонение Пример 2
Сервис умеет произносить транслит.
Пример:
Lorem ipsum dolor sit amet.
Транслит Пример 1
С помощью 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
GET /clear_cache - Очищает кэш уже синтезированных сообщений.GET /settings - Возвращает текущие настройки сервера.GET /voices - Возвращает список доступных голосов для выбранного языка.GET /process?VOICE=[Выбраный голос]&INPUT_TEXT=[Текст для обработки] - Возвращает аудио файл синтезированной речи.POST /process в теле запроса VOICE=[Выбраный голос], INPUT_TEXT=[Текст для обработки] - Возвращает аудио файл синтезированной речи.Отредактируем client.conf
nano /etc/pulse/client.conf
Добавим следующее:
default-server = unix:/usr/share/hassio/audio/external/pulse.sock
autospawn = no

Перезапускаем 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.

Подключаем bluetooth колонку к Debian, kb,j через GUI, либо через консоль используя команду bluetoothctl
Включим bluetooth:
power on
Запуск сканирования девайсов:
scan on
Как увидели свой девайс, спариваемся с устройством:
pair [mac адрес девайса]
Подключаемся к устройству:
connect [mac адрес девайса]
Добавляем устройство в доверенные:
trust [mac адрес девайса]
Далее, как добавлен bluetooth девайс то в двух аддонов Rhasspy Assistant и Mopidy нужно указать источник вывода звука bluetooth девайса:


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

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