Playlist com DsPack
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
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
Curtidas 0
Respostas
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...}
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...
eu tentaria assim...
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)
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 é
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...
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