|
#1
|
||||
|
||||
PlayList
Помогите с проблемкой... я пишу свои проигрыватель. а с листом проблемы. кто нибудь знает как сделать PlayList?
Заранее БЛАГОДАРЮ |
#2
|
|||
|
|||
попробуй сделать playlist используя tlistview, в первой колонке имя песни, во второй продолжительность и т.д.
|
#3
|
|||
|
|||
Попробуй этот компонент.
Сам правда не использовал. ---------------------- Suported these formats: PLS Playlist M3U Playlist BSPlayer Playlist (not Crypted) Light Alloy Playlist Media Player Classic Playlist Windows Media ASX Playlist ---------------------- http://www.torry.net/vcl/mmedia/audio/PlayList.zip |
#4
|
||||
|
||||
На форме создаешь два ListBox'a. Первый (PL1) делаешь невидимым,
а второй (pl2) - основным. Далее в PL1 добавляешь полные адреса файлов, а в PL2 - уже переделанные на более короткие (пример: PL1 - 'C:\Music\Sound.mp3',a pl2 - 'Sound.mp3'). При двойном клике на PL2 - PLAY(pl1.items[pl2.itemindex]). В таймире написать условие: if position=length then //если позиция вспр. = Длине дорожки тогда begin pl2.itemindex:=pl2.itemindex+1; play(pl1.items[pl2.itemindex]); end; |
#5
|
|||
|
|||
Цитата:
|
#6
|
|||
|
|||
Берешь pls и/или m3u файл. Смотришь как он устроен и пишешь читалку для него (ну и сохранялку, если нужна). m3u вообще, если не ошибаюсь, просто список файлов с полным путем.
Ребят, давайте задавать вопросы, над которыми действительно надо думать. Что, лень скачать (вариант, купить) пару книжек и их ВНИМАТЕЛЬНО прочитать, что бы владеть хотя бы основами |
#7
|
|||
|
|||
а как написать читалку может кто подскажет или как использовать это:
{------------------------------------ ----- PlayList ----- ----- ver0.1.5 ----- ----- by ----- ----- Musabekov Rustem ----- ----- Kazakhstan, Astana city ----- ----- Tel: +77012417747 ----- ----- Tel: +77014215379 ----- Designed in Delphi 7 for all Delphi and other Object Pascal compilers. This unit designed for read popular playlist files formats. Suported this formats: • PLS Playlist • M3U Playlist • BSPlayer Playlist (not Crypted) • Light Alloy Playlist • Media Player Classic Playlist • Windows Media ASX Playlist History: [ver 0.1.0 - 0.1.3] • Added M3U Playlist • Added Light Alloy Playlist • Added BSPlayer Playlist • Added Media Player Classic Playlist • Added PLS Playlist [ver 0.1.4] • M3U Format is fixed • Added Windows Media ASX Playlist • Edited all code [ver 0.1.5] • Added OpenPLForce function • Fixed M3U Format ------------- © 2007 ---------------} Код:
Unit PlayList; {$R PlayList.res} interface uses SysUtils, Classes; {--- FUNCTIONS ---} Function GetPLType(FileName: String):String; { Get the playlist format. In result your playlist file format. } Function OpenPL(FileName: String; var MusicNames: TStringList; var FileNames: TStringList):boolean; { This function geting the playlist file names and this music string. If playlist readed result is true else false. } Function OpenPLForce(FileName: String; var MusicNames: TStringList; var FileNames: TStringList):boolean; { This function geting the playlist file names and this music string from strings list file. If playlist readed result is true else false. } implementation Function GetPLType(FileName: String):String; var f: textfile; s,fe: string; label 1; begin result:='Unknown'; if fileexists(FileName) then begin assignfile(f,FileName); reset(f); 1: readln(f,s); if (trim(s)='')and(eof(f)=false) then goto 1 else begin if trim(s)='#EXTM3U' then result:='M3U Playlist' else if copy(s,0,4)='BSPL' then result:='BSPlayer Crypted Playlist' else if trim(s)='MPCPLAYLIST' then result:='Media Player Classic Playlist' else if lowercase(copy(s,0,4))='<ASX' then result:='Windows Media ASX Playlist' else begin fe:=ansilowercase(extractfileext(FileName)); if fe='.m3u' then result:='M3U Playlist' else if fe='.bsl' then result:='BSPlayer Playlist' else if fe='.mpcpl' then result:='Media Player Classic Playlist' else if fe='.lap' then result:='Light Alloy Playlist' else if fe='.pls' then result:='PLS Playlist' else if fe='.asx' then result:='Windows Media ASX Playlist'; end; end; closefile(f); end; end; Function OpenPL(FileName: String; var MusicNames: TStringList; var FileNames: TStringList):boolean; var ft: string; f : textfile; s : string; i,ie : integer; label 1,2,3,4,5,0; begin MusicNames.Clear; FileNames.Clear; ft:=lowercase(GetPLType(FileName)); if ft='unknown' then begin result:=false; goto 0; end {-- Geting M3U Playlist --} else if ft='m3u playlist' then begin assignfile(f,FileName); reset(f); while eof(f)<>true do begin readln(f,s); s:=trim(s); if uppercase(copy(s,0,7))='#EXTINF' then begin for i:=7 to length(s) do if s[i]=',' then goto 1; 1: MusicNames.Add(copy(s,i+1,length(s))); readln(f,s); FileNames.Add(s); end else begin if uppercase(copy(s,0,7))<>'#EXTM3U' then begin FileNames.Add(s); MusicNames.Add(extractfilename(s)); end; end; end; closefile(f); end {-- Geting BSPlayer Playlist --} else if ft='bsplayer playlist' then begin assignfile(f,FileName); reset(f); while eof(f)<>true do begin readln(f,s); s:=trim(s); FileNames.Add(s); MusicNames.Add(extractfilename(s)); end; closefile(f); end {-- Geting Light Alloy --} else if ft='light alloy playlist' then begin assignfile(f,FileName); reset(f); while eof(f)<>true do begin readln(f,s); s:=trim(s); if s<>'' then begin FileNames.Add(s); readln(f,s); MusicNames.Add(copy(s,4,length(s))); end; end; closefile(f); end {-- Geting Media Player Classic Playlist --} else if ft='media player classic playlist' then begin assignfile(f,FileName); reset(f); while eof(f)<>true do begin readln(f,s); s:=trim(s); for i:=0 to length(s) do if copy(s,i,9)='filename,' then goto 2; 2: if i<length(s) then begin FileNames.Add(copy(s,i+9,length(s))); MusicNames.Add(extractfilename(FileNames.strings[FileNames.count-1])); end; end; closefile(f); end {-- Geting PLS Playlist --} else if ft='pls playlist' then begin assignfile(f,FileName); reset(f); while eof(f)<>true do begin readln(f,s); s:=trim(s); if lowercase(copy(s,0,4))='file' then begin for i:=0 to length(s) do if copy(s,i,1)='=' then goto 3; 3: FileNames.Add(copy(s,i+1,length(s))); MusicNames.Add(extractfilename(FileNames.strings[FileNames.count-1])); end; end; closefile(f); end {-- Geting ASX Playlist --} else if ft='windows media asx playlist' then begin assignfile(f,FileName); reset(f); while eof(f)<>true do begin readln(f,s); s:=trim(s); if lowercase(copy(s,0,7))='<entry>' then begin for i:=0 to length(s) do if s[i]='"' then goto 4; 4: for ie:=i+1 to length(s) do if s[ie]='"' then goto 5; 5: delete(s,ie,length(s)); FileNames.Add(copy(s,i+1,length(s))); MusicNames.Add(extractfilename(FileNames.strings[FileNames.count-1])); end; end; closefile(f); end; result:=true; 0: //Its End ... end; Function OpenPLForce(FileName: String; var MusicNames: TStringList; var FileNames: TStringList):boolean; var f : textfile; s : string; begin MusicNames.Clear; FileNames.Clear; assignfile(f,FileName); reset(f); while eof(f)<>true do begin readln(f,s); s:=trim(s); FileNames.Add(s); MusicNames.Add(extractfilename(s)); end; closefile(f); end; initialization finalization {all code by musabekov rustem :} end. Последний раз редактировалось Admin, 17.08.2008 в 16:55. |
#8
|
||||
|
||||
Писал как-то, может пригодится. Читает плэйлисты PLS, M3U, LAP, WPL и простые списки, есть возможность определения типа плэйлиста. А себе можешь создать собственный формат, н-р, Advanced Playlist - *.ap Загружай все это дело в ListBox со столбцами: название песни из тега или имя файла, если тегов нет, продолжительность, путь к файлу и т. д. Глянь как это реализовано в FooBar.
Код:
//////////////////////////////// // -= Coded by Vayrus =- // /////////////////////////////// Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; OpenDialog1: TOpenDialog; ListBox1: TListBox; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses IniFiles; var TIF: TIniFile; procedure PLS_To_FileList(FName: string; OUTPUT: TStrings); const SectName='playlist'; ParamName='File'; var I: Integer; S: string; begin TIF:=TIniFile.Create(FName); I:=1; repeat S:=TIF.ReadString(SectName,ParamName+IntToStr(I),''); if S<>'' then OUTPUT.Add(S); INC(I); until S=''; TIF.Free; end; //Данный вариант не тянет за собой IniFiles procedure PLS_To_FileList2(FName: string; OUTPUT: TStrings); const FileTag='File'; var F: TextFile; S: string; B, E, L: Integer; begin L:=Length(FileTag); AssignFile(F, FName); Reset(F); while not eof(f) do begin Readln(F, S); E:=Length(S); B:=Pos(FileTag, S); if B>0 then begin S:=Copy(S,B+L+2,E); OUTPUT.Add(S); end; end; CloseFile(F); end; function Is_PLS(FName: string): boolean; const SectName='[playlist]'; var F: TextFile; S: string; begin AssignFile(F, FName); Reset(F); Readln(F, S); RESULT:=Pos(SectName, S)>0; CloseFile(F); end; //Если M3U грузит нормально иначе грузит подряд procedure M3U_To_FileList(FName: string; OUTPUT: TStrings); const FirstTag='#EXTM3U'; FileTag='#EXTINF'; var F: TextFile; S: string; begin AssignFile(F, FName); Reset(F); while not eof(f) do begin Readln(F, S); if (Pos(FirstTag, S)=0) and (Pos(FileTag, S)=0) then OUTPUT.Add(S); end; CloseFile(F); end; procedure LAP_To_FileList(FName: string; OUTPUT: TStrings); const FirstTag='>N'; var F: TextFile; S: string; begin AssignFile(F, FName); Reset(F); while not eof(f) do begin Readln(F, S); if (Pos(FirstTag, S)=0) and (Length(S)>0) then OUTPUT.Add(S); end; CloseFile(F); end; function Is_LAP(FName: string): boolean; const SectName='>N'; var F: TextFile; S: string; begin Result:=False; AssignFile(F, FName); Reset(F); while not eof(F) do begin Readln(F, S); if Pos(SectName, S)>0 then Result:=True; end; CloseFile(F); end; function Is_M3U(FName: string): boolean; const SectName='#EXTM3U'; var F: TextFile; S: string; begin AssignFile(F, FName); Reset(F); Readln(F, S); RESULT:=Pos(SectName, S)>0; CloseFile(F); end; procedure WPL_To_FileList(FName: string; OUTPUT: TStrings); const BeginTag='<media src="'; EndTag='" tid="'; var F: TextFile; S: string; B, E, L: Integer; begin L:=Length(BeginTag); AssignFile(F, FName); Reset(F); while not eof(f) do begin Readln(F, S); B:=Pos(BeginTag, S); if B>0 then begin E:=Pos(EndTag, S); S:=Copy(S,B+L,E-B-L); OUTPUT.Add(UTF8Decode(S)); end; end; CloseFile(F); end; function Is_WPL(FName: string): boolean; const SectName='<?wpl'; var F: TextFile; S: string; begin AssignFile(F, FName); Reset(F); Readln(F, S); RESULT:=Pos(SectName, S)>0; CloseFile(F); end; function Is_SimpleList(FName: string): boolean; var F: TextFile; S: string; B, E: Integer; begin B:=0; E:=0; AssignFile(F, FName); Reset(F); while not Eof(F) do begin Readln(F, S); if ExtractFileExt(S)<>'' then Inc(B);//Сменить при необходимости /////////////////////////////////// Inc(E); end; RESULT:=B=E; CloseFile(F); end; procedure ExtractFileListFromPlayList(FName: string; OUTPUT: TStrings); const Unknown='Данный тип плэйлистов не поддерживается.'; begin if Is_PLS(FName) then PLS_To_FileList(FName, OUTPUT) else if Is_WPL(FName) then WPL_To_FileList(FName, OUTPUT) else if Is_M3U(FName) then M3U_To_FileList(FName, OUTPUT) else if Is_LAP(FName) then LAP_To_FileList(FName, OUTPUT) else if Is_SimpleList(FName) then OUTPUT.LoadFromFile(FName) else ShowMessage(Unknown); end; procedure TForm1.Button1Click(Sender: TObject); begin if opendialog1.Execute then begin ListBox1.Clear; ExtractFileListFromPlayList(OpenDialog1.FileName,ListBox1.Items); end; end; end. Последний раз редактировалось Admin, 17.08.2008 в 16:53. |
#9
|
|||
|
|||
B гугле введи tplaylistadv скачай эту компаненту там всё есть, чтобы сделать возможность использования нескольких Плэйлистов одновременно можно использовать mdi если кто знает такую компаненту напатипу как в аимпе Плэйлист скиньте!
|