|
Ejecutando un sonido propio
Copyright © 2000 Ernesto
De Spirito
Si desea reproducir uno de los sonidos básicos del sistema,
llame a MessageBeep con el
parámetro apropiado. Llame a
MessageBeep(-1);
si desea escuchar el pitido del parlante de la PC.
Para reproducir un sonido WAV, puede usar un objeto TMediaPlayer, pero
si quiere algo rápido, la forma más fácil es llamando a la función
API sndPlaySound (declarada en la unidad mmsystem).
Por ejemplo:
uses MMSystem;
procedure TForm1.Button1Click(Sender: TObject);
begin
sndPlaySound('C:\Windows\Media\Tada.wav',
SND_NODEFAULT Or SND_ASYNC Or SND_LOOP);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
sndPlaySound(nil, 0); // Detiene el sonido
end;
Si pretende ejecutar un sonido más o menos seguido, tal vez debería
considerar cargar el archivo en memoria y reproducirlo desde ahí:
var
tada: string;
procedure TForm1.Button1Click(Sender: TObject);
begin
sndPlaySound(Pointer(tada), SND_MEMORY
Or SND_NODEFAULT Or SND_ASYNC);
end;
initialization
tada := LoadFile('C:\Windows\Media\Tada.wav');
finalization
tada := ''; // Libera la memoria ocupada por la cadena
end.
Puede insertar uno o más archivos de onda (wave) en su ejecutable y
reproducirlos desde allí. Primero necesita crear un archivo de
recursos (.RES). Para hacerlo, cree un archivo .RC, por ejemplo llamado
sonidos.rc:
tada wave c:\windows\media\tada.wav
chimes wave c:\windows\media\chimes.wav
Luego debe compilarlo con el compilador de recursos (BRCC32.EXE
en el directorio Delphi\Bin) y así obtendrá un archivo llamado sonidos.res
que puede cargar en su proyecto con la directiva $R.
Para reproducir el sonido directamente del ejecutable llame
a PlaySound (en vez de sndPlaySound) con el
indicador SND_RESOURCE:
uses MMSystem;
{$R sonidos.res}
procedure TForm1.Button1Click(Sender: TObject);
begin
PlaySound('chimes', hInstance, SND_RESOURCE or SND_SYNC);
PlaySound('tada', hInstance, SND_RESOURCE or SND_ASYNC);
end;
Nuevamente, si va a reproducir un sonido con cierta frecuencia, debería
considerar cargar el recurso en memoria y ejecutarlo desde allí:
uses MMSystem, Windows;
{$R sonidos.res}
var
tada: Pointer;
procedure TForm1.Button1Click(Sender: TObject);
begin
sndPlaySound(tada, SND_MEMORY
or SND_NODEFAULT or SND_ASYNC);
end;
initialization
// Aquí usamos algunas conversiones para evitar usar otra variable
tada := Pointer(FindResource(hInstance, 'tada', 'wave'));
if tada <> nil then begin
tada := Pointer(LoadResource(hInstance, HRSRC(tada)));
if tada <> nil then tada := LockResource(HGLOBAL(tada));
end;
end.
|