home *** CD-ROM | disk | FTP | other *** search
/ 64'er 1985 November / 64er_Magazin_85-11_1985_Markt__Technik_de.d64 / sequenzgenerator (.txt) < prev    next >
Commodore BASIC  |  2022-10-26  |  7KB  |  284 lines

  1. 1000 rem ******************************
  2. 1010 rem *                            *
  3. 1020 rem *       leseprogramm         *
  4. 1030 rem *   fuer sequencer-daten     *
  5. 1040 rem *                            *
  6. 1050 rem * erzeugt aus data-zeilen    *
  7. 1060 rem * einen absolut ladbaren     *
  8. 1070 rem * datensatz fuer sequencer   *
  9. 1080 rem *                            *
  10. 1090 rem * thomas kraetzig   sep 85   *
  11. 1100 rem *                            *
  12. 1110 rem ******************************
  13. 1120 rem
  14. 1130 rem konstanten und
  15. 1140 rem variablen mit vorbesetzungen
  16. 1150 rem
  17. 1160 dim sf(200) :rem sequenzfolgeliste
  18. 1170 dim sa(200) :rem sequenzadressenl.
  19. 1180 dim ta(3)   :rem trackadressen
  20. 1190 rem notennamen
  21. 1200 nn$="ccddeffggaah"
  22. 1210 dn$=""      :rem dateiname
  23. 1220 s=1         :rem aktuelle sequenz
  24. 1230 t=1         :rem aktueller track
  25. 1240 ad=0        :rem allg. adresse
  26. 1250 sa=39432    :rem $9a08
  27. 1260 q=96        :rem quantisierung
  28. 1270 r=0.5       :rem gate on/laenge
  29. 1280 nl=1/4      :rem notenlaenge
  30. 1290 l=0         :rem stringlaenge
  31. 1300 sv=12*4096  :rem save-routine
  32. 1500 rem-------------------------------
  33. 1510 rem programmstart
  34. 1520 rem-------------------------------
  35. 1530 rem save-maschinenprogramm
  36. 1540 for i=0 to 17
  37. 1550 read x:poke sv+i,x:next i
  38. 2020 rem
  39. 2030 rem dummy-track erzeugen
  40. 2040 ad=sa+2
  41. 2050 poke ad  ,1  :poke ad+1,97
  42. 2060 poke ad+2,239:poke ad+3,0
  43. 2070 h0=int(ad/256):l0=ad-256*h0
  44. 2080 ad=ad+4:a$=""
  45. 2100 rem naechstes datum lesen
  46. 2110 print" ";a$;:read a$
  47. 2120 l=len(a$):l$=left$(a$,1)
  48. 2150 if a$="p"            then 3100
  49. 2160 if a$="pause"        then 3100
  50. 2165 if a$="track"        then 3800
  51. 2170 if a$="sequenz"      then 4000
  52. 2175 if a$="sequenzfolge" then 3600
  53. 2190 if a$="ende"         then 4300
  54. 2200 rem
  55. 2210 rem nach notennamen suchen
  56. 2220 rem
  57. 2230 if l=1 then 5000
  58. 2240 if l>3 then 2500
  59. 2250 n=1
  60. 2260 if l$=mid$(nn$,n,1) then 2300
  61. 2270 n=n+1:if n<13 then 2260
  62. 2280 goto 2500 :rem keine note
  63. 2300 r$=right$(a$,1):o=val(r$)
  64. 2310 if o=0 and r$<>"0" then 2420
  65. 2320 if o>6 then 2420
  66. 2330 if l=2 then 3000
  67. 2340 m$=mid$(a$,2,1)
  68. 2350 if m$="#" then n=n+1:goto 3000
  69. 2360 if m$="b" then n=n-1:goto 3000
  70. 2380 f$="nur "+l$+"#"+r$+" oder "+l$+"b"+r$
  71. 2390 f$=f$+" oder "+l$+r$+" moeglich"
  72. 2400 goto 5000
  73. 2420 f$="oktavbereich 0-6"
  74. 2430 goto 5000
  75. 2500 rem
  76. 2510 rem nach / oder - suchen
  77. 2520 rem
  78. 2530 m$=mid$(a$,2,1)
  79. 2540 if m$<>"/" and m$<>"-" then 2560
  80. 2550 r$=right$(a$,l-2):goto 2600
  81. 2560 m$=mid$(a$,3,1)
  82. 2570 if m$<>"/" and m$<>"-" then 5000
  83. 2580 l$=left$(a$,2):r$=right$(a$,l-3)
  84. 2600 rem
  85. 2610 rem zaehler und nenner untersuchen
  86. 2620 rem
  87. 2630 z=val(l$)
  88. 2640 if z>0 and z<99 then 2670
  89. 2650 f$="zaehler-bereich 1 bis 99"
  90. 2660 goto 5000
  91. 2670 n=val(r$)
  92. 2680 if n>0 or m$="-" then 2710
  93. 2690 f$="nenner muss groesser 0 sein"
  94. 2700 goto 5000
  95. 2710 if m$="/" then 3200 :rem zeit
  96. 2720 if m$="-" then 3400 :rem on/off
  97. 2730 goto 5000
  98. 3000 rem-------------------------------
  99. 3010 rem note (tonnummer n  oktave o)
  100. 3020 rem-------------------------------
  101. 3030 if n=0  then n=12:o=o-1
  102. 3040 if n=13 then n=1 :o=o+1
  103. 3050 poke ad,128+16*o+n-1:ad=ad+1
  104. 3060 goto 2110
  105. 3100 rem-------------------------------
  106. 3110 rem pause
  107. 3120 rem-------------------------------
  108. 3130 poke ad,239:ad=ad+1:goto 2110
  109. 3200 rem-------------------------------
  110. 3210 rem zeit (notendauer)
  111. 3220 rem-------------------------------
  112. 3230 t=int(q*z/n)   :rem gesamtzeit
  113. 3240 an=int(r*q*z/n):rem gate-on-zeit
  114. 3250 of=t-an        :rem gate-off-zeit
  115. 3260 if an<=96 then 3290
  116. 3270 f$="gate-on-zeit zu gross"
  117. 3280 goto 5000
  118. 3290 if of<=30 then 3320
  119. 3300 f$="gate-off-zeit zu gross"
  120. 3310 goto 5000
  121. 3320 poke ad,an:ad=ad+1
  122. 3330 poke ad,of+97:ad=ad+1
  123. 3340 goto 2110
  124. 3400 rem-------------------------------
  125. 3410 rem verhaeltnis gate-on/gesamtzeit
  126. 3420 rem (z/n = gate on/gate-off)
  127. 3430 rem-------------------------------
  128. 3440 r=z/(z+n):goto 2110
  129. 3600 rem-------------------------------
  130. 3610 rem sequenzfolge
  131. 3620 rem-------------------------------
  132. 3630 print:print:as=0
  133. 3640 print" ";a$;:reada$:a=int(val(a$))
  134. 3650 if a=0 then 3670
  135. 3660 sf(as)=a:as=as+1:goto 3640
  136. 3670 if a$<>"0" then 3690
  137. 3680 print" 0":read a$:goto 2120
  138. 3690 f$="liste muss mit 0 abgeschlossen sein"
  139. 3700 goto 5000
  140. 3800 rem-------------------------------
  141. 3810 rem track
  142. 3820 rem-------------------------------
  143. 3830 print:print:print a$;
  144. 3840 read a$:a=int(val(a$))
  145. 3850 if a>=1 and a<=3 then 3880
  146. 3860 f$="nur 1,2,3 zulaessig"
  147. 3870 goto 5000
  148. 3880 print a:t=a
  149. 3890 if ns then ns=0:goto 3910
  150. 3900 poke ad,0:ad=ad+1
  151. 3910 hi=int(ad/256):lo=ad-256*hi
  152. 3920 poke sa(s)+(t-1)*2,lo
  153. 3930 poke sa(s)+(t-1)*2+1,hi
  154. 3940 read a$:goto 2120
  155. 4000 rem-------------------------------
  156. 4010 rem sequenz
  157. 4020 rem-------------------------------
  158. 4030 print:print:print:print a$;
  159. 4040 read a$:a=int(val(a$))
  160. 4050 if a>=1 and a<=200 then 4080
  161. 4060 f$="nur 1-200 zulaessig"
  162. 4070 goto 5000
  163. 4080 print a:s=a
  164. 4090 poke ad,0:ad=ad+1:ns=-1:sa(s)=ad
  165. 4100 rem track-zeiger auf dummy-track
  166. 4110 rem initialisieren
  167. 4120 poke ad  ,l0:poke ad+1,h0
  168. 4130 poke ad+2,l0:poke ad+3,h0
  169. 4140 poke ad+4,l0:poke ad+5,h0
  170. 4150 ad=ad+6
  171. 4160 read a$:goto 2120
  172. 4300 rem-------------------------------
  173. 4310 rem ende
  174. 4320 rem sequenzfolgeliste aufbauen
  175. 4330 rem-------------------------------
  176. 4340 print:print a$
  177. 4350 poke ad,0:ad=ad+1
  178. 4360 hi=int(ad/256):lo=ad-256*hi
  179. 4370 poke sa,lo:poke sa+1,hi
  180. 4380 for i=0 to as-1
  181. 4390 : x=sa(sf(i)):if x>0 then 4410
  182. 4400 : print"sequenz";i;"nicht definiert":goto 4420
  183. 4410 : hi=int(x/256):lo=x-256*hi
  184. 4420 : poke ad+3*i,lo
  185. 4430 : poke ad+3*i+1,hi
  186. 4440 : poke ad+3*i+2,0
  187. 4450 next i
  188. 4460 for i=0 to 2:poke ad+3*as+i,0:next
  189. 4470 ad=ad+3*as+3
  190. 4500 rem
  191. 4510 rem bereich sa-ad auf disk
  192. 4520 rem
  193. 4530 input"abspeichern (j/n) ";a$
  194. 4540 if a$<>"j" then end
  195. 4550 input"dateiname         ";dn$
  196. 4560 ah=int(sa/256):al=sa-256*ah
  197. 4570 eh=int(ad/256):el=ad-256*eh
  198. 4580 open 1,8,1,dn$
  199. 4590 poke 252,al:poke 253,ah
  200. 4600 poke 780,252
  201. 4610 poke 781,el:poke 782,eh
  202. 4620 sys sv:close 1
  203. 4630 end
  204. 5000 rem-------------------------------
  205. 5010 rem fehler
  206. 5020 rem-------------------------------
  207. 5030 print:print
  208. 5040 print"fehlerhaftes datum: ";a$
  209. 5050 if f$<>"" then print f$
  210. 5060 print:a$="":f$="":goto 2110
  211. 7000 rem-------------------------------
  212. 7010 rem save-routine
  213. 7020 rem-------------------------------
  214. 7030 data 072,165,001,041,254,133,001
  215. 7040 data 104,032,216,255,165,001,009
  216. 7050 data 001,133,001,096
  217. 8000 rem-------------------------------
  218. 8010 rem musikstueck
  219. 8020 rem (edvard grieg   kobold)
  220. 8030 rem-------------------------------
  221. 8100 data sequenz,1
  222. 8110 data track,3
  223. 8120 data 1-1,1/4,eb1,hb1,eb1,hb0
  224. 8130 data eb1,hb1,eb1
  225. 8140 rem
  226. 8200 data sequenz,2
  227. 8210 data track,1
  228. 8220 data 1-0,1/4,p,1/8,hb3,3/8,p
  229. 8230 data 1/8,hb3,3/8,p,1-1,1/4
  230. 8240 data hb3,gb3,gb3,hb3,a3,f3,f3,a3
  231. 8250 data 1/2,a3,p,1-0
  232. 8260 data 1/8,eb4,3/8,p,1/8,eb4,3/8,p
  233. 8270 data 1-1,1/4,eb4,cb4,cb4,eb4
  234. 8280 data d4,hb3,hb3,d4,1-0,1/4,d4
  235. 8290 data 1/2,p
  236. 8300 data track,2
  237. 8310 data 1-0,1/8,eb3,f3
  238. 8320 data gb3,f3,eb3,f3,gb3,f3,eb3,f3
  239. 8330 data 1-1,1/4,gb3,eb3,eb3,gb3
  240. 8340 data f3,c3,c3,f3,1/2,f3,1/4,p
  241. 8350 data 1-0,1/8,ab3,hb3
  242. 8360 data cb4,hb3,ab3,hb3
  243. 8370 data cb4,hb3,ab3,hb3,1-1,1/4
  244. 8380 data cb4,ab3,ab3,cb4,hb3,f3,f3,hb3
  245. 8390 data 1/2,hb3,1/4,p
  246. 8400 data track,3
  247. 8410 data 1-1,1/4,hb0,eb1,hb1,eb1
  248. 8420 rem
  249. 8430 data sequenz,3
  250. 8440 data track,1
  251. 8450 data 1-1,1/4,p
  252. 8460 data db5,p,db5,p,ab4,p,ab4,p
  253. 8470 data gb4,p,gb4,p,db4,p,db4
  254. 8480 data track,2
  255. 8490 data 1-0,1/8
  256. 8500 data gb4,ab4,hb4,ab4,gb4,ab4,hb4,p
  257. 8510 data db4,eb4,f4,eb4,db4,eb4,f4,p
  258. 8520 data cb4,db4,eb4,db4,cb4,db4,eb4,p
  259. 8530 data gb3,ab3,hb3,ab3,gb3,ab3,hb3,p
  260. 8540 data track,3
  261. 8550 data 1-0,1/4,p,1/2
  262. 8560 data gb3,p,db3,p,cb3,p,gb2,1/4,p
  263. 8570 rem
  264. 8600 data sequenz,4
  265. 8610 data track,1
  266. 8620 data 1-0,1/4,p,1/1,p,p,p,p,1/8
  267. 8630 data hb1,f2,hb2,hb2,f3,hb3,hb3,f4
  268. 8640 data 1/4,hb4,3/4,p
  269. 8650 data track,2
  270. 8660 data 1-0,1/8,f2,gb2,ab2,gb2,f2,p
  271. 8670 data gb2,f2,eb2,p,f2,eb2,db2,p
  272. 8680 data eb2,db2,c2,p,1/1,p,1/8
  273. 8690 data eb2,db2,cb2,p,1/2,p
  274. 8700 data 1/1,f1,1/4,f4,3/4,p
  275. 8710 data track,3
  276. 8720 data 1-0,1/8,f1,gb1,ab1,gb1,f1,p
  277. 8730 data gb1,f1,eb1,p,f1,eb1,db1,p
  278. 8740 data eb1,db1,c1,p,1/1,p,1/8
  279. 8750 data eb1,db1,cb1,p,1/2,p
  280. 8760 data 1/1,f0,1/4,f2,3/4,p
  281. 8800 rem
  282. 8810 data sequenzfolge,1,2,2,3,3,4,0
  283. 8820 data ende
  284.