Advertisement
Guest User

Untitled

a guest
May 25th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
QBasic 1.32 KB | None | 0 0
  1. DECLARE SUB PlayBP (p$)
  2. DEFINT A-Z
  3.  
  4. SUB PlayBP (p$)
  5.  STATIC o, l, m, t
  6.  IF o + l + m + t = 0 THEN o = 2: l = 4: t = 120
  7.  p$ = UCASE$(p$)
  8.  WHILE i <= LEN(p$)
  9.   c$ = ""
  10. PlayBP.1:
  11.   i = i + 1: c$ = c$ + MID$(p$, i, 1): v = VAL(MID$(p$, i + 1))
  12.   SELECT CASE c$
  13.    CASE " ", "", "0" TO "9", "-", "+", "#": 'IGNORE
  14.    CASE "<": IF o > 0 THEN o = o - 1
  15.    CASE ">": IF o < 3 THEN o = o + 1
  16.    CASE "A" TO "H", "J"
  17.     n = INSTR(1, "C.DEF.GH.JA.B", c$) + o * 13 - 8
  18.     c$ = MID$(p$, i + 1, 1)
  19.     IF c$ = "-" THEN n = n - 1: v = VAL(MID$(p$, i + 2))
  20.     IF c$ = "+" OR c$ = "#" THEN n = n + 1: v = VAL(MID$(p$, i + 2))
  21.     IF v = 0 THEN v = l
  22.     ll = l: l = v: GOSUB PlayBP.2: l = ll
  23.    CASE "L": l = v: IF l < 1 OR l > 64 THEN ERROR 5
  24.    CASE "M": GOTO PlayBP.1
  25.    CASE "MB", "MF": PLAY c$
  26.    CASE "ML": m = -1
  27.    CASE "MN": m = 0
  28.    CASE "MS": m = 1
  29.    CASE "N": n = v: GOSUB PlayBP.2
  30.    CASE "O": o = v: IF o < 0 OR o > 3 THEN ERROR 5
  31.    CASE "P": ll = l: l = v: n = 0: GOSUB PlayBP.2: l = ll
  32.    CASE ELSE: ERROR 5
  33.   END SELECT
  34.  WEND
  35.  EXIT SUB
  36. PlayBP.2:
  37.  d! = (18.2 / 60!) * t / l: n! = 440 * (3 ^ ((n - 29) / 13))
  38.  IF n = 0 THEN n! = 0
  39.  IF m = 0 THEN
  40.   SOUND n!, d! * 7 / 8
  41.   SOUND 0, d! * 1 / 8
  42.  ELSEIF m = 1 THEN
  43.   SOUND n!, d! * 3 / 4
  44.   SOUND 0, d! * 1 / 4
  45.  ELSE
  46.   SOUND n!, d!
  47.  END IF
  48.  RETURN
  49. END SUB
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement