Исходники Delphi

Добро пожаловать на наш портал

На нашем сайте ежедневно публикуются десятки качественных и свежих материалов, которые Вы можете скачать абсолютно бесплатно. Рекомендуем Вам добавить Наш сайт в закладки, а также подписаться на RSS ленту, чтобы не пропускать интересных новостей.
Стартовая Избранное Главная Контакты Карта сайта

Меню

Не доступно

Не доступно

Опрос

Оцените мой сайт

Проголосовало: 118
Другие опросы

Главная » 2013 » Февраль » 22 » Создаем mp3 player (проигрыватель) на основе библиотеки bass.dll.
02:42
Создаем mp3 player (проигрыватель) на основе библиотеки bass.dll.
Урок 1.2. Создаем mp3 player (проигрыватель) на основе библиотеки bass.dll. ( Продолжение)
Предыдущий урок:



На этом уроке мы продолжим создавать mp3 player (проигрыватель). К нашему проекту подключим ScrollBar, регулятор громкости, баланса и сделаем выбор песен из PlayList.

И так начнем со ScrollBar.

В процедуру procedure TForm_Player.Player; добавим следующие строки

//полоса проигрывания
    scrollbar1.Min:=0; //минимальное значение
    scrollbar1.Max:=bass_ChannelGEtLength(Channel, 0)-1;//максимальное значение


Здесь и далее добавляемый код выделен красным цветом.


procedure TForm_Player.Player;
begin
//проверяем, если не пауза
if mode<>paused then begin
//то проверяем существует ли файл загружаемый из PlayList
//если файл не существует, то выходим
if not FileExists(FileName) then begin ShowMessage('Файл не существует');exit;end;
//иначе пытаемся загрузить файл и получить дескриптор канала
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;

//полоса проигрывания
    scrollbar1.Min:=0; //минимальное значение
    scrollbar1.Max:=bass_ChannelGEtLength(Channel, 0)-1;//максимальное значение


//присваеваем заголовку формы имя проигрываемого файла
Form_Player.Caption:=ExtractFileName(FileName);
 //Устанавливаем PlayMode - play
 mode:=play;
end;


Для события OnScroll компонента ScrollBar1 пишем:

procedure TForm_player.ScrollBar1Scroll(Sender: TObject;
  ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
//устанавливаем позицию воспроизведения трека в зависимости от положения scrollbar
 bass_ChannelSetPosition(Channel, scrollbar1.position, 0);
end;


Изменять положение ScrollBar мы будем по таймеру, для этого в событии OnTimer компонента Timer1 пишем следующий код:

procedure TForm_player.Timer1Timer(Sender: TObject);
var
TrackLen, TrackPos: Double;
ValPos: Double;
ValLen: Double;
begin
//проверяем режим воспроизведения, если не Play то выходим
if mode<>play then Exit;

//устанавливаем позицию scrollbar в зависимоти от позиции трека
scrollbar1.Position:=bass_channelGetPosition(channel,0);

//время проигрывания трека
//считаваем сколько секунд прошло от начала воспроизведения
TrackPos:=BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetPosition(Channel,0));
//считываем всю длину песню в секундах
TrackLen:=BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetLength(Channel,0));
//переводим секунды в часы
ValPos:=TrackPos / (24 * 3600);
ValLen:=TrackLen / (24 * 3600);
//Выводим данные о времени на форму в Label1 и Label2
Label1.Caption:=FormatDateTime('hh:mm:ss',ValPos);
Label2.Caption:=FormatDateTime('hh:mm:ss',ValLen);
end;


Далее подключим управление громкостью и балансем.

В событии OnCreate формы зададим начальные настройки для TrackBar1(громкость) и TrackBar2(баланс).

//установка громкости
    trackbar1.Min:=0;
    trackbar1.Max:=10;
    trackbar1.Position:=5;
  //установка баланса
    trackbar2.Min:=-5;
    trackbar2.Max:=5;
    trackbar2.Position:=0;


procedure TForm_player.FormCreate(Sender: TObject);
begin
  //установка громкости
    trackbar1.Min:=0;
    trackbar1.Max:=10;
    trackbar1.Position:=5;
  //установка баланса
    trackbar2.Min:=-5;
    trackbar2.Max:=5;
    trackbar2.Position:=0;

  // проверка корректности загруженной 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;

В событии OnTimer компонента Timer1 добавим следующий код:

//установка громкости звука
BASS_ChannelSetAttribute(Channel,BASS_ATTRIB_VOL, trackBar1.Position/10);
//установка баланса
BASS_ChannelSetAttribute(Channel,BASS_ATTRIB_PAN, Trackbar2.Position/5);


procedure TForm_player.Timer1Timer(Sender: TObject);
var
TrackLen, TrackPos: Double;
ValPos: Double;
ValLen: Double;
begin
//проверяем режим воспроизведения, если не Play то выходим
if mode<>play then Exit;

//устанавливаем позицию scrollbar в зависимоти от позиции трека
scrollbar1.Position:=bass_channelGetPosition(channel,0);

//время проигрывания трека
//считаваем сколько секунд прошло от начала воспроизведения
TrackPos:=BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetPosition(Channel,0));
//считываем всю длину песню в секундах
TrackLen:=BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetLength(Channel,0));
//переводим секунды в часы
ValPos:=TrackPos / (24 * 3600);
ValLen:=TrackLen / (24 * 3600);
//Выводим данные о времени на форму в Label1 и Label2
Label1.Caption:=FormatDateTime('hh:mm:ss',ValPos);
Label2.Caption:=FormatDateTime('hh:mm:ss',ValLen);

//установка громкости звука
BASS_ChannelSetAttribute(Channel,BASS_ATTRIB_VOL, trackBar1.Position/10);
//установка баланса
BASS_ChannelSetAttribute(Channel,BASS_ATTRIB_PAN, Trackbar12.Position/5);


end;



Теперь научим наш проигрыватель выбирать песни из плейлиста.

Для этого в событии OnTimer компонента Timer1 добавим следующий код:

//воспроизведение следующей песни
//если время проигрывания равно длине песни по времени,
if  BASS_ChannelGetPosition(channel, 0)= BASS_ChannelGetLength(channel, 0) then
// в место  if  BASS_ChannelGetPosition(channel, 0)=BASS_ChannelGetLength(channel, 0) then 
// можно сделать так: if  BASS_ChannelIsActive(channel)=BASS_ACTIVE_STOPPED   then 
// Практика показывает, что второй вариант более предпочтительный,
// т.к. проверка по длине трека иногда приводит к ошибкам в работе плеера.
   begin
//то выбираем следующую песню из плейлиста
if i<ListBox1.Items.Count-1 then
   begin
    inc(i);
 Filename:=ListBox1.Items.Strings[i];
 ListBox1.ItemIndex:=i;
    mode:=stop;
    player;
   end
//если лист закончился - выходим 
else exit;
   end;


procedure TForm_player.Timer1Timer(Sender: TObject);
var
TrackLen, TrackPos: Double;
ValPos: Double;
ValLen: Double;
begin
//проверяем режим воспроизведения, если не Play то выходим
if mode<>play then Exit;

//воспроизведение следующей песни
//если время проигрывания равно длине песни по времени,
if  BASS_ChannelGetPosition(channel, 0)= BASS_ChannelGetLength(channel, 0) then
// в место  if  BASS_ChannelGetPosition(channel, 0)=BASS_ChannelGetLength(channel, 0) then 
// можно сделать так: if  BASS_ChannelIsActive(channel)=BASS_ACTIVE_STOPPED   then 
// Практика показывает, что второй вариант более предпочтительный,
// т.к. проверка по длине трека иногда приводит к ошибкам в работе плеера.
   begin
//то выбираем следующую песню из плейлиста
if i<ListBox1.Items.Count-1 then
   begin
    inc(i);
 Filename:=ListBox1.Items.Strings[i];
 ListBox1.ItemIndex:=i;
    mode:=stop;
    player;
   end else exit;
   end;


//устанавливаем позицию scrollbar в зависимости от позиции трека
scrollbar1.Position:=bass_channelGetPosition(channel,0);

//время проигрывания трека
//считываем сколько секунд прошло от начала воспроизведения
TrackPos:=BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetPosition(Channel,0));
//считываем всю длину песню в секундах
TrackLen:=BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetLength(Channel,0));
//переводим секунды в часы
ValPos:=TrackPos / (24 * 3600);
ValLen:=TrackLen / (24 * 3600);
//Выводим данные о времени на форму в Label1 и Label2
Label1.Caption:=FormatDateTime('hh:mm:ss',ValPos);
Label2.Caption:=FormatDateTime('hh:mm:ss',ValLen);

//установка громкости звука
BASS_ChannelSetAttribute(Channel,BASS_ATTRIB_VOL, trackBar1.Position/10);
//установка баланса
BASS_ChannelSetAttribute(Channel,BASS_ATTRIB_PAN, Trackbar12.Position/5);

end;


Выбор песни двойным щелчком мыши на ней в плейлисте.
Для события OnDblClick компонента ListBox1 пишем код:

procedure TForm_player.ListBox1DblClick(Sender: TObject);
begin
 i:=ListBox1.Itemindex;
 Filename:=ListBox1.Items.Strings[i];
 mode:=stop;
 player;
end;


Очистка плейлиста.

Для события Onclick кнопки Очистить пишем следующий код:

procedure TForm_player.Button5Click(Sender: TObject);
begin
//очистка плейлиста
ListBox1.Clear;
end;

Сохраняем проект и тестируем.

Исходники к уроку можно скачать здесь.

На следующем уроке мы подключим эквалайзер и сделаем визуализацию проигрывания трека.
Категория: Аудио | Просмотров: 4449 | Добавил: Reif | Рейтинг: 4.0/1
Всего комментариев: 1
Написал Максим, 26.04.2015

А где найти следующий урок?



Название блока

Здесь html код

Название блока

Здесь html код

Название блока

Здесь html код

Название блока

Здесь html код

 
Исходники Delphi
Сделать бесплатный сайт с uCoz |