Playlist com DsPack

Delphi

07/07/2004

Esta é a função RenderFile do componente FilterGraph, da DsPack.


function TFilterGraph.RenderFile(FileName: WideString): HRESULT;
begin
result := S_FALSE;
if assigned(FFilterGraph) then
begin
ControlEvents(ceFileRendering);
result := CheckDSError(FFilterGraph.RenderFile(PWideChar(FileName), nil));
if Succeeded(result) then ControlEvents(ceFileRendered);
end;
end;

O que eu preciso é fazer um playlist, da seguinte forma:
1º - Eu abro com OpenDialog, e os arquivos abertos com o OpenDialog
ficam guardados numa ListBox. Porque? Para que o cliente veja as
músicas que estão na reserva, para serem tocadas. Até aí tudo bem,
o problema começa, pq o FilterGraph, não lê os arquivos de dentro
da ListBox, somente do OpenDialog, talvez pelos formatos como eles estão guardados lá. É só isso que eu quero. Veja como funciona:

2º - O componente Opendialog, deixa o Path completo, e eu gostaria
que não aparecesse o Path, somente o nome da música ou clip.

procedure TForm1.btTocarClick(Sender: TObject);
begin
if OpenDialog1.Execute then begin
FilterGraph1.Active:=True;
filtergraph1.ClearGraph;
filtergraph1.RenderFile(Opendialog1.FileName);
filtergraph1.Play;
end;
end;
Assim funciona, mas eu somente abro uma música por vez. Agora como eu
quero, abaixo, não funciona:

procedure TForm1.btreservaClick(Sender: TObject);
begin
if OpenDialog1.Execute then begin
listbox1.Items.Add(opendialog1.FileName);
end;
end;

procedure TForm1.btTocarClick(Sender: TObject);
begin
FilterGraph1.Active:=True;
já coloquei:if ListBox1.ItemIndex = 0 then begin e nada e etc...
filtergraph1.ClearGraph;
filtergraph1.RenderFile(ListBox1.Já fiz de tudo aqui e nada);
filtergraph1.Play;
end;
Eu falo de listbox, mas pode ser qualquer componente que possa
listar uma relação de arquivos e etc...(TStringList ou similar) Já tentei com listview, e eu não consegui nada também.
Esta é a ajuda que eu tô pedindo a vc´s. Quem puder me ajudar, eu
fico grato. Com o TmediaPlayer do delphi, eu consigo, mas ele não
tem os recursos que eu preciso, como fullscreen, dimensionar o tamnho
dos clips como eu quiser e etc...
Disseram-me, é possivel com banco de dados, pois os componentes
dataware tem a propriedade FileName, requerida pelo RenderFile.
Eu fiz unma tabela com um campo chamado Path, onde eu gravo assim:
C:\Mp3\Track01.mp3. Também não consegui fazer gravar o MP3 numa tabela
e fazer a musica tocar apartir del., Tá braba!!!!

Voltar ao Topo


Paulo

Paulo

Curtidas 0

Respostas

Lacabeza

Lacabeza

07/07/2004

aeae tipo, tb to querendo fazer um player, so pra brincar msm..
tipo, ate agora, eu fiz uma versao pra aprender mexer... como o TMediaPlayer msm... dai ja consegui algumas coisas...

olha... vamo pelos seus topicos:

1º no opendialog, ele pega o path completo...
entao eu usei as funçoes do delphi msm...

var
fname, name : String;
begin
if OpenDialog.Execute then
begin
fname := OpenDialog.FileName; //suponha que fname receba o valor ´D:\Musicas\Blink182\First Date.mp3´
name := ExtractFileName(fname); //name receberá ´First Date.mp3´

{aqui, vc ja tem o nome, mas com a extenção, então eu uso uns recursos tecnicos pra tirar..}

SetLength(name, Length(ExtractFileName(fname)) - Length(ExtractFileExt(fname)));

{setlength define o comprimento (quantidade de caracteres) de uma string ou uma quantidade de arrays,aki eu uso pra string.
funciona assim: SetLenght(var, tamanho)
para definir o tamanho, eu usei:
Length(ExtractFileName(fname)) //retorna a qtd de caracteres de ´First Date.mp3´: 14
Length(ExtractFileExt(fname)) //retorna a qtd de caracteres de ´.mp3´: 4
dai o tamanho do set length fica: 10 (14 - 4)
e o novo valor de name é ´First Date´ (se vc contar, vai dar 10 caracteres...}

o problema começa, pq o FilterGraph, não lê os arquivos de dentro da ListBox, somente do OpenDialog, talvez pelos formatos como eles estão guardados lá. É só isso que eu quero.


eu to usando um ClientDataSet, dai eu crio dos campos, titulo e caminho...
dai eu armazeno as musicas nele, e exibo por um DBGrid...
com o ClientDataSet, vc tb pode salvar e abrir as listas em formato xml...

como eu quero, abaixo, não funciona

eu tentaria assim...
FilterGraph1.Active:=True; filtergraph1.ClearGraph; filtergraph1.RenderFile(ListBox1.Items.Strings[ListBox1.ItemIndex]);//isso retorna o valor do item clicado...


mas pelo que eu vi (mas nao testei), RenderFile recebe WideString, e list forneçe apenas String... provavelmente esse é o erro.

eu fiz um jeito usando ClientDataSet, que pelo menos nao da erro (mas nao sei se faz o que tem que fazer...)

FilterGraph1.RenderFile(cdsPlayListPath.Value);

cdsPlayListPath é o valor do field Path.

eu por ultimo, supondo que vc use o ClientDataSet como tabela...
o code pra abrir um arquivo xml (uma playList ja salva)
  cdsPlayList.Close;
  cdsPlayList.FileName:=OpenDialog.FileName;
  cdsPlayList.Open;

há alguns detalhes a mais... mas isso é só vc perguntar ao [url=www.google.com]kami-sama[/url]
e para salvar o playList em um arquivo xml é
  cdsPlayList.Post;//o post é pra confirmar qualquer alteração na tabela
  cdsPlayList.SaveToFile(caminho);
  cdsPlayList.close;


agora, qualquer duvida a mais.. manda ae que nos dá um jeitinho...
ae, so pra saber... alguem sabe de algum tutorial do DSPack...
nao to achando nem em ingles...


GOSTEI 0
POSTAR