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.
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:
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
3.
Arquivo WAVE (*.wav) | *.wav
4.
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.
Valdomiro Farias de Andrade Júnior
Analista de Sistemas
procompanysistemas@infonet.com.br
|