PDA

Ver la Versión Completa : Hacer sonar la bocina interna de la computadora


scs
12-12-2008, 17:59:16
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
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


Uses MMSystem;


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


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

SONIDO1 WAVE Sonido.WAV


Llamada desde un botón en la aplicación:

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...


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)


procedure TForm1.Button1Click(Sender: TObject);
begin
Sound(500, 1000) ;
Sound(700, 1000) ;
Sound(900, 1000) ;
NoSound;
end;


Salu2,