10 DEFFNS="EnvEdit" 20 MODE7:VDU23;8202;0;0;0; 30 PROCprt("Envelope editor by C.J.Richardson") 40 PROCinf 50 Q%=6:*FX202,144 60 DIM T%(Q%),P1%(Q%),P2%(Q%),P3%(Q%),L1%(Q%),L2%(Q%),L3%(Q%),AA%(Q%),AD%(Q%),AS%(Q%),AR%(Q%),ALA%(Q%),ALD%(Q%) 70 N%=1 80 FORL%=1TOQ%:READT%(L%):READP1%(L%):READP2%(L%):READP3%(L%):READL1%(L%):READL2%(L%):READL3%(L%):READAA%(L%):READAD%(L%):READAS%(L%):READAR%(L%):READALA%(L%):READALD%(L%):NEXT 90 P%=120:A%=80:D%=1 100 ONERRORMODE0:PROCerr 110 MODE1:VDU19,2,2,0,0,0,19,3,6,0,0,0,23;8202;0;0;0;28,0,31,39,22,24,0;342;1279;1023; 120 PROCdraw 130 REPEAT 140 CLS 150 COLOUR 3 160 PRINT"Envelope=";N%" Step length+repeat="T%(N%);:COLOUR1:PRINTTAB(36);"Q W" 170 COLOUR2:PRINT"Pitch change 1="STR$P1%(N%);TAB(20,1);"2="STR$P2%(N%);TAB(28,1);"3="STR$P3%(N%);:COLOUR1:PRINTTAB(36,1);"ASD" 180 COLOUR3:PRINT"Pitch length 1="STR$L1%(N%);TAB(20,2);"2="STR$L2%(N%);TAB(28,2);"3="STR$L3%(N%);:COLOUR1:PRINTTAB(36,2);"FGH" 190 COLOUR2 200 PRINT"Amplitude : Att Dec Sus Rel" 210 PRINT "Change rate:";TAB(13,4);AA%(N%);TAB(18,4);AD%(N%);TAB(23,4);AS%(N%);TAB(28,4);AR%(N%);:COLOUR1:PRINTTAB(35,4);"ZXCV" 220 COLOUR3:PRINT"Attack target="STR$ALA%(N%);TAB(18,5);"Decay target="STR$ALD%(N%);:COLOUR1:PRINTTAB(35,5);"BN" 230 COLOUR2:PRINT"Pitch=";P%;" Duration=";A% 240 COLOUR1:PRINTTAB(35,6);"PO" 250 PRINT"Space";:COLOUR3:PRINT" for sound.";:COLOUR1:PRINT" ESCAPE";:COLOUR3:PRINT" for parameters.":COLOUR1:PRINT"J";:COLOUR3:PRINT" Toggle jumps of 1,10 or 50. Now:";STR$D%:COLOUR1:PRINT"SHIFT";:COLOUR3:PRINT" to reduce parameter"; 260 *FX21 270 REPEAT:A$=GET$:OSCLI"FX15":IF A$=" "SOUND 1,1,P%,A% 280 UNTILA$<>" ":IFA$="J" IFD%=1 D%=10 ELSE IF A$="J" IFD%=10 D%=50 ELSE IF A$="J"D%=1 290 Z%=ASCA$:IFZ%>96 A$=CHR$(Z%-32):Z%=-D% ELSE Z%=D% 300 IF A$="Q"N%=N%+Z%:IFN%<1N%=1 ELSE IF N%>Q% N%=Q% 310 IF A$="W"T%(N%)=T%(N%)+Z%:IFT%(N%)<1T%(N%)=1 320 IF A$="A"P1%(N%)=P1%(N%)+Z% 330 IF A$="S"P2%(N%)=P2%(N%)+Z% 340 IF A$="D"P3%(N%)=P3%(N%)+Z% 350 IF A$="F"L1%(N%)=L1%(N%)+Z%:IFL1%(N%)<0L1%(N%)=0 360 IF A$="G"L2%(N%)=L2%(N%)+Z%:IFL2%(N%)<0L2%(N%)=0 370 IF A$="H"L3%(N%)=L3%(N%)+Z%:IFL3%(N%)<0L3%(N%)=0 380 IF A$="Z"AA%(N%)=AA%(N%)+Z% 390 IF A$="X"AD%(N%)=AD%(N%)+Z% 400 IF A$="C"AS%(N%)=AS%(N%)+Z% 410 IF A$="V"AR%(N%)=AR%(N%)+Z% 420 IF A$="B"ALA%(N%)=ALA%(N%)+Z%:IFALA%(N%)<0ALA%(N%)=0 430 IF A$="N"ALD%(N%)=ALD%(N%)+Z%:IFALD%(N%)<0ALD%(N%)=0 440 IF A$="O"A%=A%+Z% 450 IF A$="P"P%=P%+Z% 460 PROCdraw 470 UNTILFALSE 480 DEFPROCdraw 490 ENVELOPE 1,T%(N%),P1%(N%),P2%(N%),P3%(N%),L1%(N%),L2%(N%),L3%(N%),AA%(N%),AD%(N%),AS%(N%),AR%(N%),ALA%(N%),ALD%(N%) 500 CLG:C%=0:IFT%(N%)>128 M%=T%(N%)-128 ELSEM%=T%(N%) 510 H%=(1024-675)*P%/255:IFA%<30 S%=3ELSES%=1 520 GCOL0,3 530 MOVE0,(675+H%):PLOT25,1279,0 540 MOVE0,(675+H%):Y%=0:K%=0:GCOL0,2 550 PROCf(P1%(N%),L1%(N%),1) 560 PROCf(P2%(N%),L2%(N%),1) 570 PROCf(P3%(N%),L3%(N%),1) 580 IFT%(N%)<128GCOL0,1:PLOT 17,0,-Y%:Y%=0:K%=0:PROCf(P1%(N%),L1%(N%),17):PROCf(P2%(N%),L2%(N%),17):PROCf(P3%(N%),L3%(N%),17) 590 MOVE0,340:X%=0:Y%=1:PROCa(AA%(N%),ALA%(N%)):B%=X% 600 GCOL0,2:I%=2000:IFC%=0:PROCa(AD%(N%),ALD%(N%)-ALA%(N%)):I%=X%:GCOL0,1:IFC%=0PROCb(AS%(N%),-ALD%(N%)):GCOL0,2:L%=V%+I% 610 PROCd:VDU5:GCOL3,6:MOVE0,368:PRINT"Amplitude":GCOL3,3:MOVE0,1023:PRINT"Pitch" 620 MOVEB%,700:PRINT"=-H% PLOTF%,V%,W% 700 IF Y%>349-H% J%=W%:W%=-K%+349-H%:G%=V%:V%=V%*W%/J%:PLOT F%,V%,W%:PLOT 17,0,-349:W%=Y%-(349-H%):V%=G%-V%:Y%=W%-H%:K%=-H%:Z%=1 710 IF Y%<-H% J%=W%:W%=-(H%+K%):G%=V%:V%=V%*ABS(W%/J%):PLOT F%,V%,W%:PLOT 17,0,349:W%=Y%+H%:V%=G%-V%:Y%=349-H%+W%:K%=349-H%:Z%=1 720 UNTILZ%=0:K%=K%+W%:ENDPROC 730 DEFPROCa(O%,U%):PROCz:X%=X%+V%:Y%=Y%+W%:PROCc:PROCp:ENDPROC 740 DEFPROCb(O%,U%):PROCz:X%=X%+V%:Y%=Y%+W%:PROCc:IFY%<0 V%=V%-V%*Y%/W%:W%=W%-Y%:Y%=0:C%=1 750 PROCp:ENDPROC 760 DEFPROCd:IFAR%(N%)=0 V%=1280:W%=0 ELSE V%=(ABS(Y%/AR%(N%)*8))*S%:W%=-Y%:Y%=0 770 PROCp:ENDPROC 780 DEFPROCz:IFO%=0 V%=A%*100/M%*S%-X%:W%=0:C%=1:ELSE V%=(ABS(U%/O%*20))*S%:W%=U%*2.6 790 ENDPROC 800 DEFPROCp:PLOT0,0,-(Y%-W%):PLOT81,V%,0:IFY%<0 ENDPROC ELSEPLOT0,-V%,Y%-W%:PLOT81,V%,W%:ENDPROC 810 DEFPROCc:IFX%>A%*100/M%*S% G%=V%:V%=V%-(X%-(A%*100/M%*S%)):J%=W%:W%=W%*V%/G%:Y%=Y%-(J%-W%):C%=1 820 ENDPROC 830 DEFPROCerr 840 IF ERR=17FORL%=1TOQ%:PRINT"Envelope";STR$L%;",";T%(L%);",";P1%(L%);",";P2%(L%);",";P3%(L%);",";L1%(L%);",";L2%(L%);",";L3%(L%);",";AA%(L%);",";AD%(L%);",";AS%(L%);",";AR%(L%);",";ALA%(L%);",";ALD%(L%):NEXT 850 IFERR=17:PRINT"SOUND1,";N%;",";P%;",";A% 860 REPORT:PRINTERL:PRINT"Press a key":REPEATUNTILGET:ENDPROC 870 DEFPROCprt(A$):A$=A$+STRING$(LENA$MOD2," "):FORL%=1TOLENA$:PRINTTAB(18-L%/2);"";LEFT$(A$,L%/2);RIGHT$(A$,L%/2);TAB(18-L%/2);"";LEFT$(A$,L%/2);RIGHT$(A$,L%/2):VDU11,11:NEXT:VDU10,10:ENDPROC 880 DATA10,10,-20,30,10,10,5,50,-10,-1,-5,126,100 890 DATA10,0,0,0,10,10,10,126,-15,-5,-1,126,100 900 DATA1,1,-1,0,1,1,0,126,-1,-1,-1,126,100 910 DATA1,0,0,0,0,0,0,126,0,0,-50,126,126 920 DATA1,0,0,0,0,0,0,126,-5,-1,-1,126,100 930 DATA129,-1,1,0,1,1,0,100,-10,-10,-1,100,90 940 DEFPROCinf:VDU14 950 PRINT'"This envelope editor will allow you see"; 960 PRINT"envelopes that you have edited."' 970 PRINT"The display is in 3 parts."' 980 PRINT"1. The top part of the display shows" 990 PRINT" you the 6 envelope frequency" 1000 PRINT" parameters in a line graph." 1010 PRINT" The initial repeat is in cyan," 1020 PRINT" a further repeat is shown in red."' 1030 PRINT"2. The middle part of the display shows"; 1040 PRINT" you the 6 envelope amplitude" 1050 PRINT" parameters."' 1060 PRINT"3. The lower part of the display shows" 1070 PRINT" you the actual values of the" 1080 PRINT" envelope and sound commands."' 1090 PRINT"Changing the parameters."' 1100 PRINT"PRESS SHIFT TO SCROLL" 1110 PRINT""' 1120 PRINT"SHIFT + KEY will cause the change to be"; 1130 PRINT"negative"' 1140 PRINT"Q Envelope" 1150 PRINT"W Step length and repeat" 1160 PRINT"A pitch change in step 1" 1170 PRINT"S pitch change in step 2" 1180 PRINT"D pitch change in step 3"' 1190 PRINT"F length of step 1" 1200 PRINT"G length of step 2" 1210 PRINT"H length of step 3"' 1220 PRINT"Z Attack level" 1230 PRINT"X Decay level" 1240 PRINT"C Sustain level" 1250 PRINT"V Release level"' 1260 PRINT"B Attack target" 1270 PRINT"N Decay target"' 1280 PRINT"P Sound pitch" 1290 PRINT"O Sound duration"' 1300 PRINT"The keys are summarised on the screen"' 1310 PRINT"Press space to hear the sound."' 1320 PRINT"Press escape to see the envelope and"; 1330 PRINT"sound parameters." 1340 PRINT'" Press a key":REPEATUNTILGET 1350 *K.0 40|MDEL.940,1370|MRUN|M 1360 *FX138 0 128 1370 END