unit Sound_player;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, MPlayer, StdCtrls, ExtCtrls;

type
  TSoundPlayerForm = class(TForm)
    mdpSoundPlayer: TMediaPlayer;
    tmTimer: TTimer;
    opdOpenDialog: TOpenDialog;
    bnOpenFile: TButton;
    lbMainTime: TLabel;
    lbFileName: TLabel;
    bnPrevSt: TButton;
    bnNextSt: TButton;
    procedure bnOpenFileClick(Sender: TObject);
    procedure tmTimerTimer(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure bnNextStClick(Sender: TObject);
    procedure bnPrevStClick(Sender: TObject);
  private
    { Private declarations }
    procedure UpdateViewTime;
    function FileLangToStr(leng: Integer): string;
  public
    { Public declarations }
  end;
type
  HMSRec=record
  Hours: byte;
  Minutes: byte;
  Seconds: byte;
  NotUsed: byte;
  end;

const
   // Константа для перемотки на 10000 миллисекунд
   perem=10000;
var
  SoundPlayerForm: TSoundPlayerForm;

implementation

{$R *.dfm}
function TSoundPlayerForm.FileLangToStr(leng: longint): string;
var
   // Переменная результирующей строки
   strTime: string;
   sec: longint;
   min: longint;
begin
// Получаем секунды и минуты из миллисекунд (leng)
sec := trunc(leng/1000);
min := trunc(sec/60);
sec := sec - min*60;
strTime := IntToStr(min);
// Если секунд меньше десяти, то переобразуем результирущую
// строку (участок минут) добовляя '0' спереди
if sec < 10 then strTime := strTime + ':0' + IntToStr(sec)
   else strTime := strTime + ':' + IntToStr(sec);
FileLangToStr := strTime;
end;

// Процедура вывода или обнавления индикаторов
procedure TSoundPlayerForm.UpdateViewTime;
var
   //Длина файла, позиция в файле и остаток
   leng, posit: longint;
begin
   // Находим длинну воспроизводимого файла
leng := mdpSoundPlayer.Length;
   // Находим позицию в воспроизводимом файле
posit := mdpSoundPlayer.Position;
   // Преобразум время в строку
lbMainTime.Caption := FileLangToStr(posit);
   // Устанавливаем имя файла
lbFileName.Caption := mdpSoundPlayer.FileName;
end;


procedure TSoundPlayerForm.bnOpenFileClick(Sender: TObject);
begin
if opdOpenDialog.Execute=true then
   begin
   //открываем файл
   mdpSoundPlayer.FileName := opdOpenDialog.FileName;
   mdpSoundPlayer.Open;
   //наполняем индикаторы осмысленными значениями
   UpdateViewTime;
   //включаем таймер
   tmTimer.Enabled := true;
   end;
end;       

// Процедура обработки срабатывания таймера
procedure TSoundPlayerForm.tmTimerTimer(Sender: TObject);
begin
// Обнавление значений экрана
UpdateViewTime;
end;

// Обработчик активации формы
procedure TSoundPlayerForm.FormActivate(Sender: TObject);
begin
// Временное выключение таймера
tmTimer.Enabled := false;
// Задание значений
lbMainTime.Caption := '00:00';
lbFileName.Caption := 'no file...';
// Установка фильтров для диалога
opdOpenDialog.Filter :=
 'MP3 music (*.mp3)|*.MP3|Wav files (*.wav)|*.WAV';
end;

// Перемотка вперед
procedure TSoundPlayerForm.bnNextStClick(Sender: TObject);
begin
if mpCanPlay in mdpSoundPlayer.Capabilities then
   begin
   if (mdpSoundPlayer.Position+perem)<=mdpSoundPlayer.Length then
      mdpSoundPlayer.Position := mdpSoundPlayer.Position + perem
   else
      mdpSoundPlayer.Position := mdpSoundPlayer.Length;
   mdpSoundPlayer.Play;
   end;
end;

// Перемотка назад
procedure TSoundPlayerForm.bnPrevStClick(Sender: TObject);
begin
if mpCanPlay in mdpSoundPlayer.Capabilities then
   begin
   if mdpSoundPlayer.Position>=perem then
      mdpSoundPlayer.Position := mdpSoundPlayer.Position - perem
   else
      mdpSoundPlayer.Position := 0;
   mdpSoundPlayer.Play;
   end;
end;

end.
