Делаем свой будильник

6 минут на чтение

В этой статье, я хотел бы рассказать о том, как можно сделать свой будильник. Да, я знаю, что в сети Интернет таких примеров полно и вообще такие программы на компьютер в виде будильников, «напоминалок» и так далее огромное количество в виде готового и профессионального, но я решил сделать что-то для себя. Это конечно будет очень просто организовано и делал я исключительно  для себя и своих привилегий. Ведь я, когда ложусь спать, всегда на ноутбуке включаю проигрыватель с множеством альбомов музыки. Ну мне, например, очень удобно под музыку засыпать, да и думаю, что многим тоже. Так вот, конечно всю ночь, чтобы музыка играла — не дело, так как посреди ночи от нее же можешь и проснуться. Так вот, я решил сделать так, чтобы можно было поставить будильник на время, когда музыка будет отключаться, а точнее не отключаться, а просто выключаться системный звук на компьютере. Ну, а также можно будет установить будильник, когда музыка наоборот — будет включаться, то есть получается обычный будильник. Например, установим время, чтобы с 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 устанавливаем громкость на максимум, в итоге, так как проигрыватель не прекращал играть, то он продолжает проигрывать песни, а мы уже их можем и услышать (в зависимости от того — кто, как крепко спит =)).

Выключение музыки можно было организовать путем завершение процесса. То есть, можно было просто завершить процесс проигрывателя, но тогда уже с будильником надо думать, что-то свое. Ну вот такой — очень простой будильник я сделал для себя, который и использую сейчас. Вот скриншоты:

Исходники статьи можно скачать тут (полный проект)

Facebook Vk Ok LinkedIn Telegram

Похожие записи:

Всем привет, сегодня мы рассмотрим урок, связанный с Базами данных, а в частности мы рассмотрим, как сделать подсказку пользователю, который вводит данные, например, для поиска. Данную функцию можно наблюдать во многих программах, а также на многих сайтах, нап...
Ну что, любитель MapWindow GIS, пора возвращаться к нашей теме. Давненько мы ничего интересного не рассматривали. Долго искал тему, чтобы такое новое и интересное написать про MapWindow GIS, в итоге нашел и решился. Помните нашу статью о том, когда мы выделяли...
Итак кaк и обещал, долгожданная статья по конвертации данных из Excel в Access. Тут скажу сразу ничего сложного нету, только лишь воспользуемся знаниями, полученными ранее при работе с данными БД по технологии ADO. Смысл всего этого, делаем запрос в MS Excel н...