Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Hacer sonar la bocina interna de la computadora (https://www.clubdelphi.com/foros/showthread.php?t=62250)

scs 12-12-2008 17:59:16

Hacer sonar la bocina interna de la computadora
 
Hola Amigos

Me gustaría mucho que me ayudaran con un proyecto que estoy haciendo. El problema es que quisiera saber como poder crear un programita que me permita reproducir un determinado sonido en la bocina interna de la computadora (La que se encuentra dentro de la Motherboard y que hace un beet cuando enciende). Diganme si esto se puede hacer desde Delphi y como.....

Lester 12-12-2008 18:29:29

Re: Hacer sonar la bocina interna de la computadora
 
Hola amigo, en respuesta a tu pregunta no se como hacer que la bocina de la computadora suene más que un beep (Imprimiendo chr(7)), pero te dejo esto por si te interesa:

Sonido en las aplicaciones:

Agregas en el

Código Delphi [-]
Uses MMSystem;

En el evento ButtonClick de un botón pones el siguiente código:

Código Delphi [-]
sndPlaySound('C:\Windows\Media\Chimes.wav', 0); 
sndPlaySound('C:\Windows\Media\Tada.wav', 0);
sndPlaySound(nil, 0); //para parar el sonido

También puedes hacer un archivo .RES con el siguiente código y llamarlo desde la aplicación, ten en cuenta que haciendo este último procedimiento el tamaño de tu aplicación crecerá considerablemente si el fichero .WAV es también grande:

Fichero SONIDOS.RES
Código Delphi [-]
SONIDO1 WAVE Sonido.WAV

Llamada desde un botón en la aplicación:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
 //PlaySound(Pchar('SONIDO1'),hinstance,SND_RESOURCE or SND_SYNC); //Esperando a que termine
 PlaySound(Pchar('SONIDO1'),hinstance,SND_RESOURCE or SND_ASYNC); //Sin esperar a que termine
end;

Espero que te sea de utilidad,

Salu2,

coso 12-12-2008 18:48:21

Hola, echale un vistazo a la funcion Beep, aunque no es el altavoz interno.

Delphius 12-12-2008 18:51:26

¿Porqué no emplear Windows.Beep?

Recuerdo haber leído por aquí que se puede conseguir sonidos un tanto cómicos si uno juega con la frecuencia y la duración.
Es cuestión de ponerse a jugar un ratito y sacar al músico que llevamos adentro.;)

Ojo, no es Beep es Windows.Beep.

Saludos,

Lester 16-12-2008 15:00:09

Hola, también puedes echarle un vistazo al siguiente código que hace sonar la bocina de la PC...

Código Delphi [-]
procedure SetPort(address, Value: Word) ;
var
   bValue: Byte;
begin
   bValue := trunc(Value and 255) ;
   asm
     mov dx, address
     mov al, bValue
     out dx, al
   end;
end;
function GetPort(address: Word): Word;
var
   bValue: Byte;
begin
   asm
     mov dx, address
     in al, dx
     mov bValue, al
   end;
   GetPort := bValue;
end;
procedure Sound(aFreq, aDelay: Integer) ;
   procedure DoSound(Freq: Word) ;
   var
     B: Byte;
   begin
     if Freq > 18 then
     begin
       Freq := Word(1193181 div Longint(Freq)) ;
       B := Byte(GetPort($61)) ;
       if (B and 3) = 0 then
       begin
         SetPort($61, Word(B or 3)) ;
         SetPort($43, $B6) ;
       end;
       SetPort($42, Freq) ;
       SetPort($42, Freq shr 8) ;
     end;
   end;
   procedure Delay(MSecs: Integer) ;
   var
     FirstTickCount: LongInt;
   begin
     FirstTickCount := GetTickCount;
     repeat
       Sleep(1) ;
       //or use Application.ProcessMessages instead of Sleep
     until ((GetTickCount - FirstTickCount) >= Longint(MSecs)) ;
   end;
begin
   if Win32Platform = VER_PLATFORM_WIN32_NT then
   begin
     Windows.Beep(aFreq, aDelay) ;
   end
   else
   begin
     DoSound(aFreq) ;
     Delay(aDelay) ;
   end;
end;
procedure NoSound;
var
   Value: Word;
begin
   if not (Win32Platform = VER_PLATFORM_WIN32_NT) then
   begin
     Value := GetPort($61) and $FC;
     SetPort($61, Value) ;
   end;
end;

Y bastaría jugar con el procedimiento SOUND(FREQ, ESPERA)

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
   Sound(500, 1000) ;
   Sound(700, 1000) ;
   Sound(900, 1000) ;
   NoSound;
end;

Salu2,


La franja horaria es GMT +2. Ahora son las 05:43:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi