Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DECLARE SUB PlayBP (p$)
- DEFINT A-Z
- SUB PlayBP (p$)
- STATIC o, l, m, t
- IF o + l + m + t = 0 THEN o = 2: l = 4: t = 120
- p$ = UCASE$(p$)
- WHILE i <= LEN(p$)
- c$ = ""
- PlayBP.1:
- i = i + 1: c$ = c$ + MID$(p$, i, 1): v = VAL(MID$(p$, i + 1))
- SELECT CASE c$
- CASE " ", "", "0" TO "9", "-", "+", "#": 'IGNORE
- CASE "<": IF o > 0 THEN o = o - 1
- CASE ">": IF o < 3 THEN o = o + 1
- CASE "A" TO "H", "J"
- n = INSTR(1, "C.DEF.GH.JA.B", c$) + o * 13 - 8
- c$ = MID$(p$, i + 1, 1)
- IF c$ = "-" THEN n = n - 1: v = VAL(MID$(p$, i + 2))
- IF c$ = "+" OR c$ = "#" THEN n = n + 1: v = VAL(MID$(p$, i + 2))
- IF v = 0 THEN v = l
- ll = l: l = v: GOSUB PlayBP.2: l = ll
- CASE "L": l = v: IF l < 1 OR l > 64 THEN ERROR 5
- CASE "M": GOTO PlayBP.1
- CASE "MB", "MF": PLAY c$
- CASE "ML": m = -1
- CASE "MN": m = 0
- CASE "MS": m = 1
- CASE "N": n = v: GOSUB PlayBP.2
- CASE "O": o = v: IF o < 0 OR o > 3 THEN ERROR 5
- CASE "P": ll = l: l = v: n = 0: GOSUB PlayBP.2: l = ll
- CASE ELSE: ERROR 5
- END SELECT
- WEND
- EXIT SUB
- PlayBP.2:
- d! = (18.2 / 60!) * t / l: n! = 440 * (3 ^ ((n - 29) / 13))
- IF n = 0 THEN n! = 0
- IF m = 0 THEN
- SOUND n!, d! * 7 / 8
- SOUND 0, d! * 1 / 8
- ELSEIF m = 1 THEN
- SOUND n!, d! * 3 / 4
- SOUND 0, d! * 1 / 4
- ELSE
- SOUND n!, d!
- END IF
- RETURN
- END SUB
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement