MULTIMÍDIA Capítulo 8 Neste capítulo apresentaremos alguns elementos de multimídia, tais como: sons e vídeos e também como utilizar os recursos usando o controle de multimídia do ambiente Delphi. O Delphi encapsula uma grande parte da funcionalidade do Media Control Interface (MCI) do Windows, facilitando assim o uso de elementos multimídia na aplicações. EXPLORANDO A MULTIMÍDIA A multimídia para ambiente Windows foi desenvolvida a poucos anos atrás e hoje é lugar comum, nesta seção discutimos alguns itens genéricos. Multimídia é um termo genérico que se refere a quase toda animação, som ou vídeo no computador. Os principais recursos envolvidos são: Exibição de filmes via Microsoft Video for Windows, que utiliza arquivos.avi. Execução de musicas via MIDI ou arquivos.wav. Os arquivos MIDI são produzidos através do Musical Instruments Digital Interface (MIDI) e os arquivos.wav armazenam sons criados através da tecnologia WAVE da Microsoft. O COMPONENTE TMEDIAPLAYER O componente TMediaPlayer permite que uma aplicação tenha controle sobre dispositivos tais como: CD Player, Vídeo, Áudio e Sequenciadores MIDI. CRIANDO UM MEDIAPLAYER TRIVIAL 1 - Crie um novo Projeto 2 - Adicione ao form principal os componentes TMediaPlayer, TOpenDialog e 2 TBitButton, de acordo com a figura a seguir: Delphi Pag. 115
3 - Codifique o evento OnClick do botão OK de acordo com o código abaixo: Procedure TForm1.BitBtn1Click(Sender: TObject); If OpenDialog1.Execute then With MediaPlayer1 do FileName := OpenDialog1.FileName; Open; Este evento abrirá uma caixa de diálogo, uma vez escolhido o arquivo(através da propriedade FileName) ele será executado pelo MediaPlayer. O método Open de TMediaPlayer executa o arquivo multimídia. 4 - Para escolher o tipo de arquivo que será exibido na janela OpenDialog. Deve-se selecionar a propriedade Filters, clicar no botão reticências à direita da propriedade. Será exibido o Filter Editor, preencha os campos de acordo com afigura abaixo: Delphi Pag. 116
5 - Salve seu projeto e execute-o. USANDO ARQUIVOS.WAV NOS PROGRAMAS Os arquivos WAV tornaram-se um padrão de arquivos de áudio no ambiente Windows. Os arquivos WAV armazenam o sob forma binária que lembram uma função de onda O componente TMediaPlayer permite que integrem sons facilmente aos programas. Porém, se desejar apenas executar um arquivo WAV no programa não é necessário utilizar o componente TMediaPlayer, deve-se usa a API sndplaysound( ) que está declarada na unit MMSystem, veja o código abaixo: Function sndplaysound(lpzsoundname: Pchar; uflags: Word): Bool; A função sndpaysound( ) é capaz de executar um som a partir de um arquivo, memória ou qualquer outro recurso associado ao programa sndplaysound( ). Esta função possui dois parâmetros, o primeiro lpzsoundname é uma variável tipo PChar que representa um arquivo, ou item de seção [sounds] do arquivo WIN.INI ou ainda um ponteiro para um arquivo WAV localizado em memória. O segundo parâmetro uflags contém flags que descrevem como o som será executado. O valor de um flag pode ser: Flag Descrição Snd_Async Executa um som a.ssincronamente, usado para sons de background Snd_Loop Executa um som repetidas vezes. Snd_Assync deve ser especificado para usar esta flag. Snd_Memory Executa um WAV que está lovcalizado na memória, o arquivo é apontado pelo primeiro parâmetro de sndplaysound. Snd_NoDefault Se o arquivo não for encontrado, sndplaysound( ) não retorna nenhum som,mesmo que exista um som default o arquivo WIN.INI Snd_NoStop Executa umsom somente se ele não esta em execução. sndplaysound( ) retorna true se o som foi executado e false em caso contrário. Snd_Sync Executa som sincronamente, o controle só retorna a função após o término da execução do arquivo sonoro. Delphi Pag. 117
NOTA Para finalizar a execução de um som assíncrono, deve-se chamar sndplaysound() e passar o Nil como valor de lpzsoundname. EXECUÇÃO DE VÍDEOS AVI (Audio-Video Interleave) é um formato usado para armazenar som e imagem simultaneamente. Para exibir um vídeo deve-se rodar o programa do exercício anterior e selecionar um arquivo.avi. EXECUÇÃO DE FRAMES Pode-se exibir o primeiro frame de um arquivo AVI numa janela antes de executar o arquivo. Para fazê-lo logo após a abertura de TMediaPlayer, deve-se configurar a propriedade Frames com o valor 1 e depois, fazer uma chamada ao método Step( ). A propriedade Frames informa ao componente TMediaPlayer o número de frames que serão movimentados quando os métodos Step( ) ou Back( ) forem chamados. Veja um exemplo no código abaixo: Procedure TForm1.BitBtn1Click(Sender: TObject); If OpenDialog1.Execute then With MediaPlayer1 do FileName := OpenDialog1.FileName; Open; Frames := 1; Notify := True; EXERCÍCIO A PROPRIEDADE DISPLAY É possível atribuir um valor a propriedade Display de TMediaPlayer, Assim um AVI pode ser executado numa janela específica, ao invés de criar sus própria janela. 1 Abra o projeto do exercício anterior. 2 Selecione a propriedade Display do componente TMediaPlayer1, observe que todos os componentes deste projeto aparecem na ListBox, por fim, selecione o componente Panel1. 3 Salve seu novo projeto Delphi Pag. 118
4 Execute seu programa. Observe que ao executar o programa e selecionar o arquivo.avi, a saída de AVI se dará apenas no painel e não em toda a janela. A PROPRIEDADE DISPLAYRECT A propriedade DisplayRect é do tipo TRect e determina o tamanho da janela onde o AVI será exibido. Usa-se esta propriedade para aumentar ou reduzir esta área, por exemplo, para o AVI ocupar toda a área do Painel: MediaPlayer1.DisplayRect :=Rect(0,0,Panel1.Width,Panel1.Height); 6 Altere o evento OnClick de acordo com o código abaixo: Procedure TForm1.BitBtn1Click(Sender: TObject); If OpenDialog1.Execute then With MediaPlayer1 do FileName := OpenDialog1.FileName; Open; DisplayRect :=Rect(0,0,Panel1.Width,Panel1.Height); EVENTOS DE TMEDIAPLAYER TMediaPlayer possui dois eventos: OnPostClick OnNotify O evento OnPostClick é idêntico ao evento OnClick, exceto por uma pequena característica: OnClick ocorre assim que o componente é clicado. O evento OnPostClick só é executado após o acontecimento de uma ação causado por um click. Por exemplo, ao clicar o botão play de um TMediaPlayer em runtime, o evento OnClick é gerado, enquanto que o OnPostClick ocorre após o dispositivo ser desativado. O evento OnNotify só executado quando um método de controle de dispositivo TMediaPlayer é finalizado, como por exemplo: Back, Close, Eject, Next, Open, Pause, Resume, Rewind, Stop. A propriedade Notify de TMediaPlayer deve esta como o valor True. 7 - Para exemplificar o funcionamento de OnNotify, crie o código abaixo para evento OnNotify do seu projeto. Procedure TForm1.MediaPlayer1Sender: TObject); Delphi Pag. 119
MessageDlg('Método executado!', mtinformation,[mbok],0); Não esqueça de configurar a propriedade Notify para True no evento OnClick do BitButton1. Veja o código abaixo: Procedure TForm1.BitBtn1Click(Sender: TObject); If OpenDialog1.Execute then With MediaPlayer1 do FileName := OpenDialog1.FileName; Open; DisplayRect :=Rect(0,0,Panel1.Width,Panel1.Height); Notify := True; 8 Salve seu projeto, execute-o. 9 Fim do exercício. SPLASH SCREENS Observe que ao carregar alguns programas, como por exemplo, Delphi. Excel, Word, etc. Uma tela é exibida durante o processo de carga, esta tela é chamada Splash Screen. Ela é amplamente utilizada em programa que usam amplos recursos do ambiente, por este processo ser lento este intervalo de tempo pode causar desconforto ao usuário (principalmente o inexperiente). Para evitar este transtorno, deve-se criar uma Splash Screen para o aplicativo, que será exibida durante sua carga. A primeira etapa na criação de uma Splash Screen é criar um form, geralmente o form contém um painel, alguns labels e uma Imagem. Agora vamos criar uma Splash Screen 10 - Crie um novo Form de acordo com a figura abaixo; Delphi Pag. 120
Configure as propriedade do Form de acordo com a tabela abaixo; Componente Propriedade Valor Form Name SplasScreen Form BorderStyle bsnone Image Picture Use um.bmp qualquer Image Transparent True Label1 Caption Multimidia Player Label2 Caption Versão 1.0 Label1 e 2 Transparent True 11 - Codifique o projeto splash de acordo com o código abaixo: SplashScreen := TSplashScreen.Create(Application); SplashScreen.Show; SplashScreen.BorderStyle := bsnone; Try //O arquivo de som está no disco do instrutor SndPlaySound('e isso ai.wav',snd_async); except Delay(3000); SplashScreen.Update; SplashScreen.Close; End. PS. Não esqueça de declarar procedure Delay na implementation de acordo com o código abaixo: procedure delay (ms : longint); var TheTime : LongInt; TheTime := GetTickCount + ms; while GetTickCount < TheTime do Application.ProcessMessages; 12- Codifique o evento OnActive para o form de Splash de acordo com o código abaixo. procedure TSplashScreen.FormActivate(Sender: TObject); SplashScreen.brush.Style := bsclear; 13 Inclua a unit MMSystem na cláusula uses de sua unit. 14 Salve o projeto 15 - Execute seu programa Delphi Pag. 121
NOTA A Splash Screen deve ser criada e exibida na seção Initialization da Unit. Lembre-se, a seção Initialization das units são executadas antes do bloco do programa principal do arquivo.dpr. Delphi Pag. 122