-
Notifications
You must be signed in to change notification settings - Fork 37
MIDI Input
These inputs handle messages on any channel. To focus on a specific channel, add a _chN suffix. For example, [param midi_cc1_ch3] will send any changes to the value of continuous controller 1 received on channel 3.
-
[param midi_program]: sends any program change events. These values are in the range 0..127. -
[param midi_bend]: sends any changes to the value of pitch bend. These values are in the range -1..1. -
[param midi_press]: sends any changes to the channel pressure (non-polyphonic aftertouch). These values are in the range 0..1. -
[param midi_ccN]: sends any changes to the value of continuous controller N. These values are in the range 0..1. -
[param midi_velN]: sends any changes of velocity for the MIDI note N. These values are in the range 0..1. -
[param midi_drumN]: sends any changes of velocity for the MIDI note N on channel 10 (i.e. drum velocities). These values are in the range 0..1.
-
[param midi_clock]: outputs a pulse of value 1 after each MIDI clock (24ppqn) received, followed by zeroes. The duration of this pulse is equal to the current block size. To get a single-sample pulse, pass this through[change]=>[> 0]. -
WARNING: MAY CHANGE IN FUTURE
[param midi_play]: sends a value of 1 if either MIDI start or MIDI continue messages were recieved, and a value of 0 if MIDI stop was received.
Raw MIDI bytes are available in the patcher by creating a [in N midi] or [in N midithru] object, where N is an unused input channel. For example, if your Daisy hardware has stereo input, use N=3. If, like the Daisy Patch, you have quad audio input, use N=5.
The [oopsy.midi.parse] abstraction shows how to derive most of the common kinds of MIDI messages from this bytestream, and is likely all you need.
If you are curious: The byte stream output by
[in 3 midi]is scaled by 1/256 (i.e. values are normalized in 0..1), which helps protect hardware from excessively large/loud numbers due to accidental patching. Therefore, to recover the MIDI bytes, multiply the signal with[* 256]. Also, since MIDI bytes are less frequent than audio sample frames, the empty frames between bytes are filled with negative numbers. That is, you can filter valid bytes only using[>= 0].
The difference between [in N midi] and [in N midithru] is that the latter will make any MIDI bytes received on the hardware input also be copied to the hardware output.