Далее размещаем на форме компоненты
Самый верхний компонент 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;