Говорящие часы
По причинам, далёким от рациональных, захотелось мне вчера сколхозить для себя говорилку времени. Простой вариант проговаривания цифр показался очень скучным, сразу вспомнились лебедевские часы «Вербариус», где одно и то же время каждый раз пишется по-разному.
На сайте «Студии Лебедева», в разделе часов «Вербариус» есть языковые файлы, три из которых — для русского, английского и французского выгружены в виде обычных экселевских таблиц. Их легко преобразовать в формат 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, но если понравится, настрою как службу, с вызовом через горячую клавишу.
Никогда не думал что они захардкодили фразы, я думал они как-то их генерируют на ходу. Но вариант с хардкодом надёжен, не считая что у них в русском примере поехало время и они этого не заметили:
13:59 Тринадцать часов пятьдесят девять минут
13:59 Четырнадцать часов ноль минут
...
23:58 Двадцать три часа пятьдесят девять минут
Наблюдательность 80 уровня )
чойта? я увидел что последняя строчка не сходится и пошёл смотреть где именно сломалось