MIDI
Midi is simple to use in Zen. On page load, all available midi inputs and outputs are printed in your console for reference. The index of the device you wish to use should be assigned to a stream's midi
parameter.
MIDI Output
The following parameters control midi routing in Zen:
midi
the midi device to send messages to (passed as an index).midichan
the midi channel to send messages to. Sends to all channels if not included.mididelay
delay midi messages (ms). Useful for synchronising midi and audio.cc<number>
, as incc1
,cc2
etc. Send control change messages. CC values are normalised (0 - 1).
For example:
// send midi notes to device 1, channel 1
s0.set({ midi: 1, midichan: 1 })
s0.p.n.set('60 62 64 65 67 69 71 72')
s0.e.every(2)
// send cc messages
s0.p.cc1.sine()
MIDI Input
Patterns can also use midi control changes and currently pressed keys as input. The following methods are available:
// use the modulation wheel on device 10 as input, with an initial value of 0.5
s0.p.vol.midicc(1,10,0.5)
// use all pressed keys on device 10 as input
s0.p.n.midinote(10)
MIDI Parsing
Zen can parse midi files and extract note and event data:
let bassfile = 'http://localhost:6060/midi/tune03/tune03-bass.mid' // must be hosted somewhere accessible
s0.set({inst: 0, cut:0})
s0.p.n.midifile(bassfile, 'n') // use the note data
s0.e.midifile(bassfile, 'e') // use the event data
``