Em
nossos micros, freqüentemente nos deparados com arquivos
de sons. São extensões as mais variadas, como MID,
VOC, AU, SND, RAW, MAT, AIF, AFC, IFF, VOX, DWD, SMP, MOD,SDS,
WAV, etc. Desta lista, aqueles que podem nos interessar mais de
perto são: MID e WAV.
Os
arquivos MID são formados basicamente por comandos
MIDI, que algum instrumento deverá tocar. Pode ser o próprio
computador. Geralmente encontramos MIDs nas páginas
da Web, por serem arquivos pequenos e com uma qualidade de som
razoável. Encontramos uma grande variedade de músicas
neste formato, apesar de noventa por cento delas soarem como se
executadas por um teclado made in Paraguai de R$ 30,00 (mas a
culpa é da placa de som e não do arquivo). Esses
arquivos são usados geralmente como música de fundo,
em jogos mais sofisticados.
Na
estrutura interna da máquina, o MID é uma
coleção de pedaços de sons que são
manipulados em relação à sua frequência
de reprodução, produzindo assim as notas musicais
daquilo que chamamos "instrumento". Esses "pedaços" de
sons ou "samples" estão gravados na ROM do equipamento
(placa de som, etc) e não temos acesso a eles, mas apenas
ao conjunto de notas musicais que ele produz. É por isso
que no formato MID não tem voz, mas apenas música
instrumental.
O
formato WAV, que é padrão no Windows (wave),
é a gravação literal de um determinado som,
bit a bit. Podemos dizer que a diferença entre um arquivo
MID e um WAV é praticamente a mesma diferença
entre uma imagem vetorial e uma imagem bitmap. O WAV registra
tudo: instrumentos, notas, vozes, ruídos, etc e permite
a manipulação total do seu conteúdo. Mas
gera arquivos monstruosos, mesmo se usarmos estruturas compactadas,
como por exemplo o MP3.
Mas
que tipo de arquivo usar em nossos jogos? Depende do que se quer
fazer. Se for necessário o uso de música, sem gastar
muito espaço, então uma boa coleção
de MIDs dá para o gasto. Músicas WAV são
um problema: cada uma ocupa em média 10 megabytes se gravadas
com uma qualidade média de reprodução. Quanto
mais qualidade, mais espaço do HD vai embora.
Em
nossos programas usamos geralmente, para os efeitos especiais,
sons diversos e para as conversas dos personagens, o formato WAV.
Não é muito complicado trabalhar com esse formato,
já que ele é o padrão de sons adotado pelo
Windows, mas "tocar" uma wave no Delphi requer um pouco de trabalho
com o componente TMediaPlayer.
Este
componente pode ser encontrado na seção System,
da palette de componentes (de todas as versões do Delphi).
É um dos componentes básicos e no entanto é
um sofisticado e completo sistema de reprodução
/ gravação de sons. Inclui automaticamente todos
os botões e funções para tocar, gravar, avançar,
retroceder, pausar e "ejetar" o arquivo ou mídia usada.
Na verdade, este componente pode "tocar" literalmente qualquer
coisa do padrão Windows, como wav, mid, avi,
etc.
Basta informar o
nome do arquivo a ser executado e ajustar o componente para Open
automático. que o botão Play (e todos os
outros) funcionará sem nenhum código adicional.
Obviamente
que em nossos jogos não estaremos cogitando da hipótese
do jogador acionar ele próprio a reprodução
dos sons. Isso deverá ser uma operação automática
ou então associada a alguma outra operação
e para tanto não necessitamos dos controles do componente.
Normalmente, simplificamos sua aparência ao máximo,
inclusive tornando-o invisível.
Em termos de programação
podemos ter (em um botão, por exemplo):
begin
MediaPlayer1.FileName:= 'Beep.wav';
MediaPlayer1.Open;
MediaPlayer1.Play;
end;
Onde após
definir o nome do arquivo a ser "tocado", executamos a função
Open que, na prática, corresponde a fazer o Load
do arquivo, para em seguida executar o Play. Tanto quanto
nas imagens, aqui também cabem considerações
acerca de como organizamos a sequência dos sons, a forma
de carregar esses arquivos para execução, etc.
Existe uma alternativa
para a execução de arquivos WAV, sem a necessidade
do componente TMediaPlayer. Basta acrescentar MMSystem
na declaração uses da unit e usar, para a reprodução
dos arquivos, o seguinte código:
var
Nome: array[0..79] of char;
begin
StrPCopy(Nome,'Beep.wav');
sndPlaySound(Nome,snd_ASync);
end;
Ainda assim, essa
não é a solução ideal para o uso elaborado
de sons, onde podemos necessitar de mais de um tipo de arquivo
sendo executado ao mesmo tempo. Mas, para uma boa parte das nossas
necessidades, estas duas soluções são satisfatórias.
|