'===========================================================================
' Subject: FABTRACKER (MUSIC COMPOSER)        Date: 11-05-96 (15:55)       
'  Author: Mattias Andersson                  Code: QB, QBasic, PDS        
'  Origin: phobia2@hotmail.com              Packet: SOUND.ABC
'===========================================================================
' Hehe... Phobia is back!
' This time with a little tracker...
' Ummm... don't take this one to serious... made it just for fun!
' (at school actually :-)
' Enter whatever note you want with the same letter...
' 1-6 works as octave... press 't' to change the tempo...
' If you change the tempo it will stay that way until you
' change it on a later track...
' Press enter to play the tune ... space to stop...
' Feel free to email me: phobia2@hotmail.com
' (phobia was already taken... so I'm using phobia2 :-( )
' Don't laugh... but it's possible that I'll add digital samples
' and more than one channel and pattern...
' Could be cool with a working tracker made in QB!! hehe...
' If you have any source on how to use SB16 with more than one
' channel... I know how to program 8-bit mono sound... but not more
' than that... well... see ya! (as always)
DIM track$(64)
DIM tempo$(64)
DIM oktav$(64)

FOR a = 1 TO 64
   track$(a) = "-"
   tempo$(a) = "---"
   oktav$(a) = "4"
NEXT

newdo = 2
curr = 1
SCREEN 0
WIDTH 80, 50
COLOR 14, 0: CLS
LOCATE 1, 40: PRINT "F†bTrecker 0.01b"
FOR a = 1 TO 32
   LOCATE a, 1: PRINT a
   LOCATE a, 12: PRINT "|"
   LOCATE a, 13: PRINT a + 32
NEXT

redo:
DO '--------------------------------------

IF newdo = 2 THEN
   COLOR 14, 0
   FOR a = 1 TO 32
      LOCATE a, 5: PRINT track$(a)
      LOCATE a, 17: PRINT track$(a + 32)
      LOCATE a, 6: PRINT oktav$(a)
      LOCATE a, 18: PRINT oktav$(a + 32)
      LOCATE a, 8: PRINT tempo$(a) + SPACE$(3 - LEN(tempo$(a)))
      LOCATE a, 20: PRINT tempo$(a + 32) + SPACE$(3 - LEN(tempo$(a + 32)))
   NEXT
   COLOR 14, 4
   IF curr < 33 THEN
      LOCATE curr, 5: PRINT track$(curr)
      LOCATE curr, 6: PRINT oktav$(curr)
      LOCATE curr, 8: PRINT tempo$(curr)
   END IF
   IF curr > 32 THEN
      LOCATE curr - 32, 17: PRINT track$(curr)
      LOCATE curr - 32, 18: PRINT oktav$(curr)
      LOCATE curr - 32, 20: PRINT tempo$(curr)
   END IF
   newdo = 1
END IF


ke$ = INKEY$
IF NOT ke$ = "" THEN newdo = 2
IF ke$ = CHR$(13) THEN GOTO spela
IF ke$ = CHR$(0) + "P" THEN curr = curr + 1: newdo = 2
IF ke$ = CHR$(0) + "H" THEN curr = curr - 1: newdo = 2
IF ke$ = CHR$(0) + "M" THEN curr = curr + 32: newdo = 2
IF ke$ = CHR$(0) + "K" THEN curr = curr - 32: newdo = 2
IF ke$ = "1" THEN oktav$(curr) = "1": curr = curr + 1
IF ke$ = "2" THEN oktav$(curr) = "2": curr = curr + 1
IF ke$ = "3" THEN oktav$(curr) = "3": curr = curr + 1
IF ke$ = "4" THEN oktav$(curr) = "4": curr = curr + 1
IF ke$ = "5" THEN oktav$(curr) = "5": curr = curr + 1
IF ke$ = "6" THEN oktav$(curr) = "6": curr = curr + 1
IF UCASE$(ke$) = "A" THEN track$(curr) = "A": curr = curr + 1
IF UCASE$(ke$) = "B" THEN track$(curr) = "B": curr = curr + 1
IF UCASE$(ke$) = "C" THEN track$(curr) = "C": curr = curr + 1
IF UCASE$(ke$) = "D" THEN track$(curr) = "D": curr = curr + 1
IF UCASE$(ke$) = "E" THEN track$(curr) = "E": curr = curr + 1
IF UCASE$(ke$) = "F" THEN track$(curr) = "F": curr = curr + 1
IF UCASE$(ke$) = "G" THEN track$(curr) = "G": curr = curr + 1
IF UCASE$(ke$) = CHR$(0) + CHR$(83) THEN track$(curr) = "-": curr = curr + 1

IF UCASE$(ke$) = "T" THEN
   LOCATE 10, 50
   COLOR 14, 0
   INPUT "Enter new speed: [32-255]", tempo$(curr)
   LOCATE 10, 50: PRINT SPACE$(20)
END IF

IF curr < 1 THEN curr = 1
IF curr > 64 THEN curr = 64

LOOP '------------------------------------


spela:
play$ = ""
FOR a = 1 TO 64
   IF NOT tempo$(a) = "---" THEN PLAY "T" + tempo$(a)
   PLAY "O" + oktav$(a)
   IF NOT track$(a) = "-" THEN
      PLAY track$(a)
   ELSE
      PLAY "P4"
   END IF
   COLOR 14, 0
   IF a < 33 THEN
      IF a > 1 THEN LOCATE a - 1, 4: PRINT " "
      LOCATE a, 4: PRINT ">"
   END IF
   IF a > 32 THEN
      IF a = 33 THEN LOCATE a - 1, 4: PRINT " "
      IF a > 33 THEN LOCATE a - 33, 16: PRINT " "
      LOCATE a - 32, 16: PRINT ">"
   END IF
IF INKEY$ = " " THEN EXIT FOR
NEXT
FOR a = 1 TO 32
   LOCATE a, 4: PRINT " "
   LOCATE a, 16: PRINT " "
NEXT
GOTO redo

