dos_compilers/Borland Turbo Pascal v3/SOUND.PAS
2024-07-03 16:09:46 -07:00

121 lines
2.4 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

program SoundDemo;
{$C-}
{
SOUND DEMONSTRATION PROGRAM Version 1.00A
This program demonstrates TURBO PASCAL's standard procedures Sound,
Delay and NoSound on the IBM PC and true compatibles.
PSEUDO CODE
1. Sound an alarm until a key is pressed.
a. Play G and D in octave 4
2. Sound a siren until a key is pressed.
INSTRUCTIONS
1. Compile and run this program using the TURBO.COM compiler.
2. Type any key to stop the alarm.
3. Type any key to stop the siren and end the program.
}
type
NoteRecord = record
C,CF,D,DF,E,F,FF,G,GF,A,AF,B: integer;
end;
const
Notes: NoteRecord =
(C:1;CF:2;D:3;DF:4;E:5;F:6;FF:7;G:8;GF:9;A:10;AF:11;B:12);
var
ch : char;
procedure Play(Octave,Note,Duration: integer);
{ Play Note in Octave Duration milliseconds
Frequency computed by first computing C in
Octave then increasing frequency by Note-1
times the twelfth root of 2. (1.059463994)
If Duration is zero Note will be played
until you activate procedure NoSound }
var
Frequency : real;
I : integer;
begin
Frequency := 32.625;
for I := 1 to Octave do { Compute C in Octave }
Frequency := Frequency * 2;
for I := 1 to Note - 1 do { Increase frequency Note-1 times }
Frequency := Frequency * 1.059463094;
if Duration <> 0 then
begin
Sound(Round(Frequency));
Delay(Duration);
NoSound;
end
else Sound(Round(Frequency));
end;
procedure SoftAlarm;
{ Play the notes G and D in octave three 7 times
each with a duration of 70 milliseconds. }
var
I: integer;
begin
for I := 1 to 7 do
with Notes do
begin
Play(4,G,70);
Play(4,D,70);
end;
delay(1000);
end;
procedure Siren;
var
Frequency: integer;
begin
for Frequency := 500 to 2000 do
begin
Delay(1);
Sound(Frequency);
end;
for Frequency := 2000 downto 500 do
begin
Delay(1);
Sound(Frequency);
end;
NoSound;
end;
procedure SoundAlarm;
begin
Writeln('Press any key to Stop');
repeat
SoftAlarm
until KeyPressed;
Read(kbd,ch);
end; {SoundAlarm}
procedure SoundSiren;
begin
Writeln('Press any key to Stop');
repeat
Siren
until KeyPressed;
Read(kbd,ch)
end; {SoundSiren}
begin
SoundAlarm;
SoundSiren;
end.