summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2018-10-10 03:20:50 +0200
committerJules Laplace <julescarbon@gmail.com>2018-10-10 03:20:50 +0200
commit8d728437d3903411c784cc92f5df260178171604 (patch)
treeef85dc09bfda8b93a09ecb881e6c3777bc741462 /client
parent8848bc387d62e1667cdfa684f36c058d2619e6b3 (diff)
mass shooting sonification
Diffstat (limited to 'client')
-rw-r--r--client/index.js17
-rw-r--r--client/lib/midi.js9
2 files changed, 21 insertions, 5 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)
}