Epic Jefferson

10 Feb 2015

How to keep your favorite sound… forever. This rhinoPython script will make your sounds printable.

SoundCylinder_meh

 

[sketchfab id=”8637e796380b433d994b98991077c3f7″ start=”0″ spin=”” controls=”0″]

For a long time I’ve been interested in making sounds physical in some way, I suppose in a “more tangible” way since sound is already physical. I’ve always wondered what it takes to make one of these things and I’m eager to continue to explore.

Some sketches to get the thing going.

IMAG1632  IMAG1631

Problems – The library I used to process the soundfile (scipy) doesn’t run from rhinoPython, so the workaround was to run a separate script for audio analysis and write the results into a file, then read that file from rhinoPython script to apply those values along the shape’s Y axis. So that particular workflow sucks, but I guess this process doesn’t have to be optimized for now.

I got my audio processing base from http://samcarcagno.altervista.org/blog/basic-sound-processing-python/

#Analize Soundfile
from pylab import*
from scipy.io import wavfile

thickness = 160

sampFreq, snd = wavfile.read('440_sine.wav')
snd = abs((snd / (2.**15)*thickness))
s1 = snd[:,0]
levels = []
points = 40

step = 5060/40
avg = 0

for i in xrange(len(s1)/step):
avg = 0
begin = i * step
end = ((i + 1) * step - 1)
temp = s1[ begin : end]

for j in xrange(len(temp)):
avg += temp[j]
avg = avg/len(temp)
levels.append(avg)

file = open("sample.txt", "w")
for i in xrange(len(levels)):
file.write(str(levels[i]))
file.write('\n')
file.close()
#Create Cylinder
import rhinoscriptsyntax as rs
import random

pointList = []
ypointList = []

temp = open("sample.txt", "r")
for line in temp:
ypointList.append(line)
temp.close()

for i in range(40):
Y = ypointList[i]
pt = (i, Y, 0)

pointList.append(pt)

curve = rs.AddPolyline(pointList)
rs.AddRevSrf( curve, ((0,0,0), (40,0,0)))