Sound columns

Page 1

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

TWITTER

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

mail

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

google

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)

google

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

GOOGLE

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’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’t normally consider as sources of sound, carry the vibrations of the earth’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


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.