D
U
C
ED
B
Y
A
N
A
U
TO
D
ES
K
ED
U C T
U
D PR O N A L O ED U C A TI ES K D TO U A N A Y B ED C U D O PR
- M AT E R IA L C O D E -
n
su
ED
C
U
D
O
PR
//
an
Y
B N
A A TO
U E
D
w
ED
or
k
SK A
el
C
d
U
s
A
N
-
fi
TI O
u
d
PR
ie
L
m aa D
ES K
U
C
ED
Y
B
A
N
TO
U
A
C
U
ED
A
N
O
TI
A
L
PR
U
D
O
ed
T
ia
C
U
D
st
O
//
A
TI
O
N
A
L
PR
O
SOUND COLUMNS
h at
C
D
U
C
T
CONTENTS + invisibility
1
+ overwriting
15
+ vibrations
27
+ formations
43
+ material code
59
+ video documentation
66
INVISIBILITY We are surrounded by the intangible. Our senses access to only a small range of information within broad spectra of events and processes that shape the occurences and experiences of the everyday. In ‘Field Work’, we explored site through gathering evidences of the intangible world, and processing these gatherings into visual representations, sometimes with scientific rigour, sometimes with pure intuition, in the hope that we might elucidate some of the characteristics of the invisible. The following pages document early attempts to find a visual language for the unseen.
1
Our first field visit took us to the Middlesex filterbeds. Over the course of several hours, we gathered data on the subjective and physical experiences of two subjects in the park. We mapped a path through the site and at 10 metre intervals took readings on light levels (lux), sound levels (dB), temperature (C), Pulse (bpm), the reported primary sense (one subject was blindfolded), level of anxiety (scaled between 0 - 10), and body temperature. These readings were then subsequently interpreted as a series of fields generated around the path as viewed in plan, with the ‘experience’ of the site expanding and contracting like magnetic fields based on the readings above. The data was processed in Grasshopper for Rhino.
2
3
4
Expanding and Contracting Fields 01
5
Expanding and Contracting Fields 02
6
Expanding and Contracting Fields 03
7
PRODUCED BY AN AUTODESK EDUCATIONAL PRODUCT
apple aso gall zoe la zoel
zayn
n
pa
ga
yo
x
s
(
ox
ky
e
j
li
ps
ki
ke
m
ll
y
ka
la
ky
rd
li
e
dr
je
aw
s
kh
um
as
nn
on
al
o
hi
an
er
he
r
li
ps
ny
a
ru
me
wa yn ww e e 2k we 15 ed en tu ck er
C D.
)
1
2
be w. .c go om og ww le w. .c fa o. ce uk bo ww ok w. .c go om og le .c om
on
us
r
wa
vue
wi ki pe di a wi lk in so ns wi ck le s
vir medgin ia
ver y ucas
urban outfitte rs
uk top 40
urban dictiona ry
universa jobmatchl
tfl
ts or sp rect di
ys ur
er
sb
nd ta
la
y
nd
sa
sa
is
r ai
ma
an ry
il
ri
s
ws ne
t or sp
sk
y sk
al
g er nd nkin ta sa e ba n li on er nd ta sa
n ai sp
tesco
twitte
p topsho
r twitte
tesco
tfl
direct tesco
r
ucas
lag
afo vod urban outfitte rs
vir
ip
ro
e ov tm gh
r ai
nd
s
er
is
an ry
la
ri
ia
uk vehi cle tax
medvirg ia in ema il vir medgin ia rb
v ri
ts
nna
ww
ww
w.
yo
ut
u
wo
wh
rl
it
d
e
wo
(U
r
gt in
wa
S
rl
d
sh
ce
s we
wa
ns
da
up
gin
esh
vil
ne
ro
r
qp
te
it
th
tw
ab e
n
el i
ee
qu
e
ad
tr
io
tr
pa
vie
e
my
te
vir
vod voi
states united es york tim the new sp
y
rect ion i mi naj
es
r
nba
p
TA
r
ab
iz
el
z
om
nd
ou
ar
PE 4
only
i ec
he
nicki minaj only
n
ew
h
et
es
ot
fl
ng
at
y
nicki minaj
qu
ee
ps
only
an
ford
care
mufc
national register of historic places
jord
clif
ck
ba
er
ar t
qu
w
po to
ot a
an
we
ah
otto man empi re orde brit r of th ish empi e re ohio
turkey
y
ael
ael
mari
new york
texas
ver
mich mich
er
gi in
y
native american (US census)
co
ield
ia
or
ct
vi
qu
ia t
rdi the gua
sk
usca
mexi
midf
n
ee
qu
pl an t pr o of vin ir ces an
onta
nd
la
ns
ee
qu
nd
po rio
new york city
qu
la
o2 new look
moth
moll
ge
oran
en
e
d s an mark cer spen
national lottery
ec
eb
pi nt er es t po s fi t co nd de er
outl sign ook in
es
ov tm gh ri
ne
st
natwest online banking
ed
r
onli
pa
ook
or
ve
ths
yp a
outl
sw
gin
next
sc
in
msn
ie
iz
qu
l
S) (U y rt pa n n io ca at li is ub n p y ma ia re it ro ss ic ru hn s) et su d en an c S e c (U ra
t
le
iz
qu
f
po
s
myma
sw
ev
ot
qu
odeo
lt
s
qu
am
co
id
t
es
er
nt
pi n
natwest
su
oran
ic
qu
bb
re
li
ld ra ge n tz so fi in y ml rr to la s s ui ui lo lo on nd lo ) us ns ce S (U a no er ti pt la do pi le on n nd ig lo re ve so es of tat s
ge
new look
msn
ds oy ll g b ts kin ds ban oy ll net r in te ed nk
in
lan
s
of
d
ui
kq
po s fi t co nd de er
fice
li
y
mata
od
qu
d
rl
wo
pc
l wi
er
national rail
iz
ook
outl
ro
li
d s an mark cer spen
in
wo
next
y
mo
fm
maps
er
ed
le
qv
al
yp
pa
ro
tt
ds
ds
lo
on
in
nt
tt
zi
e
st
uc
ra
nk
li
dl
ke
nt
ke
li
li
oo
ss
ne
ke
ky
tt
e
li
rd
lo
pr
ki
c
oy
ic
rb
oa
ll
e
zi
e
ke
yb
ar
ki ti
ki
g
ry
er
hi
to
yb
es
hn
jo
n
er
fr
om
ib
gh
be
le
ja y
n
in
ji a
st
st
li
ju
na
re
ur
je ws
jo
zz
nt
id
qu
ic
ka
n
ja
pa
ja
ke
co
c
dd
t
ke
kf ki
t
e
ea
s
ja ck po tj jo oy bc pl en us tr e
wi
st
le
ju
in st ag ra ig m gy az al ea te rs te ll ar IS IS
in
an
a
ir
di
ti m
hn
e
jo
tr
ct
in
m
da rd
ns e
i
st an
ra
en
t
bc
ea
jo
st
ag
ea
st
ju
sa
ir an
in
ed
ik
ye r
de
in
pl a
am
r
jd
s
een
v
ye
ag r
it
st
styles
hallow
harry
)
in
v
6
pl a
ne
hunter moore
h
hong kon g
d
y
harvar
x
hungar
l
ds
it
ic (US census
hispan
x
social media social media
ho
n ki
t gain twee
ano gia sori e
da
shore
gamergat
gastropo
geordie
hsbc
s ic name em geograph ion syst informat
halifa
gmina
google images
hotmai l sign in
germany
google maps
hotmai
halfor
gumtree
hsbc
gmail
google maps
halifa
news news other other services services
ip
rd
ok
gmail
informative informative
l
fo
ebo
st firice cho
y tas l fan tbal foo
commercial commercial entertainment entertainment
hotmai
THE THE TOP TOP FOUR FOUR (UK) (UK)
b ro
nce
fb
ok ebo facogin l
fac
v fri
vic ky geo rdi vin e s cen hor t j o r e ack eco son rd ste al vev my o gir l
fra
a
vev
s
ol
ox
xb
ok
uber
am
v
UKIP
nh
uk
ay eb
lm
be
fri
united geologic states al surv ey united states census bureau united kingdom
ne
de
da ma il il y
wi s
nick
one
di
ion
omar
nate hatch
PRODUCED BY AN AUTODESK EDUCATIONAL PRODUCT
8
s
le
z
du
d
ys
hn
re
rl
rr
am
y mon har th fif gj ber fry an oce nk yet fra ld l o fee n tio rma ads nfo tand s l i era ing nt fed cess pla pro ing r) wer cce flo (so ll tba foo
wo
cu
jo
a su
ne
e
nh
d pe or rk ot in hy s
t je sy ea
united
x
a
t
news
bbc
zoop
be
ce ci
amazon
la
her
i on ly li m ne ai l
de
d mi ai rr ly or da ma il il y
c wa arp re ho ho ne us e
weat
ub
ut
da
es
ys
t
ik e
sa
bbc
at ki ic oc t ia de pa ti fe rt de on nd y of pa e (U r fo r fr tm S) ot an en ba ce ts ll )
eb
ukraine
o
yo
xe
bbc
argos
bi
rr
spor
s
um
ay eb
on
xb
amazon uk
zara
ho
ya
e
ox
home
bbc
me
ne
in
oy
dr
cr
ss
ro
ee
ebo
o tony rom
c
fa
x
zara
ch
cb cu
asda
uk
t
li
rt
wb
e
mo
(a
bc
spor news
ak
de
ea
r to
d
ma
co
is
a
xh
rl
uk n ay i ebign s t je sy
e ub r ut te yo ver n co il ma o ho ya
wo
um
ug
as
dr
gl
e
ob
.m
er
rm
e st
ll
da
fac
e tom inc
zara
il
a
we
xc
na
dr
do
da
e
en
r
e th
ia
a
th
ay
l taco bel swift
e
ub
ut
yo xe
of
o rs ex te pe n ra an ee ev sh a ol ed eb ne zo me ti n er pe ge st ro ua ea eu ng la h d an gl en
ya
or
ct
fa
x
bbc
h
x
s
ca
her
rn
in
ie
weat
fo
ch
tr
cb
bbc
argos
la
zoop
oo
un
eb
taylor
ma
li
co
uk
t
o
ho
ya
ca
il
amazon
er prop la le zoopfor sa
il
0
36
x bo
n
s
y
bbc ty
yt
ay
xr
ow
v
oy
mc
co
sh
amazon uk
br
er
wb
lt
braz
bbc
s
rt
co
co
ay eb
ha
g
an
xi
ri
ca
d
bakh
BING
zara
ji
xb
ch
tch
boar
aa route planner
k zoos
u
yo
)
e ol
n co
pc
e
b tu
t
erba
bbc
animal
code
ZIP
e
l ya
or
f
x
zimb
ia
av
sl
go
t ac
tlis
cumb
bill
association football
abwe
e
ir
sh
rk
yu
e
on
shor
nce
beth
dict
arthropod
ch zuri
yu
yo
ox
xb
o xb
a sn
eb
zagr
rg
be
ng
a
in
xt
d'or beyo
bene
WIKIPEDIA australia
ug
th
g
un
yo
k
mali
e
ub
ut
yo
on
avatar a potatoe flew around my room
zayn
ts
ball
andrew lawrence
A series of other drawings attemped to map other unseen elements - the search preferences by letter of the alphabet of four major search engines (left), and the movements of a salsa dance mapped with long exposure photography (above).
9
The intial experiments into data visualisation soon prompted the realisation that much more meaningful graphics could be produced with larger quantities of data - quantities larger than could be collected and interpreted using manual techniques. Experiments with the ‘Processing’ software enabled real time data gathered through various computer run methods to be quickly transcribed and given visual characteristics such as weight, opacity, colour, and texture. A first experimentation with the software produced this first drawing - a map of mouse movements over a three hour time period.
10
import java.awt.*; import java.applet.*; import java.awt.event.*; import java.awt.event.MouseListener; import java.awt.event.MouseEvent;
int s = second(); if (lastX == mouse.x && lastY == mouse.y) { stroke(255,0,0,5); strokeWeight(1); line(mouse.x-5, mouse.y, mouse.x+5, mouse.y); line(mouse.x, mouse.y-5, mouse.x, mouse.y+5); }
import processing.pdf.*; Point mouse; float weight = .05; int lastX, lastY;
int clicked = 0;
else { stroke(speed*5, strokeColor, strokeColor); strokeWeight(.2); line(lastX, lastY, mouse.x, mouse.y); weight = 0.2; }
int px; int py;
px=mouse.x; py=mouse.y;
void setup() { background (255); size(displayWidth, displayHeight); mouse = MouseInfo.getPointerInfo().getLocation();
lastX = mouse.x; lastY = mouse.y;
int strokeColor = 0;
}
lastX = mouse.x; lastY = mouse.y; smooth(); beginRecord(PDF, “Mouse Record_General2.pdf ”); println(“running”);
void draw() { mouse = MouseInfo.getPointerInfo().getLocation(); float speed = abs(mouse.x - px)+abs(mouse.y - py);
}
void keyPressed() { if (key == CODED) { if (keyCode == UP) { endRecord(); exit(); } } } public void mousePressed(MouseEvent e) { clicked++; println(clicked); }
11
12
Mouse Tracking (3HRS)
13
With the power to document the unseen (and now the element of time) revealed through relatively simple coding sketches, it was possible to begin conceiving more ambitious drawings that took more site specific information.
14
OVERWRITING There is an idea that every single occurence in the universe is recorded into waves (vibrations) that expand infinitely from event sources. This expansion, whilst technically infinite, very quickly decays into something that is for all intents and purposes, undetectable - producing a narrative of overwriting. This next chapter concerns itself with this principle - that data, through time, and through overlap can begin to produce infinitely intricate patterns that reveal characteristics of the whole, while the details disappear into an uninterpretable mess of overlaps and intersections. Nevertheless, if one were determined enough (and had unimaginable computing power) they could read every piece of information gathered, now embedded in the drawn representation. Dealing with waves - most of the following sketches are representations of sound.
15
These first two sketches take two pieces of music ‘Time’ by Hans Zimmer, and ‘Claire de Lune’ by Debussy (somewhat arbitrarily selected, although their respective structures offered good material for visualisation!). The waveforms are mapped in the Y axis, with time progressing along the X axis. Colour corressponds to the waveform amplitude, with loud noises being recorded as purple and soft noises as red. The sketches use the Minim library for Processing to get live audio input.
16
import ddf.minim.*; import ddf.minim.analysis.*; import ddf.minim.signals.*; import processing.pdf.*; Minim minim; AudioInput in; int delay = 2; int yPos=0; int s=second();
void setup() { size(displayWidth, displayHeight, P3D); minim = new Minim(this); in = minim.getLineIn(); background(0); frameRate(10); beginRecord(PDF, “Sound Record_New.pdf ”); } void draw() { fill(0, 0, 0, 0); rect(0, 0, width, height); stroke(0, 0, 255, 2); for (int i = 0; i < in.bufferSize() - 1; i++) { stroke(150, 0, abs(in.left.get(i+1)*10000), 20); line(s + in.left.get(i)*150,i, s+in.left.get(i+1)*150, i+1); //line(500 + in.left.get(i)*300,i, 500+in.left.get(i+1)*300, i+1); stroke (255,50);
fill(0,0,0,0); //rect(s, 400, in.left.get(i)*400, in.left.get(i+1)*400); //line(i, 600 + in.right.get(i)*50, i+1, 600 + in.right. get(i+1)*50); } yPos=yPos+1; s=s+1; String monitoringState = in.isMonitoring()? “enabled”:”disabled”; //text(“Input monitoring is currently “ + monitoringState + “.”, 5, 15); } /*void keyPressed() { if (key == ‘m’ || key == ‘M’) { if (in.isMonitoring()) { in.disableMonitoring(); } else { in.enableMonitoring(); } } }*/ void keyPressed() { if (key == CODED) { if (keyCode == UP) { endRecord(); exit(); } } }
17
18
Soundscape: Claire de Lune (Debussy)
Soundscape: Time (Hans Zimmer)
19
A variation on the previous sketch changed the representation of time from moving along the X axis to a rotation of new waveforms around the drawing centre. This opened up the possibility that the drawing could potentially overwrite itself indefinately, with each minute of recorded audio layering over the last. Tweaking the colours and waveform amplitudes resulted in a swirling drawing, tying back to the idea of event waves, endlessly propagating through the galaxy.
20
import ddf.minim.*; import ddf.minim.analysis.*; import ddf.minim.signals.*; import processing.pdf.*; Minim minim; AudioInput in; int delay = 2; int yPos=0; int s=second();
void setup() { size(displayWidth, displayHeight, P3D); minim = new Minim(this); in = minim.getLineIn(); background(0); frameRate(10); } void draw() { fill(0, 0, 0, 0); rect(0, 0, width, height); stroke(0, 0, 255, 2); translate(width/2, height/2); rotate(radians(frameCount*0.3)); for (int i = 0; i < in.bufferSize() - 1; i++) { stroke(255, 500*abs(in.left.get(i/2)));
// rotate around the center of the sketch //rotate(radians(frameCount*.1)); //line(s + in.left.get(i)*150, i, s+in.left.get(i+1)*150, i+1); line(20 + in.left.get(i/2)*100, i, 20 +in.left.get((i+1)/2)*100, i+1);
stroke (255, in.left.get(i/2)); fill(0, 0, 0, 0); //rect(s, 400, in.left.get(i)*400, in.left.get(i+1)*400);
//line(i, 600 + in.right.get(i)*50, i+1, 600 + in.right.get(i+1)*50); } yPos=yPos+1; s=s+1; //String monitoringState = in.isMonitoring()? “enabled”:”disabled”; //text(“Input monitoring is currently “ + monitoringState + “.”, 5, 15); } /*void keyPressed() { if (key == ‘m’ || key == ‘M’) { if (in.isMonitoring()) { in.disableMonitoring(); } else { in.enableMonitoring(); } } }*/ void keyPressed() { if (key == CODED) { if (keyCode == UP) { endRecord(); exit(); } } }
21
22
Sound Galaxy 01
23
24
25
With the experimentations into Processingâ&#x20AC;&#x2122;s ability to record, analyse and manipulate sound waves well underway, the missing step was the link to the physical world. Some sort of hardware, a field device, was needed to enable the access of site specific data to be input into these Processing sketches.
26
VIBRATIONS A sound wave is just a vibration through a medium. The sounds we are used to travel through air, but all around us, materials we donâ&#x20AC;&#x2122;t normally consider as sources of sound, carry the vibrations of the earthâ&#x20AC;&#x2122;s events with them. This chapter investigates material vibration - the recording of sounds propagating through different solid objects.
27
Q. How does one capture material vibrations? A. With a contact microphone. It turns out that it is rather easy to make a contact microphone. A cheap and readily accessible Piezo-Electric disc is at its core - translating detected vibrations into electromagnetic signals. Then it is literally a case of rewiring an old audio input cable to receive the Piezo signal. Encase the entire device in tape and you have a contact microphone.
28
Our second field visit took us to Borough Market, a site rich in material vibrations (and deliciousness!). Situated under a rail hub, these transport vibrations find many structures through which to travel to ground. We were also blessed with rain on the day of our visit, offering another source of variable sound. Add to that the general bustle of people walking around and you get quite a diverse site to record!
29
Three of the recordings made were particularly good - a concrete column, a metal pipe, and a PVC pipe tied to a column. These recordings made for good visuals with the sound galaxy sketch, with the resonant wavelengths of each material clearly visible. In the order that they next appear, the drawings show: 1. Aluminium Pipe 2. PVC Pipe 3. Concrete Column
30
import ddf.minim.*; import ddf.minim.analysis.*; import ddf.minim.signals.*; import processing.pdf.*;
fill(0, 0, 0, 0); if (frameCount==1200) { noLoop(); } //rect(s, 400, in.left.get(i)*400, in.left.get(i+1)*400);
Minim minim; AudioPlayer in; int delay = 2; int yPos=0; int s=second(); void setup() { size(displayWidth, displayHeight, P3D); minim = new Minim(this); in = minim.loadFile(“R05_0009.WAV”, 2048); in.loop(); background(0); frameRate(10); } void draw() { fill(0, 0, 0, 0); rect(0, 0, width, height); stroke(0, 0, 255, 2); translate(width/2, height/2); rotate(radians(frameCount*0.3)); for (int i = 0; i < in.bufferSize () - 1; i++) { stroke(255, 1500*abs(in.left.get(i/2))); // rotate around the center of the sketch //rotate(radians(frameCount*.1)); //line(s + in.left.get(i)*150, i, s+in.left.get(i+1)*150, i+1); line(20 + in.left.get(i/2)*500, i, 20 +in.left.get((i+1)/2)*500, i+1); stroke (255, in.left.get(i/2));
}
//line(i, 600 + in.right.get(i)*50, i+1, 600 + in.right.get(i+1)*50); } yPos=yPos+1; s=s+1;
//String monitoringState = in.isMonitoring()? “enabled”:”disabled”; //text(“Input monitoring is currently “ + monitoringState + “.”, 5, 15); /*void keyPressed() { if (key == ‘m’ || key == ‘M’) { if (in.isMonitoring()) { in.disableMonitoring(); } else { in.enableMonitoring(); } } }*/ void keyPressed() { if (key == CODED) { if (keyCode == UP) { endRecord(); exit(); } } }
31
32
Sound Galaxy (Aluminium)
33
34
Sound Galaxy (PVC)
Sound Galaxy (Concrete)
35
In an effort to make the graphics more subtle, more abstract, and more beautiful, a Perlin Noise transformation was added in Processing. The sound recordings then distorted and blurred the resultant image to differentdegrees. However, whilst producing undoubtedly more beuatiful drawings, almost all the readability of the audio information was lost - with the Perlin Noise transformation being the primary driver of the resulting forms. Still, a worthwhile segue.
36
import ddf.minim.*; import ddf.minim.analysis.*; import ddf.minim.signals.*; import processing.pdf.*; //import peasy.*;
void draw() { translate(displayWidth/2, displayHeight/2); for (int a = 0; a < in.bufferSize ()-1; a += 1) { pushMatrix(); //translate(x, y); rotate(a); stroke(0, 0, 0, map(in.left.get(a), -0.1, 0.1, 0, 50)); noiseDetail(8, 0.5); float r = (1500 * pow(noise(cos(a), sin(a), frameCount * 0.01), 4));
Minim minim; AudioPlayer in; //PeasyCam cam; float x = 500; float y = 500;
translate(0, r); line(0, 0, 0, 0); popMatrix(); //println(in.left.get(a));
void setup() { size(displayWidth, displayHeight); noiseSeed(0); //cam = new PeasyCam(this,100);
}
minim = new Minim(this); in = minim.loadFile(“R05_0009.WAV”, 2048); in.loop(); background(255); fill(255, 20); stroke(0, 20);
if (keyPressed == true) { save (“0007_ConcreteColumn.jpg”); noLoop(); println(“saving”); }
}
}
//println(1/in.left.get(a));
37
38
Perlin Noise (Aluminium)
39
40
Perlin Noise (PVC)
Perlin Noise (Concrete)
41
All this digital processing was giving new form to unseen vibrations, but so far the forms were remarkably two dimensional, and somewhat detached from the materiality that drove them. What was needed was 3D, and some good old fashioned, physical, stuff.
42
FORMATIONS (SOUND COLUMNS) There exists in all solid things a history of their context, carried and recorded in microscopic material vibrations. These vibrations can be captured, offering insight into a material’s voice (the way in which it carries vibrations as determined by its structural properties), and a material’s context. Sound Columns gives expression to these miniscule and invisible waves, exploring the site of London’s Borough Markets by tapping into specific and unnoticed materials - a concrete column, a metal handrail, a PVC rain pipe. A contact microphone allows an auditory precision normally impossible, and the capture of sound through solids rather than through air opens up new experiences of the site. The recordings, then processed digitally, are given 3 dimensional form. A 2D spectral analysis of the waveforms is wrapped around the objects recorded - all cylinders - giving them a new skin, translating volume, frequency, and time into a new geometry for each object. A second translation of these digital envelopes back into a physical object brings the project full circle, re-embedding material recordings into material form.
43
44
import ddf.minim.*; import ddf.minim.analysis.*; import ddf.minim.signals.*; import hypermedia.net.*; UDP udp; Minim minim; AudioPlayer in; FFT fft; int delay = 2; int yPos=0; int s=second();
void setup() { fft = new FFT(512,44100); size(100, 100); udp = new UDP (this, 4000); udp.listen(true); minim = new Minim(this); minim.debugOn(); in = minim.loadFile(“R05_0004.WAV”, 512);
}
in.loop(); background(0); frameRate(10);
void draw() { String ip = “192.168.0.33”; int port = 5000; String dataOut = “”; fft.forward(in.left); for (int i = 0; i<fft.specSize(); i++) { dataOut+=””+fft.getBand(i) + “&”; }
}
udp.send(dataOut, ip, port); println (dataOut);
45
46
47
48
Sound Columns: Render
49
D
O
U
C
T
PR O D U C ED
C
PR
Y
B
U D
L
N
A
O PR
A
N
N
O
A
TI
Y B
A
ED
C
K
U
ES D
ED
TO U A
K
ES
ED
D
TO
A C U
U
O TI
A
L A N
N
PR
A
D O
Y
U
B
T C C
ED
U
ED
C
D
U
O
B
D
Y
O
PR
A
N
PR
A
K
D ES
U TO
ED
A TI
C
U
N
O
A L
T
C
U
D
O
PR
50
SOUND COLUMN 01
ALUMINIUM HANDRAIL + FINGERS
A
U
TO
D
K
ES
ED
U
C
A
TI
O
N
A
L
PR
O
D
U
C
T
D
O
U
C
T
ED
C
D U
O
PR
C U
PR
B Y
D
L
N
A
O PR
A
N
N
O
A
TI
Y B
A
ED
C
ED
U
K
ED
ES D
K
ES
TO U A
D
TO
A C U
U
O TI
A
L A N
N
PR
A
U
Y
D O
B
T C C
ED
U
ED
C
D
U
O
B
D
Y
O
PR
A
N
PR
K
ES
D
TO
A U
SOUND COLUMN 02
PVC PIPE + RAIN
ED
O
TI
U C A
L
N A
T
U C
D
O
PR
51 A
U
TO
D
K
ES
ED
U
C
A
TI
O
N
A
L
PR
O
D
U
C
T
D
O
PR B Y N
A A ES K
D
U TO ED
N
O
C A TI
U
A L
T
C
D U
O
PR
52
U C ED
ED
T
C U D
C
O PR
U
U
D
A
O
N
PR
A
L
Y B
A
U
N O TI
ED
A
K
C
ES
U
D
ED
TO
K
L
ES
A
D TO
N
U
O
A
TI
N
A
A
C
Y
T
B
C
ED
U
C
D
U
O
D O
PR
PR
SOUND COLUMN 03
CONCRETE COLUMN + TRAIN
Sound Columns (LEFT TO RIGHT - Aluminium Handrail, PVC Pipe, Concrete Column
53
Sound Columns 01 - Aluminium Handrail + Fingers
54
Sound Columns 02 - PVC Pipe + Rain
55
Sound Columns 03 - Concrete Column + Train
56
Exhibition
57
The layering of digitally recorded, manipulated, and encoded sound into physical form gave the experimentations a new edge, and allowing a more experiential translation of sound into other senses, perhaps most notably touch. There was a beauty to be found in the static nature of these objects, almost a way to halt the inevitable spread and decay of the vibrations recorded (by now weeks old).
58
MATERIAL CODE At the end of the day, these drawings and scultpture all just served to inform a process - a looping process of recording, translating, making, reinterpreting and so on. And so, to accompany the Sound Columns, there had to be just one last Processing sketch, a live record of the method through which they were generated, and a culminating piece to combine the research and coding learned with the early sketch explorations.
59
60
import processing.dxf.*; import ddf.minim.analysis.*; import ddf.minim.*; import peasy.*; FFT fftLin; FFT fftLog; PeasyCam cam; Waveform audio3D; Minim minim; AudioInput microphone; boolean record; PFont font; float camzoom; float maxX = 0; float maxY = 0; float maxZ = 0; float minX = 0; float minY = 0; float minZ = 0; void setup() { size(displayWidth, displayHeight, P3D); //screen proportions noStroke(); //cam = new PeasyCam(this,100); frameRate(5); minim = new Minim(this); microphone = minim.getLineIn(Minim.STEREO, 4096); //repeat the song background(255); fftLog = new FFT(microphone.bufferSize(), microphone.sampleRate()); fftLog.logAverages(1, 2); //adjust numbers to adjust spacing; float w = float (width/fftLog.avgSize()); float x = w; float y = 0; float z = 50; float radius = 10; audio3D = new Waveform(x, y, z, radius); } void draw() { background(255); directionalLight(126, 126, 126, sin(radians(frameCount)), cos(radians(frameCount)), 1); ambientLight(102, 102, 102);
for (int i = 0; i < fftLog.avgSize (); i++) { float zoom = 1; //float jitter = (fftLog.getAvg(i)*2); //println(jitter); PVector foc = new PVector(audio3D.x, audio3D.y, 0); PVector cam = new PVector(zoom, zoom, -zoom); camera(foc.x+cam.x-300, foc.y+cam.y+200, foc.z+cam. z+50, foc.x-100, foc.y-50, foc.z, 0, 0, 1); } //play the song fftLog.forward(microphone.mix); audio3D.update(); //audio3D.textdraw(); audio3D.plotTrace(); } void stop() { // always close Minim audio classes when you finish with them microphone.close(); // always stop Minim before exiting minim.stop(); super.stop(); } class Waveform { float x, y, z; float radius; PVector[] pts = new PVector[fftLog.avgSize()]; PVector[] trace = new PVector[0]; Waveform(float incomingX, float incomingY, float incomingZ, float incomingRadius) { x = incomingX; y = incomingY; z = incomingZ; radius = incomingRadius; } void update() { plot(); } void plot() { for (int i = 0; i < fftLog.avgSize(); i++) { //int w = int(width/fftLog.avgSize()); x = 0.75*sin(radians(i*12)) * fftLog.getAvg(i)+100*si n(radians(i*12)); y = frameCount*3;
z = 0.75*cos(radians(i*12)) * fftLog.getAvg(i) + 100*cos(radians(i*12)); stroke(0); point(x, y, z); pts[i] = new PVector(x, y, z); //increase size of array trace by length+1 trace = (PVector[]) expand(trace, trace.length+1); //always get the next to last trace[trace.length-1] = new PVector(pts[i].x, pts[i].y, pts[i].z); } } void textdraw() { for (int i =0; i<fftLog.avgSize (); i++) { pushMatrix(); translate(pts[i].x, pts[i].y, pts[i].z); rotateY(PI/2); rotateZ(PI/2); fill(255, 200); text(round(fftLog.getAvg(i)*100), 0, 0, 0); popMatrix();
} } void plotTrace() { stroke(255, 150); int inc = fftLog.avgSize();
for (int i=1; i<trace.length-inc; i++) { if (i%inc != 0) { beginShape(TRIANGLE_STRIP); float value = (trace[i].z*100); float m = map(value, -500, 20000, 0, 255); fill(0, 50); vertex(trace[i].x, trace[i].y, trace[i].z); vertex(trace[i-1].x, trace[i-1].y, trace[i-1].z); vertex(trace[i+inc].x, trace[i+inc].y, trace[i+inc].z); vertex(trace[i-1+inc].x, trace[i-1+inc].y, trace[i1+inc].z); endShape(CLOSE); } } } } void keyPressed() { if (key == ‘r’) record = true; }
61
62
Sound Column Digital - live recording
63
VIDEO DOCUMENTATION For videos of the processes in action, use these links (or scan the QR codes). 1. Sound Columns: The Film https://vimeo.com/114006132
2. Sound Column Digital https://vimeo.com/114047522
3. Sound Galaxy https://vimeo.com/114035106
4. Perlin Noise https://vimeo.com/114050634
64
65
66