An avocado-shaped hole in my heart

For this assignment I sonified a dataset of avocado prices in the United States from 2015-2016. I have no particular tie to this dataset, and this sonification doesn't necessarily carry some deeper metaphor or meaning. My intentions with the piece were to play around with ways of extracting more information from individual numbers than just frequency or gain. I wanted to think about other ways to shape the sound, more subtle ways that can also allow for the influence of a human composer. I took the values from the dataset and for each one, did different arithmetic transformations in order to control different parameters. I modulated the attack and decay of the envelope, and some slight modulation of gain, but the main parameters being determined by the data were pitches and rhythmic subdivisions. I chose these over plain frequency and duration so that the data could be controlling musical information that was "higher-order". I originally was working on a much more ambitious project that I was struggling a lot with, and so this is a very simplified version. I am considering building on my other version for my final project.

////////////////////////////////////////////////////
////////////////////////////////////////////////////
live code
//tempo synchronization 200 => float bpm; (60 / bpm)::second => dur T; //dummy dataset (uncomment to debug) /*2000 => int nVals; float vals[nVals]; for (0 => int i; i < nVals; i++) { Math.random2f(0.0, 1.0) => vals[i]; } */ fun void sonification() { SinOsc s => ADSR e => LPF f => Gain arp_g => dac; NRev verb[1] => dac; 0.08 => verb[0].mix; s => verb[0]; 0.15 => verb[0].gain; //e.set( 100::ms, 200::ms, 0, 20::ms); 3 => f.Q; 0.3 => f.gain; 450 => f.freq; .25 => s.gain; .5 => arp_g.gain; [36, 37, 39, 41, 43, 44, 46, 48, 49, 51, 53, 55, 56, 58, 60] @=> int Fminor[]; [36, 39, 41, 43, 44, 46, 48, 51, 53, 55] @=> int hexatonic[]; [65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76] @=> int chromatic[]; for (0 => int i; i < nVals; i++) { int pitches[]; int scaling; (250.0 * Math.pow(vals[i], 2.0))::ms => dur A; (200.0 + vals[i] * 100.0)::ms => dur D; e.set(A,D,0,20::ms); if (vals[i] < 0.4) { [36, 37, 39, 41, 43, 44, 46, 48, 49, 51, 53, 55, 56, 58, 60] @=> pitches; // natural minor 15 => scaling; } if (vals[i] >= 0.4 && vals[i] < 0.8) { [36, 39, 41, 43, 44, 46, 48, 51, 53, 55] @=> pitches; // hexatonic 10 => scaling; } if (vals[i] >= 0.8) { [65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76] @=> pitches; // chromatic 12 => scaling; } ((vals[i] * 1000) $ int) % scaling => int idx; pitches[idx] => int m_note; Std.mtof(m_note) => s.freq; (m_note % 6) + 1 => int subdiv; vals[i] => s.gain; e.keyOn(); 1::(T/subdiv) => now; e.keyOff(); } } spork ~ sonification(); while (true) 1::ms => now;