language-Modula2-0.1: examples/Modula-2_Libraries/PMOS/sources/demo/m3d05.mod
MODULE M3D05;
(********************************************************)
(* *)
(* Test of module Music3B. *)
(* *)
(* Francisco Tarrega *)
(* Recuerdos de la Alhambra *)
(* *)
(* Programmer: P. Moylan *)
(* Last edited: 21 March 1995 *)
(* Status: Working *)
(* *)
(* I'm still not completely happy with the *)
(* closing chords. *)
(* *)
(********************************************************)
FROM Music3 IMPORT
(* proc *) Voice1, Voice2, Voice3, SetDuration,
SetWaveform, SetEnvelope, EnableVoice, PlayTheMusic;
(************************************************************************)
PROCEDURE Section1;
(* First section (first page and a half of the music). *)
BEGIN
Voice1 ("REEEEEEEEEEEEEEEDDDDDDDD CCCCCCCCCCCCCCCCDDDDDDDD");
Voice2 ("R E uC dE uB dE R E A E uB dE ");
Voice3 ("A A ");
Voice1 ("EEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEFFFFFFFF");
Voice2 ("R E uC dE uC dE R E uC dE uD dG ");
Voice3 ("A A ");
Voice1 ("GGGGGGGGGGGGGGGGFFFFFFFF EEEEEEEEEEEEEEEEFFFFFFFF");
Voice2 ("R G uE dG uD dG R G C G uD dG ");
Voice3 ("C C ");
Voice1 ("GGGGGGGGGGGGGGGGGGGGGGGG GGGGGGGGGGGGGGGGGGGGGGGG");
Voice2 ("R G uE dG uE dG R G uE dG uE dG ");
Voice3 ("C C ");
Voice1 ("CCCCCCCCCCCCCCCCBBBBBBBB AAAAAAAAAAAAAAAABBBBBBBB");
Voice2 ("R C uA dC uG dC R C F C dD uF ");
Voice3 ("F F ");
Voice1 ("AAAAAA*2/3ABA*3/2G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#");
Voice2 ("R dB E B E B ");
Voice3 ("dE ");
Voice1 ("G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#");
Voice2 ("R D E D E D ");
Voice3 ("E ");
(* Page 2. *)
Voice1 ("BbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbAAAAAAAA");
Voice2 ("R C# E C# E C# ");
Voice3 ("A ");
Voice1 ("GGGGGGGGGGGGGGGGAAAAAAAA");
Voice2 ("R A uE dA uF dA ");
Voice3 ("C# ");
Voice1 ("GGGGGG*2/3GAG*3/2FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF");
Voice2 ("R uE D A D A R A D A D A ");
Voice3 ("D D ");
Voice1 ("EEEEEEEEEEEEEEEEDDDDDDDD CCCCCCCCCCCCCCCCDDDDDDDD");
Voice2 ("R A B A B A R Eb A Eb A Eb ");
Voice3 ("D dF ");
Voice1 ("CCCCCC*2/3CDC*3/2BBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBB");
Voice2 ("R E G# E G# E R E G# E G# E ");
Voice3 ("E E ");
END Section1;
(************************************************************************)
PROCEDURE Section2;
(* Last three lines of page 2, plus first four and a half lines of *)
(* page 3. *)
BEGIN
(* Page 2, line 5 (where key changes to A major). *)
Voice1 ("EEEEEEEEEEEEEEEEDDDDDDDD");
Voice2 ("R E uC# dE uB dE ");
Voice3 ("A ");
Voice1 ("C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#DDDDDDDD");
Voice2 ("R E A E uB dE ");
Voice3 ("A ");
Voice1 ("EEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEE");
Voice2 ("R E uC# dE uC# dE R E uC# dE uC# dE ");
Voice3 ("A A ");
Voice1 ("F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#");
Voice2 ("R F# uD dF# uD dF# ");
Voice3 ("A ");
Voice1 ("uDDDDDDDDDDDDDDDDdF#F#F#F#F#F#F#F#");
Voice2 (" R uD uB dD D dF# ");
Voice3 (" A ");
(* Page 3. *)
Voice1 ("F#F#F#F#F#F#*2/3F#G#F#*3/2EEEEEEEEEEEEEEEE");
Voice2 ("R uD C# dE uC# dE ");
Voice3 ("A ");
Voice1 ("EEEEEEEEEEEEEEEEEEEEEEEE");
Voice2 ("R E uC# dE uC# dE ");
Voice3 ("A ");
Voice1 ("AAAAAAAAAAAAAAAAAAAAAAAA");
Voice2 ("R F# A C# A F# ");
Voice3 ("F# ");
Voice1 ("G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#DDDDDDDD");
Voice2 ("R G# C D# C G# ");
Voice3 ("G# ");
Voice1 ("F#F#F#F#F#F#F#F#EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEE");
Voice2 ("R G# C# G# C# G# R G# C# G# C# G# ");
Voice3 ("C# C# ");
Voice1 ("DDDDDDDDDDDDDDDDDDDDDDDD");
Voice2 ("R F F D E F ");
Voice3 ("B ");
Voice1 ("C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#BBBBBBBB");
Voice2 ("R E E E dE uD ");
Voice3 ("dE ");
Voice1 ("BBBBBB*2/3BC#B*3/2AAAAAAAAAAAAAAAA");
Voice2 ("R E E E F# G# ");
Voice3 ("A ");
END Section2;
(************************************************************************)
PROCEDURE EncodeMusic;
(* Plays a piece of music. *)
CONST BaseDuration = 48;
BEGIN (* EncodeMusic *)
SetDuration (BaseDuration);
SetWaveform (1, 1);
SetWaveform (2, 1);
SetWaveform (3, 6);
SetEnvelope (1, 50000, 10000, 10000);
SetEnvelope (2, 50000, 3000, 0);
SetEnvelope (3, 50000, 2000, 0);
EnableVoice (1, TRUE);
EnableVoice (2, TRUE);
EnableVoice (3, TRUE);
(****************************************)
(* F. Tarrega, Recuerdos de la Alhambra *)
(****************************************)
Voice2("d*4"); Voice3("dd*4*6");
(* Two repeats of the A minor section. *)
Section1;
Section1;
(* Two repeats of the A major section, with slightly different *)
(* endings. *)
Section2;
Voice1 ("AAAAAAAAAAAABBBBC#C#C#C#DDDD");
Voice2 ("R E C# E A B d");
Voice3 ("A ");
Section2;
Voice1 ("AAAAAAAAAAAABBBBCCCCDDDD");
Voice2 ("R E E G# A B d");
Voice3 ("A ");
(* D.C. al S/S. *)
Section1;
Section2;
Voice1 ("AAAAAAAAAAAABBBBCCCCDDDD");
Voice2 ("R E E G# A B d");
Voice3 ("A ");
(* Continue with the remainder of the A major section. *)
Voice1 ("AAAAAAAAAAAAAAAAAAAAAAAA");
Voice2 ("R E E E E E ");
Voice3 ("A ");
Voice1 ("AAAAAAAAAAAAAAAAAAAAAAAA BBBBBBBBCCCCCCCCDDDDDDDD");
Voice2 ("R F F F F F R F A F A F ");
Voice3 ("A A ");
(* Page 4. *)
Voice1 ("EEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEE");
Voice2 ("R E uC# dE uC# dE R E uC# dE uC# dE ");
Voice3 ("A A ");
Voice1 ("EEEEEEEEEEEEEEEEEEEEEEEE DDDDDDDDC#C#C#C#C#C#C#C#BBBBBBBB");
Voice2 ("R G# G# G# G# G# R F E E dE uD ");
Voice3 ("E E ");
Voice1 ("AAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAA");
Voice2 ("R E E E# F# E# R E E E E E ");
Voice3 ("A A ");
Voice1 ("AAAAAAAAAAAAAAAAAAAAAAAA BBBBBBBBCCCCCCCCDDDDDDDD");
Voice2 ("R F F F F F R F A F A F ");
Voice3 ("A A ");
Voice1 ("EEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEE");
Voice2 ("R E uC# dE uC# dE R E uC# dE uC# dE ");
Voice3 ("A A ");
Voice1 ("G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#G#");
Voice2 ("R E uE dE uE dE ");
Voice3 ("E ");
Voice1 ("F#F#F#F#F#F#F#F#EEEEEEEEDDDDDDDD");
Voice2 ("R E uC# dE uB dE ");
Voice3 ("E ");
Voice1 ("C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#");
Voice2 ("R E A E F# A ");
Voice3 ("A ");
SetDuration (9*BaseDuration DIV 8);
Voice2("*4"); Voice3("*4*6");
Voice1 ("C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#");
Voice2 ("R E A dE uC C# ");
Voice3 ("A ");
SetDuration (6*BaseDuration DIV 5);
Voice2("*4"); Voice3("*4*6");
Voice1 ("C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#");
Voice2 ("R E A dE uC C# ");
Voice3 ("A ");
Voice1 ("*4*6R ");
Voice2 ("R E A C# E A ");
Voice3 ("A ");
SetEnvelope (1, 50000, 20000, 20000);
SetEnvelope (2, 50000, 20000, 20000);
SetEnvelope (3, 50000, 20000, 20000);
SetWaveform (3, 1);
SetDuration (36*BaseDuration);
Voice1 ("uE *2/3 ddA");
Voice2 (" A *2/3 dE");
Voice3 (" A *2/3 A");
END EncodeMusic;
(************************************************************************)
BEGIN
EncodeMusic;
PlayTheMusic;
END M3D05.