Пишу, по большей части, про историю, свою жизнь и немного про программирование. Живу в Казани.

Говорящие часы

По причинам, далёким от рациональных, захотелось мне вчера сколхозить для себя говорилку времени. Простой вариант проговаривания цифр показался очень скучным, сразу вспомнились лебедевские часы «Вербариус», где одно и то же время каждый раз пишется по-разному.

На сайте «Студии Лебедева», в разделе часов «Вербариус» есть языковые файлы, три из которых — для русского, английского и французского выгружены в виде обычных экселевских таблиц. Их легко преобразовать в формат CSV при помощи приложения «Намберс» или всем знакомого «Экселя».

В получившемся файле много пустых полей и лишних пробельных символов, которые будут мешать, их легко удалить утилитой командной строки sed:

sed -i '' -E "s/; +| +;/;/g; s/;+/;/g; s/;[ "$'\r'"]*$//;" ~/Downloads/russian.csv

У получившегося файла очень простой формат — сначала идёт время без ведущего нуля, потом — варианты для произношения, разделённые точкой с запятой. На мой взгляд, для поиска нужной строки и выбора случайного вариант для произношения лучше всего подойдёт утилита awk.

Если направить её вывод маковской утилите say, то говорящие часы готовы:

awk -F\; "BEGIN{srand}/^$(date +%k:%M|xargs)/{print \$(int(2+rand*(NF-1))); exit;}" \
~/Downloads/russian.csv | xargs say

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

2 комментария
hshhhhh.name 2020

Никогда не думал что они захардкодили фразы, я думал они как-то их генерируют на ходу. Но вариант с хардкодом надёжен, не считая что у них в русском примере поехало время и они этого не заметили:

13:59 Тринадцать часов пятьдесят девять минут
13:59 Четырнадцать часов ноль минут
...
23:58 Двадцать три часа пятьдесят девять минут

Евгений Степанищев 2020

Наблюдательность 80 уровня )

hshhhhh.name 2020

Наблюдательность 80 уровня )

чойта? я увидел что последняя строчка не сходится и пошёл смотреть где именно сломалось