solving conflict
@ -1 +1,8 @@
|
||||
FLOPPYLEFT - 2017
|
||||
MOTIONS - 2017
|
||||
|
||||
Copyright <2017> <FRANCISCO GONZALEZ>
|
||||
|
||||
You may do anything with this work that copyright law would normally
|
||||
restrict, so long as you retain the above notice(s) and this license
|
||||
in all redistributed copies and derived works. There is no warranty.
|
||||
|
||||
|
@ -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 |