fine-line folder changed location
@ -0,0 +1,2 @@
|
|||||||
|
gpu_mem=16
|
||||||
|
start_x=1
|
@ -0,0 +1,20 @@
|
|||||||
|
# Defaults for hostapd initscript
|
||||||
|
#
|
||||||
|
# See /usr/share/doc/hostapd/README.Debian for information about alternative
|
||||||
|
# methods of managing hostapd.
|
||||||
|
#
|
||||||
|
# Uncomment and set DAEMON_CONF to the absolute path of a hostapd configuration
|
||||||
|
# file and hostapd will be started during system boot. An example configuration
|
||||||
|
# file can be found at /usr/share/doc/hostapd/examples/hostapd.conf.gz
|
||||||
|
#
|
||||||
|
DAEMON_CONF="/etc/hostapd/hostapd.conf"
|
||||||
|
|
||||||
|
# Additional daemon options to be appended to hostapd command:-
|
||||||
|
# -d show more debug messages (-dd for even more)
|
||||||
|
# -K include key data in debug messages
|
||||||
|
# -t include timestamps in some debug messages
|
||||||
|
#
|
||||||
|
# Note that -B (daemon mode) and -P (pidfile) options are automatically
|
||||||
|
# configured by the init.d script and must not be added to DAEMON_OPTS.
|
||||||
|
#
|
||||||
|
#DAEMON_OPTS=""
|
@ -0,0 +1,4 @@
|
|||||||
|
interface=wlan0
|
||||||
|
dhcp-range=10.10.10.11,10.10.10.254,12h
|
||||||
|
address=/#/10.10.10.10
|
||||||
|
no-resolv
|
@ -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,6 @@
|
|||||||
|
interface=wlan0
|
||||||
|
driver=nl80211
|
||||||
|
ssid=TGC #3
|
||||||
|
hw_mode=g
|
||||||
|
channel=6
|
||||||
|
|
@ -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
|
@ -0,0 +1,10 @@
|
|||||||
|
auto lo
|
||||||
|
iface lo inet loopback
|
||||||
|
|
||||||
|
auto eth0
|
||||||
|
iface eth0 inet dhcp
|
||||||
|
|
||||||
|
auto wlan0
|
||||||
|
iface wlan0 inet static
|
||||||
|
address 10.10.10.10
|
||||||
|
netmask 255.255.255.0
|
@ -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;
|
|
@ -0,0 +1,20 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script language="javascript" type="text/javascript" src="libraries/p5.min.js"></script>
|
||||||
|
<!-- uncomment lines below to include extra p5 libraries -->
|
||||||
|
<script language="javascript" src="libraries/p5.dom.min.js"></script>
|
||||||
|
<script language="javascript" src="libraries/p5.sound.min.js"></script>
|
||||||
|
<script language="javascript" type="text/javascript" src="sketch.js"></script>
|
||||||
|
<!-- this line removes any default padding and style. you might only need one of these values set. -->
|
||||||
|
<style> body {padding: 0; margin: 0;} </style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,267 @@
|
|||||||
|
var carrier; // this is the carrierillator we will hear
|
||||||
|
var modulator; // this carrierillator will modulate the amplitude of the carrier
|
||||||
|
var fft; // we'll visualize the waveform
|
||||||
|
|
||||||
|
var opac;
|
||||||
|
var carrier;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function getRandomArbitrary(min, max) {
|
||||||
|
return Math.random() * (max - min) + min;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function setup() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
createCanvas(innerWidth,innerHeight);
|
||||||
|
noFill();
|
||||||
|
|
||||||
|
|
||||||
|
//SETING FIRST OSCILLATOR: CARRIER
|
||||||
|
// EXPLANATION FROM WEBSITE: The carrier is typically set at an audible frequency (i.e. 440 Hz) and connected to master output by default. The carrier.amp is set to zero because we will have the modulator control its amplitude.
|
||||||
|
|
||||||
|
var randomnumb = getRandomArbitrary(0, 20);
|
||||||
|
|
||||||
|
console.log(randomnumb);
|
||||||
|
carrier = new p5.Oscillator(); // connects to master output by default
|
||||||
|
carrier.freq(200 + randomnumb); // it sets the frequency of the carrier. AN AUDIBLE ONE.
|
||||||
|
carrier.amp(1);
|
||||||
|
// carrier's amp is 0 by default, giving our modulator total control
|
||||||
|
|
||||||
|
carrier.start();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// create an fft to analyze the audio
|
||||||
|
//an FFT (fast Fourier transform) converts a signal from its original domain (often time or space) to a representation in the frequency domain and vice versa
|
||||||
|
|
||||||
|
fft = new p5.FFT();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
|
||||||
|
|
||||||
|
//depen de la alçada, la nota TOCADA se sent mes for o menys (volum = amplitud)
|
||||||
|
if(mouseY <= height/2) {
|
||||||
|
|
||||||
|
var ampli = map(mouseY, 0, height, 0.01, 2.02);
|
||||||
|
|
||||||
|
|
||||||
|
}else{
|
||||||
|
|
||||||
|
|
||||||
|
var ampli = map(mouseY, height, 0, 0.01, 2.02);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// change carrierillator frequency based on mouseX
|
||||||
|
|
||||||
|
var modFreq = 0.1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// si el mouseY és igual o el mateix que la meitat de l'altura, fes aixo. ((DEFINEIX LA AMPLITUD.))
|
||||||
|
if(mouseY <= height/2) {
|
||||||
|
|
||||||
|
var modAmp = map(mouseY, 0, height, 0.01, 2.02);
|
||||||
|
|
||||||
|
}else{
|
||||||
|
|
||||||
|
var modAmp = map(mouseY, height, 0, 0.01, 2.02);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
carrier.amp(modAmp, 0.01); // fade time of 0.1 for smooth fading
|
||||||
|
|
||||||
|
|
||||||
|
// analyze the waveform
|
||||||
|
waveform = fft.waveform();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// drawText(modFreq, modAmp);
|
||||||
|
|
||||||
|
if (mouseIsPressed || (touches && touches.length)){
|
||||||
|
|
||||||
|
opac = 100;
|
||||||
|
var mx = mouseX || (touches[0] && touches[0][0]);
|
||||||
|
if (mx > 0 && mx < width/20 ){
|
||||||
|
|
||||||
|
carrier.freq(220.0);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
|
||||||
|
|
||||||
|
}else if ( mx > width/20 && mx < 2*(width/20)){
|
||||||
|
|
||||||
|
carrier.freq(233.08);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
|
||||||
|
}else if (mx > 2*(width/20) && mx < 3*(width/20)){
|
||||||
|
|
||||||
|
carrier.freq(246.94);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
}else if (mx > 3*(width/20) && mx < 4*(width/20)){
|
||||||
|
|
||||||
|
carrier.freq(261.63);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}else if (mx > 4*(width/20) && mx < 5*(width/20)){
|
||||||
|
|
||||||
|
carrier.freq(277.18);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
}else if (mx > 5*(width/20) && mx < 6*(width/20)){
|
||||||
|
|
||||||
|
carrier.freq(293.66);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
}else if (mx > 6*(width/20) && mx < 7*(width/20)){
|
||||||
|
|
||||||
|
carrier.freq(311.13);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
}else if (mx > 7*(width/20) && mx < 8*(width/20)){
|
||||||
|
|
||||||
|
carrier.freq(329.63);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
}else if (mx > 8*(width/20) && mx < 9*(width/20)){
|
||||||
|
|
||||||
|
carrier.freq(349.23);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
}else if (mx > 9*(width/20) && mx < 10*(width/20)){
|
||||||
|
|
||||||
|
carrier.freq(369.99);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
}else if (mx > 10*(width/20) && mx < 11*(width/20)){
|
||||||
|
|
||||||
|
carrier.freq(392.0);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
}else if (mx > 11*(width/20) && mx < 12*(width/20)){
|
||||||
|
|
||||||
|
carrier.freq(415.3);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
}else if (mx > 12*(width/20) && mx < 13*(width/20)){
|
||||||
|
|
||||||
|
carrier.freq(440.0);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
}else if (mx > 13*(width/20) && mx < 14*(width/20)){
|
||||||
|
|
||||||
|
carrier.freq(466.16);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
}else if (mx > 14*(width/20) && mx < 15*(width/20)){
|
||||||
|
|
||||||
|
carrier.freq(493.88);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
}else if (mx > 15*(width/20) && mx < 16*(width/20)){
|
||||||
|
|
||||||
|
carrier.freq(523.25);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
}else if (mx > 16*(width/20) && mx < 17*(width/20)){
|
||||||
|
|
||||||
|
carrier.freq(554.37);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
}else if (mx > 17*(width/20) && mx < 18*(width/20)){
|
||||||
|
|
||||||
|
carrier.freq(587.33);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
}else if (mx > 18*(width/20) && mx < 19*(width/20)){
|
||||||
|
|
||||||
|
carrier.freq(622.25);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
}else if (mx > 19*(width/20) && mx < width){
|
||||||
|
|
||||||
|
carrier.freq(659.26);
|
||||||
|
carrier.amp(ampli);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//draw a new line
|
||||||
|
stroke(0,0,0);
|
||||||
|
strokeWeight(0.5);
|
||||||
|
|
||||||
|
line(0, height/2,mx, mouseY);
|
||||||
|
line(mx, mouseY, width, height/2);
|
||||||
|
background(255, 255, 255,100);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}else{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// IF MOUSE IS NOT PRESSED
|
||||||
|
if(mouseY <= height/2) {
|
||||||
|
|
||||||
|
opac = map(mouseY, 0,height/2, 100, 0);
|
||||||
|
|
||||||
|
}else{
|
||||||
|
|
||||||
|
opac = map(mouseY, height, height/2, 100, 0);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
background(255,255,255,opac); // alpha
|
||||||
|
// draw the shape of the waveform
|
||||||
|
//drawWaveform();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function drawWaveform() {
|
||||||
|
|
||||||
|
|
||||||
|
if(mouseIsPressed){
|
||||||
|
|
||||||
|
stroke(255,255,255);
|
||||||
|
strokeWeight(1);
|
||||||
|
|
||||||
|
line(0, height/2,mx, mouseY);
|
||||||
|
line(mx, mouseY, width, height/2);
|
||||||
|
background(0, 0, 0,100);
|
||||||
|
|
||||||
|
}else{
|
||||||
|
|
||||||
|
stroke(0,0,0,100);
|
||||||
|
strokeWeight(0.5);
|
||||||
|
beginShape();
|
||||||
|
for (var i = 0; i<waveform.length; i++){
|
||||||
|
var x = map(i, 0, (waveform.length)/8, 0, width);
|
||||||
|
var y = map((waveform[i])/8, -1, 1, -height/2, height/2);
|
||||||
|
vertex(x, y + height/2);
|
||||||
|
}
|
||||||
|
endShape();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -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,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/env python
|
||||||
|
|
||||||
import os, random, time
|
import subprocess
|
||||||
|
|
||||||
while True:
|
subprocess.call(["scripts/voiceguide.sh"], cwd="/media/floppy")
|
||||||
freq = str(random.randint(0,10)*110)
|
|
||||||
print(freq)
|
|
||||||
os.system('echo "'+freq+';" | pdsend 3000')
|
|
||||||
time.sleep(0.25)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -0,0 +1,77 @@
|
|||||||
|
#!/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)
|
||||||
|
try:
|
||||||
|
ff = os.listdir("/var/www/static/gait")
|
||||||
|
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
|
||||||
|
# 10 os.unlink(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>
|
||||||
|
<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="../clips/{{i.mp4}}"><img src="../clips/{{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";
|
||||||
|
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=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
|
||||||
|
|
||||||
|
print ("Starting camera", file=sys.stderr)
|
||||||
|
cam = PiCamera()
|
||||||
|
framesize = (160, 128)
|
||||||
|
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,56 @@
|
|||||||
|
# ensure the record folder exists
|
||||||
|
mkdir -p /var/www/static/gait
|
||||||
|
|
||||||
espeak "Gait analysis number one." -v en
|
v=-v en-gb+f5 -s 150
|
||||||
|
espeak "Tetra Gamma Gait Analysis " -v en-gb +f5 -s 150
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
||||||
espeak "Please state your name:" -v en
|
espeak "Be ready for the security check." -v en-gb+f4 -s 150
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
||||||
espeak "Position yourself 2 to 3 meters away from the Tetra Gamma Circulaire." -v en
|
espeak "Please state your name:" -v en+f4 -s 150
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
espeak "Position yourself 2 to 3 meters away from me." -v en-gb+f4 -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+f4 -s 150
|
||||||
sleep 0.2
|
sleep 0.2
|
||||||
|
|
||||||
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 "Walk towards me on a zig zag line.
|
||||||
sleep 1
|
" -v en+f4 -s175
|
||||||
|
|
||||||
espeak "Walk from left to right in front of the Tetra Gamma Circulaire.
|
|
||||||
" -v en
|
|
||||||
sleep 0.2
|
sleep 0.2
|
||||||
|
|
||||||
play sweep_up.wav
|
mpv sweep_up.wav
|
||||||
|
|
||||||
basename=clips/$(date +%Y-%m-%d-%H-%M-%S)
|
basename=clips/$(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
|
|
||||||
sleep 1
|
|
||||||
|
|
||||||
espeak "Walk away from the Tetra Gamma Circulaire.
|
|
||||||
" -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 "Thank you for your cooperation" -v en+f4 -s175
|
||||||
espeak "Position yourself 2 to 3 meters away from the Tetra Gamma Circulaire." -v en
|
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
||||||
espeak "Walk towards the Tetra Gamma Circulaire on a zig zag line.
|
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
|
|
||||||
|
|
||||||
# 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,69 @@
|
|||||||
GREAT JOB!
|
<html>
|
||||||
|
<head>
|
||||||
|
<title></title>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin-left: 20;
|
||||||
|
margin-right: 20;
|
||||||
|
padding: 0;
|
||||||
|
color: grey;
|
||||||
|
}
|
||||||
|
|
||||||
|
form.buttons {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
form.buttons input {
|
||||||
|
width: 150px;
|
||||||
|
height: 150px;
|
||||||
|
/*hide the labels*/
|
||||||
|
font-size: 0;
|
||||||
|
line-height: 0;
|
||||||
|
border: 0;
|
||||||
|
margin: ;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<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;" />
|
||||||
|
<br>
|
||||||
|
<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;" />
|
||||||
|
<br>
|
||||||
|
<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;" />
|
||||||
|
<br>
|
||||||
|
<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;" />
|
||||||
|
<br>
|
||||||
|
<!--"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>
|
||||||
|
<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,53 +0,0 @@
|
|||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title></title>
|
|
||||||
<style>
|
|
||||||
form.buttons input {
|
|
||||||
width: 160px;
|
|
||||||
height: 160px;
|
|
||||||
/*hide the labels*/
|
|
||||||
font-size: 0;
|
|
||||||
line-height: 0;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<form action="cgi-bin/play.cgi" class="buttons">
|
|
||||||
<input type="submit" name="p" value="BasicTurn.mp3" style="background:url(images/Choreology-BasicTurn.png) no-repeat;" />
|
|
||||||
<input type="submit" name="p" value="Follow.mp3" />
|
|
||||||
<input type="submit" name="p" value="AmericanSpin.mp3" />
|
|
||||||
<input type="submit" name="p" value="Bump.mp3" />
|
|
||||||
<input type="submit" name="p" value="StopAndGo.mp3" />
|
|
||||||
<input type="submit" name="p" value="Windmill.mp3" />
|
|
||||||
<input type="submit" name="p" value="SpanishArms.mp3" />
|
|
||||||
<input type="submit" name="p" value="Hucklebuck.mp3" />
|
|
||||||
<input type="submit" name="p" value="TheWhip.mp3" />
|
|
||||||
<input type="submit" name="p" value="Whip.mp3" />
|
|
||||||
<input type="submit" name="p" value="ChickenWalks.mp3" />
|
|
||||||
<div class="tempo">
|
|
||||||
<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 @@
|
|||||||
|
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>
|