PROG3.MOD 710 B

12345678910111213141516171819202122232425262728293031
  1. MODULE prog3;
  2. (* This program plays musical scales *)
  3. FROM Lib IMPORT Speaker, Delay;
  4. FROM MATHLIB IMPORT Exp,Log;
  5. CONST MiddleC = 131.0;
  6. TYPE NoteType = SHORTINT;
  7. TYPE ScaleType = ARRAY [1..8] OF NoteType;
  8. CONST major = ScaleType(0,2,4,5,7,9,11,12);
  9. CONST minor = ScaleType(0,2,3,5,7,8,11,12);
  10. PROCEDURE PlayScale(mode : ScaleType; key : NoteType);
  11. VAR
  12. i:[1..8];
  13. note:NoteType;
  14. freq:LONGREAL;
  15. BEGIN
  16. FOR i := 1 TO 8 DO
  17. note := key + mode[i];
  18. freq := MiddleC * Exp(LONGREAL(note) * (Log(2.0)/12.0));
  19. Speaker(CARDINAL(freq),200);
  20. END;
  21. Delay(500);
  22. END PlayScale;
  23. BEGIN
  24. PlayScale(major, 0); (* C major *)
  25. PlayScale(minor, 2); (* D minor *)
  26. END prog3.
  27.