LINUX.ORG.RU

Помощь в написании скрипта


0

2

Цель: при нажатии горячей клавиши произносилось время

Реализация: записать 84 звуковых файла (24 часа + 60 минут), а вот какой скрипт будет?



Последнее исправление: GRSrus (всего исправлений: 1)

какое извращение. тут недавно искали читалки. поищи, уж на что-что, а на это ее возможностей точно должно хватить. ну а дальше совсем просто, man date.

silw ★★★★★
()

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

Идея плоха: а) нужно учитывать паузы между словами, потому либо ты будешь много возиться, либо оно будет криво звучать, б) визуально время воспринимается намного лучше.

wyldrodney
()
#!/bin/bash

mplayer /var/lib/voice_clock/hours/$(date +%H).ogg
sleep 0.5 # Паузу можно подобрать экспериментально
mplayer /var/lib/voice_clock/minutes/$(date +%M).ogg

В каталоги hours и minutes кладешь все свои записи, например, hours/05.ogg произносит «пять часов», minutes/03.ogg — «три минуты».

nnz ★★★★
()

Записываешь файлы, складываешь их по директориям hours и minutes, нызываешь файлы 00.wav, 01.wav, 02.wav и т.д.
Скрипт парсит текущее время и закидывает часы и минуты в переменные. После чего проигрывает файлы примерно так

 aplay hours/"$hour".wav && aplay minutes/"$minutes".wav
kernelpanic ★★★★★
()
Ответ на: комментарий от kernelpanic

У nnz вариант более правильный.

//все. пойду просплюсь.

kernelpanic ★★★★★
()

>записать 84 звуковых файла (24 часа + 60 минут)

Тупо. Ты не посчитал варианты «пол шестого», «без четверити час» и т.п.

Led ★★★☆☆
()

В кедах часы говорящие, стащи оттуда.

abraziv_whiskey ★★★★★
()
Ответ на: комментарий от Led

> Ты не посчитал варианты «пол шестого», «без четверити час» и т.п.

Зачем? «пол шестого» = «5 часов, 30 минут.»

drull ★☆☆☆
()
Ответ на: комментарий от Led

угу. еще я бы добавил варианты «вставай блеать», «на работу сцуко» и «самое время забухать».

Komintern ★★★★★
()

Вообще-то, записывать надо будет меньше: пусть даже 24 файла для часов (если не комбинировать 22=20+2), но для минут 21 файл от 0 до 20 + 3 файла для 30,40,50, плюс 5 файлов - «час», «часа», «минута», «минуты», «минут». Итого: 53 звуковых кусочка. Написать проще, по-моему, на сях, а не баше (в башевском скрипте возможны запинки между воспроизведением файлов), и звуки можно хранить не в отдельных файлах, а в одном бинарнике. Как определять на основе данных о текущем времени, какие файлы и в какой последовательности проигрывать - простенькая задачка, которая присутствует во многих учебниках (только там генерируется текстовая информация).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от nnz

В качестве улучшения порекомендую «однострочник»:

$player voice_clock/hours/$(date +%H).ogg voice_clock/hours/silence0.5sec.ogg voice_clock/minutes/$(date +%M).ogg

sdio ★★★★★
()
Ответ на: комментарий от wyldrodney

> визуально время воспринимается намного лучше.

Есть мнение, что товарищ имеет дело с телефонией.

sin_a ★★★★★
()
Ответ на: комментарий от sin_a

>>визуально время воспринимается намного лучше.

Есть мнение, что товарищ имеет дело с телефонией.

Надеюсь что нет, иначе бы ему не стоило задавать таких примитивных вопросов.

wyldrodney
()
Ответ на: комментарий от GRSrus

>>они очень убого звучат

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

mclaudt
()

Писал такое на Bash с пол года назад, произносит время, температуру за окном и количество новых писем.

WORKFOLDER=$1
	INDATAALL=`echo $@ | egrep -o "[-\+\−]?.?[0-9]{1,2}$" | head -n 1`
	INDATA=`echo $INDATAALL | egrep -o "[0-9]{1,2}$" | head -n 1`
	SYMBOL=`echo $INDATAALL | egrep -o "[-|+|−]$"`
	INDATA=${INDATA#0}
	INDATA1=`echo $INDATA | cut -b 1`
	INDATA2=`echo $INDATA | cut -b 2`
	if [[ "-" == "$SYMBOL" || "−" == "$SYMBOL" ]] && [[ $INDATA -ne 0 ]] ; then
	    aplay ${WORKFOLDER}/minus.wav 2>&1>&/dev/null	
	elif [[ '+' == "$SYMBOL" && $INDATA -ne 0 ]] ; then
	    aplay ${WORKFOLDER}/plus.wav 2>&1>&/dev/null
	fi
	if [[ $INDATA -ge 0 && $INDATA -lt 20 ]] ; then
			aplay ${WORKFOLDER}/${INDATA}.wav 2>&1>&/dev/null			
	elif [[ $INDATA -gt 19 && $INDATA -lt 100 ]] ; then
			aplay ${WORKFOLDER}/${INDATA1}0.wav 2>&1>&/dev/null			
			if [[ $INDATA2 -ne 0 ]]	; then 
				aplay ${WORKFOLDER}/${INDATA2}.wav 2>&1>&/dev/null
			fi
	fi 

Вот примерная реализация произноса цифр от -99 до +99, остальное не должно составить труда дописать

pavel38
()

Есть уже лет как 8 программа такая. Весит метр от силы. Как называется не помню :) по репам поищи

dikiy ★★☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.