Голосовой бот + телефония на полном OpenSource. Часть 2 — учим бота слушать и говорить

В первой части статьи я описал как создать простого чат бота, в этой статье мы научим нашего бота говорить и слушать русскую речь и переводить ее в текст.
управляем устройствами при помощи голосовых команд
В конце мая с. г. в Google сообщили, что теперь они намерены в алгоритм ранжирования сайтов ввести понятие "качества страницы" (page experience). А в понятие качества страницы они включили: скорость загрузки страницы, интерактивность (т.е. например, чтобы кнопка быстро приобретала способность нажиматься), и стабильность контента во время загрузки (т.е. вы не должны случайно нажимать кнопки или ссылки из-за того что всё на экране прыгает пока страница грузится). Кроме того страница должна быть оптимизирована для мобильных устройств (mobile friendly), безопасна для просмотра, передаваться по протоколу https (не http), и не иметь навязчивой рекламы между страницами (intrusive interstitials).
Как быстро и бесшовно встроить голосовой интерфейс в ваше мобильное приложение? И как научить app-ассистента всему, что оно умеет? В прошлый раз мы взяли опенсорсное лайфстайл-приложение Habitica и показали, как добавить в него помощника и запилить базовый голосовой сценарий «из коробки» (уточнение прогноза погоды и времени).
Теперь перейдем к более продвинутому этапу -- научимся вызывать голосом определенные экраны, делать сложные запросы с NLU и form-filling с помощью голоса прямо внутри приложения.
— Алиса, купи одну акцию Яндекс.
— Заявка на покупку Яндекс по рыночной цене, тикер: YNDX, количество акций: 1, для подтверждения скажите «подтверждаю», для отмены скажите «нет».
— Подтверждаю.
— Заявка исполнена.
Мы привыкли называть умными устройства, которыми можем управлять, не вставая с дивана. Включить лампочку, вентилятор, кофеварку или стиральную машину.
Колонки с Яндекс Алисой хоть и называются умными, но вы не можете изменить громкость не находясь рядом с колонкой (орать через всю комнату не считается). Вы не можете перемотать песню из мобильного приложения Яндекса. Или остановить сказку, запущенную на колонке в детской, из своей кровати в спальне.
В январе 2020 кто-то обнаружил, что Яндекс.Станция поддерживает некий локальный протокол. На GitHub начали появляться проекты по управлению Яндекс.Станцией. Мне хватило пару часов, чтоб разобраться и выпустить первую версию компонента для Home Assistant. Это достаточно популярная система домашней автоматизации, написанная на языке Python.
На сегодняшний день компонент поддерживает управление всеми колонками с Яндекс Алисой и при желании может выглядеть так:
goto
на циклы и ветвления; и наконец, в AH, ,L,IH,DX,AX,LX, ,T,*,*,UX,WX, ,L,OW,WX
". Для каждого выводимого фона Parser задаёт также длительность и тон.ProcessFrames
) превращает массив частот и амплитуд в PCM-поток для аудиовывода.