Ранее, я уже рассказывал о своем опыте речевого и музыкального озвучивания событий для роутеров Микротик – проекте MikroVoice. Тогда мной была проделана большая работа как по поиску аппаратного решения и созданию библиотеки mp3-джинглов для «всевозможных» событий на роутере и музыкальных заставок к ним, так и по написанию скриптовых функций, непосредственно реализующих озвучивание событий. К сожалению, эта работа, не получила широкого внедрения, не смотря на интерес пользователей к опубликованным по ней материалам. Возможно, это связано с «ретроградными» привычками админов сетей лишь к визуальной оценке информации, недоверием к стабильности работы представленной системы звукового оповещения или не желанием внедрять у себя на рабочем месте новые возможности (так как «и так всё работает»). Для меня лично, созданная система звукоречевого оповещения о событиях на роутерах Микротик удобна, работает у меня стабильно, и существенно помогает в работе и жизни, своевременно информируя о происходящих, в том числе внештатных событиях как в локальных сетях, так и на удаленных сетевых объектах (например, загородном доме).
Сегодня я расскажу об адаптации накопленного опыта озвучивания событий применительно к мультифункциональным контроллерам Laurent компании KernelChip, с которыми я знаком давно и ранее имел опыт нескольких опубликованных работ: (Прототип Laurent в корпусном исполнении, Телеграм терминал для Laurent).
Laurent моделей 2 и 5 из коробки имеют на борту интерфейс RS-232, Tx и Rx которого выведены на клемники платы. В отличии от работы с Микротик, для озвучивания Laurent ничего программировать вообще не нужно, так как у этих контроллеров для вывода данных в порт RS-232 предусмотрена команда модуля $KE,PUT (подробнее о команде в руководстве к модулям, например здесь.
Нужен был только переходник с интерфейса RS-232 на TTL и он был найден на просторах Интернета, им стал повсеместно распространенный Max 3232 (Рис 1).

Рис 1. Max 3232 - адаптер переходник RS-232 to TTL
Я попросил инженера на своей основной работе выпаять из этого переходника ��е нужный мне и громоздкий разъем DB9 и вместо него впаять штырьковый разъем.

Рис 2. Модифицированный Max 3232
Далее я соединил все компоненты по схеме Рис 3. (см. ниже) и все заработало !

Рис. 3 Схема подключения serial mp3-плееров к Laurent 2/5(G) через Max 3232
Все «земли» (GND) объединяем и подключаем к GND Laurent. Питание переходника Max 3232 и mp3-модуля +5V берем с клемника Laurent (это очень удобно, так как не требует дополнительного адаптера питания 5V). RX переходника соединяем с RX mp3 плеера, также поступаем с TX. А «перекрест» RX-TХ осуществляется между выходами Laurent и входами Maх 3232 – TX Laurent соединяем с ножкой 3 (RX) Max, а RX Laurent соответственно с ножкой 4 (TX) Max 3232.
С подключением разобрались. Теперь, чтобы работало всё корректно нужно правильно настроить порт RS232 Laurent через Web-сервер модуля (вкладка «порт RS232», скорость обмена данными выставляем 9600, режим работы «командный», биты данных 8, стоповые биты 1, без контроля четности).
Программировать, как я уже писал, ничего не придется. Подавать команды mp3 плееру для проверки можно здесь же в WEB-интерфейсе во вкладке «порт RS232» (в шестнадцатиричном формате)

Рис 4. Вкладка «порт RS-232» Web-интерфейса Laurent
либо через вкладку «Терминал KE-команд» (командой $KE,PUT,U,Н,<набор шестнадцатиричных цифр>).

Рис 5. Вкладка «Терминал KE-команд» Web-интерфейса Laurent
Тут я вспомнил, что на Микротике для озвучивания я остановился на модуле mp3-плеера Catalex YX5300/6300, а аналогичный модуль «red-серии» OpenSmart так и «не завелся».
Причина тому была тогда мной до конца не выяснена: Предположительно OpenSmart не начав ещё выполнение поданной команды немедленно возвращал ответ в который входил байт $00, считающийся концом передачи AT-команд модемами Микротик, интерфейс ppp-out которых использовался для передачи данных на mp3-плейер подробнее здесь. Модуль марки «Catalex» ответы на команды даже не пытался вернуть и потому работал успешно.
Для Laurent, который может передавать любые HEX-данные, байт 00 не является сигналом конца передачи. Соответственно я мог использовать OpenSmart на Laurent в полном объеме, что и решил сделать в первую очередь. По сравнению с Catalex YX5300/6300 OpenSmart имеет ту же самую функциональность, и управляется схожей, но иной системой команд, а также несет на борту разъем для подключения небольшого динамика.
Сравнительная таблицa №1 команд модулей Catalex и Open Smart (под спойлером)

Из таблицы команд видно, что созданный в 2014 г. Catalex имеет команды, перечисленные в руководстве, почему то нормализованные по одинаковой длине, а Open Smart, выпущенный в 2021 г., имеет команды разной длины. Почему это так по разному указано в официальных руководствах остается загадкой, так как Catalex может исполнять все ненормализованные команды различной длины (я проверял), тогда как и Open Smart может исполнять нормализованные по длине команды.
Можно также было использовать mp3 модули **DF1201S (DF Player PRO) **от DFRobot и BT201 Shenzhen Qingyue Electronics, как я это делал для роутеров Микротик, но в данной интеграции с Laurent оба вышеуказанные модуля, особенно BT 201, являются избыточными и я для простоты остановился на модулях mp3 Open Smart А и Catalex YX5300/6300. Следует отметить, что BT 201 и DF Player Pro, как более продвинутые, в отличии от Open Smart и Catalex имеют поддержку команд формата AT, что позволяет возвращать запрошенные данные в порт источник, но прошивки Laurent на сегодняшний день не поддерживают возвраты данных из порта RS232, делая поддержку AT-команд к большому сожалению бесполезной в такой интеграции.

Рис. 6 Модули mp3 плеера, использованные мной ранее для «озвучивания» Микротик
Модуль BT 201 кроме того имеет массу других команд и функций, в частности, связанных с вluetooth-подключением, слишком сложен и избыточен для нашей задачи (Для озвучивания роутеров Микротик я делал и его поддержку).
Следует отметить, что Open Smart («red serias») имеет ещё одну разновидность mp3 модуля, с маркировкой «Serial control USB mp3» и полностью повторяет стандартный mp3 Open Smart player А, но имеет несколько больший размер платы и разъем USB type C, для прямого подключения к ПК с целью более оперативной замены/добавления музыкальных треков. Можно использовать его, чтобы не открывать корпус готового устройства для пополнения библиотеки джинглов.

Рис 7. Модуль Open Smart serial mp3 Player A

Р��с 8. Модуль Open Smart serial control USB mp3 с разъемом USB type C
Теперь осталось подобрать готовые мелодии и сочинить тексты джинглов для mp3-модуля с целью смысловых озвучиваний событий голосом. Тексты составленных сообщений нужно было превратить в голосовые джинглы и для этого вовсе не нужно записывать их через микрофон. На сегодняшний день это легко сделать с помощью соответствующих онлайн интернет-сервисов, позволяющих конвертировать текст в речь. Я пользуюсь сервисом www.apihost.ru.
Далее создаем TF-карту для mp3-модуля со структурой папок 00, 01, 02 и т.д....(согласно мануалам к Open Smart или Catalex YX5300, можно скачать по ссылке ниже в папке 00), в каждой папке имена джинглов должны начинаться с номера 001-xx.mp3, 002-xyz.mp3 .... 255-zzyyxx.mp3. В отличии от варианта с «озвучиванием Микротик», для проекта Laurent Voice, я сделал пока джинглы только на русском языке (не дублируя их на английском) и поместив их «традиционно» в папку 02. Папка 00 содержит материалы и руководства по данной разработке. Папка 01 – короткие музыкальные заставки, мелодии будильников и аварийных ситуаций. 03 – по умолчанию свободная папка для английских копий джинглов папки 02 (может понадобиться для двуязычной версии в будущем), туда можно сложить до 255 звуковых сообщений и/или мелодий. Другие папки (04-08) содержат лично мною любимые песни и треки некоторых известных исполнителей и групп (их можно заменить на свои), а также фразеологизмы из некоторых фильмов и известных высказываний. Папка 09 также зарезервирована на всякий случай за автором. Вообще, согласно руководству к mp3 Open Smart, можно создать до 100 (00-99) папок, в каждой из которых может содержаться до 255 ($FF) файлов (тогда как для нашей задачи столько явно не нужно). Созданный мной вариант TF-карты можно свободно скачать здесь. Там же «лежит» список текстов джинглов папок 01 и 02.
Списки джинглов папок 01 и 02 вы можете видеть под спойлером:





Как Вы можете видеть, для каждого джингла указано его короткое название (это нужно для вызова джинглов скриптовыми функциями для Микротик, см.ниже) и его порядковый номер в шестнадцатиричном формате (как раз необходимый нам для проигрывания джингла командой Laurent $KE,PUT.
Пример файла настроек работы Laurent 5G c озвучиванием событий на модуле также можно скачать (файл LVsettings5G.txt) и импортировать его на свой модуль, подкорректировав некоторые параметры (такие, например, как телефонный номер админа). Там же можно скачать файл LVCat5G.txt, содержащий только настройки CAT-планировщика Laurent для избирательной загрузки только CAT-настроек. Вся работа была мной проделана для системы команд Open Smart, адаптировать её под Catalex YX5300/6300 будет не трудно (потребуется замена некоторых команд в разных правилах CAT).
Разумеется, если Вы установите у себя предложенный мной вариант CAT, то в готовых уже моих папках 01 и 02 для TF-карты переименовывать и удалять файлы пользователю нельзя (иначе Вы получите ошибки «озвучивания»). Также не желательно добавлять джинглы в эти папки, оставив эту прерогативу автору разработки, на тот случай, если выяснится, что я забыл что-то существенное в джинглах общего характера. В качестве персонализированных лучше использовать свободные «пользовательские» папки с номерами 10 и старше. Их можно использовать как угодно (Ваше право).
Как видно из Таблицы 1 формат команд для mp3 модулей следующий:
Для Оpen Smart:
7E NN CM XX ... YY EF, где
7E – байт начала команды
NN – длина команды в байтах, не включая 7E и EF
CM – сама команда (действие)
XX ... YY – параметры команды
EF – байт окончания команды
Для Catalex, при нормализованных по длине командах формат следующий:
7E FF NN CM XX ... YY EF, где значения байт аналогичные, FF обязательный второй байт (не известно зачем он нужен), NN всегда 06 (постоянная длина).
Нормализация по длине удобна для программирования, но совсем не обязательна. Все возможности модулей на уровне их команд собственно видны из Таблицы 1.
При этом, из достаточно широких возможностей команд управления этих mp3-модулей, для озвучивания событий в нашем случае достаточно использовать фактически две-три команды.
А именно, как самая главная, нам понадобиться команда проигрывания заданного файла из заданной папки. Это последовательности 7E0442XXYYEF для Open smart и 7EFF060F00XXYYEF для Catalex, где XX – номер папки, а YY – номер файла в папке (см. [Play with folder and file name] в сравнительной таблице команд). По этой команде плеер проигрывает только заданный джингл и останавливает воспроизведение по окончанию файла. Как раз то, что нам нужно !
У Open Smart также есть очень удобная для нас команда [Play combine] (45), позволяющая одной HEX-строкой задать проигрывание нескольких файлов, в том числе из разных папок в заданной последовательности (к сожалению, у Catalex YX5300/6300 такой команды вообще нет). Также можно использовать команды** [play], [pause], [next]** и [previous], как правило, удобные для проигрывания просто музыки (использования Laurent как DJ пульта).
При практической работе с модулями не обошлось без «ложки дегтя». Как оказалось, в прошивке Catalex YX5300/6300 есть какая то ошибка, в связи с которой модуль не проигрывает файлы с именами 059 и 060 из любой папки (эту ошибку можно обойти продублировав звуковые файлы под другими номерами). Open Smart тоже приподнес сюрприз – оказалось, что у него не работает команда «sleep» (7E033503EF) либо мне так и не удалоь понять как она правильно работает (тоже не критично, я имитировал эффект этой команды просто сбрасывая громкость воспроизведения в «0»).
Для примера, рассмотрим несколько созданных заданий для CAT-системы Laurent:
1. Озвучивание перезагрузки модуля по кнопке
Чтобы перезагрузить модуль по нажатию кнопки создадим в системе CAT модуля задание со свободным номером логически звучащее на человеческом языке так «если нажата кнопка 1, выполнить перезагрузку модуля». Для этого в событие добавим «линия IN_1», условие – «переход 0->1». В реакцию, которую назовем «перезагрузка модуля по кнопке 1» вставим команду воспроизведения звукового файла <42> под номером 09 из папки 02. Выглядит она для Laurent следующим образом $KE,PUT,U,H,7E04420209EF.

Рис 9. Задание CAT осуществляющее перезагрузку модуля при нажатии кнопки с предварительным озвучиванием планируемого действия.
Затем нам нужно вставить паузу равную длительности воспроизведения файла 09, а потом «уйти в перезагрузку». Но такой команды в системе CAT к сожалению нет. Но можно воспользоваться возможностью вкладки WEB-интерфейса «Скрипты». Там создадим скрипт с текстом «wait 3s; $KE,RST», а в нашем событии CAT вызовем выполнение этого скрипта (у меня он имеет номер 5).
Немного коряво, но работает. Будет намного лучше, когда разработчики Laurent соединят систему CAT и систему «Скрипты» и поймут, что собственно это должно быть некое единое целое – по сути им нужно создать скриптовый язык для Laurent по типу такого, как есть в RouterOS Микротик на базе языка LUA.
2. Переключение реле с озвучиванием
По сути аналогичная задача. Поскольку пульт радиоуправления у меня имеет 4 кнопки, а его приемник 4 канала управления, то займем ими входные линии IN3, IN4, IN5 и IN6. Для каждой кнопки создадим свое задание в системе CAT переключающее реле с «озвучиванием». Вот как это выглядит в готовом виде в CAT-системе (у меня это задания 41-44). Обратите внимание, что здесь для озвучивания я воспрользовался возможностью команды для Open Smart «play combine». Выглядит она так: $KE,PUT,U,H,7E064502XX02YYEF,где XX – файл озвучивания переключения реле 1-4 (разный для каждого из 4-х реле), а YY – также различный для всех файл «Реле номер N переключено». Команда 45 «play combine» отрабатывает четко: проиграв заданный первый файл сразу переходит ко второму, если нужно третьему и т.д…

Рис 10. Задания CAT для переключения реле кнопками радиопульта.
3. «Умный пинг»
Идею и реализацию я «слизнул» у создателя Laurent, Дмитрия Иванова (см. тут. Не буду повторяться как это работает, автор всё объяснил в своей заметке подробно и точно. Нам остается только добавить озвучивание в его алгоритм проверки хоста на пинг.
Ниже можно видеть как выглядит реализация в системе CAT:

Рис 11. Задания CAT для «продвинутого» пинга интернет.
Таким образом, мы можем озвучить любые события на контроллере Laurent. В папке 02 я представил набор наиболее полезных, универсальных «озвучек». Пользователь может создать дополнительно собственный набор таковых с текстами, имеющими значения именно в его конфигурации модуля Laurent, поместив их свободную папку TF-карты.
Например, вместо универсального, но безликого «Включение реле 1» лучше использовать применительно к Вашей ситуации что то вроде «Включение освещения фасада дома» или «Включение резервного роутера» и т. д.
После экспериментов на «открытой ране» и отработки процесса «озвучивания» на «фантоме» мне захотелось сделать «законченный» прибор, функционально и эстетически соответствующий заводскому корпусному устройству. Допускаю, что, в полной мере, мне этого не удалось (особенно сложно всегда сделать красивую электропроводку) но вот что собственно вышло:
Подобрав стильный корпус и другие необходимые компоненты (см. Таблицу 2) я не только объединил работу Laurent и mp3-плеера, но и параллельно создал, на мой взгляд, весьма симпатичный, полностью готовый к работе PDU, названный мною «Laurent Voice Box» со звукоречевым оповещением, поддержкой 4-х выходов С8 220В каждый по 1250 Ватт, 4-х канального пульта дистанционного управления 433 Мгц и светодиодной индикацией работы реле. Также внутри корпуса был предусмотрен датчик температуры и влажности DHT-22 на тот случай, если я захочу установить прибор в не отапливаемом помещении, и выносной датчик температуры DS18B20. Всё это, разумеется на базе Laurent 5G с модемом и сетевой картой.
Список комплектующих Laurent Voice Box®
модуль Laurent 5G - 1 шт
алюминиевый корпус, размерами 220 Х 178 Х 50 мм - 1 шт
провода силовые 2,5 мм и 0,75 мм
клеммники Wago 2 pin и 5 pin - 5 шт
термоусадки различного диаметра, черные, синие, красные +
разъемы выходные С8 и входной разъем 220В - 4шт+1шт
светодиод для индикации работы реле – 220В зеленый - 4 шт
светодиод индикации входящего напряжения 220В красный - 1 шт
датчик температуры и влажности DHT-22 - 1 шт
наружный датчик температуры DS18B20 - 1 шт
mp3 модуль OpenSmart A (или Catalex YX5300/6300) - 1 шт
TF-карта емкостью 2-32 ГБ - 1 шт
переходник интерфейса RS232 to TTL Max3232 - 1 шт
4-х кнопочный радиопульт управления 433 Мгц с блоком приема сигнала - 1шт+1ш1
кнопка без фиксации (для быстрой перезагрузки) - 1 шт
микротумблер или кнопка с фиксацией для программного выбора режима работы - 1 шт
разъем аудио 3,5 мм джек (к выходу mp3 плеера) и аналогичный на корпус для подключения DAC или колонок - 1шт +1шт
Отверстия в корпусе делал сам, «по старинке», пользуясь сверлами и напильником. Платы контроллера, переходника MAX 3232 и модуля Open Smart монтировал в корпус на латунные резьбовые вставки (стойки). Ниже визуально представлены некоторые этапы сборки Laurent Voice Box:

Рис. 12 Начало сборки. «Дно» алюминиего корпуса проложено тонким листом текстолита, на котором смонтированы платы Laurent 5G, Max 3232 и mp3 Open Smart. Выполнены отверстия на лицевой панели под джек питания 5,5 мм, SMA, RJ45.

Рис 13. Проточка отверстий под разъемы задней панели


Рис. 14,15 «Лицевая» панель Laurent Voice Box. Слева направо: разъем питания модуля Laurent 12В, антенный разъем модема SMA, сетевой RJ45, «красная кнопка» световые индикаторы работы реле (зеленые 4 шт), индикатор вводного 220В для управляемых реле. Микротумблер для выбора режима работы ещё не установлен.

Рис.16 Задняя панель устройства. Слева-направо: входной разъем 220В, верху – джек аудио 3,5 мм выход аудио для подключения усилителя или колонок; внизу – заземляющий контакт с «барашковым» винтом; выходные разъемы С8 220В 4 шт.

Рис.17 Вид «сверху». Как всегда, какой бы он не был на самом деле, корпус, оказывается «маловат» и содержит много хаотично расположенных проводов - мне так и не удалось этого избежать в отличии от "заводского" исполнения.

Рис 18. Готовое устройство Laurent Voice Box®
Осталось подключить колонки к выходному аудио-разъему на задней панели устройства и можно наслаждаться озвучиванием текущих событий. Кроме того, можно иногда просто слушать любимую музыку, предварительно записанную на TF-карту mp3 плеера.
Например, у меня это реализовано так:
Создаем задание для CAT-системы, которое временно отключает задание управления реле от кнопок радиопульта и включает задания, «подключающее» к радиопульту команды «play», «pause», «previous» и «next» и запускает воспроизведение «концерта». Есть также обратное задание – возвращение кнопкам радиопульта функций переключения реле и останавливающее воспроизведение. Наглядно эти задания CAT-системы можно видеть на Рис 20.
Несколько слов о работе радиопульта: не смотря на то, что корпус Laurent Voice Box цельно металлический (алюминий) сигнал от радиопульта до приемника доходит без проблем на расстоянии 10 метров. Большего мне и не надо. Если будут проблемы можно просверлить микроотверстие в корпусе и выпустить в него антенну радиоприемника. Приемник использовал вот такой (Рис. 19 слева), сейчас продаваемый повсеместно. Он «обучаем» и поэтому с ним можно использовать разные по внешнему виду брелоки (до 4-х кнопок), кому-какой понравится (мой справа).

Рис 19. «Обучаемый» 4-х канальный радиоприемник (слева) и пульт (справа) 433 Мгц

Рис 20. Управление воспроизведением с радиопульта
Моё устройство имеет на лицевой панели, описанную выше «красную» кнопку для перезагрузки и тумблер (а может поставлю "кнопку с фиксацией") для программного переключения режимов работы с озвучиванием/без озвучивания. То есть, если Вам надоело озвучивание событий Вы можете его удобно временно отключить не выдергивая джек колонок и не выключая питания колонок. Тумблер/кнопка замыкает/размыкает питание для IN2 входной линии Laurent, планировщик CAT обрабатывая события может проверять состояние этой линии. Я хотел сделать отключение/включение озвучивание через команду к модулю OpenSmart "sleep", но модуль никак не хотел "засыпать". Пришлось сделать через регулирование громкости (отключение - установка громкости в 0; включение, соответственно в среднее значение громкости - 15 (0F).
В заключение маленькая гнилая «вишенка на торте» - «говорящие часы» с кукушкой и ветсминистерскими звонками.
К сожалению, команда $KE,PUT,U,Н,<шестнадцатиричные данные> не поддерживает работу с «динамическими переменными» Laurent, что не позволяет вставлять в команду меняющееся время «на лету» и тем самым сделать озвучивание времени изящно в 1-2 задания CAT-системы. Приходится создавать задания для озвучивания каждого часа отдельно, что «пожирает» аж 24 ! (как известно часа в сутках) задания системы CAT (при разрешенном общем количестве заданий не более 50-ти). Но это временные трудности, которые, надеюсь, будут в скором времени устранены разработчиками Laurent.
Ночью, если озвучивать время не нужно, (ведь надо же и спать когда то) задания на «озвучку» скажем с полуночи до 6 утра в рабочие дни можно вообще не делать (уже экономия 7 заданий для CAT). Озвучить кукушку каждые полчаса текущего часа не сложно (выполнять задания на каждой тридцатой минуте), вестминистерские звонки на каждой пятнадцатой и сорок пятой минутах часа (не занятые другими часовыми озвучками) тоже пустяки (но плюс ещё два задания CAT).

...

Рис. 21,22 «Говорящие часы» с кукушкой и вестминистерскими звонками
Управление Laurent Voice из Роутер ОС Микротик
Все платы Laurent, как известно, имеют открытый API и могут получать команды от внешнего клиента в виде http get/post запросов. Команда $KE,PUT не является исключением, то есть можно «попросить» Laurent Voice запустить проигрывание мелодии или воспроизвести речевой джингл из внутренней или внешней сети с другого устройства. В качестве такого «просителя» может выступить, например, тот же роутер Микротик, написать соответствующие скрипты для которого не вызывает у нас никаких проблем. Также можно вызывать нужные запросы из внешней сети, в том числе и «озвучки», используя функцию Laurent «KE-Облако» (Рис 23, АКА «обрезаны»).

Рис. 23 Примеры «заданий» на отправку из KE-Облака на модуль LaurentVoice – работа с реле и озвучивание действий на модуле.
В качестве бонуса некоторые скриптовые функции, написанные для обращения к системе Laurent Voice по сети из Роутер ОС Микротик:
fLVoice - функция воспроизведение речевых джинглов из папки 02
fLVoiceAlarm - воспроизведение коротких заставок, аварий и будильников из папки 01
fLKE - функция пример вызова любых KE-команд Laurent, в том числе с озвучиванием.
Три указанные выше функции для RouterOS можно скачать по ссылке.
Кстати, имея Laurent Voice в сети можно даже обойтись без MikroJuxBox, переписав библиотеки джинглов в Laurent Voice и используя его для озвучивания событий на самом роутере Микротик.
Также можно использовать все возможности, созданной мной ранее скриптовой системы Laurent Telegram Terminal, работающей в среде Router OS Mikrotik и управляющей модулями Laurent из месенджера Telegram (надеюсь, его всё же не заблокируют). Это особенно удобно для управления контроллерами Laurent с мобильных устройств, где размеры экрана не удобны для работы с WEB-интерфейсом модуля или облачного сервиса. Ранее на Хабре была опубликована статья про одну из первых верcий LTT, а руководство к версии 1.4 можно скачать здесь. Добавить в LTT озвучивание команд Laurent совсем не сложно, например можно воспользоваться возможностями «мультикоманд» пользователя (см. руководство к LTT, начиная с версии 1.3).
Заключение
Думаю, поставленную себе задачу я выполнил. Кому нравятся «тихие» сетевые устройства, моё решение вряд ли подойдет, но, уверен, поклонники тоже найдутся. Относительно модулей Laurent, являющихся полностью отечественной разработкой, во всяком случае, это первый и единственный опыт озвучивания работы подобного устройства в нашей стране. Как не люблю я эту фразу, но «импортных аналогов нет» либо я их не знаю (в данном случае это предельно честно).
Мои благодарности инженерам Денису Молькову и Яшару Мамедову за пайку «проводочков» готового устройства.
Предложения и замечания по проекту Laurent Voice можно писать в комментариях и сюда: laurentvoicebox@inbox.ru
