'MENU '- PIANO ROLL '- PROJECT SEQUENCER ' - INTRUMENT SELECTOR ' - SOUND MIXER ' - LFO MENU ' - RATE/DEPTH XY-PAD ' - LFO SETTINGS ' - WAVE ' - PULSE WIDTH ' - VOLUME ' - INVERT ON/OFF ' - ENV ON/OFF ' - TRIG ON/OFF ' - SYNTH MENU ' - WAVE ' - PULSE WIDTH ' - ADSR AND LENGTH 'TO DO '- GENERAL ' - MAKE THE TRACK SELECTOR (COUNTER) IN THE TOP BAR WORK ' - REASSIGN "PRESSED" NUMBERS TO ITEMS (TO CLEAN THIS UP) ' - CLEAN UP CODE: ' - DO EVERYTHING THE SAME WAY ' - USE MORE FUNCTIONS ' - WHEN DONE: SEARCH FOR "TRACE" AND REMOVE THE DEBUGGING THINGS '- MENU 1 BASICALLY DONE ' - MAKE THE OCTAVE COUNTER INCREMENT/DECREMENT 1 PITCH VALUE AT A TIME ' - FOR BETTER WORKFLOW '- MENU 2 BASICALLY DONE ' - TURN ALL INSTRUMENT SETTINGS INTO ARRAYS (OR ADD A DIMENSION) ' - FOR 16 INDEPENDENT INSTRUMENTS '- MENU 3 NOT STARTED ' - ADD LOOP/STOP/START BUTTONS SOMEWERE ' - ADD A WAY TO SELECT WHICH TRACK IS PLAYING: ' - PLAY THE SELECTED TRACK IN MENU 1 ' - PLAY THE WHOLE SEQUENCE IN MENU 3 ' - PROJECT SEQUENCER ' - DISPLAY THE SECOND HEX TRACK VALUES ON THE GRID EVERY SECOND OR SO ' - MIXERS (ONE LITTLE FUNCTION CAN HANDLE ALL FADERS) ' - ADD 4 BUTTONS TO PAN THE SELECTED INSTRUMENT LEFT,RIGHT,BOTH OR, MUTE ' - SAVE/LOAD ' - GUI: MAKE THE COUNTER AND DETECT THE BUTTONS ' - MAKE THE ENCODER 'MAYBE '- MAYBE REPLACE THE FADER SLIDERS WITH SPRITES 'DONE '- MENU 2 ' - DONE X/Y PAD MAKE IT CONTROL 2 FADERS IN CFADERS() ' - DONE LFO PW AND V FADERS SHOULD ALSO BE PUT IN CFADERS() ' - DONE APPLY THE ONE-BUTTON-PRESSED-AT-A-TIME TNING (WITH THE "PRESSED" VARIABLE) ' - DONE REFRESH UPON ENTERING THIS MENU ' - DONE ASSIGN FUNCTIONS TO THE VARIABLES (OF THE FADERS AND SWITCHES) M=0 S=0 BG 1 BG SOURCE ROM(4),20,16 BG COPY 320*0,0,20,16 TO 0,0 BG 0 BG SOURCE ROM(3) BG COPY 320*M,0,20,16 TO 0,0 TOUCHSCREEN DIM GLOBAL NOTES(63,255) DIM GLOBAL TSYNTH(63) DIM GLOBAL SFADERS(9) DIM GLOBAL SWITCHES(2) DIM GLOBAL VFADERS(15) DIM GLOBAL PAN(15) GLOBAL TX,TY,PTX,PTY,TOUCHED,M,SYNTH,MTRACK,OCT,BT,ST,ET,BPM,PLAYING,C,TIME,VCOWAVE,LFOWAVE 'BUTTON TIME (PRESS DURATION) BT=0 'SOUND TIME ST=0 'EDIT TIME (LOCATION) ET=0 OCT=4 BPM=100 PLAYING=0 C=0 TIME=0 VCOWAVE=0 LFOWAVE=0 FOR I=0 TO 15 'VFADERS(I)=15 PAN(I)=3 NEXT I FOR I=0 TO 9 READ SFADERS(I) NEXT I DATA 5,5,5,5,15,5,0,15,15,15 'TEMPORARY TETRIS THEME FOR I=0 TO 125 READ NOTES(0,I) NEXT I REM MELODY DATA 65,0,60,61,63,0,61,60,58,0,58,61,65,0,63,61 DATA 60,0,60,61,63,0,65,0,61,0,58,0,58,0,0,0 DATA 63,0,0,66,70,0,68,66,65,0,0,61,65,0,63,61 DATA 60,0,60,61,63,0,65,0,61,0,58,0,58,0,0,0 DATA 53,0,0,0,49,0,0,0,51,0,0,0,48,0,0,0 DATA 49,0,0,0,46,0,0,0,45,0,0,0,48,0,0,0 DATA 53,0,0,0,49,0,0,0,51,0,0,0,48,0,0,0 DATA 49,0,53,0,58,58,0,57,0,0,0,0,0,0 CALL REFRESH0 TINT 0,0 PAL 3 DO IF TAP THEN TOUCHED=1 IF TOUCH THEN PTX=TOUCH.X PTY=TOUCH.Y TX=PTX\8 TY=PTY\8 CALL GUI IF TOUCHED=1 THEN TOUCHED=0 END IF CALL PLAYBACK 'TRACE TOUCHED WAIT VBL LOOP SUB REFRESH_SOUND VOLUME 0,15-VFADERS(0),PAN(0) SOUND 0,VCOWAVE,15-SFADERS(4),(15-SFADERS(5))*16 ENVELOPE 0,15-SFADERS(0),15-SFADERS(1),15-SFADERS(2),15-SFADERS(3) LFO 0,SFADERS(6),15-SFADERS(9),15-SFADERS(7),15-SFADERS(8) LFO WAVE 0,LFOWAVE,SWITCHES(0),SWITCHES(1),SWITCHES(2) END SUB SUB PLAYBACK IF PLAYING AND TIMER>ST THEN ST=TIMER+3600/(BPM*4) 'FRAMES PER 4 TIME UNITS PLAY 0,NOTES(SYNTH,TIME) 'SPRITES CHAR 4 PAL 1 INC TIME IF TIME>255 THEN TIME=0 END IF IF M=0 THEN SPT=(TIME MOD 16)*8 'AN ATTEMPT TO MAKE A SMOOTH LINE -(ST-TIMER)*BPM/3600) (TIME UNITS PER FRAME) IF TIME\16=ET THEN FOR I=0 TO 11 SPRITE I,SPT+8,32+I*8,4 SPRITE I PAL 1 NEXT I ELSE SPRITE OFF 0 TO 11 END IF END IF END SUB SUB GUI 'MENU TY2=(TY+1)\2 IF TX\2=9 AND TY2>4 AND TY2<8 AND (TOUCHED=1 OR TOUCHED=2) THEN TOUCHED=2 IF M<>TY2-5 THEN M=TY2-5 BG COPY 320*M,0,20,16 TO 0,0 IF M=0 THEN CALL REFRESH0 ELSE IF M=1 THEN CALL REFRESH1 ELSE IF M=2 THEN CALL REFRESH2 END IF IF M=1 THEN TINT SYNTH,0 PAL 3 ELSE TINT MTRACK,0 PAL 3 END IF SPRITE OFF END IF TY2=(TX+15)\16 'SYNTH SELECTOR ELSE IF TY=0 AND TX>-1 AND TX<16 AND (TOUCHED=1 OR TOUCHED=3) THEN TOUCHED=3 FOR I=0 TO 15 TINT I,0 PAL 5 NEXT I TINT TX,0 PAL 3 SYNTH=TSYNTH(MTRACK) IF M=1 THEN SYNTH=TX ELSE MTRACK=(MTRACK\16)*16+TX IF M=0 THEN CALL REFRESH_P END IF IF M<>1 AND (TX=17 OR TX=19) AND TY=0 AND (TOUCHED=1 OR TOUCHED=4) AND (BT+8)63 THEN ADD MTRACK,-16 PAL 5 CELL 18,0,128+MTRACK\16 SYNTH=TSYNTH(MTRACK) IF M=0 THEN CALL REFRESH_P END IF IF M=0 THEN CALL M0 ELSE IF M=1 THEN CALL M1 ELSE IF M=2 THEN CALL M2 END IF END SUB SUB M0 TX2=(TX+1)\2 TX3=TX\2 TY2=TY\2 'TRACE TX2,TX3,TY2 'TRACE TX,TY IF TY2=1 AND (BT+5)15 THEN DEC ET PAL 7 CELL 17,2,128+ET\10 CELL 18,2,128+ET MOD 10 CALL REFRESH_P ELSE IF (TX2=5 OR TX3=2) AND (TOUCHED=1 OR TOUCHED=5) THEN 'BPM COUNTER TOUCHED=5 IF TX2=5 THEN INC BPM ELSE IF TX3=2 THEN DEC BPM IF BPM<1 THEN INC BPM ELSE IF BPM>255 THEN DEC BPM PAL 3 CELL 6,2,128+ BPM\100 CELL 7,2,128+(BPM\10) MOD 10 CELL 8,2,128+ BPM MOD 10 ELSE IF TX2=1 AND (TOUCHED=1 OR TOUCHED=6) THEN 'PLAY/PAUSE BUTTON TOUCHED=6 PLAYING=NOT(PLAYING) TIME=0 PAL 2 IF PLAYING THEN CALL BIGCELL(1,2,46) ELSE CALL BIGCELL(1,2,44) END IF ELSE IF TX2=9 AND (TY2=2 OR TY2=3) AND (BT+5)7 THEN DEC OCT PAL 7 CELL 17,3,128+OCT\10 CELL 18,3,128+OCT MOD 10 CALL REFRESH_P ELSE IF TX>=1 AND TX<=16 AND TY>=4 AND TY<=15 AND (TOUCHED=1 OR TOUCHED=8) THEN 'PIANO ROLL IF TOUCHED=1 THEN C=CELL.A(TX,TY) MOD 8 TOUCHED=8 T=TX-1+ET*16 IF (NOTES(MTRACK,T)-1)\12=OCT THEN TINT TX,15-(NOTES(MTRACK,T)-1) MOD 12 PAL 2 'TRACE NOTES(MTRACK,T),(NOTES(MTRACK,T)-1)\12,15-(NOTES(MTRACK,T)-1) MOD 12 IF C=2 THEN NOTES(MTRACK,T)=16-TY+OCT*12 'TRACE TX-1+ET*16,16-TY+OCT*12 TINT TX,TY PAL 0 ELSE IF C=0 THEN NOTES(MTRACK,T)=0 TINT TX,TY PAL 2 END IF END IF END SUB SUB M1 'TRACE TX,TY 'FADERS 'VCO FADERS IF TX<>4 AND TX>-1 AND TX<7 AND TY>6 AND TY<15 AND (TOUCHED=1 OR TOUCHED=3+TX-TX\4) THEN TOUCHED=3+TX-TX\4 SFADERS(TX-TX\4)=PTY\4 -14 'TRACE TX-TX\4,PTY\4 -14 'REFRESH FADER FOR I=0 TO 7 ATTR CELL.A(TX,7+I) CELL TX,7+I,12+ABS(((I+5)\6) MOD 2 -1) NEXT I ATTR CELL.A(TX,TY) CELL TX,TY,14+ABS(((TY-2)\6) MOD 2 -1) FLIP 0,0 'X/Y PAD WITH LFO RATE AND DEPTH ELSE IF TX>7 AND TX<16 AND TY>6 AND TY<15 AND (TOUCHED=1 OR TOUCHED=9) THEN TOUCHED=9 SFADERS(6)=PTX\4 -16 SFADERS(7)=PTY\4 -14 'REFRESH FADER PAL 4 BG FILL 8,7 TO 15,14 CHAR 8 CELL TX,TY,9 'OTHER LFO FADERS ELSE IF TX>17 AND TX<20 AND TY>1 AND TY<6 AND (TOUCHED=1 OR TOUCHED=TX-8) THEN TOUCHED=TX-8 SFADERS(TX-10)=PTY\2 -8 'REFRESH FADER FOR I=0 TO 3 ATTR CELL.A(TX,2+I) CELL TX,2+I,12+ABS(((I+1)\2) MOD 2 -1) NEXT I ATTR CELL.A(TX,TY) CELL TX,TY,14+ABS(((TY+3)\2) MOD 2 -1) FLIP 0,0 END IF 'SWITCHES IF (BT+8)1 AND TY<4 AND TX>0 AND TX<7 AND (TOUCHED=1 OR TOUCHED=12) THEN TOUCHED=12 'TRACE 1,TX,TY ADD VCOWAVE,1,0 TO 3 CALL WAVENAMES(1,3,3,VCOWAVE) 'PLAY/PAUSE BUTTON ELSE IF TX>0 AND TX<3 AND TY>3 AND TY<6 AND (TOUCHED=1 OR TOUCHED=13) THEN TOUCHED=13 PLAYING=NOT(PLAYING) TIME=0 PAL 2 IF PLAYING THEN CALL BIGCELL(1,4,46) ELSE CALL BIGCELL(1,4,44) 'LFO SETTINGS ELSE IF TY>1 AND TY<6 AND TX>7 AND TX<18 THEN 'TRACE TY-2,TX,TY 'LFO WAVE IF TY=2 AND (TOUCHED=1 OR TOUCHED=14) THEN TOUCHED=14 ADD LFOWAVE,1,0 TO 3 CALL WAVENAMES(13,2,3,LFOWAVE) 'BOOLEAN LFO SETTINGS ELSE IF (TOUCHED=1 OR TOUCHED=TY+12) THEN Y1=TY-3 TOUCHED=15+Y1 'SWITCH BETWEEN PAL 3 AND 5 SWITCHES(Y1)=NOT(SWITCHES(Y1)) FOR I=8 TO 15 TINT I,TY PAL ABS(NOT(SWITCHES(Y1)))*2+3 NEXT I END IF END IF END IF CALL REFRESH_SOUND END SUB SUB M2 'TRACE TX,TY 'PLAY/PAUSE BUTTON IF TX>14 AND TX<17 AND TY>13 AND TY<16 AND (TOUCHED=1 OR TOUCHED=21) AND (BT+8)15 THEN DEC SYNTH TSYNTH(MTRACK)=SYNTH CALL M2SYNTH 'SYNTH SELECTOR 2 (BUTTONS) ELSE IF TY=12 AND TX>-1 AND TX<16 AND (TOUCHED=1 OR TOUCHED=19) THEN TOUCHED=19 SYNTH=TX TSYNTH(MTRACK)=SYNTH CALL M2SYNTH 'VOLUME MIXING FADERS ELSE IF TX>-1 AND TX<16 AND TY>7 AND TY<12 AND (TOUCHED=1 OR TOUCHED=TX+3) THEN TOUCHED=TX+3 VFADERS(TX)=PTY\2 -32 'REFRESH FADER FOR I=0 TO 3 ATTR CELL.A(TX,8+I) CELL TX,8+I,12+ABS(((I+1)\2) MOD 2 -1) NEXT I ATTR CELL.A(TX,TY) CELL TX,TY,14+ABS(((TY-7)\2) MOD 2 -1) FLIP 0,0 ELSE IF TX=16 AND TY>7 AND TY<10 AND (TOUCHED=1 OR TOUCHED=22) AND (BT+8)