В этой статье, я хотел бы рассказать о том, как можно сделать свой будильник. Да, я знаю, что в сети Интернет таких примеров полно и вообще такие программы на компьютер в виде будильников, «напоминалок» и так далее огромное количество в виде готового и профессионального, но я решил сделать что-то для себя. Это конечно будет очень просто организовано и делал я исключительно для себя и своих привилегий. Ведь я, когда ложусь спать, всегда на ноутбуке включаю проигрыватель с множеством альбомов музыки. Ну мне, например, очень удобно под музыку засыпать, да и думаю, что многим тоже. Так вот, конечно всю ночь, чтобы музыка играла — не дело, так как посреди ночи от нее же можешь и проснуться. Так вот, я решил сделать так, чтобы можно было поставить будильник на время, когда музыка будет отключаться, а точнее не отключаться, а просто выключаться системный звук на компьютере. Ну, а также можно будет установить будильник, когда музыка наоборот — будет включаться, то есть получается обычный будильник. Например, установим время, чтобы с 12 ночи до 1 часу ночи играла музыка и она выключалась в час ночи, а на 7 часов утра музыка включалась (вот, что я сделал для себя). Да, я конечно знаю, что можно это сделать с помощью визуальных компонентов (TMediaPlayer), с помощью библиотеки (bass.dll), то есть сделать свой проигрыватель и его останавливать, проигрывать и так далее. Но я решил сделать — ну уж очень по-простому. Я использую проигрыватель JetAudio, в котором если заканчивается Плейлист, то он начинается играть заново, так что мне не придется беспокоится о том, что вдруг будильник сработает в тот момент, когда проигрыватель остановлен (то есть все песни уже проиграны).
Да, еще хочу сказать, что это все можно сделать также с использованием своего собственного таймера времени, но я решил сделать зависимость от системного времени компьютера. Мы просто будем проверять соответствует ли значения времени, установленные пользователем, системному времени компьютера. В своем проекте, я установил TPageControl и создал 2 вкладки — Audio и Будильник. На вкладке Audio мы сможем устанавливать время, через которое нам необходимо выключать музыку, а на вкладке Будильник мы будем устанавливать время, когда мы будем включать музыку в качестве будильника. На этих 2-х вкладках я установил 6-ть TSpinEdit, по 3-и на каждой. В них мы будем устанавливать время в виде: часы, минуты, секунды в отдельности. Для начала на событие OnShow нашей формы мы напишем код, который будет считывать системное время на момент запуска программы, чтобы пользователь потом сам смог установить, когда ему выключать/включать будильник. Для этого мы воспользуемся функций FormatDateTime, а сам код будет следующим
procedure TForm1.FormShow(Sender: TObject);
begin
try
SpinEdit1.Value:=StrToInt(FormatDateTime('hh',Time));
SpinEdit2.Value:=StrToInt(FormatDateTime('nn',Time));
SpinEdit3.Value:=StrToInt(FormatDateTime('ss',Time));
SpinEdit4.Value:=StrToInt(FormatDateTime('hh',Time));
SpinEdit5.Value:=StrToInt(FormatDateTime('nn',Time));
SpinEdit6.Value:=StrToInt(FormatDateTime('ss',Time));
except
on e:Exception do
//-//-//-//-//-//-//
end;
end;
Дальше мы работаем с вкладкой Audio. Добавляем на нее TTimer, а также кнопку, по нажатию на которую мы будем устанавливать время и запускать наш таймер, который будет следить за тем, когда стоит выключить системный звук. Да, не забываем установить свойство Enabled в False у TTimer. Далее на кнопку Установить, мы будем активировать наш таймер, то есть Enabled будем устанавливать в True, а на событие OnTimer мы напишем следующий код
procedure TForm1.Timer2Timer(Sender: TObject);
begin
try
if (SpinEdit4.Value=StrToInt(FormatDateTime('hh',Time))) and
(SpinEdit5.Value=StrToInt(FormatDateTime('nn',Time))) and
(SpinEdit6.Value=StrToInt(FormatDateTime('ss',Time))) then
begin
waveOutSetVolume(0,0);
Timer2.Enabled:=False;
end;
except
on e:Exception do
//-//-//-//-//-//-//
end;
end;
Да чуть не забыл, нам необходимо в Uses подключить модуль MMSystem, из данного модуля, нам понадобится функция waveOutSetVolume, с помощью которой мы и будем отключать системный звук (устанавливать его в значение 0). То есть, как вы видите, мы каждую секунду проверяем время, установленное пользователем, с системным временем компьютера, если оно совпало, то с помощью функции waveOutSetVolume мы устанавливаем системный звук в 0 (громкость в 0), а проигрыватель продолжает играть песни, но мы их уже не слышим. Вот так теперь я засыпаю под музыку. Если мне надо будильник, то мы переходим на вкладку Будильник. Там также установлены 3-и TSpinEdit, а также установим еще один TTimer, в свойстве Enabled, которого мы также установим в False. Далее на кнопку Установить мы также активируем наш TTimer, то есть Enabled устанавливаем в True. А на событие OnTimer нашего TTimer, который отвечает за будильник (включение музыки) напишем следующий код
procedure TForm1.Timer1Timer(Sender: TObject);
begin
try
if (SpinEdit1.Value=StrToInt(FormatDateTime('hh',Time))) and
(SpinEdit2.Value=StrToInt(FormatDateTime('nn',Time))) and
(SpinEdit3.Value=StrToInt(FormatDateTime('ss',Time))) then
begin
waveOutSetVolume(0,65535);
Timer1.Enabled:=False;
end;
except
on e:Exception do
//-//-//-//-//-//-//
end;
end;
То есть, как видите на будильник мы также проверяем время, установленное пользователем, с системным временем компьютера, если совпала, то с помощью функции waveOutSetVolume устанавливаем громкость на максимум, в итоге, так как проигрыватель не прекращал играть, то он продолжает проигрывать песни, а мы уже их можем и услышать (в зависимости от того — кто, как крепко спит =)).
Выключение музыки можно было организовать путем завершение процесса. То есть, можно было просто завершить процесс проигрывателя, но тогда уже с будильником надо думать, что-то свое. Ну вот такой — очень простой будильник я сделал для себя, который и использую сейчас. Вот скриншоты:
Исходники статьи можно скачать тут (полный проект)