На нашем сайте ежедневно публикуются десятки качественных и свежих материалов, которые Вы можете скачать абсолютно бесплатно. Рекомендуем Вам добавить Наш сайт в закладки, а также подписаться на RSS ленту, чтобы не пропускать интересных новостей.
На этом уроке мы продолжим создавать 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(баланс).
// проверка корректности загруженной 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 добавим следующий код:
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);
Теперь научим наш проигрыватель выбирать песни из плейлиста.
Для этого в событии 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);