diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2018-10-10 03:20:50 +0200 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2018-10-10 03:20:50 +0200 |
| commit | 8d728437d3903411c784cc92f5df260178171604 (patch) | |
| tree | ef85dc09bfda8b93a09ecb881e6c3777bc741462 | |
| parent | 8848bc387d62e1667cdfa684f36c058d2619e6b3 (diff) | |
mass shooting sonification
| -rw-r--r-- | client/index.js | 17 | ||||
| -rw-r--r-- | client/lib/midi.js | 9 | ||||
| -rw-r--r-- | index.css | 6 | ||||
| -rw-r--r-- | index.html | 3 |
4 files changed, 29 insertions, 6 deletions
diff --git a/client/index.js b/client/index.js index 58185a5..f5853b9 100644 --- a/client/index.js +++ b/client/index.js @@ -4,6 +4,7 @@ import { saveAs } from 'file-saver/FileSaver' import keys from './lib/keys' import scales from './lib/scales' +import kalimba from './lib/kalimba' import { midi_init, play_note, @@ -69,6 +70,7 @@ data.load().then(lists => { const [y, m, d] = row[mass_fields.date].split('/') return (parseInt(y) - parseInt(min_y)) * 12 + parseInt(m) }) + datasets["Mass Shootings"].data = lines datasets["Mass Shootings"].lines = [lines.map(row => Math.log(row[mass_fields.total_victims]))] requestAudioContext(ready) }) @@ -99,10 +101,13 @@ function play_mass_shootings(i, bounds, diff, note_time, channel="all", exportin const y = 0 const x = i % rows[0].length const n = rows[y][x] - let notes = [], midi_notes = [] + const total = dataset.dates.length + let notes = [], midi_notes = [], cases = [] console.log(i, mass_i, dataset.dates[mass_i]) - while (i === dataset.dates[mass_i]) { + while (i >= dataset.dates[mass_i] && mass_i < total) { notes.push(dataset.lines[mass_i]) + cases.push(dataset.data[mass_i][mass_fields.date] + ' ' + dataset.data[mass_i][mass_fields.case]) + console.log('push case', dataset.data[mass_i][mass_fields.date] + ' ' + dataset.data[mass_i][mass_fields.case]) mass_i += 1 } switch (notes.length) { @@ -129,13 +134,17 @@ function play_mass_shootings(i, bounds, diff, note_time, channel="all", exportin midi_notes.push(play_note( norm(n, min, max) * nx.multiply.value, 32, channel, exporting, 0, 96)) break } - if (mass_i > dataset.dates.length-1) { + if (cases.length) { + document.querySelector('#cases').innerHTML = cases.join('<br>') + } + if (total <= mass_i) { mass_rest = 0 mass_i = 0 i = 0 } else { i += 1 } + kalimba.play(220) if (notes.length) { mass_rest = 0 return [i, midi_notes] @@ -147,7 +156,7 @@ function play_mass_shootings(i, bounds, diff, note_time, channel="all", exportin /* play next note according to sonification */ function play_next(){ - let note_time = 120000 / Tone.Transport.bpm.value * note_values[nx.timing.active][0] * nx.duration.value + let note_time = 120000 / Tone.Transport.bpm.value * note_values[nx.timing.active][0] setTimeout(play_next, note_time) let [new_i, notes] = play_fn(i, bounds, diff, note_time) i = new_i diff --git a/client/lib/midi.js b/client/lib/midi.js index 338526a..f4b479b 100644 --- a/client/lib/midi.js +++ b/client/lib/midi.js @@ -54,7 +54,7 @@ export function midi_init() { /* play a single note */ -export function play_note(index, duration, channel="all", exporting=false, defer=0){ +export function play_note(index, duration, channel="all", exporting=false, rest=0, defer=0){ // console.log(index) const scale = scales.current() const freq = scale.index(index + Math.round(nx.offset.value), nx.octave.value) @@ -68,6 +68,8 @@ export function play_note(index, duration, channel="all", exporting=false, defer midi_note = Math.floor(midi_note) if ((midiDevice || exporting) && midi_note > 127) return 0 const note = Tone.Frequency(Math.floor(midi_note), "midi").toNote() + const defer_time = 30000 / Tone.Transport.bpm.value * defer / 128 + console.log(defer, defer_time) if (exporting || midiDevice) { duration = duration || 60000 / Tone.Transport.bpm.value if (! exporting) { @@ -79,6 +81,11 @@ export function play_note(index, duration, channel="all", exporting=false, defer play_midi_note(note, cents, channel, duration) } } + } + else if (defer) { + setTimeout(() => { + kalimba.play(freq) + }, defer_time) } else { kalimba.play(freq) } @@ -87,4 +87,8 @@ body { label { display: flex; flex-direction: row; margin-bottom: 10px; } label > span { display: block; min-width: 80px; } #recording_msg { display: none; } -.recording #recording_msg { display: inline; }
\ No newline at end of file +.recording #recording_msg { display: inline; } +#cases { + margin-top: 10px; + height: 60px; +}
\ No newline at end of file @@ -14,6 +14,9 @@ <button id="record_midi">Record MIDI</button> <span id='recording_msg'>Recording</span> </div> + <div class='row'> + <div id='cases'></div> + </div> <label> <span>scale</span> <select id="scale"></select> |
