- Информация
- Установка сервера
- Настройки сервера
- Настройка в Home Assistant
- Настройка в Rhasspy
- Функциональные возможности
- Endpoints
- Вывод звука на Bluetooth колонку
Данный проект я создал, чтобы обеспечить свой умный дом нормальным синтезом речи. Также, чтобы обеспечить 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 # Не используется. Настройки языка указываются в настройках сервера.
- В настройках, в разделе Text to Speech. Выберете модуль MarryTTS.
- Примените настройки Rhasspy Assistant (он перезагрузиться).
- Укажите адрес вашего сервера с путём
/process
. - Нажмите на кнопку Refresh.
- В списке доступных голосов, выберите голос который вам нужно.
- Примените настройки 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=[Текст для обработки]
- Возвращает аудио файл синтезированной речи.
- Если Home Assistant как основная ОС (HAOS), то читаем эту документацию TTS Bluetooth Speaker for Home Assistant
- Если 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 девайса:
- В Rhasspy Assistant указываем так:
- В Mopidy указываем так:
Проверяем работоспособность:
Код:
service: tts.marytts_say
data:
entity_id: media_player.mpd_mopidy
message: >-
Спустя 15 лет жизнь некогда бороздившего космические просторы Жана-Люка
Пикара