Running The SuperCollider Program
The data produces a spectrum that is focused on low frequencies. In order to remove the direct current, a High Pass Filter at 30 Hertz needed to be applied. The resulting sound suggests a sound mass composition. With the granulator running, I have begun experimenting with different alterations to create an interesting composition. Here are some observations and alterations that I have explored.
1. Layering of multiple years giving each a unique playback rate generates a unique evolving mass
2. The adjustment of the Mouse X position seems akin to adjusting the sails to the current conditions, where multidimensional data is being effected by how the boat/trigger rate is positioned.
3. The addition of interpolation between values makes for a more fluid sound.
4. Modulation of the audio file by the control signal produces interesting results.
5. Changing the amount of divisions of the each trigger makes for a more less pointelisitc sound mass.
6. Placing this in an Ambisonic quadraphonic setting is far more interesting than a stereo space.
1. Layering of multiple years giving each a unique playback rate generates a unique evolving mass
2. The adjustment of the Mouse X position seems akin to adjusting the sails to the current conditions, where multidimensional data is being effected by how the boat/trigger rate is positioned.
3. The addition of interpolation between values makes for a more fluid sound.
4. Modulation of the audio file by the control signal produces interesting results.
5. Changing the amount of divisions of the each trigger makes for a more less pointelisitc sound mass.
6. Placing this in an Ambisonic quadraphonic setting is far more interesting than a stereo space.
SuperCollider Code
(
s = Server.internal;
Server.default = s;
s.boot;
)
(
//2005 files
s.sendMsg(\b_allocRead, 10, "sounds/240Project/2005E_2_32bit.wav"); //continuous wind data file -->this is the file that is fgranulated
s.sendMsg(\b_allocRead, 11, "sounds/240Project/2005E_APD.wav"); //Average Period of Wave Data ---> map 2 min of dur (which is white noise)
s.sendMsg(\b_allocRead, 12, "sounds/240Project/2005E_DPD.wav"); //Dominant Wave Period -->map 2 max of dur (which is white noise)
s.sendMsg(\b_allocRead, 13, "sounds/240Project/2005E_WVHT.wav"); //Wave Hight -->mapt 2 AMP
s.sendMsg(\b_allocRead, 14, "sounds/240Project/2005E_WDIR.wav"); //Wind Direction -->map 2 Pan
//2006 files
s.sendMsg(\b_allocRead, 20, "sounds/240Project/2006E_2_32bit.wav");
s.sendMsg(\b_allocRead, 21, "sounds/240Project/2006E_APD.wav");
s.sendMsg(\b_allocRead, 22, "sounds/240Project/2006E_DPD.wav");
s.sendMsg(\b_allocRead, 23, "sounds/240Project/2006E_WVHT.wav");
s.sendMsg(\b_allocRead, 24, "sounds/240Project/2006E_WDIR.wav");
//2007 files
s.sendMsg(\b_allocRead, 30, "sounds/240Project/2007E_2_32bit.wav");
s.sendMsg(\b_allocRead, 31, "sounds/240Project/2007E_APD.wav");
s.sendMsg(\b_allocRead, 32, "sounds/240Project/2007E_DPD.wav");
s.sendMsg(\b_allocRead, 33, "sounds/240Project/2007E_WVHT.wav");
s.sendMsg(\b_allocRead, 34, "sounds/240Project/2007E_WDIR.wav");
//2008 files
s.sendMsg(\b_allocRead, 40, "sounds/240Project/2008E_2_32bit.wav");
s.sendMsg(\b_allocRead, 41, "sounds/240Project/2008E_APD.wav");
s.sendMsg(\b_allocRead, 42, "sounds/240Project/2008E_DPD.wav");
s.sendMsg(\b_allocRead, 43, "sounds/240Project/2008E_WVHT.wav");
s.sendMsg(\b_allocRead, 44, "sounds/240Project/2008E_WDIR.wav");
//2009 files
s.sendMsg(\b_allocRead, 50, "sounds/240Project/2009E_2_32bit.wav");
s.sendMsg(\b_allocRead, 51, "sounds/240Project/2009E_APD.wav");
s.sendMsg(\b_allocRead, 52, "sounds/240Project/2009E_DPD.wav");
s.sendMsg(\b_allocRead, 53, "sounds/240Project/2009E_WVHT.wav");
s.sendMsg(\b_allocRead, 54, "sounds/240Project/2009E_WDIR.wav");
)
( SynthDef(\syno,
{
arg
bufSet = 10,//possible buffsets-10,20,30,40,50 for 2005,2006,2007,2008,2009
ctLngth = 8000 ,//size of control bufs generallyl 8691 samples
trateMul =1.0,
rateOffSet = 0,
durDiv = 28;
var trate, dur, trig, indexPtrn, a, l, h, amp, rate, startPos, durN, pan, snd;
//trate = EnvGen.kr(Env.new([10, 200, 200, 40, 20, 500], [0.8, 2, 0.01, 0.8, 2]));
trate = MouseX.kr(0, MouseY.kr(100,850), 0, 0.1)*trateMul;
trig = Impulse.kr(trate); //trig that goes through file
indexPtrn = Dseq([Dseries(0, 1, ctLngth)], inf);
rate = 1+rateOffSet;//Demand.kr(trig, 0, Dbufrd(2+bufSet,indexPtrn))+rateOffSet; // can be a constant of Dominant Wave period
amp = Demand.kr(trig, 0, Dbufrd((3+bufSet),indexPtrn)*0.1); //Wave hight is mapped to Amplitude
startPos = (Stepper.kr(trig, 0, 0, 8001, 1) * ( BufDur.ir(0+bufSet) / 8001.0)); //read head position. -- use .poll here to see where you are
l = Demand.kr(trig, 0, Dbufrd((1+bufSet),indexPtrn));
h = Demand.kr(trig, 0, Dbufrd((2+bufSet),indexPtrn));
durN = (Dwhite(l,h,inf)*durDiv)/trate; //Dominanat and Average wave period mapped to limits of GRAIN DURATION which is choosen randomly
w = Demand.kr(trig, 0, Dbufrd((4+bufSet),indexPtrn));
pan = (w * 2) - 1; //wind direction mapped to PANNING
snd = TGrains.ar(2, trig, bufSet, rate*BufRateScale.ir(bufSet), startPos + (durN/2), durN, pan, amp, 4 );
Out.ar(0,HPF.ar(snd, 30));
}).send;
)
(
a = Synth(\syno);
b = Synth(\syno, [\trateMul, 1.01, \rateOffSet, 1, \bufSet, 20]); //\durDiv, 68
c = Synth(\syno, [\trateMul, 1.01, \rateOffSet, 2, \bufSet, 30]);
d = Synth(\syno, [\trateMul, 1.01, \rateOffset, 3, \bufSet, 40]);
e = Synth(\syno, [\trateMul, 1.01, \rateOffSet, 4, \bufSet, 50]);
f = Synth(\syno, [\trateMul, 1.01, \rateOffSet, 5.1, \bufSet, 10]);
g = Synth(\syno, [\trateMul, 1.01, \rateOffSet, -0.01, \bufSet, 20, \durDiv, 68]); //\durDiv, 68
h = Synth(\syno, [\trateMul, 1.01, \rateOffSet, -0.22, \bufSet, 30, \durDiv, 10]);
i = Synth(\syno, [\trateMul, 1.01, \rateOffset, 2, \bufSet, 40, \durDiv, 27]);
j = Synth(\syno, [\trateMul, 1.01, \rateOffSet, 36.06, \bufSet, 50, \durDiv, 122]);
k = Synth(\syno, [\trateMul, 1.01, \rateOffSet, 47.1, \bufSet, 10, \durDiv, 168]);
l = Synth.after(b,"syno", ["out",0]); //this will replace b when it has stopped
)
a.free;
b.free;
c.free;
d.free;
e.free;
f.free;
g.free;
h.free;
i.free;
j.free;
k.free;
s = Server.internal;
Server.default = s;
s.boot;
)
(
//2005 files
s.sendMsg(\b_allocRead, 10, "sounds/240Project/2005E_2_32bit.wav"); //continuous wind data file -->this is the file that is fgranulated
s.sendMsg(\b_allocRead, 11, "sounds/240Project/2005E_APD.wav"); //Average Period of Wave Data ---> map 2 min of dur (which is white noise)
s.sendMsg(\b_allocRead, 12, "sounds/240Project/2005E_DPD.wav"); //Dominant Wave Period -->map 2 max of dur (which is white noise)
s.sendMsg(\b_allocRead, 13, "sounds/240Project/2005E_WVHT.wav"); //Wave Hight -->mapt 2 AMP
s.sendMsg(\b_allocRead, 14, "sounds/240Project/2005E_WDIR.wav"); //Wind Direction -->map 2 Pan
//2006 files
s.sendMsg(\b_allocRead, 20, "sounds/240Project/2006E_2_32bit.wav");
s.sendMsg(\b_allocRead, 21, "sounds/240Project/2006E_APD.wav");
s.sendMsg(\b_allocRead, 22, "sounds/240Project/2006E_DPD.wav");
s.sendMsg(\b_allocRead, 23, "sounds/240Project/2006E_WVHT.wav");
s.sendMsg(\b_allocRead, 24, "sounds/240Project/2006E_WDIR.wav");
//2007 files
s.sendMsg(\b_allocRead, 30, "sounds/240Project/2007E_2_32bit.wav");
s.sendMsg(\b_allocRead, 31, "sounds/240Project/2007E_APD.wav");
s.sendMsg(\b_allocRead, 32, "sounds/240Project/2007E_DPD.wav");
s.sendMsg(\b_allocRead, 33, "sounds/240Project/2007E_WVHT.wav");
s.sendMsg(\b_allocRead, 34, "sounds/240Project/2007E_WDIR.wav");
//2008 files
s.sendMsg(\b_allocRead, 40, "sounds/240Project/2008E_2_32bit.wav");
s.sendMsg(\b_allocRead, 41, "sounds/240Project/2008E_APD.wav");
s.sendMsg(\b_allocRead, 42, "sounds/240Project/2008E_DPD.wav");
s.sendMsg(\b_allocRead, 43, "sounds/240Project/2008E_WVHT.wav");
s.sendMsg(\b_allocRead, 44, "sounds/240Project/2008E_WDIR.wav");
//2009 files
s.sendMsg(\b_allocRead, 50, "sounds/240Project/2009E_2_32bit.wav");
s.sendMsg(\b_allocRead, 51, "sounds/240Project/2009E_APD.wav");
s.sendMsg(\b_allocRead, 52, "sounds/240Project/2009E_DPD.wav");
s.sendMsg(\b_allocRead, 53, "sounds/240Project/2009E_WVHT.wav");
s.sendMsg(\b_allocRead, 54, "sounds/240Project/2009E_WDIR.wav");
)
( SynthDef(\syno,
{
arg
bufSet = 10,//possible buffsets-10,20,30,40,50 for 2005,2006,2007,2008,2009
ctLngth = 8000 ,//size of control bufs generallyl 8691 samples
trateMul =1.0,
rateOffSet = 0,
durDiv = 28;
var trate, dur, trig, indexPtrn, a, l, h, amp, rate, startPos, durN, pan, snd;
//trate = EnvGen.kr(Env.new([10, 200, 200, 40, 20, 500], [0.8, 2, 0.01, 0.8, 2]));
trate = MouseX.kr(0, MouseY.kr(100,850), 0, 0.1)*trateMul;
trig = Impulse.kr(trate); //trig that goes through file
indexPtrn = Dseq([Dseries(0, 1, ctLngth)], inf);
rate = 1+rateOffSet;//Demand.kr(trig, 0, Dbufrd(2+bufSet,indexPtrn))+rateOffSet; // can be a constant of Dominant Wave period
amp = Demand.kr(trig, 0, Dbufrd((3+bufSet),indexPtrn)*0.1); //Wave hight is mapped to Amplitude
startPos = (Stepper.kr(trig, 0, 0, 8001, 1) * ( BufDur.ir(0+bufSet) / 8001.0)); //read head position. -- use .poll here to see where you are
l = Demand.kr(trig, 0, Dbufrd((1+bufSet),indexPtrn));
h = Demand.kr(trig, 0, Dbufrd((2+bufSet),indexPtrn));
durN = (Dwhite(l,h,inf)*durDiv)/trate; //Dominanat and Average wave period mapped to limits of GRAIN DURATION which is choosen randomly
w = Demand.kr(trig, 0, Dbufrd((4+bufSet),indexPtrn));
pan = (w * 2) - 1; //wind direction mapped to PANNING
snd = TGrains.ar(2, trig, bufSet, rate*BufRateScale.ir(bufSet), startPos + (durN/2), durN, pan, amp, 4 );
Out.ar(0,HPF.ar(snd, 30));
}).send;
)
(
a = Synth(\syno);
b = Synth(\syno, [\trateMul, 1.01, \rateOffSet, 1, \bufSet, 20]); //\durDiv, 68
c = Synth(\syno, [\trateMul, 1.01, \rateOffSet, 2, \bufSet, 30]);
d = Synth(\syno, [\trateMul, 1.01, \rateOffset, 3, \bufSet, 40]);
e = Synth(\syno, [\trateMul, 1.01, \rateOffSet, 4, \bufSet, 50]);
f = Synth(\syno, [\trateMul, 1.01, \rateOffSet, 5.1, \bufSet, 10]);
g = Synth(\syno, [\trateMul, 1.01, \rateOffSet, -0.01, \bufSet, 20, \durDiv, 68]); //\durDiv, 68
h = Synth(\syno, [\trateMul, 1.01, \rateOffSet, -0.22, \bufSet, 30, \durDiv, 10]);
i = Synth(\syno, [\trateMul, 1.01, \rateOffset, 2, \bufSet, 40, \durDiv, 27]);
j = Synth(\syno, [\trateMul, 1.01, \rateOffSet, 36.06, \bufSet, 50, \durDiv, 122]);
k = Synth(\syno, [\trateMul, 1.01, \rateOffSet, 47.1, \bufSet, 10, \durDiv, 168]);
l = Synth.after(b,"syno", ["out",0]); //this will replace b when it has stopped
)
a.free;
b.free;
c.free;
d.free;
e.free;
f.free;
g.free;
h.free;
i.free;
j.free;
k.free;
Sound Examples
Example One
Example Two
Example Three
Example Four
Example Five
Composition Example : OceanDropsV1 :
Example Two
Example Three
Example Four
Example Five
Composition Example : OceanDropsV1 :