'====================================INITIALIZATION=======================================
'-----------DATA
FROM SLIDERS------------
input 0
'START button (starts the music)
input 1
'SEED button (sets seed value)
input 8
'photoresistor LSB (chaos value)
input 9
'photoresistor vld
input 10
'photoresistor MSB
input 11
'photoresistors for SLIDER 2 (seed value)
input 12
input 13
'-------------LIGHTS
ON BOX--------------
output 7
'light indicator on box for SLIDER 1
output 6
'light indicator
output 5
'light indicator
output 4
'same for SLIDER 2 indicator lights
output 3
output 2
'--------------MIDI
OUT PORT-------------
output 14
'serial out for MIDI
'-------------READ
GREY CODE-------------
n var nib
'reads chaos slider 3bit grey code
code var nib
'puts code in the right order, 0 through 7
m var nib
'reads seed slider 3bit grey code
mcode var nib
'puts code in the right order, 0 through 7
hibits var word
medbits1 var
word
medbits2 var
word
product var
word
'---------------MIDI
CHAOS---------------
seed var word
chaos var word
noteout var
byte
seedsquared
var word
tempo var word
pedal var word
'duration var
byte
'velocity var
byte
seed = 45875
chaos =
55000
chaos = chaos
- 32768
'=================================BLINK
LIGHTS AT STARTUP================================
startup:
pause
1000
out2=1
pause
200
out3=1
pause
200
out4=1
pause
200
out5=1
pause
200
out6=1
pause
200
out7=1
pause
200
outs=%00000000
pause
200
outs=%11111100
pause
500
outs=%00000000
'===================WAIT
FOR PLAYER TO PRESS BUTTON ON VERTICAL SLIDER===================
waitforstart:
high 15
pause
1
rctime
15, 1, pedal
pedal
= pedal/150
lookup
pedal, [1000, 250, 250, 75], tempo
IF in1=1
THEN main
IF in0=1
THEN resetseedpaused
goto waitforstart
'==============================READ
DATA FROM CHAOS SLIDER================================
main:
IF in1=0 THEN waitforstart
n = (in8)
+ (in9 * 2) + (in10 * 4)
'read inputs 8,9,10 for chaos
lookup
n, [50000, 62259, 60000, 56000, 62000, 59000, 55000, 58000], chaos
chaos
= chaos - 32768 'ABOVE ARE PRESET CHAOS VALUES
IF in0=1 THEN resetseed
'------------CHECK IF SEED IS NEGATIVE, AND SQUARE THE SEED VALUE-----------------
continue:
if(seed<32768) then negativeseed 'if seed is negative... (below 32768)
positiveseed:
seed =
seed - 32768
'make seed range 0 to 32768 (0 to 2, absolute value)
'however, the seed never exceedes the range of 0 to 1
'which is 1 to 16384 at this point
'the sign doesn't matter, since seed gets squared
goto keepgoing
negativeseed:
seed =
32768 - seed
keepgoing:
hibits
= (seed/128) * (seed/128)
'high bits * high bits +
medbits1
= ((seed*128)/256) * (seed/128)
'low bits * high bits +
medbits2
= (seed/128) * ((seed*128)/256)
'high bits * low bits +
seedsquared
= hibits + (medbits1/256) + (medbits2/256)
'-----------------------MULTIPLY CHAOS * SEED SQUARED---------------------------
hibits
= (chaos/128) * (seedsquared/128)
'high bits * high bits +
medbits1
= ((chaos*128)/256) * (seedsquared/128)
'low bits * high bits +
medbits2
= (chaos/128) * ((seedsquared*128)/256)
'high bits * low bits +
product
= hibits + (medbits1/256) + (medbits2/256)
'---------------------- 1 - rx^2 ------ (rx^2 is "product") ------------------
seed =
49152 - product
'1-rx^2
'49152 is 1 now instead of 16384 to make 0 = 32000
'so that negative numbers can be represented
'--------------------------------MIDI OUTPUT--------------------------------------
noteout = seed / 744 'put in range of 88 note keyboard
serout
14, 12, [144, noteout, 120]
'play MIDI notes
pause
tempo
serout
14, 12, [128, noteout, 0]
pause
1
'debug ?tempo
goto main
'==========SET NEW SEED VALUE WITH BUTTON ON HORIZONTAL SLIDER DURING ITERATION==========
resetseed:
m = (in11)
+ (in12 * 2) + (in13 * 4)
'read inputs 11,12,13 for seed value
lookdown
n, [0,1,3,2,6,4,5,7], mcode
'[000, 001, 011, 010, 110, 100, 101, 111]
seed = mcode * 4681 + 16384 'scale seed to be -1 to 1, which is 16384 to 49152
''''' seed = 45875 'TEMPORARY PRESET SEED VALUE
goto continue
'===========SET NEW SEED VALUE WITH BUTTON ON HORIZONTAL SLIDER WHILE PAUSED=============
resetseedpaused:
m = (in11)
+ (in12 * 2) + (in13 * 4)
'read inputs 11,12,13 for seed value
lookdown
n, [0,1,3,2,6,4,5,7], mcode
'[000, 001, 011, 010, 110, 100, 101, 111]
seed = mcode * 4681 + 16384 'scale seed to be -1 to 1, which is 16384 to 49152
''''' seed = 45875 'TEMPORARY PRESET SEED VALUE
goto waitforstart