Conheça o Plugfeed | » Início » Programação » Delphi » Delphi e Multimedia
Conheça o Plugfeed | » Início » Programação » Delphi » Delphi e Multimedia -->
 
Avaliação: | Publicado em: 05/09/2005
Delphi e Multimedia
Valdomiro Jr Valdomiro Jr. trabalha atualmente desenvolvendo aplicações usando Delphi/Oracle a 4 anos.
Delphi e Multimedia

O objeto TMediaPlayer  , encontrado na Component Pallety na página System, permite o acesso aos arquivos multimídia. O controle é extremamente simples. De fato, é fácil criar aplicações que envolvam som ou imagens em movimento com apenas uma ou duas linhas de código.
Através deste objeto você tem acesso e controle a rotinas mais internas através da MCI (Media Control Interface). Essas rotinas podem ser programadas para acessar toda a possibilidade do mundo multimídia. Com estes objetos estas rotinas se tornam extremamente simples e intuitivas para seu uso, como veremos a seguir.

Objeto TMediaPlayer

Para criar uma simples aplicação multimídia crie um novo projeto, e arraste o objeto  para o formulário, automaticamente é criado uma barra de tarefas multimídia, conforme a figura abaixo:

Clique no objeto e altere a propriedade FileName para C:\WINDOWS\CHIMES.WAV esta propriedade associa a arquivos tipo AVI, MIDI ou WAVE altere também a propriedade AutoOpen para True, esta propriedade inicia automaticamente o arquivo.

Depois de completos estes simples passos você já pode rodar o programa. Pressione o botão verde para ouvir o som do arquivo selecionado. Mas de repente você não ouviu nada, não se desespere a causa pode ser um destes problemas

1. Você entrou com o nome do arquivo inválido.
2. Seu sistema de multimídia não está correto.
3. A propriedade AutoOpen não está true.
Obs: Resultados idênticos ocorrem com arquivos MIDI ou AVI.

Colocando as propriedades em modo Runtime

Dependendo das circunstâncias é preferível que o arquivo não esteja sempre aberto mas apenas quando o usuário clicar em um determinado botão. Isto pode ser obtido facilmente modificando a propriedade AutoOpen para False e no evento OnClick do botão insira o seguinte comando:

procedure TForm1.Button1Click(Sender: TObject);
begin
MediaPlayer1.Open;
end;

Podemos também alterar o arquivo a qual queremos ouvir, para isto insira o objeto OpenDialog  , encontrado na Component Palette na página Dialogs, e um objeto BitBtn conforme a figura abaixo:

Para o evento onClick do objeto Seleciona insira o seguinte código:

procedure TForm1.SelecionaClick(Sender: TObject);
begin
MediaPlayer1.Close;
if OpenDialog1.Execute then
begin
MediaPlayer1.FileName := OpenDialog1.FileName;
MediaPlayer1.Open;
end;
end;

Um ajuste pode ser feito para permitir que o objeto seleção tenha acesso apenas as extensões AVI , WAV, or MID. Podendo ser colocado de duas maneiras diferentes, na propriedade Filter do objeto OpenDialog1:

1. Arquivos Multimídia (*.avi; *wav; *.mid) | *.avi;*.wav;*.mid
2. Arquivo AVI (*.avi) | *.avi
Arquivo WAVE (*.wav) | *.wav
Arquivo MIDI (*.MID) | *.mid
Obs: As barras ( | ) são utilizadas para dividir duas seções: Filter Name e Filter.

Pesquisando variáveis em modo RunTime

Logo abaixo venho mostrando como fazer uma aplicação multimídia com vários controles, ótimo para quem esta aprendendo a programar com multimídia.

Antes de iniciarmos vamos fazer uma pequena observação, principalmente relativo a dois pontos:

Para alguns programadores que procuram coisas úteis, as informações aqui presentes contém o essencial para transformá-los em programadores multimídia.
Outra observação seria a respeito de alguns controles a arquivos multimídia.

Dê uma olhada no arquivo [DiretórioDelphi]\SOURCE\RTL\WIN\MMSYSTEM.PAS, é uma biblioteca de funções que contém todas as chamada de acesso a baixo nível de comandos Windows para aplicações multimídia. As técnicas de acessos estão contidas no próprio documento.

Com estes dois pontos frescos em nossa mente, podemos iniciar o nosso estudo sobre os aspectos do objeto TMediaPlayer.

Dê uma olhada na Objeto Inspector na página de Eventos do objeto TMediaPlayer você encontrará dois métodos:
O evento OnClick que ocorre quando é pressionado qualquer botão do controle. Por instância, através do parâmetro enviado Button é possível saber se o botão pressionado foi o OnPlay.

Um segundo evento consiste no OnNotify por conter a mensagem mm_MciNotify que são as chamadas do Windows para o inicio ou o termino de uma execução, com seus eventuais erros.
Ambos os eventos serão discutidos nos próximos parágrafos.

É possível identificar o botão pressionado através do evento OnClick, aqui estão todos os tipos gerados pelo TMPBtnType:

  • btPlay: Quando pressionado o botão verde, Iniciar.
  • btPause: Quando pressionado o botão amarelo, Pausa.
  • btStop: Quando pressionado o botão vermelho, Parar.
  • btBack: Quando pressionado o botão azul, Avança a imagem.
  • btStep: Quando pressionado o botão azul, Retorna a imagem.
  • btNext: Quando pressionado o botão azul, Avanço rápido.
  • btPrev: Quando pressionado o botão azul, Retorno rápido.
  • btRecord: Quando pressionado o botão vermelho, Gravação.
  • btEject: Quando pressionado o botão azul, Retirar.

Inicialmente vamos determinar qual foi o tipo de botão pressionado, para tanto, crie para o evento OnClick o seguinte código:

procedure TForm1.MediaPlayer1Click(Sender: TObject; Button: TMPBtnType; var DoDefault: Boolean);
begin
  case Button of
    btPlay: Edit1.Text := 'Tocando';
    btPause: Edit1.Text := 'Pausado';
    btStop: Edit1.Text := 'Parado';
    btNext: Edit1.Text := 'Próximo';
    btPrev: Edit1.Text := 'Anterior';
    btStep: Edit1.Text := 'Avançando';
    btBack: Edit1.Text := 'Retornando';
    btRecord: Edit1.Text := 'Gravando';
    btEject: Edit1.Text := 'Retirando';
  end;
end;

Para encontrar o que aconteceu com o processo, necessitamos do evento OnNotify. Aqui estão as mensagens enviadas pelo sistema operacional:

  • mci_Notify_Successful: Comando completado com êxito
  • mci_Notify_Superseded: Comando suspenso por outra função
  • mci_Notify_Aborted: Função corrente foi interrompida
  • mci_Notify_Failure: Algum erro ocorreu.

O Delphi não reconhece estas diretivas de mensagem, mas ele converte para constantes do tipo:

  • nvSuccessful indicando o êxito.
  • nvSuperseded indicando que está suspenso, provavelmente por causa de uma pausa.
  • nvAborted messages indicando que foi pressionado o botão parar, ou causa devido ao fechamento do arquivo.

Click no evento OnNotify e coloque o seguinte código:

procedure TForm1.MediaPlayer1Notify(Sender: TObject);
var
  S: String;
  Total: Integer
begin
  case MediaPlayer1.NotifyValue of
    nvSuccessful: begin
                              Inc(Total);
                              S := 'mci_Notify_Successful ' + IntToStr(Total);
                           end;
    nvSuperseded: S := 'mci_Notify_Superseded';
    nvAborted: S := 'mci_Notify_Aborted';
    nvFailure: S := 'mci_Notify_Failure';
  else
    S := 'Não consigo identificar a mensagem';
  end;
  Edit2.Text := S;
  if (MediaPlayer1.NotifyValue = nvSuccessful) and (MediaPlayer1.Mode = mpStopped) then
    Edit1.Text := 'Arquivo finalizado';
end;

Estes eventos verificam os acontecimentos mais significativos que ocorreram com o dispositivo MCI. O modo corrente com que o dispositivo MCI é especificado também pode ser utilizado pelo objeto TMediaPlayer. Aqui uma listagem dos valores mais comuns designados:

  • mci_Mode_Not_Ready
  • mci_Mode_Stop
  • mci_Mode_Play
  • mci_Mode_Record
  • mci_Mode_Seek
  • mci_Mode_Pause
  • mci_Mode_Open

Estes valores são auto-explicativos. Por exemplo, o modo do campo é fixado em mci_Mode_Stop, o dispositivo está parado. Se fixado em mci_Mode_Play, o dispositivo está tocando.

Crie uma nova procedure Private chamada SetMode, e insira o seguinte código:

procedure TForm1.SetMode;
begin
    Edit4.Text := MediaPlayer1.FileName;
    case MediaPlayer1.Mode of
       mpNotReady: Edit3.Text := 'mci_Mode_Not_Ready';
       mpStopped: Edit3.Text := 'mci_Mode_Stop';
       mpPlaying: Edit3.Text := 'mci_Mode_Play';
       mpRecording: Edit3.Text := 'mci_Mode_Record';
       mpSeeking: Edit3.Text := 'mci_Mode_Seek';
       mpPaused: Edit3.Text := 'mci_Mode_Pause';
       mpOpen: Edit3.Text := 'mci_Mode_Open';
       else
       begin
           Edit1.Text := 'Dispositivo Inativo';
           Edit2.Text := 'Sem messagens';
           Edit3.Text := 'Não identificado';
           Edit4.Text := 'Não há arquivo selecionado';
        end;
  end;
end;

Para a chamada desta rotina click no objeto Ttimer e chame o evento OnTimer e insira o seguinte código:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  SetMode;
end;

Com a propriedade Interval deste objeto fixada em 1000, significa que a cada 1000 milisegundos será disparada a rotina de verificação que informará o estado para o objeto TMediaPlayer.

Execute o projeto e atente para os seguintes detalhes:

  • Toda a vez que for usado um botão da barra multimídia, será disparado o evento onClick marcando deste modo o tipo de botão pressionado;
  • As mensagens da mm_MciNotify ocorrem durante toda a execução da aplicação, tente utilizar os botões Pausa e Parar no meio de uma execução.
  • Quando for selecionar um novo arquivo, afaste um pouco a janela de diálogo e observe como estão os campos edit.

Obs: Observe e estude também o arquivo [DiretórioDelphi]\SOURCE\VCL\MPLAYER .PAS ele é a unidade principal de criação do objeto TMediaPlayer.

Espero ter ajudado, qualquer outra dúvida, entre em contato comigo.


Bom artigo, direto ao ponto.
claudio a furtuozo <claudio93@bol.com.br>
preciso de exemplos sobre como acessar a camera de video e tambem como posso fazer para capturar as imagens e salvar os videos
Oséas Moreira <pascalggomes@bol.com.br>
Foi realmente muito interessante e bastante sugestivo. !

Oséas Moreira <pascalggomes@bol.com.br>
Como podemos entrar em contato com você, eu não conseguir visualizar o seu e-mail? : Não avaliado
Este e meu email de contato.. espero ter ajudado...
putz, valdomiro, copiando artifos dos outros denov
nossa cara, ce é um cuzão mesmo, copiando denovo os artigos? cria vergonha e cria seus proprio rapá...
ok mas o interessante é tocar mp3, um player que não faz isso, naõ é player.
Luciano Garcia <Luciano_g44@hotmail.com>
oi gostei do seu artigo, porem
aprendi criar player com listbox, seleciono a pasta e lista todas musicas dela clicko em uma musica do play e tudo blz , mas a pergunta e o seguinte como faço pra ele tocar a musica seguinte q esta no listbox executar automaticamente quando chegar na ultima musica ele tocae a primera. seraq me entende automaticamente sempresicar selecionar amuca novante e dar play. valew espero retorno








Um produto Detetive.net