Necesito saber de cuántas formas distintas puedo hacer sonidos o ejecutar archivos de sonido en una aplicación delphi.
Respuesta de markspiner
1
1
markspiner, Amplios conocimientos en la enseñanza y desarrollos a nivel...
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.