language-Modula2-0.1: examples/Modula-2_Libraries/PMOS/sources/demo/m3d07.mod
MODULE M3D07;
(********************************************************)
(* *)
(* Test of module Music3 *)
(* *)
(* W.A. Mozart: Variations on *)
(* "Ah! vous dirais-je, Maman" *)
(* *)
(* Programmer: P. Moylan *)
(* Last edited: 21 March 1995 *)
(* Status: Working *)
(* *)
(********************************************************)
FROM Music3 IMPORT
(* proc *) Voice1, Voice2, Voice3, SetDuration, PlayTheMusic,
SetInstrument, EnableVoice;
(************************************************************************)
PROCEDURE Theme;
VAR repeat: [1..2];
BEGIN
Voice3 ("*2d");
FOR repeat := 1 TO 2 DO
Voice1 ("CC uGG AA GG FF EE D*3/4D/3E *8C/2");
Voice2 ("CuC EC FC EC DB CA FG *2dC/2");
Voice3 ("R R R R R R R R ");
END (*FOR*);
FOR repeat := 1 TO 2 DO
Voice1 ("uGG FF EE DD GG FF E*3/4E/3F*4 ED");
Voice2 ("uEdG uDdG CG BG uEdG uDdG C*3/4C/3D*4 CBd");
Voice3 ("R R R R R R R G ");
Voice1 ("CC uGG AA GG FF EE D*3/4D/3E *8C/2");
Voice2 ("CuC EC FC EC DB CA FG *2dC/2");
Voice3 ("R R R R R R R R ");
END (*FOR*);
Voice3 ("/2");
END Theme;
(************************************************************************)
PROCEDURE Variation1;
VAR repeat: [1..2];
BEGIN
Voice3 ("*2");
FOR repeat := 1 TO 2 DO
Voice1 ("/4DCBCBCBC uAGF#GF#GF#G G#ACBDCBA AGuEDCBAG GFuDCBAGF FEuCBAGFE *2DuAGdB *2CR");
Voice2 ("CuC EC FC E*3/4R/3C#*4 D*3/4R/3B*4 C*3/4R/3A*4 FG");
IF repeat = 1 THEN
Voice2 ("/2CGEG*2d");
ELSE
Voice2 ("CdC");
END (*IF*);
Voice3 ("R R R /2CR*2 R R R R ");
END (*FOR*);
FOR repeat := 1 TO 2 DO
Voice1 ("/4uAGF#GF#GAG GFEFEFGF FED#ED#EFE");
Voice2 ("uEdG uDdG CG ");
Voice3 (" R R R ");
Voice1 ("EDC#DC#DED uAGF#GuECAG GFEFuDBGF FED#EuCGFE *3G/3E*4D/4 DCBCBCBC");
Voice2 ("uFdG *2uF D/2 C*3/4R/3C *3E/3C*4B dCuC");
Voice3 ("R G G/2 GR*2 G R ");
Voice1 ("uAGF#GF#GF#G G#ACBDCBA AGuEDCBAG GFuDCBAGF FEuCBAGFE *2DuAGdB *2CR");
Voice2 ("EC FC E*3/4R/3C#*4 D*3/4R/3B*4 C*3/4R/3A*4 FG CdC ");
Voice3 ("R R /2CR*2 R R R R ");
END (*FOR*);
Voice3 ("/2");
END Variation1;
(************************************************************************)
PROCEDURE Variation2;
VAR repeat: [1..2];
BEGIN
Voice2 ("*2u");
FOR repeat := 1 TO 2 DO
Voice1 ("C/2RC*2 uG/2RG*2 A/2RA*2 G/2RG RFRF RERE RDRD *2CR");
Voice2 ("R R R *3/4R/3E RERD RDRC RCRB *4R ");
Voice3 ("/2RC*2E /2RE*2C /2RF*2C /2RE*2C /2DRBR CRAR FRGR RC*2dCu");
END (*FOR*);
FOR repeat := 1 TO 2 DO
Voice1 ("uG/2RG *2F#/2RF *2E/2REb *2D/2RdG *2uG/2R/2GF# *4F/2R/2FE *4Eb/2R/2F#G *4D/2R/2FD *4C/2R/2CE");
Voice2 ("R R R R R R R R R ");
Voice3 ("/2RE*2dG /2RuD*2dG /2RC*2G /2RB*2G /2RuE*2dG /2RuD*2dG /2RC*2G /2RB*2G /2R/2dCE*4G");
Voice1 ("*4G/2R/2GE *4A/2R/2AC *4G/2R/2EG *2R/2GF#*2R/2DF *2R/2FE*2R/2GE *2R/2C#D*2R/2FD *2R/2BC*4R");
Voice2 ("R R R R R R R ");
Voice3 ("/2R/2CE*4G /2R/2FA*4dC /2R/2EG*4dC /2DRBR CRdER FRGR CR*2dCu ");
END (*FOR*);
Voice2 ("/2d");
END Variation2;
(************************************************************************)
PROCEDURE Variation3;
VAR repeat: [1..2];
BEGIN
Voice1 ("/2");
Voice2 ("/2");
Voice3 ("d/4");
FOR repeat := 1 TO 2 DO
Voice1 ("C R C R uG R G R A R A R G R G R ");
Voice2 ("G R G R uE R E R G R F R F R E R ");
Voice3 ("CBCBCBCB CBCBCDEC FEFEFGAB CBCBCDEC");
Voice1 ("F R F R E R E R D R B R *2CR/2 ");
Voice2 ("E R D R D R C R A R F R *2GR/2 ");
Voice3 ("DC#DCBABA CBCBAG#AG FEFDGF#GdG CGEG*4dCu/4");
END (*FOR*);
FOR repeat := 1 TO 2 DO
Voice1 ("/2dGF#GF#GF#GF# GF#GF#GABG CBCDEDEF# GF#GF#GF#GF#");
Voice2 ("*2E E F F E E D D ");
Voice3 ("*4G G uD D C C B B ");
Voice1 ("GF#GF#GF#GF# GF#GF#GABG CBCDEDEF# GAFGEFDE*2");
Voice2 ("G G F F E E D R /2");
Voice3 ("E E D D C C B R /4");
Voice1 ("C R C R uG R G R A R A R G R G R ");
Voice2 ("G R G R uE R E R G R F R F R E R ");
Voice3 ("CBCBCBCB CBCBCDEC FEFEFGAB CBCBCDEC");
Voice1 ("F R F R E R E R D R B R *2CR/2 ");
Voice2 ("E R D R D R C R A R F R *2GR/2 ");
Voice3 ("DC#DCBABA CBCBAG#AG FEFDGF#GdG CGEG*4dCu/4");
END (*FOR*);
END Variation3;
(************************************************************************)
PROCEDURE EncodeMusic;
(* Plays a piece of music. *)
VAR repeat: [1..2];
BEGIN (* EncodeMusic *)
SetInstrument (2, 60000, 1200, 0);
EnableVoice (1, TRUE);
Voice2("d"); Voice3 ("d");
Theme;
Variation1;
Variation2;
Variation3;
END EncodeMusic;
(************************************************************************)
BEGIN
SetDuration (400);
EncodeMusic;
PlayTheMusic;
END M3D07.