home *** CD-ROM | disk | FTP | other *** search
/ Set of Apple II Hard Drive Images / eric.hdv / OBJTEST / TRACKPLAY.bas < prev    next >
BASIC Source File  |  2020-08-13  |  4KB  |  122 lines

  1. 0  REM   *** TRACKPLAY *** 
  2. 1  POKE 12 *16 +15,24: REM  DEFAULT SPEED
  3. 2  PRINT  CHR$(21): POKE 12 *4096 +10 *16 +8,19: POKE 12 *4096 +10 *16 +8,17
  4. 3  PRINT  CHR$(4)"BLOAD T0,A$2000,L4": IF  PEEK(8192) < >0  OR ( PEEK(8193) <9 *16  OR  PEEK(8193) >9 *16 +15)  OR  PEEK(8194) < >0  THEN 5: REM     SKIP IF SPEED NOT STORED   
  5. 4  POKE 216,0: IF  PEEK(8195) < >0  THEN  POKE 12 *16 +15, PEEK(8195)
  6. 5  LOMEM: 29696
  7. 6  REM  HIMEM:24576
  8. 7 MSG =  PEEK(11) + PEEK(12) *256 +4
  9. 9  PRINT  CHR$(4)"OPEN R": PRINT  CHR$(4)"READ R": INPUT W1$: INPUT WF$: PRINT  CHR$(4)"CLOSE"
  10. 10  TEXT : HOME : PRINT  CHR$(21)
  11. 20  PRINT  CHR$(4)"BRUN AUXLOAD.OBJ"
  12. 30  PRINT  CHR$(4)"BRUN TRACKMGR.OBJ"
  13. 40  PRINT  CHR$(4)"BLOAD TRACKPLY.OBJ"
  14. 50  PRINT  CHR$(4)"BLOAD CNTLPANL.OBJ"
  15. 55  PRINT  CHR$(4)"BLOAD T0,A$2000,L4":SP =  PEEK(8192 +3)
  16. 57 TM = .4889 *(26 +27 *SP +5 *SP *SP)
  17. 60  REM  GOTO100:REM TO USE INTERRUPTS, SKIP STATEMENTS THAT USE SPEED
  18. 70 KP = 6 *4096 +11 *256 +128: REM   ADDRESS OF TRACKPLY.OBJ
  19. 72 CP = 6 *4096 +12 *256: REM  ADDRESS OF CNTLPANL.OBJ
  20. 100  PRINT  CHR$(4)"PREFIX": INPUT PX$
  21. 101 TT = 0
  22. 102  DIM SZ(15),LK(15)
  23. 103  FOR IX = 0 TO 15:SZ(IX) = 0:LK(IX) = 0
  24. 104  PRINT "LOADING TRACKS INTO MEMORY..."
  25. 105  PRINT  CHR$(4)"OPEN "PX$",TDIR"
  26. 110  PRINT  CHR$(4)"READ "PX$
  27. 120  ONERR  GOTO 160
  28. 130  INPUT RE$:FE$ =  MID$ (RE$,2,15)
  29. 135 LG$ =  MID$ (RE$,66,6)
  30. 137 LK$ =  MID$ (RE$,1,1)
  31. 140  IF  LEFT$(FE$,1) = "T"  AND  MID$ (FE$,3,1) = " "  THEN 142
  32. 141  GOTO 130
  33. 142  IF  MID$ (FE$,2,1) <"0"  OR  MID$ (FE$,2,1) >"F"  OR ( MID$ (FE$,2,1) >"9"  AND  MID$ (FE$,2,1) <"A")  THEN 130
  34. 143  IF  MID$ (FE$,2,1) < = "9"  THEN IX =  VAL( MID$ (FE$,2,1))
  35. 144  IF  MID$ (FE$,2,1) > = "A"  THEN IX =  ASC( MID$ (FE$,2,1)) - ASC("A") +10
  36. 145 SZ(IX) =  VAL(LG$):TT = TT +SZ(IX)
  37. 147 LK(IX) = (LK$ = "*")
  38. 150  GOTO 130
  39. 160  PRINT  CHR$(4)"CLOSE"
  40. 200  REM <CTRL-J><CTRL-J>*** LOAD SEQUENCE ***<CTRL-J>
  41. 205 MX = 12 *4096 -8 *256: REM             MAXIMUM AUX MEMORY  
  42. 210  IF TT >MX  THEN 300
  43. 220 B = 2048: REM  BASE
  44. 230  FOR TK = 0 TO 15
  45. 240  IF SZ(TK) = 0  THEN 290
  46. 250 E = B +SZ(TK)
  47. 260  GOSUB 1000
  48. 270 B = E +1
  49. 290  NEXT TK
  50. 295  GOTO 400
  51. 300  REM  SEQ TOO BIG TO LOAD ALL AT ONCE - USE PROPORTIONAL ALLOCATION
  52. 310 B = 2048: REM   BASE  
  53. 330  FOR TK = 0 TO 15
  54. 340  IF SZ(TK) = 0  THEN 390
  55. 350 E = B +(SZ(TK)/TT) *MX
  56. 360  GOSUB 1000
  57. 370 B = E +1
  58. 390  NEXT TK
  59. 400  REM  *** PLAY THE SONG ***
  60. 401  PRINT  CHR$(4)"BLOAD CNTLPANL.OBJ": POKE CP +9,1
  61. 402  PRINT  CHR$(21)
  62. 403  HOME : PRINT "        MIDI FILE SEQUENCE PLAYER"
  63. 404 SP =  PEEK(12 *16 +15)
  64. 405  PRINT "        NOW PLAYING: ";WF$
  65. 410  GOSUB 10000: REM  ? INSTRS
  66. 420  CALL KP: REM  USE TRACKPLY.OBJ TO PLAY SONG
  67. 430  PRINT : INPUT "PLAY AGAIN (Y/N):";YN$
  68. 440  IF  LEFT$(YN$,1) = "Y"  OR  LEFT$(YN$,1) = "y"  THEN 10
  69. 500  REM  *** EXIT ROUTINE
  70. 510  PRINT  CHR$(4)"-KILLSONG"
  71. 999  END 
  72. 1000  REM <CTRL-J><CTRL-J>*** ALLOCATE MEMORY
  73. 1005  REM  TK=TRACK#,B=BEGIN ADRS,E=END ADRS
  74. 1006  REM 
  75. 1020  POKE MSG, ASC("A") +128
  76. 1030  POKE MSG +1,TK
  77. 1040  POKE MSG +2, INT(B/256)
  78. 1050  POKE MSG +3,B - INT(B/256) *256
  79. 1060  POKE MSG +4, INT(E/256)
  80. 1070  POKE MSG +5,E - INT(E/256) *256
  81. 1080 U =  USR(6)
  82. 1090  IF U < >0  THEN  PRINT "ALLOCATION ERROR:";U: STOP 
  83. 1095  RETURN 
  84. 2000  REM  SET TEMPO
  85. 2005  REM POKEMSG, ASC ("D") + 128:            X =  USR (16)   
  86. 2010  POKE MSG, ASC("T") +128
  87. 2020  POKE MSG +1, INT(TM/256)
  88. 2030  POKE MSG +2,TM - INT(TM/256) *256
  89. 2040 X =  USR(16)
  90. 2080  IF FI = 0  THEN FI = 1: POKE MSG, ASC("A") +128:X =  USR(16)
  91. 2090  REM POKEMSG, ASC ("A") + 128:            X =  USR (16)   
  92. 2095  RETURN 
  93. 3000  REM  DEACTIVATE
  94. 3010  POKE MSG, ASC("D") +128:X =  USR(16)
  95. 3020  POKE MSG, ASC("X") +128
  96. 3030  POKE MSG +1,0
  97. 3040  POKE MSG +2,7 *16 +13
  98. 3050  POKE MSG +3,0
  99. 3060 X =  USR(27): REM  ALL NOTES OFF
  100. 3090  RETURN 
  101. 10000  PRINT "---------------------------------------
  102. 10010  PRINT "SPACE BAR:  STOP MUSIC    ESC:  PAUSE
  103. 10020  PRINT "ARROWS: UP/DN = VOLUME   LT/RT = SPEED
  104. 10030  PRINT 
  105. 10040  PRINT "TO SELECT MIDI CHANNEL:  
  106. 10050  PRINT 
  107. 10060  PRINT "OA-NUMBER = CHANNEL CHANGE  
  108. 10070  PRINT "+: CHANNEL UP    -:CHANNEL DOWN  
  109. 10080  PRINT 
  110. 10090  PRINT 
  111. 10100  PRINT "FOR PROGRAM CHGS: =:100  /:110  *:120
  112. 10110  PRINT 
  113. 10120  PRINT "PROGRAM CHANGE: 01 THRU *8
  114. 10130  PRINT 
  115. 10140  PRINT "VARIATIONS: .00 THRU .*7
  116. 10150  PRINT 
  117. 10160  PRINT 
  118. 10170  PRINT "< > /     : PEDALS
  119. 10180  PRINT "Y U I O P : DRUM PADS
  120. 10190  PRINT "---------------------------------------
  121. 10195  PRINT : PRINT "INITIAL SPEED="; PEEK(12 *16 +15);
  122. 10200  RETURN