home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / OS2XLSP1.ZIP / BACH.LSP < prev    next >
Text File  |  1988-06-02  |  3KB  |  129 lines

  1. ; bach.lsp -- for OS2XLISP
  2. ; Andrew Schulman 25-April-1988
  3. ; adapted from versions for Framework II and dBase III Plus (!)
  4. ; note that Lisp lets us have variable names like c# instead of csharp
  5.  
  6. ; NOTE!  this is an awful piece of software.  The notes that make up the
  7. ; piece should be separated from the code that plays them.  But it will
  8. ; do for now.
  9.  
  10. ; "I told you not to ring the cash register during the bass solo"
  11. ;        -- Charles Mingus
  12. ; or, "garbage collection should never occur while music is playing"
  13. ; the upshot being, do a (gc) before we start the music!
  14. (gc)    
  15.  
  16. (princ "Toccata and Fugue in D Minor by Johann Sebastian Bach...")
  17.  
  18. (define dosbeep (getprocaddr doscalls "DOSBEEP"))
  19. (define dossleep (getprocaddr doscalls "DOSSLEEP"))
  20.  
  21. ;;; frequencies from Peter Norton, Programmer's Guide to IBM PC, p.147
  22. (define a 440)
  23. (define bflat 467)
  24. (define b 494)
  25. (define c 523)
  26. (define c# 559)
  27. (define d 587)
  28. (define e 659)
  29. (define f 705)
  30. (define f# 746)
  31. (define g 784)
  32.  
  33. (define d#3 (/ d 4))                        
  34.  
  35. (define (beep f d)
  36.     (call dosbeep (word f) (word d)))
  37.  
  38. (define (flutter item1 item2 count)
  39.     (dotimes
  40.         (i count)
  41.         (beep item1 40)
  42.         (beep item2 40)))
  43.             
  44. (define (pause p)
  45.     (call dossleep p))
  46.  
  47. (beep (* a 2) 100)
  48. (beep g 100)
  49. (beep (* a 2) 1200)
  50. (pause 300)        
  51. (beep g 80)
  52. (beep f 80)
  53. (beep e 80)
  54. (beep d 80)
  55. (beep c# 1000)
  56. (beep d 1500)
  57. (pause 900)
  58. (beep a 100)
  59. (beep (/ g 2) 100)
  60. (beep a 1200)
  61. (pause 300)
  62. (beep (/ e 2) 400)
  63. (pause 20)
  64. (beep (/ f 2) 400)
  65. (pause 20)
  66. (beep (/ c# 2) 400)
  67. (pause 20)
  68. (beep (/ d 2) 1500)
  69. (pause 20)
  70. (pause 900)
  71. (beep (/ a 2) 100)
  72. (beep (/ g 4) 100)
  73. (beep (/ a 2) 1200)
  74. (pause 300)
  75. (beep (/ g 4) 80)
  76. (beep (/ f 4) 80)
  77. (beep (/ e 4) 80)
  78. (beep d#3 80)
  79. (beep (/ c# 4) 1000)
  80. (beep d#3 1500)
  81. (flutter d#3 (/ d 8) 8)
  82. (flutter d#3 (/ d 8) 8)
  83. (flutter d#3 (/ c# 4) 2)
  84. (flutter d#3 (/ e 4) 2)
  85. (flutter d#3 (/ g 4) 2)
  86. (flutter d#3 (/ bflat 2) 2)
  87. (flutter d#3 (/ c# 2) 2)
  88. (flutter d#3 (/ e 2) 2)
  89. (flutter d#3 (/ g 2) 2)
  90. (flutter d#3 bflat 2)
  91. (flutter d#3 c# 2)
  92. (flutter d#3 e 2)
  93. (flutter d#3 g 2)
  94. (flutter d#3 (* bflat 2) 3)
  95. (flutter d#3 (* c# 2) 3)
  96. (flutter g (* d 2) 6)
  97. (flutter e (* d 2) 7)
  98. (flutter f# (* d 2) 12)
  99. (beep (* a 2) 40)
  100. (beep f# 40)
  101. (beep (* a 2) 40)
  102. (beep f# 40)
  103. (beep d 40)
  104. (beep f# 40)
  105. (beep d 40)
  106. (beep a 40)
  107. (beep d 40)
  108. (beep a 40)
  109. (beep (/ f# 2) 40)
  110. (beep a 40)
  111. (beep (/ f# 2) 40)
  112. (beep (/ d 2) 40)
  113. (beep (/ f# 2) 40)
  114. (beep (/ d 2) 40)
  115. (beep (/ a 2) 40)
  116. (beep (/ d 2) 40)
  117. (beep (/ a 2) 40)
  118. (beep (/ f# 4) 40)
  119. (beep (/ a 2) 40)
  120. (beep (/ f# 4) 40)
  121. (beep d#3 40)
  122. (beep (/ f# 4) 40)
  123. (beep d#3 40)
  124. (beep (/ a 2) 40)
  125. (beep d#3 1750)
  126.  
  127. (princ "\n(the abridged version)\n")
  128. (princ "played by E. Power Biggs on your Intel pedal harpsichord\n")
  129.