From 31117e3b786e4d24a7dc43163362ab4a4d3050fd Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Wed, 10 Oct 2018 14:58:24 +0200 Subject: exporting all midi notes... add pedal tone option --- client/index.js | 53 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 7 deletions(-) (limited to 'client/index.js') diff --git a/client/index.js b/client/index.js index 3f48bd3..fef9b0c 100644 --- a/client/index.js +++ b/client/index.js @@ -30,6 +30,8 @@ const DEFAULT_BPM = 60 let recorder = null let recording = false +let paused = false +let playTimeout midi_init() @@ -44,7 +46,8 @@ const mass_fields = [ return a }, {}) -let i = 0, mass_i = 0, datasets = {}, dataset = {}, bounds = {}, diff = [] +let i = 0, max_i = 0, mass_i = 0 +let datasets = {}, dataset = {}, bounds = {}, diff = [] let play_fn = play_sequence data.load().then(lists => { console.log(lists) @@ -63,12 +66,15 @@ data.load().then(lists => { datasets["Mass Shootings"].name = "Mass Shootings" datasets["Mass Shootings"].play_fn = play_mass_shootings const lines = datasets["Mass Shootings"].lines.reverse() - const [min_y, ...rest] = lines[0][mass_fields.date].split('/') + const [min_y, ...rest_a] = lines[0][mass_fields.date].split('/') + const [max_y, ...rest_b] = lines[lines.length-1][mass_fields.date].split('/') datasets["Mass Shootings"].dates = lines.map(row => { const [y, m, d] = row[mass_fields.date].split('/') return (parseInt(y) - parseInt(min_y)) * 12 + parseInt(m) }) + max_i = (parseInt(max_y) - parseInt(min_y)) * 12 + parseInt(12) + console.log('max i', max_i) datasets["Mass Shootings"].data = lines datasets["Mass Shootings"].lines = [lines.map(row => row[mass_fields.total_victims])] requestAudioContext(ready) @@ -102,7 +108,7 @@ function play_mass_shootings(i, bounds, diff, note_time, channel="all", exportin const n = rows[y][x] const total = dataset.dates.length let notes = [], midi_notes = [], cases = [], timings - console.log(i, mass_i, dataset.dates[mass_i]) + console.log(i, mass_i, dataset.dates[mass_i], channel, exporting) while (i >= dataset.dates[mass_i] && mass_i < total) { notes.push(dataset.lines[0][mass_i]) cases.push(dataset.data[mass_i][mass_fields.date] + ' ' + dataset.data[mass_i][mass_fields.case] + @@ -148,7 +154,9 @@ function play_mass_shootings(i, bounds, diff, note_time, channel="all", exportin } else { i += 1 } - kalimba.play(220, -12) + + const pedal_freq = scales.current().index(nx.pedal_tone.value, nx.octave.value) + kalimba.play(pedal_freq, -12) if (notes.length) { mass_rest = 0 return [i, midi_notes, timings, mass_rest] @@ -160,8 +168,10 @@ function play_mass_shootings(i, bounds, diff, note_time, channel="all", exportin /* play next note according to sonification */ function play_next(){ + if (paused) return let note_time = 120000 / Tone.Transport.bpm.value * note_values[nx.timing.active][0] - setTimeout(play_next, note_time) + clearTimeout(playTimeout) + playTimeout = setTimeout(play_next, note_time) let [new_i, notes, timings] = play_fn(i, bounds, diff, note_time) i = new_i if (recording) { @@ -171,6 +181,16 @@ function play_next(){ } } +function play() { + i = 0 + mass_i = 0 + paused = false + play_next() +} +function pause() { + paused = true +} + /* bind selects */ function pick_dataset(key){ @@ -254,9 +274,28 @@ function ready() { }) update_value_on_change(nx.interval, '#interval', true) + nx.pedal_tone = new Nexus.Dial('#pedal_tone', { + size: dial_size, + min: -24, + max: 24, + step: 1, + value: -7, + }) + update_value_on_change(nx.pedal_tone, '#pedal_tone', true) + + const play_button = document.querySelector('#play') + play_button.addEventListener('click', () => { + play() + }) + + const pause_button = document.querySelector('#pause') + pause_button.addEventListener('click', () => { + pause() + }) + const export_midi_button = document.querySelector('#export_midi') export_midi_button.addEventListener('click', () => { - export_pattern_as_midi(dataset.name, bounds, diff, nx.tempo.value, nx.timing.active, play_fn) + export_pattern_as_midi(dataset.name, bounds, diff, nx.tempo.value, nx.timing.active, play_fn, max_i) }) const record_midi_button = document.querySelector('#record_midi') @@ -285,7 +324,7 @@ function ready() { document.querySelector('#scale').value = '14' scales.pick(14) - play_next() + // play_next() } /* keys */ -- cgit v1.2.3-70-g09d2