summaryrefslogtreecommitdiff
path: root/client/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'client/index.js')
-rw-r--r--client/index.js32
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")