home *** CD-ROM | disk | FTP | other *** search
- Sub Play (pp$)
- n% = 1
- cmds$ = "ABCDEFGLMNOPT<> "
-
- While n% <= Len(pp$) ' Parse play string into commands
- cmd$ = ""
- Do
- cmd$ = cmd$ + Mid$(pp$, n%, 1)
- If Mid$(pp$, n%, 1) = "M" Then
- n% = n% + 1
- cmd$ = cmd$ + Mid$(pp$, n%, 1)
- End If
- n% = n% + 1
- Loop Until InStr(cmds$, Mid$(pp$, n%, 1)) Or n% > Len(pp$)
-
- ' Initialize starting values
- dot% = 0: QueueNote% = 0
- cmdptr% = 2: tlength% = 0
-
- ' Process command
- Select Case Left$(UCase$(cmd$), 1)
-
- Case "<"
- octave% = octave% - 1
- If octave% < 0 Then octave% = 0
-
- Case ">"
- octave% = octave% + 1
- If octave% > 6 Then octave% = 6
-
- Case "C"
- note% = octave% * 12 + 1
- QueueNote% = -1
-
- Case "D"
- note% = octave% * 12 + 3
- QueueNote% = -1
-
- Case "E"
- note% = octave% * 12 + 5
- QueueNote% = -1
-
- Case "F"
- note% = octave% * 12 + 6
- QueueNote% = -1
-
- Case "G"
- note% = octave% * 12 + 8
- QueueNote% = -1
-
- Case "A"
- note% = octave% * 12 + 10
- QueueNote% = -1
-
- Case "B"
- note% = octave% * 12 + 12
- QueueNote% = -1
-
- Case "O"
- octave% = Val(Right$(UCase$(cmd$), Len(cmd$) - 1))
- If octave% < 0 Then octave% = 0
- If octave% > 6 Then octave% = 6
-
- Case "N"
- note% = Val(Mid$(UCase$(cmd$), 2, 2))
- cmdptr% = cmdptr% + Len(Str$(note%)) - 1
- QueueNote% = -1
-
- Case "T"
- tempo% = Val(Right$(UCase$(cmd$), Len(cmd$) - 1))
- If tempo% < 32 Then tempo% = 32
- If tempo% > 255 Then tempo% = 255
-
- Case "L"
- length% = Val(Right$(UCase$(cmd$), Len(cmd$) - 1))
- If length% < 1 Then length% = 1
- If length% > 255 Then length% = 255
-
- Case "P": note% = 0
- QueueNote% = 1
-
- Case "M"
- Select Case Mid$(UCase$(cmd$), 2, 1)
- Case "N": mode% = S_NORMAL
- Case "L": mode% = S_LEGATO
- Case "S": mode% = S_STACCATO
- Case "F": bf$ = "F"
- Case "B": bf$ = "B"
- End Select
- End Select
-
- ' If command was note or rest, place in queue
- If QueueNote% Then
- Do
- Select Case Mid$(cmd$, cmdptr%, 1)
- Case "+", "#"
- note% = note% + 1
- cmdptr% = cmdptr% + 1
- Case "-"
- note% = note% - 1
- cmdptr% = cmdptr% + 1
- Case "."
- dot% = dot% + 1
- cmdptr% = cmdptr% + 1
-
- ' Numbers here mean temporary length for current note
-
- Case "0","1","2","3","4","5","6","7","8","9"
- tlength% = Val(Mid$(cmd$, cmdptr%, 2))
- cmdptr% = cmdptr% + Len(Str$(tlength%)) - 1
-
- End Select
- Loop Until cmdptr% > Len(cmd$)
- If tlength% = 0 Then tlength% = length%
- status% = PlayNote(1,note%,tempo%,tlength%,mode%,dot%)
- End If
- Wend
-
- status% = StartSound() ' Start things going
-
- If bf$ = "F" Then ' Remain here if user wants
- While CountVoiceNotes(1) > 0 ' foreground mode
- Wend
- End If
- End Sub
-