В разделе Type объявляем




Далее размещаем на форме компоненты

Самый верхний компонент TPaintBox из вкладки System, в него будем выводить эффекты визуализации. Сразу установим свойство Name -> pb1 для этого компонента.

Затем размещаем компонент TScrollBar из вкладки Additional, он будет показывать текущую позицию при проигрывании трека.

Ниже слева и справа от ScrollBar размещаем компоненты TLabel из вкладки Standart. Левый Label1 будет показывать текущее время проигрывания, а правый Label2 время проигрывания трека.

В свойство Caption для Label1 и Label2 я написал Время.

Еще ниже размещаем три кнопки TButton из вкладки Standart и устанавливаем соответственно свойства Caption - Play, Pause, Stop.

Далее размещаем два компонента TTrackBar из вкладки Win32 и над ними два TLabel. Над первым Trackbar1 подписываем Громкость, над вторым Trackbar2 подписываем Баланс.

усмотрению.

Под эквалайзером размещаем две кнопки TButton в свойстве Caption этих кнопок пишем Open song... и Очистить соответственно.

Под кнопками размещаем компонент TListBox из вкладки Standart.

Далее кидаем на форму компонент TOpenDialog из вкладки Dialogs и компонент TTimer из вкладки System. Свойство Interval для Timer1 устанавливаем равным 30, а свойство Option->ofAllowMultiSelect для компонента OpenDialog1 устанавливаем True.

Создадим отдельное окно для будущего эквалайзера:File-New form

В нем размещаем 10 компонентов TTrackBar для эквалайзера, свойство Orietation устанавливаем trVertical. Под ними с помощью компонентов TLabel подписываем частоты (80 Гц, 170 Гц, 310 Гц, 600 Гц, 1 кГц, 3 кГц, 6 кГц, 10 кГц, 12 кГц, 14 кГц), значения частот можно будет потом изменять.

Остальные свойства визуальных компонентов будем задавать потом.

Приступим к написанию кода программы.

В разделе Uses пропишем bass, это необходимо для подключения библиотеки Bass.dll.

Далее научимся загружать песни в PlayList.

Для этого в разделе Var объявим переменную

i:integer;//номер проигрываемой песни в playlist

и пременную

filename: string;//имя файла

Затем дважды щелкаем на кнопке Open song... и пишем следующий код:

procedure TForm_player.Button1Click(Sender: TObject);

var j: integer;

begin

OpenDialog1.Title:= 'Open Files';

OpenDialog1.Filter:= 'mp3|*.mp3'; //фильтр для файлов

//проверяем если PlayList не пустой то запоминаем номер текущей песни

//иначе устанавливаем номер песни 0 (первая позиция в PlayList)

if listbox1.Count<>0 then i:=ListBox1.ItemIndex else i:=0;

//Диалог открытия файла

if not OpenDialog1.Execute then exit;

begin

for j:=0 to OpenDialog1.Files.Count-1 do

begin

//заполняем PlayList

ListBox1.Items.Add(OpenDialog1.Files.Strings[j]);

end;

end;

//запоминаем имя файла текущей песни в плейлисте

Filename:=ListBox1.Items.Strings[i];

//Выделяем эту песню в PlayList

ListBox1.ItemIndex:=i;

end;

Сохраняем и тестируем работу PlayList.

Создадим процедуры OnClick для кнопок Play, Pause, Stop,previous,next

Кликаем дажды по кнопке Play и пишем следующий код:

procedure TForm_player.Button1Click(Sender: TObject);

begin

//Проверяем если воспроизведение уже идет то выходим

if mode=play then exit;

//Запускаем процедуру проигрывания

player;

end;

Аналогично для кнопок Pause и Stop.

Для Pause

procedure TForm_player.Button2Click(Sender: TObject);

begin

//Проверяем идет ли воспроизведение

if mode=play then

begin

BASS_ChannelPause(Channel);//останавливаем воспроизведение - пауза

mode:=paused;//устанавливаем playmode -> пауза

end;

end;

Для Stop

procedure TForm_player.Button3Click(Sender: TObject);

begin

//Проверяем идет ли воспроизведение

if mode=play then

begin

BASS_ChannelStop(Channel);//останавливаем воспроизведение - стоп

mode:=Stop;//устанавливаем playmode -> стоп

end;

end;

 

Для кнопок next и previous используем следующие коды

Next

// след песня из листа

if i<ListBox1.Items.Count-1 then

begin

inc(i);

Filename:=ListBox1.Items.Strings[i];

ListBox1.ItemIndex:=i;

mode:=stop;

player;

end

//если лист закончился - выходим

else exit;

Для предыдущей

//выбираем предыдущую песню из плейлиста

if i>0 then

begin

dec(i);

Filename:=ListBox1.Items.Strings[i];

ListBox1.ItemIndex:=i;

mode:=stop;

player;

end

else

exit;

В разделе Var объявляем еще две переменные

Channel: DWORD;//дескриптор канала

Mode: TPlayerMode;//PlayMode

var

Form_player: TForm_player;

i:integer; //номер проигрываемой песни в playlist

filename: string;//имя файла

Channel: DWORD;//дескриптор канала

Mode: TPlayerMode;//PlayMode

В разделе Type объявляем

TPlayerMode = (Stop, Play, Paused);

и создадим новую процедуру player(проигрывание файла);

Для этого перед разделом private пишем:

procedure Player;

 

 

А после раздела

implementation

{$R *.dfm}

пишем код процедуры:

procedure TForm_Player.Player;

begin

//проверяем, если не пауза

if mode<>paused then begin

//то проверяем существует ли файл загружаемый из PlayList

//если файл не существует, то выходим

if not FileExists(FileName) then begin ShowMessage('Файл не существует');exit;end;

//останавливаем и освобождаем канал воспроизведения

BASS_ChannelStop(Channel);BASS_StreamFree(Channel);

//пытаемся загрузить файл и получить дескриптор канала

Channel:= BASS_StreamCreateFile(FALSE, PChar(FileName), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});

//если дескриптор канала=0 (файл по какой то причине не может быть загружен),

//выдаем сообщение об ошибке и выходим

if Channel=0 then begin ShowMessage('Ошибка загрузки Файла');exit;end;

end;

 

//командой BASS_ChannelPlay(Channel, False) пытаемся воспроизвести файл,

//если это невозможно, то выдаем сообщение об ошибке

if not BASS_ChannelPlay(Channel, False) then

begin ShowMessage('Ошибка воспроизведения файла');exit;end;

 

//присваеваем заголовку формы имя проигрываемого файла

Form_Player.Caption:=ExtractFileName(FileName);

//Устанавливаем PlayMode - play

mode:=play;

end;

 

Для события OnCreate формы пишем:

 

procedure TForm_player.FormCreate(Sender: TObject);

begin

// проверка корректности загруженной BASS.DLL

if (HIWORD(BASS_GetVersion) <> BASSVERSION) then

begin

MessageBox(0,'Не корректная версия BASS.DLL',nil,MB_ICONERROR);

Halt;

end;

 

 

// Инициализация аудио - по умолчанию, 44100hz, stereo, 16 bits

if not BASS_Init(-1, 44100, 0, Handle, nil) then

begin

MessageBox(0,'Ошибка инициализация аудио',nil,MB_ICONERROR);

Halt;

end;

end;

Для события OnClose формы пишем:

procedure TForm_player.FormClose(Sender: TObject; var Action: TCloseAction);

begin

//Освобождаем объекты перед закрытием

Bass_Stop(); //останавливаем проигрывание

BASS_StreamFree(channel); // освобождаем звуковой канал

Bass_Free;// Освобождаем ресурсы используемые Bass

end;



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-21 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: