Sonidos en Delphi

Necesito saber de cuántas formas distintas puedo hacer sonidos o ejecutar archivos de sonido en una aplicación delphi.

1 respuesta

Respuesta
1
Voy a responderte con un artículo que tengo de Latium Software:
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.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas