changes in index
@ -0,0 +1,2 @@
|
|||||||
|
gpu_mem=16
|
||||||
|
start_x=1
|
@ -0,0 +1,4 @@
|
|||||||
|
/dev/mmcblk0p1 /boot vfat defaults 0 2
|
||||||
|
/dev/mmcblk0p2 / ext4 errors=remount-ro,noatime,nodiratime,commit=120 0 1
|
||||||
|
/dev/sda /media/floppy vfat noauto
|
||||||
|
tmpfs /tmp tmpfs defaults,nodev,nosuid 0 0
|
@ -0,0 +1,50 @@
|
|||||||
|
root:x:0:
|
||||||
|
daemon:x:1:
|
||||||
|
bin:x:2:
|
||||||
|
sys:x:3:
|
||||||
|
adm:x:4:
|
||||||
|
tty:x:5:
|
||||||
|
disk:x:6:
|
||||||
|
lp:x:7:
|
||||||
|
mail:x:8:
|
||||||
|
news:x:9:
|
||||||
|
uucp:x:10:
|
||||||
|
man:x:12:
|
||||||
|
proxy:x:13:
|
||||||
|
kmem:x:15:
|
||||||
|
dialout:x:20:
|
||||||
|
fax:x:21:
|
||||||
|
voice:x:22:
|
||||||
|
cdrom:x:24:
|
||||||
|
floppy:x:25:
|
||||||
|
tape:x:26:
|
||||||
|
sudo:x:27:
|
||||||
|
audio:x:29:www-data
|
||||||
|
dip:x:30:
|
||||||
|
www-data:x:33:
|
||||||
|
backup:x:34:
|
||||||
|
operator:x:37:
|
||||||
|
list:x:38:
|
||||||
|
irc:x:39:
|
||||||
|
src:x:40:
|
||||||
|
gnats:x:41:
|
||||||
|
shadow:x:42:
|
||||||
|
utmp:x:43:
|
||||||
|
video:x:44:
|
||||||
|
sasl:x:45:
|
||||||
|
plugdev:x:46:
|
||||||
|
staff:x:50:
|
||||||
|
games:x:60:
|
||||||
|
users:x:100:
|
||||||
|
nogroup:x:65534:
|
||||||
|
input:x:101:
|
||||||
|
systemd-journal:x:102:
|
||||||
|
systemd-timesync:x:103:
|
||||||
|
systemd-network:x:104:
|
||||||
|
systemd-resolve:x:105:
|
||||||
|
systemd-bus-proxy:x:106:
|
||||||
|
crontab:x:107:
|
||||||
|
messagebus:x:108:
|
||||||
|
ntp:x:109:
|
||||||
|
netdev:x:110:
|
||||||
|
ssh:x:111:
|
@ -0,0 +1,7 @@
|
|||||||
|
# /etc/modules: kernel modules to load at boot time.
|
||||||
|
#
|
||||||
|
# This file contains the names of kernel modules that should be loaded
|
||||||
|
# at boot time, one per line. Lines beginning with "#" are ignored.
|
||||||
|
|
||||||
|
#snd-bcm2835
|
||||||
|
snd-pcm-oss
|
@ -1 +1,5 @@
|
|||||||
FLOPPYLEFT - 2017
|
Copyright 2017 Kimmy Spreeuwenberg
|
||||||
|
|
||||||
|
You may do anything with this work that copyright law would normally
|
||||||
|
restrict, so long as you retain this license in all redistributed
|
||||||
|
copies and derived works. There is no warranty.
|
@ -1,135 +0,0 @@
|
|||||||
#N canvas 166 23 912 793 10;
|
|
||||||
#X obj 98 109 adc~;
|
|
||||||
#X obj 167 267 tabwrite~ noise;
|
|
||||||
#X obj 98 131 +~;
|
|
||||||
#X msg 209 208 bang;
|
|
||||||
#X obj 214 136 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
|
|
||||||
1;
|
|
||||||
#X obj 161 361 tabread4~ noise;
|
|
||||||
#X obj 154 696 dac~;
|
|
||||||
#X obj 161 334 *~ 88200;
|
|
||||||
#X obj 198 170 metro 2000;
|
|
||||||
#N canvas 0 22 450 278 (subpatch) 0;
|
|
||||||
#X array noise 88200 float 2;
|
|
||||||
#X coords 0 1 88200 -1 200 140 1 0 0;
|
|
||||||
#X restore 428 114 graph;
|
|
||||||
#X obj 313 193 env~;
|
|
||||||
#X floatatom 369 228 5 0 0 0 - - -, f 5;
|
|
||||||
#X obj 161 302 phasor~ 0.5;
|
|
||||||
#X obj 175 525 +~;
|
|
||||||
#X floatatom 306 267 5 0 0 0 - - -, f 5;
|
|
||||||
#X obj 132 240 *~;
|
|
||||||
#X obj 274 322 line~;
|
|
||||||
#X obj 393 306 env~;
|
|
||||||
#X obj 318 499 line~;
|
|
||||||
#X floatatom 497 321 5 0 0 0 - - -, f 5;
|
|
||||||
#X floatatom 280 453 5 0 0 0 - - -, f 5;
|
|
||||||
#X obj 379 419 sel 1;
|
|
||||||
#X obj 420 417 sel 1;
|
|
||||||
#X obj 421 395 &&;
|
|
||||||
#X obj 500 417 sel 1;
|
|
||||||
#X obj 501 395 &&;
|
|
||||||
#X obj 580 417 sel 1;
|
|
||||||
#X obj 581 395 &&;
|
|
||||||
#X obj 662 417 sel 1;
|
|
||||||
#X obj 663 395 &&;
|
|
||||||
#X msg 318 477 \$1 2000;
|
|
||||||
#X obj 742 417 sel 1;
|
|
||||||
#X obj 211 658 delwrite~ fd 4000;
|
|
||||||
#X msg 379 442 1800;
|
|
||||||
#X obj 420 368 > 50;
|
|
||||||
#X obj 379 369 <= 50;
|
|
||||||
#X obj 299 39 loadbang;
|
|
||||||
#X msg 299 68 \; pd dsp 1;
|
|
||||||
#X obj 173 564 /~ 2;
|
|
||||||
#X obj 98 151 lop~ 2500;
|
|
||||||
#X msg 422 442 1830;
|
|
||||||
#X msg 744 442 1900;
|
|
||||||
#X msg 664 442 1875;
|
|
||||||
#X msg 582 442 1865;
|
|
||||||
#X msg 502 442 1850;
|
|
||||||
#X obj 742 369 > 90;
|
|
||||||
#X obj 698 370 <= 90;
|
|
||||||
#X obj 663 370 > 80;
|
|
||||||
#X obj 614 370 <= 80;
|
|
||||||
#X obj 580 368 > 70;
|
|
||||||
#X obj 534 370 <= 70;
|
|
||||||
#X obj 500 368 > 60;
|
|
||||||
#X obj 454 370 <= 60;
|
|
||||||
#X obj 273 269 &&;
|
|
||||||
#X obj 271 238 > 60;
|
|
||||||
#X obj 98 176 *~ 20;
|
|
||||||
#X obj 324 238 <= 80;
|
|
||||||
#X obj 318 523 vd~ fd 200;
|
|
||||||
#X obj 288 552 *~ 0.95;
|
|
||||||
#X msg 274 300 \$1 200;
|
|
||||||
#X connect 0 0 2 0;
|
|
||||||
#X connect 2 0 39 0;
|
|
||||||
#X connect 3 0 1 0;
|
|
||||||
#X connect 4 0 8 0;
|
|
||||||
#X connect 5 0 13 0;
|
|
||||||
#X connect 7 0 5 0;
|
|
||||||
#X connect 8 0 1 0;
|
|
||||||
#X connect 10 0 11 0;
|
|
||||||
#X connect 10 0 54 0;
|
|
||||||
#X connect 10 0 56 0;
|
|
||||||
#X connect 12 0 7 0;
|
|
||||||
#X connect 13 0 38 0;
|
|
||||||
#X connect 15 0 1 0;
|
|
||||||
#X connect 16 0 15 1;
|
|
||||||
#X connect 17 0 19 0;
|
|
||||||
#X connect 17 0 34 0;
|
|
||||||
#X connect 17 0 35 0;
|
|
||||||
#X connect 17 0 45 0;
|
|
||||||
#X connect 17 0 46 0;
|
|
||||||
#X connect 17 0 47 0;
|
|
||||||
#X connect 17 0 48 0;
|
|
||||||
#X connect 17 0 49 0;
|
|
||||||
#X connect 17 0 50 0;
|
|
||||||
#X connect 17 0 51 0;
|
|
||||||
#X connect 17 0 52 0;
|
|
||||||
#X connect 18 0 57 0;
|
|
||||||
#X connect 20 0 30 0;
|
|
||||||
#X connect 21 0 33 0;
|
|
||||||
#X connect 22 0 40 0;
|
|
||||||
#X connect 23 0 22 0;
|
|
||||||
#X connect 24 0 44 0;
|
|
||||||
#X connect 25 0 24 0;
|
|
||||||
#X connect 26 0 43 0;
|
|
||||||
#X connect 27 0 26 0;
|
|
||||||
#X connect 28 0 42 0;
|
|
||||||
#X connect 29 0 28 0;
|
|
||||||
#X connect 30 0 18 0;
|
|
||||||
#X connect 31 0 41 0;
|
|
||||||
#X connect 33 0 30 0;
|
|
||||||
#X connect 34 0 23 0;
|
|
||||||
#X connect 35 0 21 0;
|
|
||||||
#X connect 36 0 37 0;
|
|
||||||
#X connect 36 0 8 0;
|
|
||||||
#X connect 38 0 6 0;
|
|
||||||
#X connect 38 0 6 1;
|
|
||||||
#X connect 38 0 32 0;
|
|
||||||
#X connect 38 0 17 0;
|
|
||||||
#X connect 39 0 55 0;
|
|
||||||
#X connect 40 0 30 0;
|
|
||||||
#X connect 41 0 30 0;
|
|
||||||
#X connect 42 0 30 0;
|
|
||||||
#X connect 43 0 30 0;
|
|
||||||
#X connect 44 0 30 0;
|
|
||||||
#X connect 45 0 31 0;
|
|
||||||
#X connect 46 0 29 1;
|
|
||||||
#X connect 47 0 29 0;
|
|
||||||
#X connect 48 0 27 1;
|
|
||||||
#X connect 49 0 27 0;
|
|
||||||
#X connect 50 0 25 1;
|
|
||||||
#X connect 51 0 25 0;
|
|
||||||
#X connect 52 0 23 1;
|
|
||||||
#X connect 53 0 59 0;
|
|
||||||
#X connect 54 0 14 0;
|
|
||||||
#X connect 54 0 53 0;
|
|
||||||
#X connect 55 0 10 0;
|
|
||||||
#X connect 55 0 15 0;
|
|
||||||
#X connect 56 0 53 1;
|
|
||||||
#X connect 57 0 58 0;
|
|
||||||
#X connect 58 0 13 1;
|
|
||||||
#X connect 59 0 16 0;
|
|
@ -1,17 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<link rel="stylesheet" type="text/css" href="style.css">
|
|
||||||
|
|
||||||
|
|
||||||
<title>The fine line - Existencialism and spirituality</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
|
|
||||||
<div id="wrap">
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,17 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<link rel="stylesheet" type="text/css" href="style.css">
|
|
||||||
|
|
||||||
|
|
||||||
<title>The fine line - Score</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
|
|
||||||
<div id="wrap">
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -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.
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 306 KiB |
After Width: | Height: | Size: 195 KiB |
After Width: | Height: | Size: 68 KiB |
After Width: | Height: | Size: 75 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 121 KiB |
After Width: | Height: | Size: 176 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 40 KiB |
@ -0,0 +1,308 @@
|
|||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
/* add my font? */
|
||||||
|
|
||||||
|
|
||||||
|
body{
|
||||||
|
|
||||||
|
/* font */
|
||||||
|
color: black; /* font color */
|
||||||
|
font-size: 17pt;
|
||||||
|
font-family: Times,
|
||||||
|
line-height: 15px;
|
||||||
|
letter-spacing: 0.7px;
|
||||||
|
margin-left: 0px;
|
||||||
|
margin-right: 0px;
|
||||||
|
margin-top: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Responsive scaling */
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: calc(2.4vW + 2.4vH);
|
||||||
|
text-align: center;
|
||||||
|
font-weight: normal;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: calc(0.8vW + 0.8vH);
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
#container {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
iframe {
|
||||||
|
border: 0px;
|
||||||
|
width: 30vW;
|
||||||
|
height: 60vH;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Text & image links*/
|
||||||
|
|
||||||
|
a { color: blue; text-decoration: none;
|
||||||
|
padding-bottom: 0.00em;
|
||||||
|
border-bottom: 0em rgba(255, 255, 255, 0.31);
|
||||||
|
}
|
||||||
|
|
||||||
|
a:visited {
|
||||||
|
color: blue; }
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
text-decoration: underline; }
|
||||||
|
|
||||||
|
a.image-link,
|
||||||
|
a.icon-link,
|
||||||
|
a.image-link:hover,
|
||||||
|
a.icon-link:hover
|
||||||
|
{ border-bottom: 0; padding-bottom: 0; }
|
||||||
|
|
||||||
|
div#noise-image {
|
||||||
|
|
||||||
|
margin-top: 0px;
|
||||||
|
text-align: center;
|
||||||
|
background: transparent;
|
||||||
|
position: absolute;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
background-color: #e6ffe6;
|
||||||
|
background-image: url(noise.gif);
|
||||||
|
background-blend-mode: multiply;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
div#header {
|
||||||
|
|
||||||
|
margin-top: 98px;
|
||||||
|
margin-left: 230px;
|
||||||
|
margin-right: 230px;
|
||||||
|
line-height: 47px;
|
||||||
|
font-size: 54px;
|
||||||
|
font-family: Times;
|
||||||
|
letter-spacing: 0pt;
|
||||||
|
color: black;
|
||||||
|
background: transparent;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#links {
|
||||||
|
|
||||||
|
margin-top: 40px;
|
||||||
|
margin-right: 0px;
|
||||||
|
margin-left: 1025px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-family: Courier;
|
||||||
|
letter-spacing: 0px;
|
||||||
|
line-height: 12pt;
|
||||||
|
text-align: right;
|
||||||
|
color: blue;
|
||||||
|
text-decoration: underline;
|
||||||
|
background: transparent;
|
||||||
|
position: fixed;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
div#buttons {
|
||||||
|
|
||||||
|
margin-top: 40px;
|
||||||
|
margin-left: 60px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-family: Courier;
|
||||||
|
letter-spacing: 0px;
|
||||||
|
line-height: 12pt;
|
||||||
|
text-align: left;
|
||||||
|
color: black;
|
||||||
|
background: transparent;
|
||||||
|
position: fixed;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
div#title {
|
||||||
|
|
||||||
|
margin-top: 40px;
|
||||||
|
margin-left: 550px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-family: Times;
|
||||||
|
letter-spacing: 1pt;
|
||||||
|
text-align: center;
|
||||||
|
color: blue;
|
||||||
|
background: transparent;
|
||||||
|
position: fixed;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
div#concept {
|
||||||
|
|
||||||
|
margin-top: 495px;
|
||||||
|
margin-left: 51px;
|
||||||
|
font-size: 18px;
|
||||||
|
font-family: Courier;
|
||||||
|
letter-spacing: 0pt;
|
||||||
|
text-align: left;
|
||||||
|
color: black;
|
||||||
|
background: transparent;
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#body {
|
||||||
|
|
||||||
|
margin-top: 495px;
|
||||||
|
margin-left: 684px;
|
||||||
|
font-size: 18px;
|
||||||
|
font-family: Courier;
|
||||||
|
letter-spacing: 0pt;
|
||||||
|
text-align: left;
|
||||||
|
color: black;
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
background: transparent;
|
||||||
|
position: absolute;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
div#samples {
|
||||||
|
|
||||||
|
margin-top: 1160px;
|
||||||
|
margin-left: 51px;
|
||||||
|
font-size: 18px;
|
||||||
|
font-family: Courier;
|
||||||
|
letter-spacing: 0pt;
|
||||||
|
text-align: left;
|
||||||
|
color: black;
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
background: transparent;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.mobile.icon {
|
||||||
|
color: blue;
|
||||||
|
position: fixed;
|
||||||
|
margin-left: 16px;
|
||||||
|
margin-top: 210px;
|
||||||
|
width: 12px;
|
||||||
|
height: 19px;
|
||||||
|
border-radius: 2px;
|
||||||
|
border: solid 1px currentColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mobile.icon:before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 5px;
|
||||||
|
top: 1px;
|
||||||
|
width: 2px;
|
||||||
|
height: 1px;
|
||||||
|
background-color: currentColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mobile.icon:after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
bottom: 1px;
|
||||||
|
left: 5px;
|
||||||
|
height: 2px;
|
||||||
|
width: 2px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: currentColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tablet.icon {
|
||||||
|
color: blue;
|
||||||
|
position: fixed;
|
||||||
|
margin-left: 15px;
|
||||||
|
margin-top: 240px;
|
||||||
|
width: 15px;
|
||||||
|
height: 17px;
|
||||||
|
border-radius: 2px;
|
||||||
|
border: solid 1px currentColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tablet.icon:before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 1px;
|
||||||
|
left: 0;
|
||||||
|
height: 13px;
|
||||||
|
width: 15px;
|
||||||
|
border-top: solid 1px currentColor;
|
||||||
|
border-bottom: solid 1px currentColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tablet.icon:after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0px;
|
||||||
|
left: 6px;
|
||||||
|
width: 3px;
|
||||||
|
height: 1px;
|
||||||
|
background-color: currentColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
.laptop.icon {
|
||||||
|
color: blue;
|
||||||
|
position: fixed;
|
||||||
|
margin-left: 16px;
|
||||||
|
margin-top: 269px;
|
||||||
|
width: 12px;
|
||||||
|
height: 8px;
|
||||||
|
border-radius: 2px;
|
||||||
|
border: solid 1px currentColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
.laptop.icon:before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: -4px;
|
||||||
|
bottom: -5px;
|
||||||
|
width: 18px;
|
||||||
|
height: 1px;
|
||||||
|
border-radius: 0 0 2px 2px;
|
||||||
|
border: solid 1px currentColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#rotate {
|
||||||
|
|
||||||
|
transform: rotate(270deg);
|
||||||
|
color: blue;
|
||||||
|
font-family: Courier;
|
||||||
|
font-size: 12px;
|
||||||
|
text-decoration: underline;
|
||||||
|
margin-left: 1150px;
|
||||||
|
margin-top: 225px;
|
||||||
|
position: fixed;
|
||||||
|
background: transparent;
|
||||||
|
|
||||||
|
/* Safari */
|
||||||
|
-webkit-transform: rotate(-90deg);
|
||||||
|
|
||||||
|
/* Firefox */
|
||||||
|
-moz-transform: rotate(-90deg);
|
||||||
|
|
||||||
|
/* IE */
|
||||||
|
-ms-transform: rotate(-90deg);
|
||||||
|
|
||||||
|
/* Opera */
|
||||||
|
-o-transform: rotate(-90deg);
|
||||||
|
|
||||||
|
/* Internet Explorer */
|
||||||
|
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</style>
|
@ -1 +1,22 @@
|
|||||||
FLOPPYLEFT - 2017
|
Nietzsche Public License v0.6
|
||||||
|
|
||||||
|
Copyright <2017> <Giulia de Giovanelli>
|
||||||
|
|
||||||
|
Copyright, like God, is dead. Let its corpse serve only to guard against its
|
||||||
|
resurrection. You may do anything with this work that copyright law would
|
||||||
|
normally restrict so long as you retain the above notice(s), this license, and
|
||||||
|
the following misquote and disclaimer of warranty with all redistributed
|
||||||
|
copies, modified or verbatim. You may also replace this license with the Open
|
||||||
|
Works License, available at the http://owl.apotheon.org website.
|
||||||
|
|
||||||
|
Copyright is dead. Copyright remains dead, and we have killed it. How
|
||||||
|
shall we comfort ourselves, the murderers of all murderers? What was
|
||||||
|
holiest and mightiest of all that the world of censorship has yet owned has
|
||||||
|
bled to death under our knives: who will wipe this blood off us? What
|
||||||
|
water is there for us to clean ourselves? What festivals of atonement,
|
||||||
|
what sacred games shall we have to invent? Is not the greatness of this
|
||||||
|
deed too great for us? Must we ourselves not become authors simply to
|
||||||
|
appear worthy of it?
|
||||||
|
- apologies to Friedrich Wilhelm Nietzsche
|
||||||
|
|
||||||
|
No warranty is implied by distribution under the terms of this license.
|
@ -1,62 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
import cgi, jinja2, os, json, re
|
|
||||||
import cgitb; cgitb.enable()
|
|
||||||
from jinja2 import Template
|
|
||||||
|
|
||||||
# Directory => ITEMS list (all files with a timestamp name, grouped)
|
|
||||||
ff = os.listdir("clips")
|
|
||||||
tpat = re.compile(r"^(\d\d\d\d)-(\d\d)-(\d\d)-(\d\d)-(\d\d)-(\d\d)")
|
|
||||||
items = {}
|
|
||||||
for f in ff:
|
|
||||||
base, ext = os.path.splitext(f)
|
|
||||||
ext = ext[1:]
|
|
||||||
m = tpat.match(f)
|
|
||||||
if m:
|
|
||||||
t = m.group(0)
|
|
||||||
if t not in items:
|
|
||||||
items[t] = {}
|
|
||||||
items[t][ext] = f
|
|
||||||
|
|
||||||
items = [items[key] for key in sorted(items, reverse=True)]
|
|
||||||
for i in items[1:]:
|
|
||||||
for f in i.items():
|
|
||||||
print "deleting ", f
|
|
||||||
|
|
||||||
# dump the data (debugging)
|
|
||||||
# print "Content-type: text/plain"
|
|
||||||
# print ""
|
|
||||||
# print json.dumps(items, indent=2)
|
|
||||||
|
|
||||||
# Output template with items
|
|
||||||
print "Content-type: text/html"
|
|
||||||
print ""
|
|
||||||
print Template(u"""<html>
|
|
||||||
<head>
|
|
||||||
<title>ADOPT A WALK</title>
|
|
||||||
<style type="text/css">
|
|
||||||
div.movie {
|
|
||||||
border: 20px solid black;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
div.movie img {
|
|
||||||
width: 400px;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<header>
|
|
||||||
<p>head<p>
|
|
||||||
<img src="../images/header.png" width="100%"/>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
{% for i in items %}
|
|
||||||
<div class="movie"><a href="../clips/{{i.mp4}}"><img src="../clips/{{i.jpg}}" /></a> </div>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
<div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>""").render(items=items).encode("utf-8")
|
|
Before Width: | Height: | Size: 499 KiB |
Before Width: | Height: | Size: 99 KiB |
@ -1,12 +0,0 @@
|
|||||||
#N canvas 296 315 450 300 10;
|
|
||||||
#X obj 37 104 osc~ 440;
|
|
||||||
#X obj 37 146 dac~;
|
|
||||||
#X obj 161 74 loadbang;
|
|
||||||
#X msg 161 111 \; pd dsp 1;
|
|
||||||
#X obj 37 36 netreceive 3000;
|
|
||||||
#X obj 46 62 print;
|
|
||||||
#X connect 0 0 1 0;
|
|
||||||
#X connect 0 0 1 1;
|
|
||||||
#X connect 2 0 3 0;
|
|
||||||
#X connect 4 0 5 0;
|
|
||||||
#X connect 4 0 0 0;
|
|
@ -1,12 +1,7 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/python
|
||||||
|
|
||||||
import os, random, time
|
import subprocess
|
||||||
|
|
||||||
while True:
|
|
||||||
freq = str(random.randint(0,10)*110)
|
|
||||||
print(freq)
|
|
||||||
os.system('echo "'+freq+';" | pdsend 3000')
|
|
||||||
time.sleep(0.25)
|
|
||||||
|
|
||||||
|
subprocess.call(["bash", "scripts/voiceguide.sh"], cwd="/media/floppy")
|
||||||
|
|
||||||
|
|
||||||
|
@ -0,0 +1,79 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import cgi, jinja2, os, json, re
|
||||||
|
import cgitb; cgitb.enable()
|
||||||
|
from jinja2 import Template
|
||||||
|
|
||||||
|
# Directory => ITEMS list (all files with a timestamp name, grouped)
|
||||||
|
path = "/var/www/static/gait"
|
||||||
|
try:
|
||||||
|
ff = os.listdir(path)
|
||||||
|
except OSError:
|
||||||
|
ff = []
|
||||||
|
tpat = re.compile(r"^(\d\d\d\d)-(\d\d)-(\d\d)-(\d\d)-(\d\d)-(\d\d)")
|
||||||
|
items = {}
|
||||||
|
for f in ff:
|
||||||
|
base, ext = os.path.splitext(f)
|
||||||
|
ext = ext[1:]
|
||||||
|
m = tpat.match(f)
|
||||||
|
if m:
|
||||||
|
t = m.group(0)
|
||||||
|
if t not in items:
|
||||||
|
items[t] = {}
|
||||||
|
items[t][ext] = f
|
||||||
|
|
||||||
|
items = [items[key] for key in sorted(items, reverse=True)]
|
||||||
|
for i in items[10:]:
|
||||||
|
for f in i.items():
|
||||||
|
print "deleting ", f
|
||||||
|
fp = os.path.join(path, f)
|
||||||
|
os.unlink(fp)
|
||||||
|
# dump the data (debugging)
|
||||||
|
# print "Content-type: text/plain"
|
||||||
|
# print ""
|
||||||
|
# print json.dumps(items, indent=2)
|
||||||
|
|
||||||
|
# Output template with items
|
||||||
|
print "Content-type: text/html"
|
||||||
|
print ""
|
||||||
|
print Template(u"""<html>
|
||||||
|
<head>
|
||||||
|
<title>ADOPT A WALK</title>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<link rel="stylesheet" type="text/css" href="../styles/main.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="wrappper">
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<img src="../images/headertr3.png" width="100%"/>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="firstline">
|
||||||
|
<p> Here you can find footage of your walks.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<img src="../images/camera.png" />
|
||||||
|
|
||||||
|
<div class="secondline">
|
||||||
|
<p> Steal a walk from another person's video. Download it. </p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="thirdline">
|
||||||
|
<p> Promise me, you're gonna start using this walk for the rest of the day. </p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<img src="../images/cover.png" />
|
||||||
|
|
||||||
|
|
||||||
|
<div class="movies">
|
||||||
|
{% for i in items %}
|
||||||
|
<a href="/static/gait/{{i.mp4}}"><img src="/static/gait/{{i.jpg}}" /></a>
|
||||||
|
<p>{{i.mp4}}</p>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>""").render(items=items).encode("utf-8")
|
After Width: | Height: | Size: 89 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 69 KiB |
@ -1 +1,8 @@
|
|||||||
GREAT JOB!
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="refresh" content="0;url=/cgi-bin/index.cgi" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<a href="/cgi-bin/index.cgi">start</a>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
@ -0,0 +1,104 @@
|
|||||||
|
@font-face: {
|
||||||
|
font-family: "sporting_grotesque_gras-webfont";
|
||||||
|
src: url("../fonts/sporting_grotesque_normal.otf");
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-image: url("../images/background.png");
|
||||||
|
background-repeat: repeat;
|
||||||
|
font-family: "Sporting Grotesque";
|
||||||
|
}
|
||||||
|
|
||||||
|
#wrapper {
|
||||||
|
max-width: 900px;
|
||||||
|
display: block;
|
||||||
|
margin: 0px auto;
|
||||||
|
padding:0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
header img{
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.movies img:nth-child(1) {
|
||||||
|
margin-top: 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.movies img {
|
||||||
|
display: block;
|
||||||
|
width: 632px;
|
||||||
|
height: auto;
|
||||||
|
margin: 25px auto;
|
||||||
|
box-shadow: 0px 0px 64px 13px rgba(255,255,255,1);
|
||||||
|
}
|
||||||
|
|
||||||
|
div.movies p {
|
||||||
|
color: white;
|
||||||
|
text-align: center;
|
||||||
|
font-family: "Sporting Grotesque";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
div.firstline, div.secondline, div.thirdline {
|
||||||
|
|
||||||
|
max-width: 100%;
|
||||||
|
border: 10px solid white;
|
||||||
|
padding-top: 3px;
|
||||||
|
padding-bottom: 3px;
|
||||||
|
padding-left: 50px;
|
||||||
|
padding-right: 50px;
|
||||||
|
margin: 37px 15px 37px !important;
|
||||||
|
font-size: 200%;
|
||||||
|
color: white;
|
||||||
|
text-align: center;
|
||||||
|
text-shadow: 1px 1px 2px white;
|
||||||
|
line-height:110%;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*div.secondline {
|
||||||
|
width: 80%;
|
||||||
|
border: 10px solid white;
|
||||||
|
padding-top: 3px;
|
||||||
|
padding-bottom: 3px;
|
||||||
|
padding-left: 50px;
|
||||||
|
padding-right: 50px;
|
||||||
|
margin:25px;
|
||||||
|
font-size: 200%;
|
||||||
|
color: white;
|
||||||
|
text-align: center;
|
||||||
|
text-shadow: 1px 1px 2px white;
|
||||||
|
line-height:110%;
|
||||||
|
margin: auto;
|
||||||
|
margin-top:17px;
|
||||||
|
margin-bottom:17px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.thirdline {
|
||||||
|
width: 80%;
|
||||||
|
border: 10px solid white;
|
||||||
|
padding-top: 3px;
|
||||||
|
padding-bottom: 3px;
|
||||||
|
padding-left: 50px;
|
||||||
|
padding-right: 50px;
|
||||||
|
margin: 25px;
|
||||||
|
font-size: 200%;
|
||||||
|
color: white;
|
||||||
|
text-align: center;
|
||||||
|
text-shadow: 1px 1px 2px white;
|
||||||
|
line-height:110%;
|
||||||
|
margin: auto;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
div.cover {
|
||||||
|
float: center;
|
||||||
|
margin: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
img {
|
||||||
|
display: block;
|
||||||
|
margin: auto;
|
||||||
|
max-width: 900px;
|
||||||
|
border: 10px solid white;
|
||||||
|
}
|
@ -1,17 +0,0 @@
|
|||||||
#! /usr/bin/env python
|
|
||||||
import subprocess
|
|
||||||
from time import sleep
|
|
||||||
|
|
||||||
# requires: espeak to be installed
|
|
||||||
|
|
||||||
waittimes = [1,2,1,4,1,4,1,4,1,4]
|
|
||||||
|
|
||||||
f=open("instructions.txt","r")
|
|
||||||
txt=f.readlines()
|
|
||||||
|
|
||||||
for i, line in enumerate(txt):
|
|
||||||
waittime = waittimes[i]
|
|
||||||
print i, waittime #, line,
|
|
||||||
subprocess.call(["espeak", line, "-v", "en"]) # character speaks: his/her line
|
|
||||||
sleep(waittime) # make pause after each text line
|
|
||||||
|
|
@ -0,0 +1,84 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from __future__ import print_function
|
||||||
|
import cv2, os, sys, time
|
||||||
|
import numpy as np
|
||||||
|
from argparse import ArgumentParser
|
||||||
|
from picamera.array import PiRGBArray
|
||||||
|
from picamera import PiCamera
|
||||||
|
|
||||||
|
|
||||||
|
p = ArgumentParser("")
|
||||||
|
p.add_argument("--video", type=int, default=0, help="video, default: 0")
|
||||||
|
p.add_argument("--output", default=None, help="path to save movie, default: None (show live)")
|
||||||
|
p.add_argument("--width", type=int, default=160, help="pre-detect resize width")
|
||||||
|
p.add_argument("--height", type=int, default=128, help="pre-detect resize height")
|
||||||
|
p.add_argument("--fourcc", default="XVID", help="MJPG,mp4v,XVID")
|
||||||
|
p.add_argument("--framerate", type=float, default=25, help="output frame rate")
|
||||||
|
p.add_argument("--show", default=False, action="store_true")
|
||||||
|
p.add_argument("--frames", type=int, default=100)
|
||||||
|
args = p.parse_args()
|
||||||
|
|
||||||
|
fourcc = None
|
||||||
|
#cam = cv2.VideoCapture(args.video)
|
||||||
|
#cam.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, args.width)
|
||||||
|
#cam.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, args.height)
|
||||||
|
|
||||||
|
if args.output:
|
||||||
|
try:
|
||||||
|
fourcc = cv2.cv.CV_FOURCC(*args.fourcc)
|
||||||
|
except AttributeError:
|
||||||
|
fourcc = cv2.VideoWriter_fourcc(*args.fourcc)
|
||||||
|
out = cv2.VideoWriter()
|
||||||
|
out.open(args.output, fourcc, args.framerate, (args.width, args.height))
|
||||||
|
else:
|
||||||
|
out = None
|
||||||
|
|
||||||
|
print ("Starting camera", file=sys.stderr)
|
||||||
|
cam = PiCamera()
|
||||||
|
framesize = (args.width, args.height)
|
||||||
|
cam.resolution = framesize
|
||||||
|
cam.framerate = 32
|
||||||
|
rawCapture = PiRGBArray(cam, size=framesize)
|
||||||
|
# allow the camera to warmup
|
||||||
|
time.sleep(0.25)
|
||||||
|
|
||||||
|
count = 0
|
||||||
|
try:
|
||||||
|
# while True:
|
||||||
|
# ret, frame = cam.read()
|
||||||
|
for frame in cam.capture_continuous(rawCapture, format="bgr", use_video_port=True):
|
||||||
|
# print "GRAB FRAME"
|
||||||
|
frame = frame.array
|
||||||
|
|
||||||
|
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
||||||
|
ret, t= cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
|
||||||
|
frame = cv2.cvtColor(t, cv2.COLOR_GRAY2BGR)
|
||||||
|
# flow = cv2.calcOpticalFlowFarneback(prevgray, gray, 0.5, 3, 15, 3, 5, 1.2, 0)
|
||||||
|
# prevgray = gray
|
||||||
|
|
||||||
|
# clear the stream in preparation for the next frame (important for picamera!)
|
||||||
|
rawCapture.truncate(0)
|
||||||
|
|
||||||
|
if out != None:
|
||||||
|
out.write(frame)
|
||||||
|
count += 1
|
||||||
|
if args.show:
|
||||||
|
cv2.imshow('display', frame)
|
||||||
|
if cv2.waitKey(5) & 0xFF == ord('q'):
|
||||||
|
break
|
||||||
|
if args.frames != None:
|
||||||
|
if (count >= args.frames):
|
||||||
|
break
|
||||||
|
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
pass
|
||||||
|
|
||||||
|
print ("\nCleaning up... Wrote", count, "frames")
|
||||||
|
if out:
|
||||||
|
out.release()
|
||||||
|
if args.show:
|
||||||
|
cv2.destroyAllWindows()
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,73 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from __future__ import print_function
|
||||||
|
import cv2, os, sys, time
|
||||||
|
import numpy as np
|
||||||
|
from argparse import ArgumentParser
|
||||||
|
|
||||||
|
|
||||||
|
p = ArgumentParser("")
|
||||||
|
p.add_argument("--video", type=int, default=0, help="video, default: 0")
|
||||||
|
p.add_argument("--output", default=None, help="path to save movie, default: None (show live)")
|
||||||
|
p.add_argument("--width", type=int, default=640, help="pre-detect resize width")
|
||||||
|
p.add_argument("--height", type=int, default=480, help="pre-detect resize height")
|
||||||
|
p.add_argument("--fourcc", default="XVID", help="MJPG,mp4v,XVID")
|
||||||
|
p.add_argument("--framerate", type=float, default=25, help="output frame rate")
|
||||||
|
p.add_argument("--show", default=False, action="store_true")
|
||||||
|
p.add_argument("--frames", type=int, default=100)
|
||||||
|
args = p.parse_args()
|
||||||
|
|
||||||
|
fourcc = None
|
||||||
|
cam = cv2.VideoCapture(args.video)
|
||||||
|
cam.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, args.width)
|
||||||
|
cam.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, args.height)
|
||||||
|
|
||||||
|
if args.output:
|
||||||
|
try:
|
||||||
|
fourcc = cv2.cv.CV_FOURCC(*args.fourcc)
|
||||||
|
except AttributeError:
|
||||||
|
fourcc = cv2.VideoWriter_fourcc(*args.fourcc)
|
||||||
|
out = cv2.VideoWriter()
|
||||||
|
out.open(args.output, fourcc, args.framerate, (args.width, args.height))
|
||||||
|
else:
|
||||||
|
out = None
|
||||||
|
|
||||||
|
while True:
|
||||||
|
ret, prev = cam.read()
|
||||||
|
prevgray = cv2.cvtColor(prev, cv2.COLOR_BGR2GRAY)
|
||||||
|
if prevgray.shape == (args.height, args.width):
|
||||||
|
break
|
||||||
|
|
||||||
|
count = 0
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
ret, frame = cam.read()
|
||||||
|
|
||||||
|
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
||||||
|
ret, t= cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
|
||||||
|
frame = cv2.cvtColor(t, cv2.COLOR_GRAY2BGR)
|
||||||
|
# flow = cv2.calcOpticalFlowFarneback(prevgray, gray, 0.5, 3, 15, 3, 5, 1.2, 0)
|
||||||
|
# prevgray = gray
|
||||||
|
|
||||||
|
if out != None:
|
||||||
|
out.write(frame)
|
||||||
|
count += 1
|
||||||
|
if args.show:
|
||||||
|
cv2.imshow('display', frame)
|
||||||
|
if cv2.waitKey(5) & 0xFF == ord('q'):
|
||||||
|
break
|
||||||
|
if args.frames != None:
|
||||||
|
if (count >= args.frames):
|
||||||
|
break
|
||||||
|
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
pass
|
||||||
|
|
||||||
|
print ("\nCleaning up... Wrote", count, "frames")
|
||||||
|
if out:
|
||||||
|
out.release()
|
||||||
|
if args.show:
|
||||||
|
cv2.destroyAllWindows()
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,95 +1,59 @@
|
|||||||
|
# ensure the record folder exists
|
||||||
|
mkdir -p /var/www/static/gait
|
||||||
|
|
||||||
espeak "Gait analysis number one." -v en
|
v=-v en-gb -s 150
|
||||||
|
espeak "Tetra Gamma Gait Analysis " -v en-gb -s 150
|
||||||
|
|
||||||
|
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
espeak "Be ready for the security check." -v en-gb -s 150
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
||||||
espeak "Please state your name:" -v en
|
espeak "Please state your name:" -v en-gb -s 150
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
||||||
espeak "Position yourself 2 to 3 meters away from the Tetra Gamma Circulaire." -v en
|
espeak "Position yourself 2 to 3 meters away from me." -v en-gb -s 150
|
||||||
sleep 2
|
sleep 2
|
||||||
|
|
||||||
espeak "Walk towards the Tetra Gamma Circulaire in a straight line ." -v en
|
espeak "Walk towards me in a straight line ." -v en-gb -s 150
|
||||||
sleep 0.2
|
sleep 0.1
|
||||||
|
|
||||||
play sweep_up.wav
|
mpv sweep_up.wav
|
||||||
|
|
||||||
basename=clips/$(date +%Y-%m-%d-%H-%M-%S)
|
basename=/var/www/static/gait/$(date +%Y-%m-%d-%H-%M-%S)
|
||||||
echo recording $basename.avi...
|
echo recording $basename.avi...
|
||||||
scripts/black2.py --output $basename.avi --frames 50 --framerate 4 --width 320 --height 240
|
python scripts/recordwalk.py --output $basename.avi --frames 50 --framerate 4 --width 320 --height 240
|
||||||
# convert to mp4
|
# convert to mp4
|
||||||
ffmpeg -i $basename.avi -y $basename.mp4
|
ffmpeg -i $basename.avi -y $basename.mp4
|
||||||
# make a thumnail image
|
# make a thumnail image
|
||||||
ffmpeg -i $basename.avi -vframes 1 -ss 0.5 -y $basename.jpg
|
ffmpeg -i $basename.avi -vframes 1 -ss 0.5 -y $basename.jpg
|
||||||
# rm $basename.avi
|
# rm $basename.avi
|
||||||
|
|
||||||
play sweep_up.wav
|
mpv sweep_up.wav
|
||||||
|
|
||||||
espeak "Position yourself one meter away to the left of the Tetra Gamma Circulaire." -v en
|
espeak "Position yourself 2 to 3 meters away from me." -v en-gb -s 150
|
||||||
sleep 1
|
sleep 2
|
||||||
|
|
||||||
espeak "Walk from left to right in front of the Tetra Gamma Circulaire.
|
espeak "Walk towards me on a zig zag line.
|
||||||
" -v en
|
" -v en-gb -s150
|
||||||
sleep 0.2
|
sleep 0.1
|
||||||
|
|
||||||
play sweep_up.wav
|
mpv sweep_up.wav
|
||||||
|
|
||||||
basename=clips/$(date +%Y-%m-%d-%H-%M-%S)
|
basename=/var/www/static/gait/$(date +%Y-%m-%d-%H-%M-%S)
|
||||||
echo recording $basename.avi...
|
echo recording $basename.avi...
|
||||||
scripts/black2.py --output $basename.avi --frames 50 --framerate 4 --width 320 --height 240
|
python scripts/recordwalk.py --output $basename.avi --frames 50 --framerate 4 --width 320 --height 240
|
||||||
# convert to mp4
|
# convert to mp4
|
||||||
ffmpeg -i $basename.avi -y $basename.mp4
|
ffmpeg -i $basename.avi -y $basename.mp4
|
||||||
# make a thumnail image
|
# make a thumnail image
|
||||||
ffmpeg -i $basename.avi -vframes 1 -ss 0.5 -y $basename.jpg
|
ffmpeg -i $basename.avi -vframes 1 -ss 0.5 -y $basename.jpg
|
||||||
# rm $basename.avi
|
# rm $basename.avi
|
||||||
|
|
||||||
play sweep_up.wav
|
mpv sweep_up.wav
|
||||||
|
|
||||||
espeak "Turn your back to the Tetra Gamma Circulaire." -v en
|
espeak "Thank you for your cooperation" -v en-gb -s175
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
||||||
espeak "Walk away from the Tetra Gamma Circulaire.
|
mpv sweep_up.wav
|
||||||
" -v en
|
|
||||||
sleep 0.2
|
|
||||||
|
|
||||||
play sweep_up.wav
|
|
||||||
|
|
||||||
basename=clips/$(date +%Y-%m-%d-%H-%M-%S)
|
|
||||||
echo recording $basename.avi...
|
|
||||||
scripts/black2.py --output $basename.avi --frames 50 --framerate 4 --width 320 --height 240
|
|
||||||
# convert to mp4
|
|
||||||
ffmpeg -i $basename.avi -y $basename.mp4
|
|
||||||
# make a thumnail image
|
|
||||||
ffmpeg -i $basename.avi -vframes 1 -ss 0.5 -y $basename.jpg
|
|
||||||
# rm $basename.avi
|
|
||||||
|
|
||||||
play sweep_up.wav
|
|
||||||
espeak "Position yourself 2 to 3 meters away from the Tetra Gamma Circulaire." -v en
|
|
||||||
sleep 1
|
|
||||||
|
|
||||||
espeak "Walk towards the Tetra Gamma Circulaire on a zig zag line.
|
|
||||||
" -v en
|
|
||||||
sleep 0.2
|
|
||||||
|
|
||||||
play sweep_up.wav
|
|
||||||
|
|
||||||
basename=clips/$(date +%Y-%m-%d-%H-%M-%S)
|
|
||||||
echo recording $basename.avi...
|
|
||||||
scripts/black2.py --output $basename.avi --frames 50 --framerate 4 --width 320 --height 240
|
|
||||||
# convert to mp4
|
|
||||||
ffmpeg -i $basename.avi -y $basename.mp4
|
|
||||||
# make a thumnail image
|
|
||||||
ffmpeg -i $basename.avi -vframes 1 -ss 0.5 -y $basename.jpg
|
|
||||||
# rm $basename.avi
|
|
||||||
|
|
||||||
play sweep_up.wav
|
|
||||||
|
|
||||||
# subprocess.call(["espeak", "Please state your name:", "-v", "en"])
|
|
||||||
# sleep(2)
|
|
||||||
# Position yourself 2 to 3 meters away from the Tetra Gamma Circulaire.
|
|
||||||
# Walk towards the Tetra Gamma Circulaire in a straight line .
|
|
||||||
# Position yourself one meter away to the left of the Tetra Gamma Circulaire.
|
|
||||||
# Walk from left to right in front of the Tetra Gamma Circulaire.
|
|
||||||
# Turn your back to the Tetra Gamma Circulaire.
|
|
||||||
# Walk away from the Tetra Gamma Circulaire.
|
|
||||||
# Position yourself 2 to 3 meters away from the Tetra Gamma Circulaire.
|
|
||||||
# Wal
|
|
@ -1,12 +1,6 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
import os, random, time
|
import subprocess
|
||||||
|
|
||||||
while True:
|
|
||||||
freq = str(random.randint(0,10)*110)
|
|
||||||
print(freq)
|
|
||||||
os.system('echo "'+freq+';" | pdsend 3000')
|
|
||||||
time.sleep(0.25)
|
|
||||||
|
|
||||||
|
|
||||||
|
subprocess.call(["mpv", "inthemood.mp3", "--loop", "inf", "--volume", "25"], cwd="/media/floppy")
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 658 B After Width: | Height: | Size: 658 B |
Before Width: | Height: | Size: 976 B After Width: | Height: | Size: 976 B |
Before Width: | Height: | Size: 689 B After Width: | Height: | Size: 689 B |
Before Width: | Height: | Size: 854 B After Width: | Height: | Size: 854 B |
Before Width: | Height: | Size: 727 B After Width: | Height: | Size: 727 B |
Before Width: | Height: | Size: 793 B After Width: | Height: | Size: 793 B |
Before Width: | Height: | Size: 604 B After Width: | Height: | Size: 604 B |
Before Width: | Height: | Size: 652 B After Width: | Height: | Size: 652 B |
Before Width: | Height: | Size: 690 B After Width: | Height: | Size: 690 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.9 KiB |
@ -1 +1,128 @@
|
|||||||
GREAT JOB!
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title> Rock Step - Triple Step - Triple Step </title>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin-left: 20;
|
||||||
|
margin-right: 20;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-family: sans-serif, Avenir, 'Poiret One' ;
|
||||||
|
font: 8px;
|
||||||
|
/* font size and typeface not working */
|
||||||
|
text-align: center;
|
||||||
|
text-transform: capitalize;
|
||||||
|
color: rgb(61, 61, 92);
|
||||||
|
}
|
||||||
|
|
||||||
|
.responsive {
|
||||||
|
padding: 0px;
|
||||||
|
float: left;
|
||||||
|
width: 12.5%;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 700px){
|
||||||
|
.responsive {
|
||||||
|
width: 24.99999%;
|
||||||
|
margin: 6px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 320px){
|
||||||
|
.responsive {
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
form.buttons {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
form.buttons input {
|
||||||
|
width: 150px;
|
||||||
|
height: 150px;
|
||||||
|
/*hide the labels*/
|
||||||
|
font-size: 0;
|
||||||
|
line-height: 0;
|
||||||
|
border: 0;
|
||||||
|
margin: ;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!--
|
||||||
|
/* For devices smaller than 400px: */
|
||||||
|
body {
|
||||||
|
background-image: url('img_smallflower.jpg');
|
||||||
|
}
|
||||||
|
|
||||||
|
/* For devices 400px and larger: */
|
||||||
|
@media only screen and (min-device-width: 400px) {
|
||||||
|
body {
|
||||||
|
background-image: url('img_flowers.jpg');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
-->
|
||||||
|
|
||||||
|
<h1> rock step - triple step - triple step </h1>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<form action="cgi-bin/play.cgi" class="buttons">
|
||||||
|
<input type="submit" name="p" value="BasicTurn.mp3" style="background:url(images/choreology1-BasicTurn.svg) no-repeat;" />
|
||||||
|
<input type="submit" name="p" value="Follow.mp3" style="background:url(images/choreology2-Follow.svg) no-repeat;" />
|
||||||
|
|
||||||
|
<input type="submit" name="p" value="AmericanSpin.mp3" style="background:url(images/choreology3-AmericanSpin.svg) no-repeat;" />
|
||||||
|
<input type="submit" name="p" value="Bump.mp3" style="background:url(images/choreology4-Bump.svg) no-repeat;" />
|
||||||
|
|
||||||
|
<input type="submit" name="p" value="StopAndGo.mp3" style="background:url(images/choreology5-StopAndGo.svg) no-repeat;" />
|
||||||
|
<input type="submit" name="p" value="Windmill.mp3" style="background:url(images/choreology6-Windmill.svg) no-repeat;" />
|
||||||
|
|
||||||
|
<input type="submit" name="p" value="SpanishArms.mp3" style="background:url(images/choreology7-SpanishArms.svg) no-repeat;" />
|
||||||
|
<input type="submit" name="p" value="Hucklebuck.mp3" style="background:url(images/choreology8-Hucklebuck.svg) no-repeat;" />
|
||||||
|
|
||||||
|
<!-- "Whip" of "The Whip" options - needs testing with music playing in the background
|
||||||
|
<input type="submit" name="p" value="TheWhip.mp3" style="background:url(images/choreology9-Whip.svg) no-repeat;" />
|
||||||
|
-->
|
||||||
|
<input type="submit" name="p" value="Whip.mp3" style="background:url(images/choreology9-Whip.svg) no-repeat;" />
|
||||||
|
<input type="submit" name="p" value="ChickenWalks.mp3" style="background:url(images/choreology10-ChickenWalks.svg) no-repeat;" />
|
||||||
|
<div class="tempo">
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<!-- no slider for the launch day
|
||||||
|
<input id="slider3" type="range" min ="100" max="180" step ="1" style="width: 640px" />
|
||||||
|
|
||||||
|
<input id="slider3" type="range" min ="100" max="180" step ="1" orient="vertical" style="-webkit-appearance: slider-vertical; writing-mode: bt-lr" />
|
||||||
|
-->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,128 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
|
|
||||||
<head>
|
|
||||||
<title> Rock-step - Triple-Step - Triple-Step </title>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<style>
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin-left: 20;
|
|
||||||
margin-right: 20;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-family: sans-serif, Avenir, 'Poiret One' ;
|
|
||||||
font: 8px;
|
|
||||||
/* font size and typeface not working */
|
|
||||||
text-align: center;
|
|
||||||
text-transform: capitalize;
|
|
||||||
color: rgb(61, 61, 92);
|
|
||||||
}
|
|
||||||
|
|
||||||
.responsive {
|
|
||||||
padding: 0px;
|
|
||||||
float: left;
|
|
||||||
width: 12.5%;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (max-width: 700px){
|
|
||||||
.responsive {
|
|
||||||
width: 24.99999%;
|
|
||||||
margin: 6px 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (max-width: 320px){
|
|
||||||
.responsive {
|
|
||||||
width: 50%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
form.buttons {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
form.buttons input {
|
|
||||||
width: 150px;
|
|
||||||
height: 150px;
|
|
||||||
/*hide the labels*/
|
|
||||||
font-size: 0;
|
|
||||||
line-height: 0;
|
|
||||||
border: 0;
|
|
||||||
margin: ;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<!--
|
|
||||||
/* For devices smaller than 400px: */
|
|
||||||
body {
|
|
||||||
background-image: url('img_smallflower.jpg');
|
|
||||||
}
|
|
||||||
|
|
||||||
/* For devices 400px and larger: */
|
|
||||||
@media only screen and (min-device-width: 400px) {
|
|
||||||
body {
|
|
||||||
background-image: url('img_flowers.jpg');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-->
|
|
||||||
|
|
||||||
<h1> rock-step - triple-step - triple-step </h1>
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
<form action="cgi-bin/play.cgi" class="buttons">
|
|
||||||
<input type="submit" name="p" value="BasicTurn.mp3" style="background:url(images/choreology1-BasicTurn.svg) no-repeat;" />
|
|
||||||
<input type="submit" name="p" value="Follow.mp3" style="background:url(images/choreology2-Follow.svg) no-repeat;" />
|
|
||||||
|
|
||||||
<input type="submit" name="p" value="AmericanSpin.mp3" style="background:url(images/choreology3-AmericanSpin.svg) no-repeat;" />
|
|
||||||
<input type="submit" name="p" value="Bump.mp3" style="background:url(images/choreology4-Bump.svg) no-repeat;" />
|
|
||||||
|
|
||||||
<input type="submit" name="p" value="StopAndGo.mp3" style="background:url(images/choreology5-StopAndGo.svg) no-repeat;" />
|
|
||||||
<input type="submit" name="p" value="Windmill.mp3" style="background:url(images/choreology6-Windmill.svg) no-repeat;" />
|
|
||||||
|
|
||||||
<input type="submit" name="p" value="SpanishArms.mp3" style="background:url(images/choreology7-SpanishArms.svg) no-repeat;" />
|
|
||||||
<input type="submit" name="p" value="Hucklebuck.mp3" style="background:url(images/choreology8-Hucklebuck.svg) no-repeat;" />
|
|
||||||
|
|
||||||
<!-- "Whip" of "The Whip" options - needs testing with music playing in the background
|
|
||||||
<input type="submit" name="p" value="TheWhip.mp3" style="background:url(images/choreology9-Whip.svg) no-repeat;" />
|
|
||||||
-->
|
|
||||||
<input type="submit" name="p" value="Whip.mp3" style="background:url(images/choreology9-Whip.svg) no-repeat;" />
|
|
||||||
<input type="submit" name="p" value="ChickenWalks.mp3" style="background:url(images/choreology10-ChickenWalks.svg) no-repeat;" />
|
|
||||||
<div class="tempo">
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
<!-- no slider for the launch day
|
|
||||||
<input id="slider3" type="range" min ="100" max="180" step ="1" style="width: 640px" />
|
|
||||||
|
|
||||||
<input id="slider3" type="range" min ="100" max="180" step ="1" orient="vertical" style="-webkit-appearance: slider-vertical; writing-mode: bt-lr" />
|
|
||||||
-->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</form>
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
|
||||||
|
|
||||||
</html>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
|||||||
|
A sonification of the Dutch elections March 2017; based on the hashtags #gestemd and #ikstem
|
||||||
|
Creative Commons - Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||||
|
|
||||||
|
You are free to:
|
||||||
|
Share — copy and redistribute the material in any medium or format
|
||||||
|
Adapt — remix, transform, and build upon the material
|
||||||
|
for any purpose, even commercially.
|
||||||
|
The licensor cannot revoke these freedoms as long as you follow the license terms.
|
||||||
|
|
||||||
|
Under the following terms:
|
||||||
|
Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
|
||||||
|
ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
|
||||||
|
|
||||||
|
More information can be found here:
|
||||||
|
https://creativecommons.org/licenses/by-sa/4.0/
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
TGC (Terra Gamma Circulaire) scripts and config files
|
||||||
|
WTFPL (Do What the Fuck You Want To Public License).
|
||||||
|
|
||||||
|
More information can be found here:
|
||||||
|
https://en.wikipedia.org/wiki/WTFPL
|
@ -0,0 +1,17 @@
|
|||||||
|
Author: Margreet Riphagen
|
||||||
|
Date: 2017
|
||||||
|
Publication: Special Issue #2
|
||||||
|
Publication launch: Tetra Gamma Circulaire #3 at De Player in Rotterdam (24th of March 2017)
|
||||||
|
|
||||||
|
Title: A sonification of the Dutch elections March 2017; based on the hashtags #gestemd and #ikstem
|
||||||
|
|
||||||
|
Description:
|
||||||
|
In the run up to the 2017 general elections in the Netherlands last Wednesday, the 15 of March 2017, a lot of Twitter traffic was generated. Literally millions of tweets were send that day over the Internet.
|
||||||
|
|
||||||
|
This sonification entails three kinds of scores;
|
||||||
|
a) for the whole tweet,
|
||||||
|
b) for the hashtag ikstem (#ikstem), and
|
||||||
|
c) for the hashtag gestemd (#gestemd).
|
||||||
|
|
||||||
|
Thanks to:
|
||||||
|
All PZI tutors, fellow students and Jan-Kees van Kampen
|
@ -0,0 +1,74 @@
|
|||||||
|
#N canvas 398 23 553 723 10;
|
||||||
|
#X declare -lib OSC;
|
||||||
|
#X declare -lib net;
|
||||||
|
#X text 372 516 attack;
|
||||||
|
#X text 443 517 release;
|
||||||
|
#X obj 374 653 line~;
|
||||||
|
#X obj 176 638 *~;
|
||||||
|
#X obj 373 536 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
|
||||||
|
-1;
|
||||||
|
#X obj 447 539 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
|
||||||
|
-1;
|
||||||
|
#X msg 383 564 stop;
|
||||||
|
#X text 70 455 #ikstem;
|
||||||
|
#X text 188 454 #gestemd;
|
||||||
|
#X obj 176 693 dac~;
|
||||||
|
#X obj 34 142 unpack s s s;
|
||||||
|
#X obj 19 243 print;
|
||||||
|
#X obj 133 345 select #ikstem both;
|
||||||
|
#X text 264 345 #gestemd;
|
||||||
|
#X obj 373 587 del 50;
|
||||||
|
#X msg 444 610 0 250;
|
||||||
|
#X msg 308 587 30 30;
|
||||||
|
#X obj 488 567 del 50;
|
||||||
|
#X msg 373 611 1 500;
|
||||||
|
#X obj 212 198 loadbang;
|
||||||
|
#X msg 211 244 \; pd dsp 1;
|
||||||
|
#X text 176 446 comment;
|
||||||
|
#X obj 118 585 *~ 10;
|
||||||
|
#X obj 34 48 udpreceive 127.0.0.1 4000;
|
||||||
|
#X obj 34 92 unpackOSC;
|
||||||
|
#X obj 364 23 import OSC;
|
||||||
|
#X obj 365 55 import net;
|
||||||
|
#X obj 149 148 print;
|
||||||
|
#X obj 182 539 osc~ 880;
|
||||||
|
#X msg 195 477 880;
|
||||||
|
#X obj 271 500 line~;
|
||||||
|
#X msg 266 434 1 10;
|
||||||
|
#X msg 318 494 0 30;
|
||||||
|
#X obj 318 451 b;
|
||||||
|
#X obj 318 473 delay 10;
|
||||||
|
#X msg 68 480 220;
|
||||||
|
#X text 16 34;
|
||||||
|
#X connect 3 0 9 0;
|
||||||
|
#X connect 3 0 9 1;
|
||||||
|
#X connect 4 0 16 0;
|
||||||
|
#X connect 4 0 14 0;
|
||||||
|
#X connect 4 0 17 0;
|
||||||
|
#X connect 5 0 15 0;
|
||||||
|
#X connect 5 0 6 0;
|
||||||
|
#X connect 6 0 14 0;
|
||||||
|
#X connect 10 1 12 0;
|
||||||
|
#X connect 12 0 35 0;
|
||||||
|
#X connect 12 0 31 0;
|
||||||
|
#X connect 12 1 29 0;
|
||||||
|
#X connect 12 1 31 0;
|
||||||
|
#X connect 14 0 18 0;
|
||||||
|
#X connect 15 0 2 0;
|
||||||
|
#X connect 16 0 2 0;
|
||||||
|
#X connect 17 0 15 0;
|
||||||
|
#X connect 18 0 2 0;
|
||||||
|
#X connect 19 0 20 0;
|
||||||
|
#X connect 23 0 24 0;
|
||||||
|
#X connect 24 0 10 0;
|
||||||
|
#X connect 24 0 27 0;
|
||||||
|
#X connect 28 0 22 0;
|
||||||
|
#X connect 28 0 3 0;
|
||||||
|
#X connect 29 0 28 0;
|
||||||
|
#X connect 30 0 3 1;
|
||||||
|
#X connect 31 0 30 0;
|
||||||
|
#X connect 31 0 33 0;
|
||||||
|
#X connect 32 0 30 0;
|
||||||
|
#X connect 33 0 34 0;
|
||||||
|
#X connect 34 0 32 0;
|
||||||
|
#X connect 35 0 28 0;
|
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 274 274"><defs><style>.cls-1{fill:#fff;}.cls-2{fill:#e21e27;}</style></defs><title>Asset 11</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M274,137a137,137,0,1,1-40.13-96.87A136.57,136.57,0,0,1,274,137Z"/><g id="aPOneC.tif"><path class="cls-2" d="M136.82,35.19h1.13a19.14,19.14,0,0,0,7.61,1.37c5.14.18,3.59-.54,7.05,3.57a1.74,1.74,0,0,1,.55,1.24c0,.28-.13.64.35.79.83.27.51.9.11,1.15-1,.67-1,1.8-1.55,2.77,2.54,1.19,5,2.34,7.44,3.46.55.25,1,.45.95,1.18-.19,1.93-.66,3.77-2.47,4.8a24.45,24.45,0,0,0-5.53,4.92,2.71,2.71,0,0,0-.89,1.71c0,3-2,4.42-4.28,5.73-6.84,3.89-13.39,8.26-20.09,12.39a7.61,7.61,0,0,0-1,.77.87.87,0,0,0-.34,1.11,1,1,0,0,0,1,.69,5.76,5.76,0,0,0,1,0c3-.39,5.86-1.15,8.8-1.69,5.06-.92,10.14-1.71,15.22-2.54,5.31-.86,10.61-1.78,15.94-2.53,8.4-1.18,16.83-2.09,25.28-2.8,1.26-.11,2.65-.52,3.6.93a4.34,4.34,0,0,1,2.73-1.61c5.19-.35,10.36-.84,15.52-1.51a3.45,3.45,0,0,1,2.46.16,15.58,15.58,0,0,0,7.51,2c1.31.07,2.6.31,3.91.48a1,1,0,0,1,.92.74,44.64,44.64,0,0,1,1.81,6.91c.32,2.4,1.25,4.58,3.5,5.76a1.5,1.5,0,0,1,.82,2.14c-.38,1.2-.84,2.39-1.24,3.59a4,4,0,0,0,.7,4c.22.29.54.54.52,1a26.74,26.74,0,0,1-5,4.71,13.92,13.92,0,0,0-4.76,5.6,2.24,2.24,0,0,1-1.25,1.25,29.5,29.5,0,0,1-5.87,1.77,11.55,11.55,0,0,0-4.62,1.86,18.8,18.8,0,0,1-9.08,3.74c-2.8.28-5.24,1.91-7.57,3.45-1.47,1-1.29,1.85.31,2.55a6.1,6.1,0,0,0,3.17.44,28.49,28.49,0,0,0,5.2-1.12,36.39,36.39,0,0,1,13.56-1.7c2,.14,3.9.49,5.87.54a10,10,0,0,1,6.45,2.31,12.65,12.65,0,0,0,2.86,1.77c3.77,1.73,5.67,4.57,5.47,8.76a14.31,14.31,0,0,0,1.18,6.43,4.8,4.8,0,0,1-1.44,6.07,24.24,24.24,0,0,0-4.95,5.87,24.16,24.16,0,0,1-8.11,7.94c-5.57,3.39-11.17,6.73-16.73,10.13-1.35.83-2.52,2.26-4,2.58-2.89.65-5,2.28-7.18,4.09-.81.69-1.64,1.78-2.68,1.66-2.27-.27-3.57,1-4.88,2.44a3.65,3.65,0,0,1-.68.48c-1.62,1.11-3.44,1.85-5.14,2.82a8.74,8.74,0,0,0-3.71,3.41,13.38,13.38,0,0,0,2.47.52A51.48,51.48,0,0,1,192,189.6a40.79,40.79,0,0,1,7.41,3.57c2.19,1.2,2.21,1.22,1.52,3.53a1.35,1.35,0,0,0,.53,1.76,9.25,9.25,0,0,1,3.47,6.06,7.93,7.93,0,0,1-.34,4.92c-.7.21-1-.25-1.33-.39s-.76-.32-1.14-.48a2.92,2.92,0,0,0-.13,3.68,1.54,1.54,0,0,1-.41,2.26c-1.7,1.55-3.29,3.2-5,4.74s-3.35,3.72-5.51,5A68.25,68.25,0,0,0,175.66,236a10.46,10.46,0,0,0-2.94,5.17,5.24,5.24,0,0,1-2.62,3.63,15.22,15.22,0,0,0-5.67,5.86,9.71,9.71,0,0,1-6,4.7c-2.23.63-4.6.18-6.79,1-1,.37-1.61.06-1.84-1-.37-1.66-1.3-2.17-3-1.86-2.32.42-3.2-.42-3.76-3-.12-.55-.17-1.11-.32-1.66a15.93,15.93,0,0,1-.78-6.92,2,2,0,0,0-.51-1.54,10.92,10.92,0,0,1-2.06-6.73c0-1.3.16-2.6.24-3.89-.13,0-.24,0-.31,0-.28.17-.54.37-.81.55a10.3,10.3,0,0,1-7.88,1.55c-3.13-.57-6.22-1.28-9.32-2a10,10,0,0,1-6.81-4.44,4.31,4.31,0,0,1-.92-3,12.73,12.73,0,0,0-2-9.36,6,6,0,0,1,0-6.53c1.69-2.8,3.43-5.58,5.19-8.34,5.82-9.13,14.1-15.89,22.22-22.77,1.23-1,2.7-1.84,3.38-3.63a14.18,14.18,0,0,0-3.39.31,34.26,34.26,0,0,0-6.69,2c-3.64,1.65-7.7,2.22-11.09,4.54-3.12,2.14-6.81,3.17-10.23,4.74-6.47,3-12.53,6.74-18.71,10.25-6,3.41-11.56,7.61-18.16,10.08a44.33,44.33,0,0,1-15,2.53,1.59,1.59,0,0,1-1.63-.85,6.65,6.65,0,0,0-2.71-2.6c-2.1-1.16-3-3-3.65-5.23-.74-2.72-.71-5.58-1.65-8.25-.65-1.85-1.43-3.66-2-5.53-.45-1.44-1.11-2.92-.35-4.49a17.62,17.62,0,0,1,2.22-3.57c1.16-1.4,2.32-2.8,2.52-4.74a3,3,0,0,1,1-1.67,58.35,58.35,0,0,1,5.75-5.36c8-6.16,16.48-11.78,24.85-17.48,3.55-2.41,7.44-4.35,10.8-7a96.06,96.06,0,0,1,11.91-7.76c3.68-2.09,7.44-4.07,10.55-7-2.63-2.71-2.53-4.19-7.16.33-2-1.15-2.41-1.16-4.21.36a3.66,3.66,0,0,1-2.84.85,12.81,12.81,0,0,0-5.79.66c-1.94.77-4,1.39-5.91,2.13-4.73,1.79-9.57,3.29-14.17,5.43-6.92,3.23-13.68,6.93-21.29,8.36a22.13,22.13,0,0,1-9.33-.14c-2.93-.7-5.57-2.11-8.31-3.23-3.1-1.27-3.5-2.17-3.12-5.55a12.7,12.7,0,0,0-.88-7.16,14.36,14.36,0,0,1-1.13-7,3.46,3.46,0,0,1,.89-2.41C35.88,114.77,38.1,112,41,110a7.31,7.31,0,0,0,1.58-1.38,119.41,119.41,0,0,1,16.68-16.8c4.81-4.1,9.73-8.08,13.74-13,.24-.3.73-.48.56-1-1.48-.32-3.11.46-4.4-.57a3,3,0,0,0-3.49-.2,7.93,7.93,0,0,1-6.11.66c-1.29-.47-2.35-1.48-4-1.52a9,9,0,0,0,.65-4.22A4.41,4.41,0,0,1,58,68.32c-.23-.47-.66-.55-1-.77-3.52-2.26-4.83-4.54-1.4-7.43.18-.15.33-.33.5-.49,5.5-5.24,12.23-8.28,19.32-10.64,3.44-1.15,6.9-2.24,10.37-3.31,2.62-.81,5.25-1.61,7.9-2.3,3.57-.92,7.16-1.77,10.75-2.58s7.11-1.56,10.74-2c2.65-.33,5.32-.41,7.94-1s5.09-.73,7.59-1.3C132.76,36,134.89,36.08,136.82,35.19Z"/></g></g></g></svg>
|
After Width: | Height: | Size: 4.2 KiB |
@ -1 +0,0 @@
|
|||||||
#N canvas 518 144 450 300 10;
|
|
@ -0,0 +1,19 @@
|
|||||||
|
Creative Commons License
|
||||||
|
|
||||||
|
This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
|
||||||
|
|
||||||
|
You are free to:
|
||||||
|
|
||||||
|
Share — copy and redistribute the material in any medium or format
|
||||||
|
Adapt — remix, transform, and build upon the material
|
||||||
|
for any purpose, even commercially.
|
||||||
|
The licensor cannot revoke these freedoms as long as you follow the license terms.
|
||||||
|
|
||||||
|
Under the following terms:
|
||||||
|
|
||||||
|
Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
|
||||||
|
No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
|
||||||
|
Notices:
|
||||||
|
|
||||||
|
You do not have to comply with the license for elements of the material in the public domain or where your use is permitted by an applicable exception or limitation.
|
||||||
|
No warranties are given. The license may not give you all of the permissions necessary for your intended use. For example, other rights such as publicity, privacy, or moral rights may limit how you use the material.
|
@ -0,0 +1,11 @@
|
|||||||
|
Author: Max Franklin
|
||||||
|
Date: 2017
|
||||||
|
Title: euclid
|
||||||
|
|
||||||
|
Description:
|
||||||
|
|
||||||
|
A chaotic software and hardware synthesiser and generative sequencer. Designed to explore improvisation, and musical interactivity.
|
||||||
|
|
||||||
|
To play, touch the metal contacts, connecting them. The more conductive you are, the more you will be able to affect the instrument.
|
||||||
|
|
||||||
|
The state of your composition is recorded, and displayed here as a downloadable score. Never to be played, nor heard again.
|
@ -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; }
|