Данный проект я создал, чтобы обеспечить свой умный дом нормальным синтезом речи. Также, чтобы обеспечить 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 # Не используется. Настройки языка указываются в настройках сервера.
1) В настройках, в разделе Text to Speech. Выберете модуль MarryTTS.
2) Примените настройки Rhasspy Assistant (он перезагрузиться).
3) Укажите адрес вашего сервера с путём /process
.
4) Нажмите на кнопку Refresh.
5) В списке доступных голосов, выберите голос который вам нужно.
6) Примените настройки Rhasspy Assistant (он перезагрузиться).
Сервис умеет переводить цифры в текст.
Пример:
Текст с цифрой 1.
Сервис умеет склонять существительных после цифр.
Для этого слово которое нужно склонить после цифры, возьмите в тег <d>слово</d>
.
Пример:
У меня было 15 <d>яблоко</d>.
Если нужно склонить несколько слов, то каждое нужно брать в тег <d>слово</d>
отдельно.
Мне осталось работать 15 <d>рабочий</d> <d>день</d>.
Сервис умеет произносить транслит.
Пример:
Lorem ipsum dolor sit amet.
С помощью 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>
GET
/clear_cache
- Очищает кэш уже синтезированных сообщений.GET
/settings
- Возвращает текущие настройки сервера.GET
/voices
- Возвращает список доступных голосов для выбранного языка.GET
/process?VOICE=[Выбраный голос]&INPUT_TEXT=[Текст для обработки]
- Возвращает аудио файл синтезированной речи.POST
/process
в теле запроса VOICE=[Выбраный голос]
, INPUT_TEXT=[Текст для обработки]
- Возвращает аудио файл синтезированной речи.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
Перезапускаем 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 девайса:
1) В Rhasspy Assistant указываем так:
2) В Mopidy указываем так:
Проверяем работоспособность:
Код:
service: tts.marytts_say
data:
entity_id: media_player.mpd_mopidy
message: >-
Спустя 15 лет жизнь некогда бороздившего космические просторы Жана-Люка
Пикара