Merge branch 'master' of git.xpub.nl:/var/www/git.xpub.nl/repos/tgc3
@ -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,120 +1,74 @@
|
|||||||
#N canvas 457 24 739 687 10;
|
#N canvas 398 23 553 723 10;
|
||||||
|
#X declare -lib OSC;
|
||||||
#X declare -lib net;
|
#X declare -lib net;
|
||||||
#X declare -lib unpackOSC;
|
#X text 372 516 attack;
|
||||||
#X text -22 232 #ikstem;
|
#X text 443 517 release;
|
||||||
#X text 55 233 #gestemd;
|
#X obj 374 653 line~;
|
||||||
#X obj -69 492 dac~;
|
#X obj 176 638 *~;
|
||||||
#X obj -37 134 unpack s s s;
|
#X obj 373 536 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
|
||||||
#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
|
|
||||||
-1;
|
-1;
|
||||||
#X obj 89 254 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
|
#X obj 447 539 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
|
||||||
-1;
|
-1;
|
||||||
#X text 45 133 tag \, hashtag \, time;
|
#X msg 383 564 stop;
|
||||||
#X obj -3 162 select #ikstem #gestemd both;
|
#X text 70 455 #ikstem;
|
||||||
#X obj 0 252 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
|
#X text 188 454 #gestemd;
|
||||||
-1;
|
#X obj 176 693 dac~;
|
||||||
#N canvas 692 710 276 254 ikstemenv 0;
|
#X obj 34 142 unpack s s s;
|
||||||
#X obj 72 80 line~;
|
#X obj 19 243 print;
|
||||||
#X msg 81 45 0 50;
|
#X obj 133 345 select #ikstem both;
|
||||||
#X msg 72 -15 1 1;
|
#X text 264 345 #gestemd;
|
||||||
#X text 99 -13 1 msec attack;
|
#X obj 373 587 del 50;
|
||||||
#X text 118 44 50 msec release;
|
#X msg 444 610 0 250;
|
||||||
#X obj 88 15 del 10;
|
#X msg 308 587 30 30;
|
||||||
#X obj 72 -44 inlet;
|
#X obj 488 567 del 50;
|
||||||
#X obj 25 170 outlet~;
|
#X msg 373 611 1 500;
|
||||||
#X obj 25 -45 inlet~;
|
#X obj 212 198 loadbang;
|
||||||
#X obj 25 146 *~;
|
#X msg 211 244 \; pd dsp 1;
|
||||||
#X text 134 14 10 msec sustain;
|
#X text 176 446 comment;
|
||||||
#X connect 0 0 9 1;
|
#X obj 118 585 *~ 10;
|
||||||
#X connect 1 0 0 0;
|
#X obj 34 48 udpreceive 127.0.0.1 4000;
|
||||||
#X connect 2 0 0 0;
|
#X obj 34 92 unpackOSC;
|
||||||
#X connect 5 0 1 0;
|
#X obj 364 23 import OSC;
|
||||||
#X connect 6 0 2 0;
|
#X obj 365 55 import net;
|
||||||
#X connect 8 0 9 0;
|
#X obj 149 148 print;
|
||||||
#X connect 9 0 7 0;
|
#X obj 182 539 osc~ 880;
|
||||||
#X restore -69 344 pd ikstemenv;
|
#X msg 195 477 880;
|
||||||
#X text -16 289 comment;
|
#X obj 271 500 line~;
|
||||||
#N canvas 692 710 276 254 bothenv 0;
|
#X msg 266 434 1 10;
|
||||||
#X obj 72 80 line~;
|
#X msg 318 494 0 30;
|
||||||
#X obj 72 -44 inlet;
|
#X obj 318 451 b;
|
||||||
#X obj 25 170 outlet~;
|
#X obj 318 473 delay 10;
|
||||||
#X obj 25 -45 inlet~;
|
#X msg 68 480 220;
|
||||||
#X obj 25 146 *~;
|
#X text 16 34;
|
||||||
#X text 137 44 5 second release;
|
#X connect 3 0 9 0;
|
||||||
#X text 114 -14 500 msec attack;
|
#X connect 3 0 9 1;
|
||||||
#X msg 72 -15 1 50;
|
#X connect 4 0 16 0;
|
||||||
#X obj 88 15 del 100;
|
#X connect 4 0 14 0;
|
||||||
#X text 144 15 100 msec sustain;
|
#X connect 4 0 17 0;
|
||||||
#X msg 81 45 0 2000;
|
#X connect 5 0 15 0;
|
||||||
#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 connect 5 0 6 0;
|
#X connect 5 0 6 0;
|
||||||
#X connect 6 0 4 0;
|
#X connect 6 0 14 0;
|
||||||
#X connect 8 0 0 0;
|
#X connect 10 1 12 0;
|
||||||
#X connect 9 0 8 0;
|
#X connect 12 0 35 0;
|
||||||
#X connect 10 0 0 0;
|
#X connect 12 0 31 0;
|
||||||
#X restore 14 344 pd gestemdenv;
|
#X connect 12 1 29 0;
|
||||||
#X obj 125 409 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
|
#X connect 12 1 31 0;
|
||||||
1;
|
#X connect 14 0 18 0;
|
||||||
#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 191 87 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 0;
|
||||||
#X connect 15 0 2 1;
|
#X connect 16 0 2 0;
|
||||||
#X connect 16 0 18 0;
|
#X connect 17 0 15 0;
|
||||||
#X connect 17 0 16 0;
|
#X connect 18 0 2 0;
|
||||||
#X connect 19 0 2 0;
|
#X connect 19 0 20 0;
|
||||||
#X connect 19 0 2 1;
|
#X connect 23 0 24 0;
|
||||||
#X connect 20 0 17 0;
|
#X connect 24 0 10 0;
|
||||||
#X connect 25 0 15 0;
|
#X connect 24 0 27 0;
|
||||||
#X connect 26 0 13 0;
|
#X connect 28 0 22 0;
|
||||||
#X connect 27 0 19 0;
|
#X connect 28 0 3 0;
|
||||||
#X connect 31 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,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/
|
Before Width: | Height: | Size: 931 KiB After Width: | Height: | Size: 266 KiB |
@ -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 |
Before Width: | Height: | Size: 970 B 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 |
Before Width: | Height: | Size: 1.3 KiB 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
|
||||||
|
|