![]() |
|
|
#1
|
||||
|
||||
|
Помогите с проблемкой... я пишу свои проигрыватель. а с листом проблемы. кто нибудь знает как сделать 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 если кто знает такую компаненту напатипу как в аимпе Плэйлист скиньте!
|