readme-license
@ -0,0 +1 @@
|
|||||||
|
FLOPPYLEFT - 2017
|
@ -0,0 +1,7 @@
|
|||||||
|
Author: Slavoj Žižek
|
||||||
|
Date: 1989
|
||||||
|
Title: The Sublime Object of Floppy
|
||||||
|
|
||||||
|
Description:
|
||||||
|
|
||||||
|
And so on, and so on, and so on.
|
@ -0,0 +1,79 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
import OSC
|
||||||
|
import multiprocessing, time
|
||||||
|
import RPi.GPIO as GPIO
|
||||||
|
import time
|
||||||
|
|
||||||
|
GPIO.setmode(GPIO.BCM)
|
||||||
|
GPIO.setwarnings(False)
|
||||||
|
|
||||||
|
pin_pairs = [[14,15], [23,24], [1,7]]
|
||||||
|
|
||||||
|
|
||||||
|
# OSC
|
||||||
|
client = OSC.OSCClient()
|
||||||
|
address = '127.0.0.1', 3000 # 57120==SC
|
||||||
|
client.connect( address ) # set the address for all following messages
|
||||||
|
oscOne = OSC.OSCMessage() # OSCresponder name: '/touch_one'
|
||||||
|
oscTwo = OSC.OSCMessage() # OSCresponder name: '/touch_two'
|
||||||
|
oscThree = OSC.OSCMessage() # OSCresponder name: '/touch_three'
|
||||||
|
oscOne.setAddress("/touch_one")
|
||||||
|
oscTwo.setAddress("/touch_two")
|
||||||
|
oscThree.setAddress("/touch_three")
|
||||||
|
print client
|
||||||
|
|
||||||
|
def osc_msg(pinpair, val):
|
||||||
|
pinindex = pin_pairs.index(pinpair)
|
||||||
|
|
||||||
|
if pinindex == 0:
|
||||||
|
oscOne.append( val )
|
||||||
|
print oscOne
|
||||||
|
client.send(oscOne)
|
||||||
|
oscOne.clearData()
|
||||||
|
elif pinindex == 1:
|
||||||
|
oscTwo.append( val )
|
||||||
|
print oscTwo
|
||||||
|
client.send(oscTwo)
|
||||||
|
oscTwo.clearData()
|
||||||
|
elif pinindex == 2:
|
||||||
|
oscThree.append( val )
|
||||||
|
print oscThree
|
||||||
|
client.send(oscThree)
|
||||||
|
oscThree.clearData()
|
||||||
|
|
||||||
|
|
||||||
|
def discharge(a_pin, b_pin):
|
||||||
|
GPIO.setup(a_pin, GPIO.IN)
|
||||||
|
GPIO.setup(b_pin, GPIO.OUT)
|
||||||
|
GPIO.output(b_pin, False)
|
||||||
|
time.sleep(0.005)
|
||||||
|
|
||||||
|
def charge_time(a_pin, b_pin):
|
||||||
|
GPIO.setup(b_pin, GPIO.IN)
|
||||||
|
GPIO.setup(a_pin, GPIO.OUT)
|
||||||
|
count = 0
|
||||||
|
GPIO.output(a_pin, True)
|
||||||
|
while not GPIO.input(b_pin):
|
||||||
|
count = count + 1
|
||||||
|
return count
|
||||||
|
|
||||||
|
def analog_read(pin_pair):
|
||||||
|
discharge(pin_pair[0],pin_pair[1])
|
||||||
|
return charge_time(pin_pair[0],pin_pair[1])
|
||||||
|
|
||||||
|
|
||||||
|
def worker(pair):
|
||||||
|
"""thread worker function"""
|
||||||
|
while True:
|
||||||
|
reading = analog_read( pair ) #print(analog_read())
|
||||||
|
osc_msg(pair, reading)
|
||||||
|
time.sleep(0.1)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
jobs = []
|
||||||
|
for i in range(len(pin_pairs)):
|
||||||
|
p = multiprocessing.Process(target=worker, args=(pin_pairs[i],))
|
||||||
|
jobs.append(p)
|
||||||
|
p.start()
|
@ -0,0 +1,6 @@
|
|||||||
|
@font-face { font-family: "Genome"; src: url(../fonts/Genome-Thin.otf);}
|
||||||
|
body { background: #1F1F1F; color: #EEE; font-family: Genome, sans-serif; font-weight: 100; color: #DDD; }
|
||||||
|
p { margin: 0 0 70px; }
|
||||||
|
#defaultCanvas0 { display: block !important; margin: 5em auto ; }
|
||||||
|
#header { margin: 30px 0px 0px; }
|
||||||
|
.text { display: block; margin: 0 50px; font-size: 3em; font-weight: 100 !important; }
|
@ -0,0 +1,27 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Euclid</title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/style.css">
|
||||||
|
<script type="text/javascript" src="js/p5.min.js"></script>
|
||||||
|
<script type="text/javascript" src="js/p5.svg.js"></script>
|
||||||
|
<script type="text/javascript" src="./js/euclidScore.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<content class="text">
|
||||||
|
<object id="header" data="svgs/euclid.svg" type="image/svg+xml">
|
||||||
|
<h1>euclid</h1>
|
||||||
|
</object>
|
||||||
|
|
||||||
|
<p>To play, touch the metal contacts, connecting them. The more conductive you are, the more you will be able to affect the instrument.</p>
|
||||||
|
|
||||||
|
<p>The state of your composition is recorded, and displayed here as a downloadable score.</p>
|
||||||
|
|
||||||
|
<p>Never to be played, nor heard again.</p>
|
||||||
|
</content>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,82 @@
|
|||||||
|
// TODO: SAVE ON CLICK
|
||||||
|
|
||||||
|
var left, right, genLight, score
|
||||||
|
var el1 = [], el2 = [], scrVals = []
|
||||||
|
|
||||||
|
function preload() {
|
||||||
|
// left = loadSVG('../svgs/leftHand.svg')
|
||||||
|
// right = loadSVG('../svgs/rightHand.svg')
|
||||||
|
|
||||||
|
genLight = loadFont("fonts/Gen-Light.otf");
|
||||||
|
|
||||||
|
score = loadStrings('../score/score.txt')
|
||||||
|
|
||||||
|
for (var i = 0; i < 8; i++) {
|
||||||
|
el1.push( loadSVG('../svgs/el.' + int(random(1, 12)) + '.svg') )
|
||||||
|
el2.push( loadSVG('../svgs/el.' + int(random(1, 12)) + '.svg') )
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setup() {
|
||||||
|
createCanvas(800, 1200, SVG)
|
||||||
|
|
||||||
|
textFont(genLight)
|
||||||
|
|
||||||
|
// frameRate(1)
|
||||||
|
noLoop()
|
||||||
|
|
||||||
|
fill(220)
|
||||||
|
textSize(150)
|
||||||
|
textAlign('right')
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
background('#151515')
|
||||||
|
fill("#DDDDDD")
|
||||||
|
|
||||||
|
for (var i = 0; i < score.length; i++) {
|
||||||
|
var line = split(score[i].slice(0, -1), ' ')
|
||||||
|
text(line.join(" "), 90, 150 + (i*90), 710)
|
||||||
|
scrVals.push(line)
|
||||||
|
}
|
||||||
|
|
||||||
|
stroke('#FFCC00')
|
||||||
|
fill('#FFCC00')
|
||||||
|
|
||||||
|
// left.attribute('fill', 'none')
|
||||||
|
// right.attribute('fill', 'none')
|
||||||
|
// left.attribute('stroke', '#FFCC00')
|
||||||
|
// right.attribute('stroke', '#FFCC00')
|
||||||
|
|
||||||
|
// image(right, 0, 0, 600, 600)
|
||||||
|
|
||||||
|
|
||||||
|
for (var i = 0; i < el1.length; i++) {
|
||||||
|
var r = random(5)
|
||||||
|
var rVal = int(scrVals[int(random(scrVals.length))][int(random(7))])
|
||||||
|
var coin = int(random(2))
|
||||||
|
rVal = map(rVal, 0, 127, 0, width)
|
||||||
|
|
||||||
|
el1[i].attribute('fill', 'none')
|
||||||
|
el2[i].attribute('fill', 'none')
|
||||||
|
el1[i].attribute('stroke', '#FFCC00')
|
||||||
|
el2[i].attribute('stroke', '#FFCC00')
|
||||||
|
|
||||||
|
image(el1[i], 120 + rVal, (height/el1.length)*(i)+30, 75 + r, 75 + r)
|
||||||
|
image(el2[i], 15, (height/el1.length)*(i)+30, 75, 75)
|
||||||
|
|
||||||
|
if (coin) {
|
||||||
|
var coin2 = int(random(2))
|
||||||
|
if (coin2) {
|
||||||
|
ellipse(120 + rVal, (height/el1.length)*(i)+45, 30 + r, 30 + r)
|
||||||
|
} else {
|
||||||
|
ellipse(51, (height/el1.length)*(i)+55, 30, 30)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveMe() {
|
||||||
|
save()
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
r4 16 7 0;
|
||||||
|
r4 18 6 0;
|
||||||
|
r3 18 7 0;
|
||||||
|
r2 9 2 0;
|
||||||
|
r1 7 8 0;
|
||||||
|
melody 51 43 34 26 37 43 33;
|
||||||
|
bass 73 75 74 86 87 70 86;
|
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 34.92 38.25"><title>Artboard 12</title><polyline class="a" points="34.55 0.5 1.12 0.5 34.55 37.91"/></svg>
|
After Width: | Height: | Size: 159 B |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 37.41 38.25"><title>Artboard 21 copy</title><line class="a" x1="37.41" y1="19.04" y2="19.04"/></svg>
|
After Width: | Height: | Size: 153 B |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 34.92 38.25"><title>Artboard 21</title><line class="a" x1="17.6" y1="0.33" x2="17.6" y2="37.75"/></svg>
|
After Width: | Height: | Size: 156 B |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 34.92 38.25"><title>Artboard 13</title><polyline class="a" points="0.37 0.5 33.8 0.5 0.37 37.91"/></svg>
|
After Width: | Height: | Size: 157 B |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 38.41 38.41"><title>Artboard 14</title><circle class="a" cx="19.21" cy="19.21" r="18.71"/></svg>
|
After Width: | Height: | Size: 149 B |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 34.92 38.25"><title>Artboard 15</title><polyline class="a" points="0.37 37.74 33.8 37.74 0.37 0.33"/></svg>
|
After Width: | Height: | Size: 160 B |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 34.92 38.25"><title>Artboard 16</title><polyline class="a" points="34.55 37.74 1.12 37.74 34.55 0.33"/></svg>
|
After Width: | Height: | Size: 162 B |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 38.25 34.92"><title>Artboard 17</title><polyline class="a" points="37.74 34.55 37.74 1.12 0.33 34.55"/></svg>
|
After Width: | Height: | Size: 162 B |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 38.25 34.92"><title>Artboard 18</title><polyline class="a" points="0.5 34.55 0.5 1.12 37.91 34.55"/></svg>
|
After Width: | Height: | Size: 159 B |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 38.25 34.92"><title>Artboard 19</title><polyline class="a" points="37.74 0.37 37.74 33.8 0.33 0.37"/></svg>
|
After Width: | Height: | Size: 160 B |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 38.25 34.92"><title>Artboard 20</title><polyline class="a" points="0.5 0.37 0.5 33.8 37.91 0.37"/></svg>
|
After Width: | Height: | Size: 157 B |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 616.67 179" style="stroke: #FFCC00; fill: none; stroke-width: 2;"><title>Artboard 4 copy</title><polyline class="a" points="112 130 28 130 70 83 28 36 112 36"/><polyline class="a" points="373.11 130 289.11 130 373.11 36"/><line class="a" x1="487.78" y1="36" x2="487.78" y2="129.98"/><line class="a" x1="435.56" y1="36" x2="435.56" y2="129.98"/><line class="a" x1="127.44" y1="83" x2="221.44" y2="83"/><line class="a" x1="278.89" y1="36" x2="278.89" y2="130"/><circle class="a" cx="122.22" cy="83" r="47"/><circle class="a" cx="226.67" cy="83" r="47"/><circle class="a" cx="383.33" cy="83" r="47"/><circle class="a" cx="540" cy="83" r="47"/></svg>
|
After Width: | Height: | Size: 699 B |
@ -0,0 +1,10 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 317.7 395">
|
||||||
|
<g>
|
||||||
|
<path id="path3680" class="cls-1" d="M7.55,348.93,87.64,205.28l6.87-92.09,16.93-27.34"/>
|
||||||
|
<path id="path3684" class="cls-1" d="M101.39,143.43l15.12-86.6-4.12-41.24"/>
|
||||||
|
<path id="path3686" class="cls-1" d="M112.38,15.59h0l4.81-11.68,18.21,6.53,13.4,45.7-1.72,110,10.53,39.23-7.78,38.88"/><path id="path3688" class="cls-1" d="M148.81,56.14l41.52-34L248.65,1.7,260.31,7l-1,16L199.56,53.7l-37.42,54.92,3.59,7.7"/>
|
||||||
|
<path id="path3690" class="cls-1" d="M173.66,91.71l40.73-40.2,67.31-29.4,13.73,5.38-1.09,16L228.24,80.42l-37.91,57.35,2.38,13.48"/>
|
||||||
|
<path id="path3692" class="cls-1" d="M191.09,144.76l43.14-45.39L292,69.14l11,4.12-2.75,15.81L248,125.49,214.3,175l2.75,7.56,33.28-25,55.53-27.07,8.25,3.44.8,13.22-87.35,58.82-42.34,83.79-22.6,12.11-29.11,82.49"/>
|
||||||
|
<path id="path3694" class="cls-1" d="M163.11,301.9,147,295.23"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 940 B |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 329.88 393.19"><path id="path3680" class="cls-1" d="M221.35,98.42l9,18.18,14.15,94.49,78.65,109.19"/><path id="path3684" class="cls-1" d="M204.71,10.24,209,28l4.61,38.64,7.71,31.73"/><path id="path3686" class="cls-1" d="M179.41,227.45l-4.51-42.2,9.08-42,.21-59.83L178,39.52l1.94-28.59,13-8.49,11.77,7.79h0"/><path id="path3688" class="cls-1" d="M159.16,114.84l3.14-8.73L120.71,54.93,59.84,26.55l-1.56-16L69.74,4.79l59,18.24L181.7,65.8"/><path id="path3690" class="cls-1" d="M133.67,152.19,133,138.61,90.22,84.49,22.81,50l.42-14.8,12.51-4.74L108.85,60l51.55,51.37"/><path id="path3692" class="cls-1" d="M214.63,383.36l-42-84.64L150.5,288,99.76,211.59,71.33,188.53l-32.74-19.3-31.16-12L6.8,143.82l8.11-3.74,58.42,20.57,34.18,23.76,2.47-7.66-38.3-46.42L15.3,99.55,12,83.86l10.84-4.53,61.65,24.4,49,43.16"/><path id="path3694" class="cls-1" d="M181.23,294.79l-8.58,3.93"/></svg>
|
After Width: | Height: | Size: 927 B |