07.02.2023: Чайный вторник

Утро. Актуализирую очередной автотест. Параллельно бьюсь об аудиосистему Тенетты, которая отказывается работать иначе чем из командной строки.

Кажется аудиосистему удалось победить с какой-то n³’ой попытки. Теперь могу воспроизводить mp3-файл. Ура! Или сначала ребут?

Ребут-ребут! Ещё как ребут! Нужно убедиться… Только на этот раз штатным инструментом, а не этими вашими шеллами.

После перезагрузки аудиосистема продолжает работать. Ну и отлично. Отпиваю ещё один глоток крепкого-ароматного и иду искать синтезатор речи для python, ибо пришло время.

Проблема Алисы от Яндекса в том, что она пассивна. Я конечно могу настроить её так, чтобы она говорила по наступлении некого события. Например, это может быть точное время, закат/восход, моя фраза или… Да собственно всё.

  • Я не могу сделать так, чтобы Алиса, при достижении температуры на термодатчике свыше 50С, сообщала об этом (громко и в стихах).
  • Я не могу заставить Алису озвучить количество подписчиков на моём канале, в момент появления нового подписчика.
  • Я даже не могу её спросить: “Сколько непрочитанных писем в моей почте”.

Точнее, спросить-то могу, но ответит она явную чушь.

Нет у Алисы полноценных условных конструкций, постоянного гибкого мониторинга событий, встроенного браузера с возможностью авторизации и парсинга страницы…. Да там много чего нет.

А ещё, она плотно зависит от состояния сети. Отвалится интернет, и привет.

Вроде на новой версии яндекс-станции это как-то пофиксили, но не уверен.

Вывод? Алиса не должна быть основным инструментом интерфейса управления. Как дополнительный и дублирующий – вполне, но не более того.

А значит что? А значит нужно прокачивать Тенетту.

В качестве основного удалённого канала связи с ней можно сделать Телеграмм. В качестве дополнительного – ту же Алису.

Продолжил обучать Тенетту говорить уже в обед. Пытался запустить espeak-ng из Python-скрипта через os.system().

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

“Внимание. Программа еспик-нг читает вам текст на великом и могучем русском языке. Внимайте и наслаждайтесь услышанным.”

 

Ощущение, будто кровь течёт из ушей.

Это не голосовой синтезатор. Это какой-то зловонный высер зарубежной IT-индустрии.

При том, под Centos 8 с Python 3.9 мне вообще не удалось найти ничего годного. Зато под Windos – завались-заешься.

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

А мне как с этим быть? Можно конечно “не изобретать велосипед”. Для бытовых нужд хватит апишки от гуглопереводчика. Однако, это плохая практика. Робот должен иметь определённую степень автономности. В идеале вообще офлайновым, кроме случаев когда что-нибудь посмотреть в сети действительно необходимо.

В общем, как инструмент, эту функцию пока оставлю. Однако, судя по всему, придётся разрабатывать собственный синтезатор речи. И мне плевать если это будет “механический голос робота”. Тенетте не нужно прикидываться человеком. Зачем кого-то обманывать? Важно, чтобы речь получалась чёткой и разборчивой. Остальное – лирика.

Сколько звуков в русской речи?

  • Гласные: А, Е, Ё, И, О, У, Ы, Э, Ю, Я – 10 (могут быть ударными и безударными, а значит 20).
  • Согласные: Б, В, Г, Д, Ж, З, Й, К, Л, М, Н, П, Р, С, Т, Ф, Х, Ц, Ч, Ш, Щ – 21 (но могут быть мягкими (кроме четырёх) и твёрдыми, а значит 38).
  • Пауза: межбуквенная (малая, большая), между слов, смысловая – 4.

Итого: 62 звука. Из них, в записи нуждается только 58.

На латиницу и прочее можно торжественно забить гигантский болт и произносить её в русской транскрипции.

На одну лишь запись/сохранение уйдёт 3-5 часов примерно. А ведь нужно ещё научиться эти звуки слитно проигрывать.

Задачка…

А умеет-ли Raspberry Py Pico проигрывать mp3?

Впрочем, даже если и нет, существует формат WAV, а его умеет проигрывать даже слабенькая Arduino. Хотя и сомневаюсь, что она способна вместить 58 звуков речи.

Это я к тому, что сохранять звуки следует сразу в обоих форматах.

В теории, на базе микроконтроллера, возможно создать вокабулятор и передавать специально обработанный текст на него через COM-Port.

Рабочий день закончился, но не работа. Тут-же написали заказчики из Учебного Центра. Проблемка у них.

Суть простая: Excell не понимает коды типа 001259. Он тупой, он вместо числового кода видит число, а потому тут-же кастрирует его до 1259. Для таблицы экспорта, которую потом будут импортировать на сайт, это критично.

Формально ты можешь поменять тип ячейки, или воткнуть символ ‘ перед кодом (типа ‘001259), но это всё костыли и фу-фу-фу.

Что делаю я?

Создаю массив с идентификатором столбца(-ов), где должен быть код, и с количеством знаков, которые должны быть у кода. При импорте таблицы, если данные поступили из этого столбца, тупо добавляю ведущие нули до нужного количества знаков.

//Проверяю значение полей с ведущими нулями
//$arrProperties - массив в фрмате "ID_ПОЛЯ" => "ЗНАЧЕНИЕ_ПОЛЯ" (здесь и будем добавлять ведущие нули в нужную ячейку)
//$weight_null_field - массив в фрмате "ID_ПОЛЯ" => длина_поля
foreach ($arrProperties as $prop_c_code => $prop_c_value) {
    if (isset($weight_null_field[$prop_c_code]) && intval($prop_c_value) > 0) { //Если ID поля найден в $weight_null_field и поле не пустое, то...
        $arrProperties[$prop_c_code] = str_pad(intval($prop_c_value), $weight_null_field[$prop_c_code], '0', STR_PAD_LEFT);
    }
}

Не скажу что прям изящно, но тут Excell (который вообще для другого), а значит нормально. В массив можно будет добавить и другие идентификаторы столбцов, если когда-нибудь понадобятся.

Самым сложным было придумать оптимальный вариант.

Чем ещё заняться вечером после работы? Стрим по зомбям или анимешка “Великолепный парк Амаги”?

Победила анимешка. Довольно оригинально сделана, кстати. Вроде сказка (с принцессами, драконами и прочим), но в нашей современной реальности. А ещё порадовало то, что концовка на 12-й серии, а после неё ещё пару серий бонусом.

"Великолепный парк Амаги", кадр из 14-й серии

Типа повседневная жизнь главных героев, без превозмоганий и основной сюжетной линии, но с неожиданными концовками.

Иногда этого очень не хватает – убедиться, что у полюбившихся персонажей после финальных титров всё сложилось хорошо.

Здорово провёл время. Бесполезно, но… Хотя, отдых – тоже польза. Ещё какая!

Хорошее окончание дня. Самое время выпить чаю, умыться и идти в кроватку. I’m OFF.

Напишите комментарий

Введите имя

Введите адрес электронной почты

Введите адрес вашего сайта

Нажмите эту кнопку, чтобы отправить комментарий.

Введите текст комментария