now is it everything added?
@ -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: 89 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 499 KiB |
Before Width: | Height: | Size: 99 KiB |
After Width: | Height: | Size: 1.2 MiB |
@ -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,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,53 @@
|
||||
v=-v en-gb+f5 -s 150
|
||||
espeak "Tetra Gamma Gait Analysis " -v en-gb +f5 -s 150
|
||||
sleep 1
|
||||
|
||||
espeak "Gait analysis number one." -v en
|
||||
espeak "Be ready for the security check." -v en-gb+f4 -s 150
|
||||
sleep 1
|
||||
|
||||
espeak "Please state your name:" -v en
|
||||
espeak "Please state your name:" -v en+f4 -s 150
|
||||
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+f4 -s 150
|
||||
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
|
||||
|
||||
play sweep_up.wav
|
||||
mpv 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
|
||||
python scripts/recordwalk.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 one meter away to the left of the Tetra Gamma Circulaire." -v en
|
||||
sleep 1
|
||||
mpv sweep_up.wav
|
||||
|
||||
espeak "Walk from left to right in front of the Tetra Gamma Circulaire.
|
||||
" -v en
|
||||
espeak "Walk towards me on a zig zag line.
|
||||
" -v en+f4 -s175
|
||||
sleep 0.2
|
||||
|
||||
play sweep_up.wav
|
||||
mpv 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
|
||||
python scripts/recordwalk.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 "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
|
||||
mpv sweep_up.wav
|
||||
|
||||
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
|
||||
espeak "Thank you for your cooperation" -v en+f4 -s175
|
||||
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
|
||||
mpv sweep_up.wav
|
||||
|
||||
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
|
@ -0,0 +1,104 @@
|
||||
@font-face: {
|
||||
font-family: "sporting_grotesque_gras-webfont";
|
||||
src:"../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,120 +1,60 @@
|
||||
#N canvas 457 24 739 687 10;
|
||||
#X declare -lib net;
|
||||
#N canvas 553 37 553 723 10;
|
||||
#X declare -lib unpackOSC;
|
||||
#X text -22 232 #ikstem;
|
||||
#X text 55 233 #gestemd;
|
||||
#X obj -69 492 dac~;
|
||||
#X obj -37 134 unpack s s s;
|
||||
#X obj 441 -2 loadbang;
|
||||
#X msg 441 31 \; pd dsp 1;
|
||||
#X obj 191 64 udpreceive 127.0.0.1 4000;
|
||||
#X text 160 318 comment;
|
||||
#X obj 157 254 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
|
||||
#X text 360 432 attack;
|
||||
#X text 431 433 release;
|
||||
#X obj 362 569 line~;
|
||||
#X obj 176 638 *~;
|
||||
#X obj 361 452 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
|
||||
-1;
|
||||
#X obj 89 254 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
|
||||
#X obj 435 455 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
|
||||
-1;
|
||||
#X text 45 133 tag \, hashtag \, time;
|
||||
#X obj -3 162 select #ikstem #gestemd both;
|
||||
#X obj 0 252 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
|
||||
-1;
|
||||
#N canvas 692 710 276 254 ikstemenv 0;
|
||||
#X obj 72 80 line~;
|
||||
#X msg 81 45 0 50;
|
||||
#X msg 72 -15 1 1;
|
||||
#X text 99 -13 1 msec attack;
|
||||
#X text 118 44 50 msec release;
|
||||
#X obj 88 15 del 10;
|
||||
#X obj 72 -44 inlet;
|
||||
#X obj 25 170 outlet~;
|
||||
#X obj 25 -45 inlet~;
|
||||
#X obj 25 146 *~;
|
||||
#X text 134 14 10 msec sustain;
|
||||
#X connect 0 0 9 1;
|
||||
#X connect 1 0 0 0;
|
||||
#X connect 2 0 0 0;
|
||||
#X connect 5 0 1 0;
|
||||
#X connect 6 0 2 0;
|
||||
#X connect 8 0 9 0;
|
||||
#X connect 9 0 7 0;
|
||||
#X restore -69 344 pd ikstemenv;
|
||||
#X text -16 289 comment;
|
||||
#N canvas 692 710 276 254 bothenv 0;
|
||||
#X obj 72 80 line~;
|
||||
#X obj 72 -44 inlet;
|
||||
#X obj 25 170 outlet~;
|
||||
#X obj 25 -45 inlet~;
|
||||
#X obj 25 146 *~;
|
||||
#X text 137 44 5 second release;
|
||||
#X text 114 -14 500 msec attack;
|
||||
#X msg 72 -15 1 50;
|
||||
#X obj 88 15 del 100;
|
||||
#X text 144 15 100 msec sustain;
|
||||
#X msg 81 45 0 2000;
|
||||
#X connect 0 0 4 1;
|
||||
#X connect 1 0 7 0;
|
||||
#X connect 3 0 4 0;
|
||||
#X connect 4 0 2 0;
|
||||
#X connect 7 0 0 0;
|
||||
#X connect 8 0 10 0;
|
||||
#X connect 10 0 0 0;
|
||||
#X restore 100 344 pd bothenv;
|
||||
#X obj 100 467 snapshot~;
|
||||
#X obj 112 435 metro 100;
|
||||
#X floatatom 100 493 0 0 0 0 - - -;
|
||||
#N canvas 692 710 276 254 gestemdenv 0;
|
||||
#X obj 72 80 line~;
|
||||
#X text 99 -13 1 msec attack;
|
||||
#X text 118 44 50 msec release;
|
||||
#X obj 72 -44 inlet;
|
||||
#X obj 25 170 outlet~;
|
||||
#X obj 25 -45 inlet~;
|
||||
#X obj 25 146 *~;
|
||||
#X text 134 14 10 msec sustain;
|
||||
#X msg 81 45 0 700;
|
||||
#X obj 88 15 del 100;
|
||||
#X msg 72 -15 1 10;
|
||||
#X connect 0 0 6 1;
|
||||
#X connect 3 0 10 0;
|
||||
#X msg 371 480 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 175 539 osc~ 450;
|
||||
#X obj 361 503 del 50;
|
||||
#X msg 432 526 0 250;
|
||||
#X msg 296 503 30 30;
|
||||
#X obj 476 483 del 50;
|
||||
#X msg 361 527 1 500;
|
||||
#X msg 195 477 400;
|
||||
#X msg 68 480 150;
|
||||
#X obj 212 198 loadbang;
|
||||
#X obj 364 23 import unpackOSC;
|
||||
#X msg 211 244 \; pd dsp 1;
|
||||
#X text 16 34 comment;
|
||||
#X text 176 446 comment;
|
||||
#X obj 174 596 *~ 10;
|
||||
#X obj 34 92 unpackOSC;
|
||||
#X obj 34 48 udpreceive 127.0.0.1 4000;
|
||||
#X connect 2 0 3 0;
|
||||
#X connect 3 0 9 0;
|
||||
#X connect 4 0 17 0;
|
||||
#X connect 4 0 15 0;
|
||||
#X connect 4 0 18 0;
|
||||
#X connect 5 0 16 0;
|
||||
#X connect 5 0 6 0;
|
||||
#X connect 6 0 4 0;
|
||||
#X connect 8 0 0 0;
|
||||
#X connect 9 0 8 0;
|
||||
#X connect 10 0 0 0;
|
||||
#X restore 14 344 pd gestemdenv;
|
||||
#X obj 125 409 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
|
||||
1;
|
||||
#X text -69 250 triggers;
|
||||
#X text 142 233 both;
|
||||
#X text 146 410 monitor output on/off;
|
||||
#X text 190 45 normally \, this should suffice:;
|
||||
#X obj 101 286 osc~ 150;
|
||||
#X obj -69 286 osc~ 7000;
|
||||
#X obj 14 286 osc~ 500;
|
||||
#X text 174 296 sinewaves envelopes (triggered by incoming OSC) double
|
||||
click pd ..env objects to change envelopes;
|
||||
#X obj -34 16 import net;
|
||||
#X obj -38 -30 import unpackOSC;
|
||||
#X obj 184 90 unpackOSC;
|
||||
#X connect 3 1 11 0;
|
||||
#X connect 4 0 5 0;
|
||||
#X connect 6 0 31 0;
|
||||
#X connect 8 0 15 1;
|
||||
#X connect 9 0 19 1;
|
||||
#X connect 11 0 12 0;
|
||||
#X connect 11 1 9 0;
|
||||
#X connect 11 2 8 0;
|
||||
#X connect 12 0 13 1;
|
||||
#X connect 13 0 2 0;
|
||||
#X connect 13 0 2 1;
|
||||
#X connect 15 0 16 0;
|
||||
#X connect 15 0 2 0;
|
||||
#X connect 15 0 2 1;
|
||||
#X connect 16 0 18 0;
|
||||
#X connect 17 0 16 0;
|
||||
#X connect 6 0 15 0;
|
||||
#X connect 10 1 11 0;
|
||||
#X connect 10 1 12 0;
|
||||
#X connect 10 2 11 0;
|
||||
#X connect 12 0 21 0;
|
||||
#X connect 12 0 4 0;
|
||||
#X connect 12 1 20 0;
|
||||
#X connect 12 1 4 0;
|
||||
#X connect 14 0 27 0;
|
||||
#X connect 15 0 19 0;
|
||||
#X connect 16 0 2 0;
|
||||
#X connect 17 0 2 0;
|
||||
#X connect 18 0 16 0;
|
||||
#X connect 19 0 2 0;
|
||||
#X connect 19 0 2 1;
|
||||
#X connect 20 0 17 0;
|
||||
#X connect 25 0 15 0;
|
||||
#X connect 26 0 13 0;
|
||||
#X connect 27 0 19 0;
|
||||
#X connect 31 0 3 0;
|
||||
#X connect 20 0 14 0;
|
||||
#X connect 21 0 14 0;
|
||||
#X connect 27 0 3 0;
|
||||
#X connect 28 0 10 0;
|
||||
#X connect 29 0 28 0;
|
||||
|
@ -0,0 +1 @@
|
||||
FLOPPYLEFT - 2017
|
@ -0,0 +1,7 @@
|
||||
Author: Slavoj Žižek
|
||||
Date: 1989
|
||||
Title: The Sublime Object of Floppy
|
||||
|
||||
Description:
|
||||
|
||||
And so on, and so on, and so on.
|
@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env python
|
||||
import OSC
|
||||
import multiprocessing, time
|
||||
import RPi.GPIO as GPIO
|
||||
import time
|
||||
|
||||
GPIO.setmode(GPIO.BCM)
|
||||
GPIO.setwarnings(False)
|
||||
|
||||
pin_pairs = [[14,15], [23,24], [1,7]]
|
||||
|
||||
|
||||
# OSC
|
||||
client = OSC.OSCClient()
|
||||
address = '127.0.0.1', 3000 # 57120==SC
|
||||
client.connect( address ) # set the address for all following messages
|
||||
oscOne = OSC.OSCMessage() # OSCresponder name: '/touch_one'
|
||||
oscTwo = OSC.OSCMessage() # OSCresponder name: '/touch_two'
|
||||
oscThree = OSC.OSCMessage() # OSCresponder name: '/touch_three'
|
||||
oscOne.setAddress("/touch_one")
|
||||
oscTwo.setAddress("/touch_two")
|
||||
oscThree.setAddress("/touch_three")
|
||||
print client
|
||||
|
||||
def osc_msg(pinpair, val):
|
||||
pinindex = pin_pairs.index(pinpair)
|
||||
|
||||
if pinindex == 0:
|
||||
oscOne.append( val )
|
||||
print oscOne
|
||||
client.send(oscOne)
|
||||
oscOne.clearData()
|
||||
elif pinindex == 1:
|
||||
oscTwo.append( val )
|
||||
print oscTwo
|
||||
client.send(oscTwo)
|
||||
oscTwo.clearData()
|
||||
elif pinindex == 2:
|
||||
oscThree.append( val )
|
||||
print oscThree
|
||||
client.send(oscThree)
|
||||
oscThree.clearData()
|
||||
|
||||
|
||||
def discharge(a_pin, b_pin):
|
||||
GPIO.setup(a_pin, GPIO.IN)
|
||||
GPIO.setup(b_pin, GPIO.OUT)
|
||||
GPIO.output(b_pin, False)
|
||||
time.sleep(0.005)
|
||||
|
||||
def charge_time(a_pin, b_pin):
|
||||
GPIO.setup(b_pin, GPIO.IN)
|
||||
GPIO.setup(a_pin, GPIO.OUT)
|
||||
count = 0
|
||||
GPIO.output(a_pin, True)
|
||||
while not GPIO.input(b_pin):
|
||||
count = count + 1
|
||||
return count
|
||||
|
||||
def analog_read(pin_pair):
|
||||
discharge(pin_pair[0],pin_pair[1])
|
||||
return charge_time(pin_pair[0],pin_pair[1])
|
||||
|
||||
|
||||
def worker(pair):
|
||||
"""thread worker function"""
|
||||
while True:
|
||||
reading = analog_read( pair ) #print(analog_read())
|
||||
osc_msg(pair, reading)
|
||||
time.sleep(0.1)
|
||||
|
||||
return
|
||||
|
||||
if __name__ == '__main__':
|
||||
jobs = []
|
||||
for i in range(len(pin_pairs)):
|
||||
p = multiprocessing.Process(target=worker, args=(pin_pairs[i],))
|
||||
jobs.append(p)
|
||||
p.start()
|
@ -0,0 +1,6 @@
|
||||
@font-face { font-family: "Genome"; src: url(../fonts/Genome-Thin.otf);}
|
||||
body { background: #1F1F1F; color: #EEE; font-family: Genome, sans-serif; font-weight: 100; color: #DDD; }
|
||||
p { margin: 0 0 70px; }
|
||||
#defaultCanvas0 { display: block !important; margin: 5em auto ; }
|
||||
#header { margin: 30px 0px 0px; }
|
||||
.text { display: block; margin: 0 50px; font-size: 3em; font-weight: 100 !important; }
|
@ -0,0 +1,27 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Euclid</title>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="css/style.css">
|
||||
<script type="text/javascript" src="js/p5.min.js"></script>
|
||||
<script type="text/javascript" src="js/p5.svg.js"></script>
|
||||
<script type="text/javascript" src="./js/euclidScore.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<content class="text">
|
||||
<object id="header" data="svgs/euclid.svg" type="image/svg+xml">
|
||||
<h1>euclid</h1>
|
||||
</object>
|
||||
|
||||
<p>To play, touch the metal contacts, connecting them. The more conductive you are, the more you will be able to affect the instrument.</p>
|
||||
|
||||
<p>The state of your composition is recorded, and displayed here as a downloadable score.</p>
|
||||
|
||||
<p>Never to be played, nor heard again.</p>
|
||||
</content>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,82 @@
|
||||
// TODO: SAVE ON CLICK
|
||||
|
||||
var left, right, genLight, score
|
||||
var el1 = [], el2 = [], scrVals = []
|
||||
|
||||
function preload() {
|
||||
// left = loadSVG('../svgs/leftHand.svg')
|
||||
// right = loadSVG('../svgs/rightHand.svg')
|
||||
|
||||
genLight = loadFont("fonts/Gen-Light.otf");
|
||||
|
||||
score = loadStrings('../score/score.txt')
|
||||
|
||||
for (var i = 0; i < 8; i++) {
|
||||
el1.push( loadSVG('../svgs/el.' + int(random(1, 12)) + '.svg') )
|
||||
el2.push( loadSVG('../svgs/el.' + int(random(1, 12)) + '.svg') )
|
||||
}
|
||||
}
|
||||
|
||||
function setup() {
|
||||
createCanvas(800, 1200, SVG)
|
||||
|
||||
textFont(genLight)
|
||||
|
||||
// frameRate(1)
|
||||
noLoop()
|
||||
|
||||
fill(220)
|
||||
textSize(150)
|
||||
textAlign('right')
|
||||
|
||||
}
|
||||
|
||||
function draw() {
|
||||
background('#151515')
|
||||
fill("#DDDDDD")
|
||||
|
||||
for (var i = 0; i < score.length; i++) {
|
||||
var line = split(score[i].slice(0, -1), ' ')
|
||||
text(line.join(" "), 90, 150 + (i*90), 710)
|
||||
scrVals.push(line)
|
||||
}
|
||||
|
||||
stroke('#FFCC00')
|
||||
fill('#FFCC00')
|
||||
|
||||
// left.attribute('fill', 'none')
|
||||
// right.attribute('fill', 'none')
|
||||
// left.attribute('stroke', '#FFCC00')
|
||||
// right.attribute('stroke', '#FFCC00')
|
||||
|
||||
// image(right, 0, 0, 600, 600)
|
||||
|
||||
|
||||
for (var i = 0; i < el1.length; i++) {
|
||||
var r = random(5)
|
||||
var rVal = int(scrVals[int(random(scrVals.length))][int(random(7))])
|
||||
var coin = int(random(2))
|
||||
rVal = map(rVal, 0, 127, 0, width)
|
||||
|
||||
el1[i].attribute('fill', 'none')
|
||||
el2[i].attribute('fill', 'none')
|
||||
el1[i].attribute('stroke', '#FFCC00')
|
||||
el2[i].attribute('stroke', '#FFCC00')
|
||||
|
||||
image(el1[i], 120 + rVal, (height/el1.length)*(i)+30, 75 + r, 75 + r)
|
||||
image(el2[i], 15, (height/el1.length)*(i)+30, 75, 75)
|
||||
|
||||
if (coin) {
|
||||
var coin2 = int(random(2))
|
||||
if (coin2) {
|
||||
ellipse(120 + rVal, (height/el1.length)*(i)+45, 30 + r, 30 + r)
|
||||
} else {
|
||||
ellipse(51, (height/el1.length)*(i)+55, 30, 30)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function saveMe() {
|
||||
save()
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
r4 16 7 0;
|
||||
r4 18 6 0;
|
||||
r3 18 7 0;
|
||||
r2 9 2 0;
|
||||
r1 7 8 0;
|
||||
melody 51 43 34 26 37 43 33;
|
||||
bass 73 75 74 86 87 70 86;
|
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 34.92 38.25"><title>Artboard 12</title><polyline class="a" points="34.55 0.5 1.12 0.5 34.55 37.91"/></svg>
|
After Width: | Height: | Size: 159 B |
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 37.41 38.25"><title>Artboard 21 copy</title><line class="a" x1="37.41" y1="19.04" y2="19.04"/></svg>
|
After Width: | Height: | Size: 153 B |
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 34.92 38.25"><title>Artboard 21</title><line class="a" x1="17.6" y1="0.33" x2="17.6" y2="37.75"/></svg>
|
After Width: | Height: | Size: 156 B |
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 34.92 38.25"><title>Artboard 13</title><polyline class="a" points="0.37 0.5 33.8 0.5 0.37 37.91"/></svg>
|
After Width: | Height: | Size: 157 B |
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 38.41 38.41"><title>Artboard 14</title><circle class="a" cx="19.21" cy="19.21" r="18.71"/></svg>
|
After Width: | Height: | Size: 149 B |
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 34.92 38.25"><title>Artboard 15</title><polyline class="a" points="0.37 37.74 33.8 37.74 0.37 0.33"/></svg>
|
After Width: | Height: | Size: 160 B |
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 34.92 38.25"><title>Artboard 16</title><polyline class="a" points="34.55 37.74 1.12 37.74 34.55 0.33"/></svg>
|
After Width: | Height: | Size: 162 B |
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 38.25 34.92"><title>Artboard 17</title><polyline class="a" points="37.74 34.55 37.74 1.12 0.33 34.55"/></svg>
|
After Width: | Height: | Size: 162 B |
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 38.25 34.92"><title>Artboard 18</title><polyline class="a" points="0.5 34.55 0.5 1.12 37.91 34.55"/></svg>
|
After Width: | Height: | Size: 159 B |
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 38.25 34.92"><title>Artboard 19</title><polyline class="a" points="37.74 0.37 37.74 33.8 0.33 0.37"/></svg>
|
After Width: | Height: | Size: 160 B |
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 38.25 34.92"><title>Artboard 20</title><polyline class="a" points="0.5 0.37 0.5 33.8 37.91 0.37"/></svg>
|
After Width: | Height: | Size: 157 B |
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 616.67 179" style="stroke: #FFCC00; fill: none; stroke-width: 2;"><title>Artboard 4 copy</title><polyline class="a" points="112 130 28 130 70 83 28 36 112 36"/><polyline class="a" points="373.11 130 289.11 130 373.11 36"/><line class="a" x1="487.78" y1="36" x2="487.78" y2="129.98"/><line class="a" x1="435.56" y1="36" x2="435.56" y2="129.98"/><line class="a" x1="127.44" y1="83" x2="221.44" y2="83"/><line class="a" x1="278.89" y1="36" x2="278.89" y2="130"/><circle class="a" cx="122.22" cy="83" r="47"/><circle class="a" cx="226.67" cy="83" r="47"/><circle class="a" cx="383.33" cy="83" r="47"/><circle class="a" cx="540" cy="83" r="47"/></svg>
|
After Width: | Height: | Size: 699 B |
@ -0,0 +1,10 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 317.7 395">
|
||||
<g>
|
||||
<path id="path3680" class="cls-1" d="M7.55,348.93,87.64,205.28l6.87-92.09,16.93-27.34"/>
|
||||
<path id="path3684" class="cls-1" d="M101.39,143.43l15.12-86.6-4.12-41.24"/>
|
||||
<path id="path3686" class="cls-1" d="M112.38,15.59h0l4.81-11.68,18.21,6.53,13.4,45.7-1.72,110,10.53,39.23-7.78,38.88"/><path id="path3688" class="cls-1" d="M148.81,56.14l41.52-34L248.65,1.7,260.31,7l-1,16L199.56,53.7l-37.42,54.92,3.59,7.7"/>
|
||||
<path id="path3690" class="cls-1" d="M173.66,91.71l40.73-40.2,67.31-29.4,13.73,5.38-1.09,16L228.24,80.42l-37.91,57.35,2.38,13.48"/>
|
||||
<path id="path3692" class="cls-1" d="M191.09,144.76l43.14-45.39L292,69.14l11,4.12-2.75,15.81L248,125.49,214.3,175l2.75,7.56,33.28-25,55.53-27.07,8.25,3.44.8,13.22-87.35,58.82-42.34,83.79-22.6,12.11-29.11,82.49"/>
|
||||
<path id="path3694" class="cls-1" d="M163.11,301.9,147,295.23"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 940 B |
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 329.88 393.19"><path id="path3680" class="cls-1" d="M221.35,98.42l9,18.18,14.15,94.49,78.65,109.19"/><path id="path3684" class="cls-1" d="M204.71,10.24,209,28l4.61,38.64,7.71,31.73"/><path id="path3686" class="cls-1" d="M179.41,227.45l-4.51-42.2,9.08-42,.21-59.83L178,39.52l1.94-28.59,13-8.49,11.77,7.79h0"/><path id="path3688" class="cls-1" d="M159.16,114.84l3.14-8.73L120.71,54.93,59.84,26.55l-1.56-16L69.74,4.79l59,18.24L181.7,65.8"/><path id="path3690" class="cls-1" d="M133.67,152.19,133,138.61,90.22,84.49,22.81,50l.42-14.8,12.51-4.74L108.85,60l51.55,51.37"/><path id="path3692" class="cls-1" d="M214.63,383.36l-42-84.64L150.5,288,99.76,211.59,71.33,188.53l-32.74-19.3-31.16-12L6.8,143.82l8.11-3.74,58.42,20.57,34.18,23.76,2.47-7.66-38.3-46.42L15.3,99.55,12,83.86l10.84-4.53,61.65,24.4,49,43.16"/><path id="path3694" class="cls-1" d="M181.23,294.79l-8.58,3.93"/></svg>
|
After Width: | Height: | Size: 927 B |
@ -0,0 +1,13 @@
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
March 2017
|
||||
|
||||
Copyright (C) 2017 Nadine Rotem-Stibbe <nadine@rotem.eu>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim or modified
|
||||
copies of this license document, and changing it is allowed as long
|
||||
as the name is changed.
|
||||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
@ -0,0 +1,10 @@
|
||||
Author: Nadine Rotem-Stibbe
|
||||
Date: 2017
|
||||
Title: Drone Oddity #1
|
||||
|
||||
Description:
|
||||
|
||||
What you are hearing is a score made from the 'Watchlisting Guidance' table of contents using Pure Data.
|
||||
This document was written by the National Counterterrorism Center (NCC).
|
||||
|
||||
You can access it here: https://theintercept.com/document/2014/07/23/march-2013-watchlisting-guidance/
|
@ -0,0 +1,362 @@
|
||||
Chapter 1
|
||||
section 1
|
||||
sub 1
|
||||
foot 1
|
||||
sub 2
|
||||
foot 1
|
||||
foot 2
|
||||
sub 3
|
||||
sub 4
|
||||
section 2
|
||||
sub 1
|
||||
foot 1
|
||||
sub 2
|
||||
foot 1
|
||||
foot 2
|
||||
sub 3
|
||||
foot 1
|
||||
sub 4
|
||||
sub 5
|
||||
foot 1
|
||||
foot 2
|
||||
subsub 1
|
||||
sub 6
|
||||
sub 7
|
||||
foot 1
|
||||
sub 8
|
||||
sub 9
|
||||
sub 10
|
||||
foot 1
|
||||
subsub 1
|
||||
subsub 2
|
||||
subsubsub 1
|
||||
subsubsub 2
|
||||
subsubsub 3
|
||||
sub 11
|
||||
sub 12
|
||||
sub 13
|
||||
foot 1
|
||||
foot 2
|
||||
sub 14
|
||||
foot 1
|
||||
section 3
|
||||
sub 1
|
||||
foot 1
|
||||
subsub 1
|
||||
subsub 2
|
||||
subsub 3
|
||||
subsub 4
|
||||
sub 2
|
||||
section 4
|
||||
sub 1
|
||||
foot 1
|
||||
sub 2
|
||||
foot 1
|
||||
sub 3
|
||||
section 5
|
||||
sub 1
|
||||
subsub 1
|
||||
subsub 2
|
||||
foot 1
|
||||
section 6
|
||||
sub 1
|
||||
sub 2
|
||||
sub 3
|
||||
sub 4
|
||||
sub 5
|
||||
foot 1
|
||||
sub 6
|
||||
foot 1
|
||||
sub 7
|
||||
sub 8
|
||||
sub 9
|
||||
foot 1
|
||||
|
||||
section 7
|
||||
sub 1
|
||||
sub 2
|
||||
foot 1
|
||||
sub 3
|
||||
sub 4
|
||||
section 8
|
||||
sub 1
|
||||
sub 2
|
||||
sub 3
|
||||
subsub 1
|
||||
subsub 2
|
||||
subsub 3
|
||||
foot 1
|
||||
sub 4
|
||||
sub 5
|
||||
foot 1
|
||||
sub 6
|
||||
subsub 1
|
||||
subsub 2
|
||||
subsub 3
|
||||
subsub 4
|
||||
foot 1
|
||||
subsub 5
|
||||
subsub 6
|
||||
subsub 7
|
||||
subsub 8
|
||||
subsub 9
|
||||
sub 7
|
||||
sub 8
|
||||
sub 9
|
||||
section 9
|
||||
sub 1
|
||||
foot 1
|
||||
sub 2
|
||||
subsub 1
|
||||
subsub 2
|
||||
subsub 3
|
||||
foot 1
|
||||
subsub 4
|
||||
sub 3
|
||||
sub 4
|
||||
sub 5
|
||||
sub 6
|
||||
subsub 1
|
||||
subsub 2
|
||||
sub 7
|
||||
subsub 1
|
||||
subsub 2
|
||||
foot 1
|
||||
subsubsub 1
|
||||
foot 1
|
||||
subsubsub 2
|
||||
subsubsub 3
|
||||
subsubsub 4
|
||||
subsubsub 5
|
||||
sub 8
|
||||
sub 9
|
||||
foot 1
|
||||
sub 10
|
||||
foot 1
|
||||
subsub 1
|
||||
foot 1
|
||||
subsub 2
|
||||
subsubsub 1
|
||||
subsubsubsub 1
|
||||
subsubsubsub 2
|
||||
subsubsubsub 3
|
||||
subsubsubsub 4
|
||||
subsubsubsub 5
|
||||
subsubsubsub 6
|
||||
subsubsubsub 7
|
||||
subsubsub 2
|
||||
sub 11
|
||||
sub 12
|
||||
subsub 1
|
||||
censored 2
|
||||
subsub 2
|
||||
subsub 3
|
||||
subsub 4
|
||||
sub 13
|
||||
subsub 1
|
||||
subsubsub 1
|
||||
subsubsub 2
|
||||
subsubsub 3
|
||||
subsubsub 4
|
||||
subsub 2
|
||||
subsub 3
|
||||
subsub 4
|
||||
subsub 5
|
||||
subsub 6
|
||||
sub 14
|
||||
sub 15
|
||||
sub 16
|
||||
section 10
|
||||
sub 1
|
||||
sub 2
|
||||
sub 3
|
||||
subsub 1
|
||||
subsub 2
|
||||
subsub 3
|
||||
foot 1
|
||||
sub 4
|
||||
sub 5
|
||||
section 11
|
||||
sub 1
|
||||
sub 2
|
||||
foot 1
|
||||
sub 3
|
||||
sub 4
|
||||
sub 5
|
||||
section 12
|
||||
sub 1
|
||||
|
||||
Chapter 2
|
||||
section 1
|
||||
sub 1
|
||||
section 2
|
||||
sub 1
|
||||
subsub1
|
||||
sub 2
|
||||
sub 3
|
||||
sub 4
|
||||
subsub 1
|
||||
subsub 2
|
||||
subsubsub 1
|
||||
subsubsub 2
|
||||
subsubsub 3
|
||||
subsubsub 4
|
||||
foot 1
|
||||
subsubsub 5
|
||||
foot 1
|
||||
subsubsub 6
|
||||
subsub 3
|
||||
foot 1
|
||||
subsubsub 1
|
||||
subsubsub 2
|
||||
subsubsub 3
|
||||
subsubsub 4
|
||||
subsubsub 5
|
||||
subsubsub 6
|
||||
subsubsub 7
|
||||
subsubsub 8
|
||||
subsubsub 9
|
||||
subsubsub 10
|
||||
section 3
|
||||
sub 1
|
||||
sub 2
|
||||
subsub 1
|
||||
subsub 2
|
||||
subsub 3
|
||||
subsub 4
|
||||
subsub 5
|
||||
subsub 6
|
||||
subsub 7
|
||||
Chapter 3
|
||||
section 1
|
||||
sub 1
|
||||
sub 2
|
||||
section 2
|
||||
sub 1
|
||||
sub 2
|
||||
sub 3
|
||||
sub 4
|
||||
sub 5
|
||||
sub 6
|
||||
sub 7
|
||||
subsub 1
|
||||
subsub 2
|
||||
subsub 3
|
||||
subsub 4
|
||||
section 3
|
||||
sub 1
|
||||
subsub 1
|
||||
subsub 2
|
||||
sub 2
|
||||
subsub 1
|
||||
subsub 2
|
||||
subsub 3
|
||||
subsub 4
|
||||
section 4
|
||||
sub 1
|
||||
subsub 1
|
||||
sub 2
|
||||
subsub 1
|
||||
subsub 2
|
||||
subsub 3
|
||||
subsub 4
|
||||
subsubsub 1
|
||||
subsubsubsub 1
|
||||
subsubsubsub 2
|
||||
subsubsubsub 3
|
||||
subsubsubsub 4
|
||||
subsub 5
|
||||
subsubsub 1
|
||||
subsub 6
|
||||
subsub 7
|
||||
subsub 8
|
||||
subsubsub 1
|
||||
subsub 9
|
||||
subsubsub 1
|
||||
subsub 10
|
||||
subsub 11
|
||||
subsub 12
|
||||
subsub 13
|
||||
section 5
|
||||
sub 1
|
||||
subsub 1
|
||||
subsubsub 1
|
||||
subsubsubsub 1
|
||||
subsubsubsub 2
|
||||
subsubsub 2
|
||||
subsubsub 3
|
||||
subsub 2
|
||||
subsub 3
|
||||
subsub 4
|
||||
subsub 5
|
||||
subsub 6
|
||||
subsubsub 1
|
||||
subsubsub 2
|
||||
subsubsub 3
|
||||
subsubsub 4
|
||||
subsubsub 5
|
||||
subsub 7
|
||||
section 6
|
||||
sub 1
|
||||
subsub 1
|
||||
subsubsub 1
|
||||
subsubsub 2
|
||||
subsubsub 3
|
||||
subsubsub 4
|
||||
subsub 2
|
||||
subsub 3
|
||||
sub 2
|
||||
subsub 1
|
||||
sub 3
|
||||
subsub 1
|
||||
subsubsub 1
|
||||
subsubsub 2
|
||||
subsub 2
|
||||
section 7
|
||||
sub 1
|
||||
subsub 1
|
||||
subsub 2
|
||||
subsub 3
|
||||
subsub 4
|
||||
subsub 5
|
||||
subsub 6
|
||||
subsub 7
|
||||
subsub 8
|
||||
subsub 9
|
||||
subsub 10
|
||||
subsub 11
|
||||
subsub 12
|
||||
subsub 13
|
||||
subsub 15
|
||||
subsub 16
|
||||
subsub 17
|
||||
subsub 18
|
||||
subsub 19
|
||||
subsub 20
|
||||
subsub 21
|
||||
subsub 22
|
||||
subsub 23
|
||||
subsub 24
|
||||
subsub 25
|
||||
subsub 26
|
||||
subsub 27
|
||||
subsub 28
|
||||
subsub 29
|
||||
subsub 30
|
||||
subsub 31
|
||||
subsub 32
|
||||
subsub 33
|
||||
subsub 34
|
||||
subsub 35
|
||||
subsub 36
|
||||
subsub 37
|
||||
subsub 38
|
||||
subsub 39
|
||||
subsub 40
|
||||
subsub 41
|
||||
subsub 42
|
||||
subsub 43
|
||||
subsub 44
|
||||
subsub 45
|
||||
subsub 46
|
||||
Chapter 4
|
@ -0,0 +1,13 @@
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
March 2017
|
||||
|
||||
Copyright (C) 2017 Nadine Rotem-Stibbe <nadine@rotem.eu>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim or modified
|
||||
copies of this license document, and changing it is allowed as long
|
||||
as the name is changed.
|
||||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
After Width: | Height: | Size: 255 KiB |
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
|
||||
<g id="Layer_2">
|
||||
</g>
|
||||
<g id="Layer_1">
|
||||
<g>
|
||||
<rect x="141" y="230.2" width="11.1" height="3.3"/>
|
||||
<path d="M193,106.1c0,0-28.4-8.5-35.3-10.5v21.2H193V106.1z"/>
|
||||
<path d="M100.1,106.1v10.7h35V95.7C127.8,97.8,100.1,106.1,100.1,106.1z"/>
|
||||
<path d="M146.4,58.7c-8,0-10,27.5-10.3,33.3h20.8C156.4,85.2,154.2,58.7,146.4,58.7z"/>
|
||||
<g>
|
||||
<polygon points="237.8,208.4 157.7,189 157.7,225 237.8,225 "/>
|
||||
<polygon points="54.6,208.4 54.6,225 135.1,225 135.1,188.9 "/>
|
||||
</g>
|
||||
<rect x="144.5" y="186.9" width="4.7" height="42.3"/>
|
||||
<path d="M136.3,93.2v137.4h20.5V93.2H136.3z M149.8,230.5H144v-44.3h5.7V230.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 970 B |
@ -0,0 +1,146 @@
|
||||
|
||||
body{
|
||||
background-image: url("img/carpet.jpg");
|
||||
background-attachment: fixed;
|
||||
background-position: center;
|
||||
background-size: 100%;
|
||||
font-family: 'Roboto Mono', monospace;
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono', monospace;
|
||||
src: url(RobotoMono-Regular.ttf);
|
||||
}
|
||||
header{
|
||||
height: 400px;
|
||||
background: black; /* For browsers that do not support gradients */
|
||||
background: -webkit-linear-gradient(black, transparent); /* For Safari 5.1 to 6.0 */
|
||||
background: -o-linear-gradient(black, transparent); /* For Opera 11.1 to 12.0 */
|
||||
background: -moz-linear-gradient(black, transparent); /* For Firefox 3.6 to 15 */
|
||||
background: linear-gradient(black, transparent); /* Standard syntax (must be last) */
|
||||
margin:-10px;
|
||||
padding-top: 60px;
|
||||
}
|
||||
|
||||
.title {
|
||||
padding-top: 40px;
|
||||
text-align: center;
|
||||
font-size: 70px;
|
||||
color: white;
|
||||
margin:auto;
|
||||
font-weight: 700;;
|
||||
padding: 6px;
|
||||
}
|
||||
|
||||
.title a {
|
||||
color:black;
|
||||
text-decoration: underline;}
|
||||
|
||||
a{ text-decoration: none;}
|
||||
.instructions{
|
||||
text-align: center;
|
||||
max-width: 39%;
|
||||
line-height: 26px;
|
||||
font-size: 20px;
|
||||
padding: 10px;
|
||||
margin: auto;
|
||||
font-weight: 500;
|
||||
color: white;
|
||||
/*background-color: rgba(0,0,20,.85);*/}
|
||||
|
||||
.wrap{width: 100%;
|
||||
}
|
||||
.transcript{
|
||||
width:40%;
|
||||
margin:auto;
|
||||
height:4050px;
|
||||
overflow: hidden;
|
||||
/*border: 4px solid;*/
|
||||
|
||||
}
|
||||
.title-transcript{
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
padding: 35px;
|
||||
color: white;
|
||||
background-color: rgba(0,0,20,.9);
|
||||
font-weight: 500;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.title-transcript a{ text-decoration: none;
|
||||
color: white; }
|
||||
|
||||
.transcript embed{
|
||||
background-color: rgba(255,255,255,.9);
|
||||
height:4050px;
|
||||
width: 100%;
|
||||
}
|
||||
footer{
|
||||
height:1000px;
|
||||
background: black; /* For browsers that do not support gradients */
|
||||
background: -webkit-linear-gradient(transparent, black); /* For Safari 5.1 to 6.0 */
|
||||
background: -o-linear-gradient(transparent, black); /* For Opera 11.1 to 12.0 */
|
||||
background: -moz-linear-gradient(transparent, black); /* For Firefox 3.6 to 15 */
|
||||
background: linear-gradient(transparent, black); /* Standard syntax (must be last) */
|
||||
margin:-10px;
|
||||
padding: 20px;
|
||||
}
|
||||
footer p {
|
||||
color: white;
|
||||
max-width: 70%;
|
||||
padding-top: 40px;
|
||||
margin:auto;
|
||||
line-height: 1.5em;
|
||||
font-size: 26px;}
|
||||
.subtitle{
|
||||
margin-top: 270px;
|
||||
text-align: center;
|
||||
font-size: 46px;
|
||||
color: white;
|
||||
font-weight: 700;;
|
||||
}
|
||||
|
||||
.subtitle a{
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
}
|
||||
|
||||
embed::-webkit-scrollbar-track
|
||||
{
|
||||
/*border: 1px solid black;
|
||||
*/ background-color: #F5F5F5;
|
||||
}
|
||||
|
||||
embed::-webkit-scrollbar
|
||||
{
|
||||
width: 3px;
|
||||
background-color: #F5F5F5;
|
||||
}
|
||||
|
||||
embed::-webkit-scrollbar-thumb
|
||||
{
|
||||
background-color: #000000;
|
||||
}
|
||||
/*////////mobile///////*/
|
||||
|
||||
@media screen and (max-width:767px) {
|
||||
.title{font-size: 30 px;
|
||||
max-width: 90%;}
|
||||
.instructions{max-width: 90%;}
|
||||
|
||||
.transcript{
|
||||
margin-top: 50px;
|
||||
width:90%;
|
||||
height: 6400px;
|
||||
}
|
||||
.transcript embed{height: 6400px;}
|
||||
.header{margin-bottom: 20px;}
|
||||
.footer{height: 600px;}
|
||||
.subtitle{
|
||||
margin-top: 270px;
|
||||
font-size: 26px;}
|
||||
footer p {max-width: 80%;
|
||||
font-size: 15px;}
|
||||
}/*end of 767*/
|
@ -0,0 +1,13 @@
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
March 2017
|
||||
|
||||
Copyright (C) 2017 Nadine Rotem-Stibbe <nadine@rotem.eu>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim or modified
|
||||
copies of this license document, and changing it is allowed as long
|
||||
as the name is changed.
|
||||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
@ -0,0 +1,12 @@
|
||||
Author: Nadine Rotem-Stibbe
|
||||
Date: 2017
|
||||
Title: Drone Oddity #3
|
||||
|
||||
Description:
|
||||
|
||||
What you are hearing are the details of attacks by NATO forces/predators in Afghanistan
|
||||
|
||||
The data is collected and researched by a team from 'The Bureau of Investigative Journalism'.
|
||||
The Bureau has notably undercounted US air strikes in Afghanistan because most air attacks go unreported in open sources including news media.
|
||||
|
||||
you can access the document here: https://www.documentcloud.org/documents/1010104-tbij-fata-doc-redacted1.html
|
@ -0,0 +1,212 @@
|
||||
number 1.
|
||||
date: thirteenth of January 2006.
|
||||
location: Damadola Bajaur Agency.
|
||||
dead: 16.
|
||||
injured: 0.
|
||||
local: 16.
|
||||
non-local: 0.
|
||||
remarks: 5 children, 5 women, 6 men, all civilians.
|
||||
|
||||
number 2.
|
||||
date: 30th of October 2006.
|
||||
location: Attack on a seminary at village Chinagai.
|
||||
dead: 81.
|
||||
injured: 0.
|
||||
local: 81.
|
||||
non-local: 0.
|
||||
remarks: 80 children, 1 man, all civilian.
|
||||
|
||||
number 3.
|
||||
date: 29th of January 2008.
|
||||
location: Attack on Village Khushal, Tehsil Mirali.
|
||||
dead: 12.
|
||||
injured: 2.
|
||||
local: 12.
|
||||
non-local: 0.
|
||||
remarks: Civilian.
|
||||
|
||||
number 4.
|
||||
date: 28th of February 2008.
|
||||
location: Attack on Kalosha/Azam Warsak, South.
|
||||
dead: 10.
|
||||
injured: 6.
|
||||
local: 4.
|
||||
non-local: 6.
|
||||
remarks: none.
|
||||
|
||||
number 5.
|
||||
date: 16th of March 2008.
|
||||
location: Attack on Village Doag Wana proper, South Waz. Agency.
|
||||
dead: 18.
|
||||
injured: 7.
|
||||
local: 0.
|
||||
non-local: 18.
|
||||
remarks: 0.
|
||||
|
||||
number 6.
|
||||
date: 14th May 2008.
|
||||
location: Attack on a Madrassa at Damadola,Bajaur Agency
|
||||
dead: 18
|
||||
injured: 18
|
||||
local: 18
|
||||
non-local: 0
|
||||
remarks: Civilian
|
||||
|
||||
number 7.
|
||||
date: 11th of June 2008.
|
||||
location: Attack on ANA at Gorraparai FC Post in Mohmand Agency. Nato Aircraft attacked the same post causing killing/injuries to LEAs and civillians.
|
||||
dead: 18.
|
||||
injured: 18.
|
||||
local: 18.
|
||||
non-local: 0.
|
||||
remarks: Civilian.
|
||||
|
||||
|
||||
number 8.
|
||||
date: 15th of June 2008.
|
||||
location: Firing of 03 missiles at Nawaz Kot Makeen 01 01 01 civilian
|
||||
area Makeen SWA.
|
||||
dead: 1.
|
||||
injured: 0.
|
||||
local: 0.
|
||||
non-local: 1.
|
||||
remarks: civilian.
|
||||
|
||||
number 9.
|
||||
date: 28th of July 2008.
|
||||
location: Attack on Village Azam Warsak, South. Waz: Agency 7.
|
||||
dead: 7.
|
||||
injured: 0.
|
||||
local: 0.
|
||||
non-local: 7.
|
||||
remarks: none.
|
||||
|
||||
number 10.
|
||||
date: 12th of August 2008.
|
||||
location: Attack on Village Azam Warsak, South.
|
||||
dead: 12.
|
||||
injured: 0.
|
||||
local: 12.
|
||||
non-local: 0.
|
||||
remarks: none.
|
||||
|
||||
number 11.
|
||||
date: 20th of August 2008.
|
||||
location: Attack on Zeri Noor Colony, SWA.
|
||||
dead: 6.
|
||||
injured: 0.
|
||||
local: 0.
|
||||
non-local: 6.
|
||||
remarks: none.
|
||||
|
||||
number 12.
|
||||
date: 31th of August 2008.
|
||||
location: Attack on village Tapai, Dawar, NWAs Agency.
|
||||
dead: 11.
|
||||
injured: 1.
|
||||
local: 0.
|
||||
non-local: 11.
|
||||
remarks: 3 female, 4 children, non local 1 wife + 1 daughter of Ihsanullha local died.
|
||||
|
||||
number 13.
|
||||
date: 30th of August 2008.
|
||||
location: Missile Attack at the house of CLASSIFIED at Karez Kot Gangi Kshel Tehsil Datta Khel Miranshah.
|
||||
dead: 18.
|
||||
injured: 18.
|
||||
local: 18.
|
||||
non-local: 0.
|
||||
remarks: Civilian.
|
||||
|
||||
number 14.
|
||||
date: 2nd of September 2008.
|
||||
location: Dropping of four bombs by
|
||||
forces on Baghar area of Tehsil Birmal
|
||||
Wana, S.Waz: Agency
|
||||
dead: 1.
|
||||
injured: 1.
|
||||
local: 1.
|
||||
non-local: 0.
|
||||
remarks: none.
|
||||
|
||||
number 15.
|
||||
date: 3rd of September 2008.
|
||||
location: Attack by Foces at_4-houses in
|
||||
village Jalol Khel Toji Khel Angoor _Adda
|
||||
Tehsil Birmal Wana
|
||||
dead: 18.
|
||||
injured: 3.
|
||||
local: 18.
|
||||
non-local: 0.
|
||||
remarks: none.
|
||||
|
||||
number 16.
|
||||
date: 3rd of September 2008.
|
||||
location: Attack by Foces at_4-houses in
|
||||
village Jalol Khel Toji Khel Angoor _Adda
|
||||
Tehsil Birmal Wana
|
||||
dead: 5.
|
||||
injured: 4.
|
||||
local: 5.
|
||||
non-local: 0.
|
||||
remarks: civilian.
|
||||
|
||||
number 17.
|
||||
date: 8th of September 2008.
|
||||
location: 5 Missile fired by Drones on the
|
||||
Madrassa of Jalalud Din Haqqani at
|
||||
Danday Darpa Khel, Tehsil Miranshah
|
||||
NWA
|
||||
dead: 5.
|
||||
injured: 4.
|
||||
local: 5.
|
||||
non-local: 0.
|
||||
remarks: 8 female, 5 children, 7 male, all civilian.
|
||||
|
||||
number 18.
|
||||
No information provided
|
||||
|
||||
number 19.
|
||||
No information provided
|
||||
|
||||
number 62.
|
||||
date: 9th of May 2009.
|
||||
location: US Drone fired four missiles and hit the house of CLASSIFIED Miami Kabul Khel, DreNashtar Tehsil Shawal on the boundary of North and South Waziristan Agencies.
|
||||
dead: 5.
|
||||
injured: 0.
|
||||
local: 5.
|
||||
non-local: 0.
|
||||
remarks: none.
|
||||
|
||||
number 65.
|
||||
date: 19th of June 2009.
|
||||
location: Five Missiles were fires from Drone at Markaz of Gangi Khel Taliban commander.
|
||||
dead: 18.
|
||||
injured: 0.
|
||||
local: 8.
|
||||
non-local: 10.
|
||||
remarks: reportedly among the dead 1 non local 2 afghanis 4 arabs 3 Turkamans are included.
|
||||
|
||||
number 101.
|
||||
date: 15th of January 2010.
|
||||
location: At 21.00 hours, a residential
|
||||
compound was targeted with four
|
||||
guided missiles from US Drone at
|
||||
Nishpa Mir _Khunai area of Tehsil
|
||||
Ladha, S.W.Agency.
|
||||
dead: unknown.
|
||||
injured: unknown.
|
||||
local: unknown.
|
||||
non-local: unknown.
|
||||
remarks: Details are awaited.
|
||||
|
||||
The list continues.
|
||||
|
||||
Current Statistics from Drone Strikes in Afghanistan.
|
||||
|
||||
1,508 MINIMUM CONFIRMED STRIKES.
|
||||
2,536 upto 3,268 TOTAL KILLED.
|
||||
142 200 CIVILIANS KILLED.
|
||||
24 upto 49 CHILDREN KILLED.
|
||||
The figures above are running totals of US actions and resulting deaths since the Bureau began recording data.
|
||||
|
||||
Most Recent Strike: 20th of March 2017
|
After Width: | Height: | Size: 222 KiB |
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
|
||||
<path d="M162.3,117.2c0.5-4.4,1-9.4,1-17.2c0-7.1-2.4-10.6-4.4-12.4c-0.7-0.6-1.3-1-1.9-1.3v0.5v-0.5c-1.2-0.6-2.2-0.8-2.4-0.8
|
||||
c-0.2,0-2.3,0.3-4.4,2.1c-2.9,2.5-4.4,6.8-4.4,12.3c0,7.7,0.5,12.7,1,17.1c0.4,3.6,0.7,6.8,0.7,10.7v6.3h14.1v-6.3
|
||||
C161.6,123.9,161.9,120.8,162.3,117.2z"/>
|
||||
<polygon points="147.4,146.8 147.7,146.8 147.7,164.2 147.4,164.1 147.4,173.8 161.6,173.8 161.6,164.1 160.8,164.2 160.8,146.8
|
||||
161.6,146.9 161.6,134.8 147.4,134.8 "/>
|
||||
<path d="M147.4,203.5c0,0.1,0.4,9.9,3.3,14.3h6.9c2.5-3.8,3.2-13.5,3.2-13.6l0.7-12.9v-16.8h-14.1V203.5z"/>
|
||||
<polygon points="160.8,164.5 161.6,164.5 161.6,146.6 160.8,146.6 "/>
|
||||
<polygon points="147.7,146.6 147.4,146.6 147.4,164.5 147.7,164.5 "/>
|
||||
<path d="M283.6,155.8l-0.8,0v0C283.3,155.8,283.6,155.8,283.6,155.8z"/>
|
||||
<g>
|
||||
<path d="M162,146.6v17.8l120.8-4.7v-4c-10.5,1.1-119.7,5.2-120.5,4.2l120.5-4.2v-7.1L162,146.6z"/>
|
||||
</g>
|
||||
<path d="M25.3,155.8c0,0,0.1,0,0.4,0v0L25.3,155.8z"/>
|
||||
<path d="M147,146.6l-121.3,2.1l0,6.7l120.9,4.2c-1,0.8-113.4-3.5-120.9-3.7v4l121.3,4.7L147,146.6z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
@ -0,0 +1,46 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<script src="jquery-3.2.0.min.js"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="UTF-8">
|
||||
<title>Drone</title>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<div class="title">Drone Oddity <br>#3</div>
|
||||
<p class="instructions">Please remove your shoes, put your head back and enjoy the sound of death figures!</p>
|
||||
</header>
|
||||
|
||||
<div class="transcript" id="transcroll">
|
||||
<embed id="watchlist" scrolling="yes" src="detail_of_attack.txt" height="500px"></embed>
|
||||
</div><!-- /end transcript -->
|
||||
|
||||
<div><a href="http://www.warrug.com"></a>Buy war rugs here...</div>
|
||||
|
||||
<!-- <img src="img/drone1.svg" alt="">
|
||||
<img src="img/drone2.svg" alt=""> -->
|
||||
<img src="img/drone3.svg" alt="">
|
||||
|
||||
<footer>
|
||||
<div class="subtitle">
|
||||
<a href="https://www.documentcloud.org/documents/1010104-tbij-fata-doc-redacted1.html" target="_blank">Detail of attacks</a> by NATO forces/predators in Afghanistan
|
||||
</div>
|
||||
<p>
|
||||
The data is collected and researched by a team from 'The Bureau of Investigative Journalism'.
|
||||
The Bureau has notably undercounted US air strikes in Afghanistan because most air attacks go unreported in open sources including news media.
|
||||
</p>
|
||||
</footer>
|
||||
|
||||
<!--
|
||||
<script type="text/javascript">
|
||||
$('#transcroll,body,html').animate({ scrollTop: $('body').height() }, 400000);
|
||||
</script>
|
||||
-->
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
|
||||
|
@ -0,0 +1,149 @@
|
||||
|
||||
body{
|
||||
background-image: url("img/carpet.jpg");
|
||||
background-attachment: fixed;
|
||||
background-position: center;
|
||||
background-size: 100%;
|
||||
font-family: 'Roboto Mono', monospace;
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono', monospace;
|
||||
src: url(RobotoMono-Regular.ttf);
|
||||
}
|
||||
header{
|
||||
height: 400px;
|
||||
background: black; /* For browsers that do not support gradients */
|
||||
background: -webkit-linear-gradient(black, transparent); /* For Safari 5.1 to 6.0 */
|
||||
background: -o-linear-gradient(black, transparent); /* For Opera 11.1 to 12.0 */
|
||||
background: -moz-linear-gradient(black, transparent); /* For Firefox 3.6 to 15 */
|
||||
background: linear-gradient(black, transparent); /* Standard syntax (must be last) */
|
||||
margin:-10px;
|
||||
padding-top: 60px;
|
||||
}
|
||||
|
||||
.title {
|
||||
padding-top: 40px;
|
||||
text-align: center;
|
||||
font-size: 70px;
|
||||
color: white;
|
||||
margin:auto;
|
||||
font-weight: 500;;
|
||||
padding: 6px;
|
||||
}
|
||||
|
||||
.title a {
|
||||
color:black;
|
||||
text-decoration: underline;}
|
||||
|
||||
a{ text-decoration: none;}
|
||||
.instructions{
|
||||
text-align: center;
|
||||
max-width: 39%;
|
||||
line-height: 26px;
|
||||
font-size: 20px;
|
||||
padding: 10px;
|
||||
margin: auto;
|
||||
font-weight: 500;
|
||||
color: white;
|
||||
/*background-color: rgba(0,0,20,.85);*/}
|
||||
|
||||
.wrap{width: 100%;
|
||||
}
|
||||
.transcript{
|
||||
width:40%;
|
||||
margin:auto;
|
||||
height:3400px;
|
||||
overflow: hidden;
|
||||
/*border: 4px solid;*/
|
||||
|
||||
}
|
||||
.title-transcript{
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
padding: 35px;
|
||||
color: white;
|
||||
background-color: rgba(0,0,20,.9);
|
||||
font-weight: 500;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.title-transcript a{ text-decoration: none;
|
||||
color: white; }
|
||||
|
||||
.transcript embed{
|
||||
background-color: rgba(255,255,255,.9);
|
||||
height:3400px;
|
||||
width: 100%;
|
||||
}
|
||||
footer{
|
||||
height: 500px;
|
||||
background: black; /* For browsers that do not support gradients */
|
||||
background: -webkit-linear-gradient(transparent, black); /* For Safari 5.1 to 6.0 */
|
||||
background: -o-linear-gradient(transparent, black); /* For Opera 11.1 to 12.0 */
|
||||
background: -moz-linear-gradient(transparent, black); /* For Firefox 3.6 to 15 */
|
||||
background: linear-gradient(transparent, black); /* Standard syntax (must be last) */
|
||||
margin:-10px;
|
||||
padding: 20px;
|
||||
}
|
||||
footer p {
|
||||
color: white;
|
||||
max-width: 70%;
|
||||
padding-top: 40px;
|
||||
margin:auto;
|
||||
line-height: 1.5em;
|
||||
font-size: 26px;}
|
||||
|
||||
.subtitle{
|
||||
margin-top: 250px;
|
||||
max-width: 80%;
|
||||
margin:auto;
|
||||
text-align: center;
|
||||
font-size: 46px;
|
||||
color: white;
|
||||
font-weight: 700;;
|
||||
}
|
||||
|
||||
.subtitle a{
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
}
|
||||
|
||||
embed::-webkit-scrollbar-track
|
||||
{
|
||||
/*border: 1px solid black;
|
||||
*/ background-color: #F5F5F5;
|
||||
}
|
||||
|
||||
embed::-webkit-scrollbar
|
||||
{
|
||||
width: 3px;
|
||||
background-color: #F5F5F5;
|
||||
}
|
||||
|
||||
embed::-webkit-scrollbar-thumb
|
||||
{
|
||||
background-color: #000000;
|
||||
}
|
||||
/*////////mobile///////*/
|
||||
|
||||
@media screen and (max-width:767px) {
|
||||
.title{font-size: 30 px;
|
||||
max-width: 90%;}
|
||||
.instructions{max-width: 90%;}
|
||||
|
||||
.transcript{
|
||||
margin-top: 50px;
|
||||
width:90%;
|
||||
height: 3900px;
|
||||
}
|
||||
.transcript embed{height: 3900px;}
|
||||
.header{margin-bottom: 20px;}
|
||||
.footer{height: 600px;}
|
||||
.subtitle{
|
||||
margin-top: 40px;
|
||||
font-size: 26px;}
|
||||
footer p {max-width: 80%;
|
||||
font-size: 15px;}
|
||||
}/*end of 767*/
|
@ -0,0 +1,35 @@
|
||||
#! /usr/bin/env python
|
||||
import re, subprocess, random
|
||||
from time import sleep
|
||||
|
||||
# requires: espeak to be installed
|
||||
|
||||
dic={
|
||||
"narrator": "en-us",
|
||||
}
|
||||
|
||||
f=open("detail_of_attack.txt","r")
|
||||
txt=f.readlines()
|
||||
for line in txt:
|
||||
print line
|
||||
# play time
|
||||
subprocess.call(["espeak", "-v", dic['narrator'], "-p", "20"]) # narrator speaks: time and character
|
||||
sleep(0.5) #short pause before sentence
|
||||
print sentence
|
||||
if "*CLASSIFIED*" in sentence: #"*expletive*" in sentence is True:
|
||||
sentence_parts=re.split(r"(\*\w+\*)", sentence)
|
||||
print sentence_parts
|
||||
for part in sentence_parts:
|
||||
if part == '*CLASSIFIED*':
|
||||
print 'EXPLETIVE', part
|
||||
subprocess.call(["aplay", 'swear.wav'])
|
||||
else:
|
||||
print 'SPEECH', part
|
||||
subprocess.call(["espeak", part, "-v", voice]) # character speaks: his
|
||||
sleep(float(random.randint(1,10))/100)
|
||||
else: # line w/out time or character (narrator)
|
||||
print "NARRATOR"
|
||||
subprocess.call(["espeak", line, "-v", dic['narrator'], "-p", "20"])
|
||||
|
||||
sleep(1) # make pause after each text line
|
||||
|