home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pmos2002.zip / SRC / MUSICDEM.MOD < prev    next >
Text File  |  1996-10-17  |  5KB  |  137 lines

  1. IMPLEMENTATION MODULE MusicDemonstration;
  2.  
  3.         (********************************************************)
  4.         (*                                                      *)
  5.         (*              Test of module Music.                   *)
  6.         (*                                                      *)
  7.         (*      J.S. Bach: Prelude from Cello Suite No. 1       *)
  8.         (*                                                      *)
  9.         (*  Programmer:         P. Moylan                       *)
  10.         (*  Last edited:        17 August 1993                  *)
  11.         (*  Status:                                             *)
  12.         (*      Working.  Musically, it could be polished up a  *)
  13.         (*      little, but from the software development       *)
  14.         (*      viewpoint it is complete - module Music does    *)
  15.         (*      indeed work as desired.                         *)
  16.         (*                                                      *)
  17.         (*      Some notes possibly still wrong.                *)
  18.         (*                                                      *)
  19.         (********************************************************)
  20.  
  21. FROM TaskControl IMPORT
  22.     (* proc *)  CreateTask;
  23.  
  24. FROM Semaphores IMPORT
  25.     (* type *)  Semaphore,
  26.     (* proc *)  CreateSemaphore, Wait, Signal;
  27.  
  28. FROM Music IMPORT
  29.     (* proc *)  SetNoteDuration, PlayMusic, WaitForMusicFinished;
  30.  
  31. (************************************************************************)
  32.  
  33. VAR
  34.  
  35.     (* The MusicFinished semaphore is used to signal the end of the     *)
  36.     (* demonstration.                                                   *)
  37.  
  38.     MusicFinished: Semaphore;
  39.  
  40. (************************************************************************)
  41.  
  42. PROCEDURE PlayATune;
  43.  
  44.     (* Plays a piece of music.  This procedure runs as a separate task, *)
  45.     (* which does not exit until the playing is over.                   *)
  46.  
  47.     BEGIN       (* PlayATune *)
  48.  
  49.         (********************************************************)
  50.         (* Opening of J.S. Bach, Cello Suite No. 1, Prelude.    *)
  51.         (********************************************************)
  52.  
  53.         SetNoteDuration (200);
  54.  
  55.         PlayMusic ("dDuAuF#EF#dAuF#dAddDuuAuF#EF#dAuF#dA");
  56.         PlayMusic ("dDuBuGF#GdBuGdBddDuuBuGF#GdBuGdB");
  57.         PlayMusic ("DC#GF#GC#GC#ddDuuC#GF#GC#GC#");
  58.         PlayMusic ("dDuDF#EF#DF#DddDuuDF#EF#DF#C#");
  59.         PlayMusic ("dDuBuF#EF#DC#DBDC#DdF#AG#F#");
  60.         PlayMusic ("G#uDEDEDEDdG#uDEDEDED");
  61.         PlayMusic ("C#EAG#AEDEC#EDEdAC#BA");
  62.         PlayMusic ("dBuF#uDC#DdF#uDdF#dBuF#uDC#DdF#uDdF#");
  63.         PlayMusic ("dBuG#ABAG#F#EuDC#BuAG#F#ED");
  64.         PlayMusic ("C#BAuAEAdC#EdABC#EDC#BA");
  65.         PlayMusic ("uD#dACBCAuD#dAuF#dACBCAuD#dA");
  66.         PlayMusic ("GBEF#GEBAGBEF#GEC#B");
  67.         PlayMusic ("A#C#A#C#EC#EC#A#C#A#C#EC#EC#");
  68.         PlayMusic ("DC#BDC#DEC#DC#BAGF#ED");
  69.  
  70.         (* Page 2. *)
  71.  
  72.         PlayMusic ("C#GAGAGAGC#GAGAGAG");
  73.         PlayMusic ("DF#uCBCdF#uCdF#DF#uCBCdF#uCdF#");
  74.         PlayMusic ("DGBABGBGDGBABGBG");
  75.         PlayMusic ("DuC#GF#GC#GC#dDuC#GF#GC#GC#d");
  76.         PlayMusic ("DuAuF#EF#DC#BAGF#EDC#BA");
  77.         PlayMusic ("G#uEuBC#DBC#DddG#uEuBC#DBC#D");
  78.         PlayMusic ("ddGuEABC#ABC#ddGuEABC#ABC#");
  79.         PlayMusic ("ddGuEAC#EG#*A/AdEF#GABC#D");
  80.         PlayMusic ("EC#ABC#DEF#GEC#DEF#GA");
  81.         PlayMusic ("BbAG#AAGF#GGEC#BAEF#G");
  82.         PlayMusic ("dAuEAC#EF#GEF#DAGF#DEF#");
  83.         PlayMusic ("dADF#ADEF#DG#FEFFED#E");
  84.         PlayMusic ("EDC#DDBG#F#EG#BDEG#AG#");
  85.         PlayMusic ("AEC#BC#EdAC#dEAG#F#EDC#B");
  86.  
  87.         (* Page 3. *)
  88.  
  89.         PlayMusic ("*A/uuGF#EDC#BAuGF#EDC#BA");
  90.         PlayMusic ("GuF#EDC#BAGF#uEDC#BAGF#");
  91.         PlayMusic ("EuDC#BC#EdAuEBEC#EDEBE");
  92.         PlayMusic ("C#EdAuEDEBEC#EdAuEDEBE");
  93.         PlayMusic ("C#EdAuEBEC#EDdEuEdEuF#EddAuEu");
  94.         PlayMusic ("EdEuF#EGEddAuuEF#EGEAEF#E");
  95.         PlayMusic ("GEF#EGEdEuEF#EdEuEF#EDE");
  96.         PlayMusic ("EdEuDEdEuEC#EDEC#EDEBE");
  97.         PlayMusic ("C#EdABCdAuC#dAuDdAuuD#ddAuuEddAuuFddA");
  98.         PlayMusic ("uuF#ddAuuGddAuuG#ddAuuAddAuuBbddAuuBddAuuCddAuuC#ddA");
  99.         PlayMusic ("uuDdF#dAuF#uDdF#uDdF#uDdF#dAuF#uDdF#uDdF#");
  100.         PlayMusic ("uDdEdAuEuDdEuDdEuDdEdAuEuDdEuDdE");
  101.         PlayMusic ("uC#dGdAuGuC#dGuC#dGuC#dGdAuGuC#dGuC#dG");
  102.         PlayMusic ("u***D");
  103.         WaitForMusicFinished;
  104.         Signal (MusicFinished);
  105.     END PlayATune;
  106.  
  107. (************************************************************************)
  108.  
  109. PROCEDURE WaitForEndOfMusic;
  110.  
  111.     (* Synchronization procedure: does not return until the music       *)
  112.     (* demonstration is over.                                           *)
  113.  
  114.     BEGIN
  115.         Wait (MusicFinished);
  116.     END WaitForEndOfMusic;
  117.  
  118. (************************************************************************)
  119.  
  120. PROCEDURE StartTheMusic;
  121.  
  122.     (* Creates the player task, after which it will run autonomously.   *)
  123.  
  124.     CONST PlayerPriority = 12;
  125.  
  126.     BEGIN
  127.         CreateSemaphore (MusicFinished, 0);
  128.         CreateTask (PlayATune, PlayerPriority, "Music demo");
  129.     END StartTheMusic;
  130.  
  131. (************************************************************************)
  132.  
  133. BEGIN
  134.     StartTheMusic;
  135. END MusicDemonstration.
  136.  
  137.