|
#1
|
|||
|
|||
Mediaplayer
Делаю плеер, хочу чтобы песни автоматически переключались(а у меня когда песня кончается следующую приходится включать самому), и чтобы после окончания плейлиста он включался заново !!!
Заранее всем спасибо !!! CODDING - Штука тонкая !!! |
#2
|
||||
|
||||
а как код пишешь?
|
#3
|
|||
|
|||
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, MPlayer, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; MediaPlayer1: TMediaPlayer; OpenDialog1: TOpenDialog; Label1: TLabel; ListBox1: TListBox; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Button6: TButton; Button7: TButton; Label8: TLabel; Button8: TButton; Button9: TButton; Label9: TLabel; Timer1: TTimer; Label10: TLabel; procedure Button4Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure ListBox1DblClick(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure FormMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure FormMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation Type TID3Tag = record ID:string[3]; Titel:string[30]; Artist:string[30]; Album:string[30]; Year:string[4]; Comment:string[30]; Genre:byte; end; var ID3Tag:TID3Tag; procedure Lese_ID3Tag(Filename:string); var Buffer:array[1..128] of char; F:File; begin AssignFile(F, Filename); Reset(F,1); Seek(F,FileSize(F)-128); BlockRead(F, Buffer, SizeOf(Buffer)); CloseFile(F); with ID3Tag do begin ID:=copy(Buffer,1,3); Titel:=copy(Buffer,4,30); Artist:=copy(Buffer,34,30); Album:=copy(Buffer,64,30); Year:=copy(Buffer,94,4); Comment:=copy(Buffer,98,30); Genre:=ord(Buffer[128]); end; end; {$R *.dfm} procedure TForm1.Button4Click(Sender: TObject); begin If opendialog1.Execute then Mediaplayer1.FileName := (opendialog1.FileName); Mediaplayer1.Open; Label1.Caption := (Opendialog1.FileName); ListBox1.Items := (Opendialog1.Files); Listbox1.ItemIndex := 0; end; procedure TForm1.Button2Click(Sender: TObject); begin Mediaplayer1.Pause; end; procedure TForm1.Button3Click(Sender: TObject); begin Mediaplayer1.Stop; Mediaplayer1.Previous; end; procedure TForm1.Button1Click(Sender: TObject); begin Mediaplayer1.Play; end; procedure TForm1.Button5Click(Sender: TObject); begin if OpenDialog1.Execute then begin Lese_ID3Tag(OpenDialog1.FileName); Label2.Caption:=ID3Tag.Titel; Label3.Caption:=ID3Tag.Artist; Label4.Caption:=ID3Tag.Album; Label5.Caption:=ID3Tag.Year; Label6.Caption:=ID3Tag.Comment; Label7.Caption:=IntToStr(ID3Tag.Genre); end; end; procedure TForm1.Button7Click(Sender: TObject); begin MediaPlayer1.FileName := (String(ListBox1.Items[Listbox1.ItemIndex+1])); Listbox1.ItemIndex := Listbox1.ItemIndex+1; MediaPlayer1.Open; Mediaplayer1.Play; Label1.Caption := (String(ListBox1.Items[Listbox1.ItemIndex])); end; procedure TForm1.ListBox1DblClick(Sender: TObject); begin MediaPlayer1.FileName := (String(ListBox1.Items[Listbox1.ItemIndex])); MediaPlayer1.Open; Mediaplayer1.Play; Label1.Caption := (String(ListBox1.Items[Listbox1.ItemIndex])); end; procedure TForm1.Button8Click(Sender: TObject); begin Mediaplayer1.Position := Mediaplayer1.Position+10000; Mediaplayer1.Play; end; procedure TForm1.Button9Click(Sender: TObject); begin If Mediaplayer1.Position < 10000 then Mediaplayer1.Previous else Mediaplayer1.Position := Mediaplayer1.Position -10000; Mediaplayer1.Play; end; procedure TForm1.Button6Click(Sender: TObject); begin MediaPlayer1.FileName := (String(ListBox1.Items[Listbox1.ItemIndex-1])); Listbox1.ItemIndex := Listbox1.ItemIndex-1; MediaPlayer1.Open; Mediaplayer1.Play; Label1.Caption := (String(ListBox1.Items[Listbox1.ItemIndex])); end; procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin Mediaplayer1.Position := Mediaplayer1.Position+10000; Mediaplayer1.Play; end; procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin If Mediaplayer1.Position < 10000 then Mediaplayer1.Previous else Mediaplayer1.Position := Mediaplayer1.Position -10000; Mediaplayer1.Play; end; procedure TForm1.FormCreate(Sender: TObject); begin Label11.Caption := IntToStr(Mediaplayer1.Position); end; procedure TForm1.Timer1Timer(Sender: TObject); begin Label9.Caption := DateToStr(Date); Label10.Caption := TimeToStr(Time); end; end. CODDING - Штука тонкая !!! |
#4
|
||||
|
||||
сейчас я тоже пишу плеер вот таким кодом я пользуюсь:
Код:
//формируем список файлов procedure TForm1.PlayList(Path:String); var SearchRec: TSearchRec; Ext: string; begin ListBox1.Clear; if FindFirst(Path + '*.*', faAnyFile, SearchRec) = 0 then repeat Ext := LowerCase(ExtractFileExt(SearchRec.Name)); if (Ext = '.mp3') or (Ext = '.wav') or (Ext = '.avi') or (Ext = '.ogg') or (Ext = '.wav') or (Ext = '.mpg') or (Ext = '.mac') or (Ext = '.flac') or (Ext = '.wv') or (Ext = '.wm') or (Ext = '.tta') or (Ext = '.ofr') or (Ext = '.tak') or (Ext = '.mpc') or (Ext = '.wma') then ListBox1.Items.Add(SearchRec.Name); until FindNext(SearchRec) <> 0; FindClose(SearchRec); end; //воспроизвести композицию, название котрой выделено в списке procedure TForm1.Play; begin Label1.Caption := ListBox1.Items[ListBox1.ItemIndex]; MediaPlayer1.FileName := cDir + '\' + ListBox1.Items[ListBox1.ItemIndex]; try MediaPlayer1.Open; except on EMCIDeviceError do begin ShowMessage('Ошибка обращения к файлу'); Exit; end; end; MediaPlayer1.Play; min := 0; sec := 0; Timer1.Enabled := True; SpeedButton1.Caption := 'Стоп'; Label3.Caption := ListBox1.Items[ListBox1.ItemIndex]; MediaPlayer1.FileName := cDir + '\' + ListBox1.Items[ListBox1.ItemIndex]; end; procedure TForm1.FormCreate(Sender: TObject); begin { GetDir(0,cDir); //каталог с программой PlayList(''); ListBox1.ItemIndex := 0; Label1.Caption := ListBox1.Items[ListBox1.ItemIndex];} end; //щелчок по названию песни procedure TForm1.ListBox1Click(Sender: TObject); begin end; //щелчок по кнопке Играть procedure TForm1.SpeedButton1Click(Sender: TObject); begin if SpeedButton1.Caption = 'Играть' then begin Play; SpeedButton1.Caption := 'Стоп'; end else begin SpeedButton1.Caption := 'Играть'; MediaPlayer1.Stop; Timer1.Enabled := False; end; end; //сигнал от таймера procedure TForm1.Timer1Timer(Sender: TObject); Var s : String; begin sTrackBar1.max:=MediaPlayer1.Length; sTrackBar1.Position:=MediaPlayer1.position; //изменить счетчик времени if sec < 59 then Inc(sec) else begin sec := 0; Inc(min); end; //вывести время воспроизведения Label2.Caption := IntToStr(min) + ':'; if sec < 10 then Label2.Caption := Label2.Caption + '0' + IntToStr(sec) else Label2.Caption := Label2.Caption + IntToStr(sec); //если воспроизведение текущей композиции не завершено if MediaPlayer1.Position < MediaPlayer1.Length then Exit; //воспроизведение текущей композиции закончено Timer1.Enabled := False; MediaPlayer1.Stop; if ListBox1.ItemIndex < ListBox1.Count - 1 then begin ListBox1.ItemIndex := ListBox1.ItemIndex + 1; Play; end; if (ListBox1.ItemIndex = ListBox1.Count - 1) and sCheckBox1.Checked = True then begin ListBox1.ItemIndex := 0; Play; end; begin end; end; procedure TForm1.ShellTreeView1Change(Sender: TObject; Node: TTreeNode); begin cDir:=ShellTreeView1.Path+'/'; PlayList(cDir); If ListBox1.Items.Count > 0 Then Begin ListBox1.ItemIndex := 0; Label1.Caption := ListBox1.Items[ListBox1.ItemIndex]; End; end; а у меня вопрос до тебя: этот код с id3 tag работает? |
#5
|
|||
|
|||
Да, но (в моём коде) он работает с кнопки и opendialog`a , и показывает tag только первого выбранного файла !!!
CODDING - Штука тонкая !!! |
#6
|
|||
|
|||
И ещё:
КТО НИБУДЬ ЗНАЕТ КАК ЗАПРЕТИТЬ ОДИНОЧНОЕ НАЖАТИЕ МЫШИ НА ЛИСТБОКСЕ ??? CODDING - Штука тонкая !!! |