first commit of data sonification project first day
commit
55596d6c07
|
@ -0,0 +1,86 @@
|
|||
/*RUN*/
|
||||
|
||||
s.options.numInputBusChannels = 4;
|
||||
s.options.numOutputBusChannels = 4;
|
||||
|
||||
~dataPath = "/home/rob/konS/witw/data/D7-80-BE-2C-63-BD/all-data/"; // CHANGE THIS TO RELATIVE PATH
|
||||
|
||||
"echo curl -v -X POST http://3.139.191.80:2537/devices/dev:864475040526732/all-data/2023-09-20T16:52:21Z -H 'Authorization: Bearer token' --output dev:864475040526732.zip".unixCmd;
|
||||
|
||||
s.waitForBoot{
|
||||
|
||||
// create 8 control busses to pass data between synths
|
||||
|
||||
~ctrlBus = 8.collect({arg i; Bus.control(s,1); });
|
||||
|
||||
SynthDef(\sgrain, { | out=0, atk=0.01, dcy=0.01, freq=100, pan=0, amp=0.5|
|
||||
var sig, env;
|
||||
env = EnvGen.ar(Env.perc(atk, dcy), doneAction: 2);
|
||||
sig = FSinOsc.ar(freq);
|
||||
sig = sig * (env * amp);
|
||||
sig = Pan2.ar(sig, pan);
|
||||
Out.ar(out, sig);
|
||||
Out.kr(~ctrlBus[0],freq)
|
||||
}).add;
|
||||
|
||||
SynthDef(\sslew, {
|
||||
| out = 0, freq=100, amp = 0.05, slewrate = 1|
|
||||
var sig, z;
|
||||
// add slew rate on frequency
|
||||
z = Slew.kr(freq, slewrate, slewrate);
|
||||
sig = Blip.ar(z, 5, amp).dup;
|
||||
Out.ar(out, sig)
|
||||
}).add;
|
||||
|
||||
// load and process the data source /////////////////////////////////
|
||||
// need to strip the header and the date // or the : from datetime and the header
|
||||
// strip first 6 rows after header to stop gps data spilling
|
||||
// todo preprocess file with Sed
|
||||
// growing degree days causes nil in other fields - filter these out
|
||||
|
||||
~csvFile=CSVFileReader.readInterpret(~dataPath ++ "sensor_data-notime-noheader-cutrows1.csv",true,true);
|
||||
|
||||
// flatten ~data from 2D Array to regular array (per column);
|
||||
~data = ( ~csvFile[0].size ).collect({ arg itt;
|
||||
Array.fill( ~csvFile.size,{ arg i;
|
||||
~csvFile.at(i).asArray.at(itt)});
|
||||
});
|
||||
|
||||
~data[0]; // Temperature C
|
||||
~data[1]; // F
|
||||
~data[10]; // wind speed MPH
|
||||
~data[11]; // wind direction
|
||||
~data[13]; // wind gusts MPH
|
||||
~data[5]; // rain bucket capacity
|
||||
~data[6]; // rain bucket tips per minute?
|
||||
~data[20]; // LON
|
||||
~data[21]; // LAT
|
||||
|
||||
// normalize data ranges //////
|
||||
~freq=~data[0].normalize(20, 5000);
|
||||
~atk=~data[0].normalize(0.02, 0.1);
|
||||
~dcy=~data[0].normalize(0.05, 0.3);
|
||||
~dur=~data[0].normalize(0.01, 0.3);
|
||||
~level=~data[0].normalize(0.01, 0.1);
|
||||
|
||||
//start the slewing synth /////////////////////////////
|
||||
|
||||
~sslew1 = Synth(\sslew,[\out,0,\freq,220,\amp,0.01,\slewrate,1000]);
|
||||
~sslew1.map(\freq, ~ctrlBus[0]); // map control bus to freq parameter
|
||||
|
||||
|
||||
// perform the data sonification /////////////////////
|
||||
|
||||
( p = Pbind(\instrument, \sgrain,
|
||||
\freq, Pseq(~freq.round(300),1),
|
||||
\atk, Pseq(~atk,1),
|
||||
\dcy, Pseq(~dcy,1),
|
||||
\pan, Pseq([0,1], inf),
|
||||
\dur, Pseq(~dur,1),
|
||||
\amp, Pseq(~level,1)
|
||||
).play;
|
||||
);
|
||||
|
||||
}; // closes s.waitForBoot
|
||||
|
||||
p.stop;
|
Loading…
Reference in New Issue