24. Озвучка. TTS в Home Assistant.

    Уже далеко не первый год успешно существует технология TTS. Смысл её кроется в названии - Text to Speech, или говоря проще - текст в речь. Она позволяет компьютерным системам "читать" вслух тексты на разных языках, заранее настроенным голосом и с настроенной скоростью. ХА это тоже позволяет делать, проигрывая разные оповещения или МР3 файлы на подключенных к нему совместимых устройствах.

Сразу об устройствах для воспроизведения. Любая совместимая умная колонка домашних помощников (Алиса, Гугл Хоум, Амазон, Сири и т.д.) может быть настроена в ХА. В отдельных случаях можно транслировать звук на ТВ Бокс подключенный к телевизору, и если телек включен, то озвучка будет звучать и из него.

    Т.к. в предыдущих материалах сайта, в качестве примера была рассмотрена установка Home Assistant на виртуальную машину, то в этой статье рассмотрим озвучку именно средствами виртуализации.

Итак, виртуальная машина, это по сути обычный компьютер, со своим железом и операционной системой, который "думает" что он обычный физический компьютер. А у подавляющего большинства обычных компьютеров есть звуковая карта, к которой можно подключить динамики или наушники и слышать проигрываемые звуки. Конечно при условии, что звуковая карта была опознана системой, и для неё были успешно установлены драйверы.

Как оказалось на практике, при использовании VmWare Workstation есть проблема передачи данных о настоящей, физической звуковой карте, в виртуальную машину.


Из указанного на скриншоте видно, что не смотря на явно указанную в настройках звуковую карту, в ХА аудио устройство отсутствует или прикидывается дурачком 😀

Так что для начала решим эту проблему. Для этого надо сначала выключить виртуальную машину. Сделать это можно двумя способами:

  1. Из виртуальной консоли запустить команду ha host shutdown
  2. Из интерфейса ХА, зайдя в Настройки -> Cистема -> Oборудование -> три точки вверху справа -> Завершить работу хоста
После того как виртуальна машина выключилась, отрываем её vmx файл конфигурации (путь к нему указан прямо под окном консоли) в текстовом редакторе.
Находим в нём строчку sound.present = "TRUE", и под ней добавляем ещё одну: 
sound.virtualDev = "hdaudio"
Сохраняемся, запускаем машину, ждём загрузки ХА. Проверяем что аудио устройство появилось.

Отлично, есть устройство и для ввода звука, и для вывода.

После того, как виртуальный компьютер обзавёлся ртом, добавим ему и язык. А именно - плеер, который будет проигрывать звуки, и выводить их прямиком на настоящую звуковую карту основного компьютера.

Для этого надо установить дополнение VLC Media Player.
Не смотря на то, что оно присутствует во встроенном магазине дополнений, оно всё ещё носит статус экспериментального. Так что стоит иметь в виду, что некоторые его функции могут работать не совсем стабильно. Или возможно в дальнейшем придётся найти ему альтернативу.

После установки дополнения, выбираем в конфигурации устройство через которое оно будет выводить звук.
лучше оба устройства выбирать по умолчанию

Сохраняемся, не забываем про необходимые настройки на главной страничке дополнения и запускаем его.

Теперь, в системе должна появиться сущность медиаплеера. Это устройство внутри операционной системы ХА, способное самостоятельно проигрывать звуки, и не зависящее от настроек громкости в основной операционной системе. Чтобы убедиться в этом, заходим в раздел мультимедиа и проверяем куда можно выводить звук.

Выбираем Мультимедиа,  нажимаем на Local Media -> справа  вверху управление -> добавить медиа. Заливаем любой, максимально короткий по времени МР3 файл. Он отобразится в главном окне. Нажимаем внизу на воспроизведение. Если есть звук значит всё прошло отлично и можно переходить к следующему этапу. Если звука нет, то первым делом поменять устройство вывода в настройках VLC. Ну и смотреть что написано в логах системы.

 После того, как ХА умеет издавать звуки, осталось научить его говорить. Для этого в File editor открываем файл configuration.yaml и добавляем в него:
tts:
  - platform: google_translate
    language: "ru"
    time_memory: 300
    service_name: google_say

Эта настройка создаст в системе сервис с именем  google_say, говорить он будет на русском языке, с запасом памяти текста на 5 минут речи. Сохраняем файл, проверяем  изменённую конфигурацию и перезагружаем систему.

После перезагрузки жмём на Мультимедиа -> Text to Speech -> Google. В окне уже будет написан короткий текст, при желании его можно заменить на свой . Убеждаемся что в качестве устройства вывода звука указан VLC и жмём на Воспроизведение.


На этом всё. Теперь можно делать автоматизации и скрипты для озвучки разных событий. Единственный минус данного решения это то, что слышно это будет только в той комнате, где стоят колонки того компьютера, на котором "бегает" ХА.

Кстати, вся озвучка это сгенерированные системой самые обычные МР3 файлы, и они кэшируются в папке по умолчанию /config/tts. Скачать их оттуда, для прослушивания можно через тот же File editor.

В качестве примера, простейший скрипт, озвучивающий температуру за окном (основываясь на данных интеграции openweathermap), курс валют (для этого в системе заранее должны быть настроены соответствующие сенсоры), количество посылок отслеживаемых сервисом 17track (так же должен быть настроен заранее) и время ближайшего заката солнца.

alias: тестовый голосовой скрипт
sequence:
  - service: tts.google_say
    entity_id: media_player.vlc_telnet
    data_template:
      message: >-
        На улице сейчас {{
        states.sensor.openweathermap_feels_like_temperature.state  |
        round(default=0) }} градусов. Доллар стоит {{
        states.sensor.usd2ils.state }}, евро {{
        states.sensor.eur2ils.state }}. Посылок в дороге {{
        states.sensor.seventeentrack_packages_in_transit.state }} штуки. Закат в
        {{ states.sun.sun.attributes.next_setting | as_timestamp |
        timestamp_custom('%H:%M') }}
      cache: false
mode: single

Есть интересные идеи для озвучки событий? Пиши не стесняясь в комментариях! 😀

Комментарии