Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Lista de Musicas... erro


António44

Pergunta

Reparei que o tópico esta resolvido,e de certa maneira esta...só uma pequena duvida aqui,eu estou gravando os link criados pelo no listbox em base de dados para aceder as musicas quando quiser e não voltar a procurar.

C:\Lionel\ACD\ACDC   If You Want Blood (You Got It)(Official Audio).mp3

O problema é que se a musica for removida da pasta gera um erro... ''is not a válid integer value ,como ultrapassar esse erro com uma mensagem.

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

mas se quiser usar o DBgrid tem que fazer algumas alterações no código

unit USalvaMP3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Provider, DB, DBClient, DBTables, StdCtrls, MPlayer, Grids,
  DBGrids, ExtCtrls, DBCtrls, Gauges, ComCtrls, MMSystem;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Query1: TQuery;
    DataSource1: TDataSource;
    OpenDialog1: TOpenDialog;
    MediaPlayer1: TMediaPlayer;
    Button2: TButton;
    Query1NOME: TStringField;
    Query1MP3: TBlobField;
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    Timer1: TTimer;
    Gauge1: TGauge;
    TrackBar1: TTrackBar;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure DBGrid1CellClick(Column: TColumn);
    procedure Timer1Timer(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  nome_musica : string;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 If opendialog1.Execute Then
 begin
   // musica selecionada na pasta
   nome_musica := opendialog1.filename;

   // gravar na tabela
   Query1.Active := false;
   Query1.Active := true;

   Query1.Last;
   Query1.Insert;
   Query1.Edit;

   Query1NOME.Value := nome_musica;
   Query1MP3.LoadFromFile(nome_musica);
   Query1.Post;

   showmessage('Musica Salva');
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   Query1.Active := false;
   Query1.Active := true;

   MediaPlayer1.Close;

   // tirar a musica da tabela e salvar no disco
   Query1MP3.SaveToFile('c:\musica.mp3');

   // abrir a musica pelo MediaPlayer e tocar

   MediaPlayer1.FileName := 'c:\musica.mp3';
   MediaPlayer1.Open;
   MediaPlayer1.Play;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
   Query1.Active := false;
   Query1.Active := true;
   timer1.Enabled := false;
   TrackBar1Change(sender);
end;

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
    MediaPlayer1.Close;

   // tirar a musica da tabela e salvar no disco
   Query1MP3.SaveToFile('c:\musica.mp3');

   // abrir a musica pelo MediaPlayer e tocar

   MediaPlayer1.FileName := 'c:\musica.mp3';
   MediaPlayer1.Open;
   Gauge1.MaxValue := MediaPlayer1.Length;
   MediaPlayer1.Play;

   timer1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

   Gauge1.Refresh;

  if Gauge1.MaxValue <> 0 then
     Gauge1.Progress := MediaPlayer1.Position;

  if  Gauge1.Progress = Gauge1.MaxValue then
      begin
         Gauge1.Progress := 0;
         MediaPlayer1.Close;
         Query1.Next;

         // tirar a musica da tabela e salvar no disco
         Query1MP3.SaveToFile('c:\musica.mp3');

         // abrir a musica pelo MediaPlayer e tocar

         MediaPlayer1.FileName := 'c:\musica.mp3';
         MediaPlayer1.Open;
         MediaPlayer1.Play;

         TrackBar1Change(sender);
      end;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
var
   Count , i : longint;  // 4369
begin
   Count := waveOutGetNumDevs;
   for i := 0 to Count do
     begin
        waveOutSetVolume(i,longint(TrackBar1.position*1369)*65536+longint(TrackBar1.position*1369));
     end;
end;

end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Vou usar dbgrid para passar lista, então com um timer eu faço mudar de faixa mas quando chega na  ultima fica repetindo eu queria que parasse quando teminar a ultima faixa.

procedure TFplay.Timer3Timer(Sender: TObject);
begin
if MediaPlayer1.Position = MediaPlayer1.Length then
begin
with DB1 do begin
if SelectedIndex = Columns.Count - 1 then // Se o item atual do DbGrid não for o último campo ele muda de campo mas se é o ultimo ele repete.
begin
DB1.SetFocus;
Query1.Next;
....
end;
end;
end;
end;

 

Link para o comentário
Compartilhar em outros sites

  • 0

Eu usei assim e passa as faixas na boa mas se eu iniciar em qualquer fixa,mas se ir logo directo para a ultima faixa e fazer um play ele arranca e para logo...

procedure TFplay.Timer3Timer(Sender: TObject);
begin
if MediaPlayer1.Position = MediaPlayer1.Length then
begin
Data.Query1.next;
Play.Click;
 end else
 Begin
if Data.Query1.Eof then
begin
MediaPlayer1.Stop;
timer3.Enabled := false;
end;
end;
end;

 

Link para o comentário
Compartilhar em outros sites

  • 0

aqui funciona sem problemas .... inclusive se eu selecionar a ultima musica

procedure TForm1.Timer1Timer(Sender: TObject);
begin

   Gauge1.Refresh;

  if Gauge1.MaxValue <> 0 then
     Gauge1.Progress := MediaPlayer1.Position; // posição da musica

  if  Gauge1.Progress = Gauge1.MaxValue then
      begin
         Gauge1.Progress := 0;
         MediaPlayer1.Close;
         Query1.Next;

         // tirar a musica da tabela e salvar no disco
         Query1MP3.SaveToFile('c:\musica.mp3');

         // abrir a musica pelo MediaPlayer e tocar

         MediaPlayer1.FileName := 'c:\musica.mp3';
         MediaPlayer1.Open;
         MediaPlayer1.Play;

         TrackBar1Change(sender); // controle de volume
      end;

   if Query1.Eof then
      begin
          timer1.Enabled := false;
          MediaPlayer1.Stop;
      end;    
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

vou te passar o código completo ... aqui esta funcionando normal

unit USalvaMP3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Provider, DB, DBClient, DBTables, StdCtrls, MPlayer, Grids,
  DBGrids, ExtCtrls, DBCtrls, Gauges, ComCtrls, MMSystem;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Query1: TQuery;
    DataSource1: TDataSource;
    OpenDialog1: TOpenDialog;
    MediaPlayer1: TMediaPlayer;
    Button2: TButton;
    Query1NOME: TStringField;
    Query1MP3: TBlobField;
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    Timer1: TTimer;
    Gauge1: TGauge;
    TrackBar1: TTrackBar;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure DBGrid1CellClick(Column: TColumn);
    procedure Timer1Timer(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  nome_musica : string;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 If opendialog1.Execute Then
 begin
   // musica selecionada na pasta
   nome_musica := opendialog1.filename;

   // gravar na tabela
   Query1.Active := false;
   Query1.Active := true;

   Query1.Last;
   Query1.Insert;
   Query1.Edit;

   Query1NOME.Value := nome_musica;
   Query1MP3.LoadFromFile(nome_musica);
   Query1.Post;

   showmessage('Musica Salva');
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   Query1.Active := false;
   Query1.Active := true;

   MediaPlayer1.Close;

   // tirar a musica da tabela e salvar no disco
   Query1MP3.SaveToFile('c:\musica.mp3');

   // abrir a musica pelo MediaPlayer e tocar

   MediaPlayer1.FileName := 'c:\musica.mp3';
   MediaPlayer1.Open;
   MediaPlayer1.Play;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
   Query1.Active := false;
   Query1.Active := true;
   timer1.Enabled := false;
   TrackBar1Change(sender);
end;

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
    MediaPlayer1.Close;

   // tirar a musica da tabela e salvar no disco
   Query1MP3.SaveToFile('c:\musica.mp3');

   // abrir a musica pelo MediaPlayer e tocar

   MediaPlayer1.FileName := 'c:\musica.mp3';
   MediaPlayer1.Open;
   Gauge1.MaxValue := MediaPlayer1.Length;
   MediaPlayer1.Play;

   timer1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

   Gauge1.Refresh;

  if Gauge1.MaxValue <> 0 then
     Gauge1.Progress := MediaPlayer1.Position;

  if  Gauge1.Progress = Gauge1.MaxValue then
      begin
         Gauge1.Progress := 0;
         MediaPlayer1.Close;
         Query1.Next;

         // tirar a musica da tabela e salvar no disco
         Query1MP3.SaveToFile('c:\musica.mp3');

         // abrir a musica pelo MediaPlayer e tocar

         MediaPlayer1.FileName := 'c:\musica.mp3';
         MediaPlayer1.Open;
         MediaPlayer1.Play;

         TrackBar1Change(sender);
      end;

   if Query1.Eof then
      begin
          timer1.Enabled := false;
          MediaPlayer1.Stop;
      end;    
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
var
   Count , i : longint;  // 4369
begin
   Count := waveOutGetNumDevs;
   for i := 0 to Count do
     begin
        waveOutSetVolume(i,longint(TrackBar1.position*1369)*65536+longint(TrackBar1.position*1369));
     end;
end;

end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Criei um novo projeto testei o código que vc passou e da o mesmo erro...

Ao iniciar o programa vou para a ultima faixa faço um click e arranca a faixa e para logo...ou seja deteta logo ai o final da Query e faz um stop.

Se fazer o play da ultima pelo botão 2.

procedure TForm1.Button2Click(Sender: TObject);
begin
   Query1.Active := false;
   Query1.Active := true;

   MediaPlayer1.Close;

   // tirar a musica da tabela e salvar no disco
   Query1MP3.SaveToFile('c:\musica.mp3');

   // abrir a musica pelo MediaPlayer e tocar

   MediaPlayer1.FileName := 'c:\musica.mp3';
   MediaPlayer1.Open;
   MediaPlayer1.Play;
end;

ele faz o play mas ai não anda o Gauge1.

Abraço

 

Link para o comentário
Compartilhar em outros sites

  • 0

E verdade vc tinha razão Jhonas,a musica tava memo corrompida.

Uffff

Abraço

Pois eu deleitei 2 ou 3 registos e a DBgrid ficou com os registos todos visiveis,,,,????

Afinal não esta resolvido não... o problema é com certeza na DBgrid porque se a ultima faixa estiver visivel na DBgrid e vc der click ela toca normal,mas se a ultima faixa não está visivel e vc tiver que rolar ela até  aparecer o ultimo, quando vc faz play pára logo, ou seja pelo rolar da DBgrid ja detectou o ultimo registo e não faz o play faz logo o stop,iniciando logo directo sem rolar a dbgrid tudo bem porque só depois com a acção do timer1 é que vai detectar que é o ultimo registo e faz o stop....como resolver isto.?

Abraço

Editado por António44
Link para o comentário
Compartilhar em outros sites

  • 0

amigo, pelo que eu vejo, voce tem pouca experiencia com o delphi ...

se voce observar o código completo que te passei, existe um componente DBNavigator que esta linkado ao DataSource da Tabela, que é linkado ao DBGrid

se voce deletar qualquer musica pelo DBNavigator, automaticamente a lista é atualizada, portanto, tudo isso que voce está relatando, não acontece aqui comigo

se voce pegar exatamente o código que te passei e rodar, vai ver que, o que voce relatou, não acontece ( veja se as musicas não estão corrompidas )

OBS: se voce estiver salvando musicas com tamanho maior que 5 mb na tabela, o campo será truncado, ou seja, a musica não será gravada integralmente, sendo portanto, cortada.

se as musicas forem maior que 5 mb então voce deve alterar o tamanho do campo na tabela.

abraço.

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

amigo, pelo que eu vejo, voce tem pouca experiencia com o delphi ...

É verdade não tenho não,mas a verdade é que ta dando isso ai...

Uso 10MB no campo.

Uso o DBNavigator.

Uso o código exactamente como vc passou ,e como eu disse no post anterior.

abraço

Iniciando o exe  se o ultima faixa estiver visivel na DBgrid e vc der click directo ela toca normal sem problema,mas se a ultima faixa não está visivel no Dbgrid e vc tiver que navegar ela até  aparecer o ultimo,(Dbnavigator ou scroll....) quando vcclicka  faz play mas pára logo.

Eu já testei de várias maneiras ....mudei as faixas porque poderiam estar corrompidas o tamanho tb não tem problema o campo tem 10MB...???? não sei mais.

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Boas Jhonas, eu resolvi assim.

Uma vez que se tratava de problema na ultima faixa,não havia necessidade de activar o Timer1 então passei o Gauge1 para outro, Timer2 e assim testa logo se esta no ultimo não activa o timer1,  e funciona muito bem .

procedure TForm1.DBGridWithRuler1DblClick(Sender: TObject);
begin
    MediaPlayer1.Close;

   // tirar a musica da tabela e salvar no disco
   Query1MP3.SaveToFile('c:\musica.mp3');

   // abrir a musica pelo MediaPlayer e tocar

   MediaPlayer1.FileName := 'c:\musica.mp3';
   MediaPlayer1.Open;
   FlatGauge1.MaxValue := MediaPlayer1.Length;
    
      MediaPlayer1.Play;
      timer2.Enabled := true;

       cap := Query1Nome.Value;;
       ncar := 0;


                if not Query1.Eof then
       timer1.Enabled := true;
         
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
   FlatGauge1.Refresh;

  if FlatGauge1.MaxValue <> 0 then
     FlatGauge1.Progress := MediaPlayer1.Position;

  if  FlatGauge1.Progress = FlatGauge1.MaxValue then
      begin
         FlatGauge1.Progress := 0;
end;
end;

Obrigado amigo por sua ajuda valeu...eu uso o Delphi para pequenos projectos, eu trabalho com WinCC Controle Center da Siemens.

 Abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...