diff options
Diffstat (limited to 'client/index.js')
| -rw-r--r-- | client/index.js | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/client/index.js b/client/index.js index 65e7ddd..da07d12 100644 --- a/client/index.js +++ b/client/index.js @@ -1,4 +1,5 @@ import Tone from 'tone' +import WebMidi from 'webmidi' import 'nexusui' import keys from './lib/keys' import color from './lib/color' @@ -8,20 +9,43 @@ import { mod, browser, requestAudioContext } from './lib/util' const nx = window.nx -const noteCount = browser.isMobile ? 18 : 24 +const noteCount = browser.isMobile ? 18 : 36 const stepCount = 16 const cellSize = browser.isMobile ? 20 : 27 const baseTone = browser.isMobile ? 8 : 12 -let grid +let grid, midi + +WebMidi.enable(midi_ready) + +function midi_ready(err) { + if (err) { + console.error('webmidi failed to initialize') + return + } + if (!WebMidi.outputs.length) { + console.error('no MIDI output found') + } + console.log(WebMidi.inputs) + console.log(WebMidi.outputs) + midi = WebMidi.outputs[0] +} var loop = new Tone.Sequence(function(time, col){ var column = grid.matrix[col] grid.jumpToCol(col) for (var i = 0; i < noteCount; i++){ if (column[i] === 1){ - const freq = scales.current().index(noteCount - i - baseTone) - kalimba.play(freq) + const index = noteCount - i - baseTone + const freq = scales.current().index(index) + const midi_note = Tone.Frequency.ftom(freq) + const midi_freq = Tone.Frequency.mtof(midi_note) + console.log(midi_note, freq, midi_freq, freq - midi_freq) + if (midi) { + midi.playNote(Tone.Frequency(midi_note, "midi").toNote(), 3, { duration: 90000 / Tone.Transport.bpm.value }) + } else { + kalimba.play(freq) + } } } }, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "16n") |
