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