MusiKraken
MusiKraken
Experimental MIDI Controller Construction Kit

Keyboard

The Keyboard has a typical musical keyboard layout with white and black keys.

Touching one of the keys generates a MIDI Note-On event, and releasing it generates a MIDI Note-Off event, which are both sent out of the MIDIOut port.

The Keyboard also supports highlighting of all notes of a scale. It can also send Aftertouch events, or generate other Control Change values while sliding along the keys, using pressure or changing the touch radius.

You can also enable MIDI Polyphonic Expression (MPE) and control parameters of multiple notes simultaneously, if the target instrument supports it.

Ports:

MIDIIn:

The incoming notes are displayed on the virtual keyboard and generate new Note-On and Note-Off events if necessary.

velocity:

If Velocity Port is selected as the velocity input source, the velocity value is taken from whatever value is sent to this port.

MIDIOut:

This sends out MIDI events generated by the keyboard, like Note-On, Note-Off and Aftertouch (if enabled).

x:

Horizontal touch movement (left and right) on the keyboard generates a value which will be sent out through this port. Moving to the left decreases this value, while moving to the right increases it.

As the values are not generated per note, only the touch that has moved the most influences this value. The sensitivity of this can be changed in the settings (x-axis sensitivity).

Note that this output usually makes more sense if you deactivate "Change key while sliding" in the settings to not change the keys during horizontal movement.

Range: 0.0 - 1.0

y:

Vertical touch movement (up and down) on the keyboard generates a value which will be sent out through this port. Moving down decreases this value, while moving upwards increases it.

As the values are not generated per note, only the touch that has moved the most influences this value. The sensitivity of this can be changed in the settings (y-axis sensitivity).

Range: 0.0 - 1.0

pressure:

Increase the touch pressure to increase this value. The maximum pressure of all active touches is used.

Only available on devices that support touch pressure (newer iOS devices do not have 3D Touch support anymore).

Range: 0.0 - 1.0

radius:

Increase the touch radius to increase this value. The maximum radius of all active touches is used.

The touch radius can be increased by decreasing the angle between your finger and the device. Radius is not as accurate as touch pressure and on iOS only has around 5 steps from 0.0 to 1.0, but still works nicely with most instruments.

Range: 0.0 - 1.0

Settings:

Name: Change the name of this so that you can identify it if you have multiple controls.

Keyboard Layout Type: Choose between a normal keyboard layout, a side-by-side layout, where all keys have the same size and are layed out next to each other, and a grid layout. When deactivating non-scale notes in the side-by-side layout, the deactivated keys are removed, making playing in-key easier.

Key size: The width of the keys (or height, if grid style is active). I often found keys of virtual keyboards too small for my fingers (even though my fingers are not that big), so here you can adjust the width yourself.

Channel: The channel of the generated MIDI events.

Velocity Input Source: Select how the velocity of Note-On and Note-Offs should be computed. Possible values:

Fixed: A fixed, selectable velocity.
Accelerometer: The current accelerometer values are used to approximate how much the device has moved when the touch started.
Y-Axis: Largest velocity at the top The higher up on the key that you touch, the more velocity the note will have.
Y-Axis: Largest velocity at the bottom The largest velocity is at the bottom of the keys, and on top are the lowest velocities.
Velocity Port: The velocity is taken from the velocity input port.

Velocity: The velocity of the generated MIDI events, if the input source is "fixed".

Change key while sliding: If activated, the key will change if you move your finger from one key to the other. If deactivated, the key will stay until you release it. Useful if you want to send values through the x-port.

x-axis sensitivity: The sensitivity of the generated values when moving horizontally.

y-axis sensitivity: The sensitivity of the generated values when moving vertically.

Reset x-value when touch ends: Sets the x-value back to the default when the last touch ended (useful for example when using this with pitch bend, so that the value is 0 again when the note is changed).

Reset y-value when touch ends: Sets the y-value back to the default when the last touch ended.

Reset value on x-axis: The default value the x-axis is set to (also applies to MPE).

Reset value on y-axis: The default value the y-axis is set to (also applies to MPE).

Per-note events, x-axis: The keyboard not only sends out a global value for the whole keyboard when sliding on it, it also sends out a separate value for each note, so that you can use per-note values. Currently this can only be used in the Chord Splitter, but will also be useful once MIDI 2.0 support is finished.
The per-note values are either mapped to a key axis, so that you can directly control the value by touching the keys at a specific location, or you can set it to Reset on key-down, in which case the Reset value on x-axis default value from above is taken on touch down, and can be changed by sliding.

Per-note events, y-axis: Same as above, but for the y-axis.

Aftertouch: If enabled, the keyboard will generate and send out Polyphonic Aftertouch events for each key when moving vertically.

Highlight scale: If enabled, the scale selected below will be highlighted on the keyboard.

Use global scale: If enabled, the selected scale will be shared with other modules that also use global scale. Deactivate this if you want to have different scales in multiple modules.

Deactivate non-scale notes: If enabled, the keys that do not belonging to the selected scale are deactivated.

Scale: Selects the scale to be highlighted.

MIDI Polyphonic Expression (MPE): Enable this if you want to control an instrument in MPE mode. MPE sends each note to a different MIDI channel and this way allows you to control mutliple parameters per note simultaneously.

Send MPE configuration: If enabled, the app regularly sends the MPE configuration message and pitch bend range to the target. Some instruments require this, while others cannot handle the message (some even crash). But most instruments supporting MPE do not need this, because they already are set to be in MPE mode.

Enable MPE Pitch Bend: Pitch Bending can sound very strange for some instruments, and might not be wanted. So you can deactivate it here.

Channel per touch mode: MPE is defined as "Channel per note". But some instruments allow you to put down two fingers on the same key, and then move them independently, thereby using something like a "channel per touch" mode. But do not enable this if the instrument doesn't allow it (for example Ableton Live).

MPE Channel Pressure Source: Should the channel pressure be generated from sliding along the y-axis, touch radius, touch pressure (if available) or not at all?

MPE Timbre Source: Should the third MPE value (sometimes called timbre) be generated from sliding along the y-axis, touch radius, touch pressure (if available) or not at all?

Mono Pitch Bend: If the target instrument doesn't support MPE, but you still want to use accurate pitch bending, you can enable this. This only tracks one finger.

Pitch Bend Range: To do exact pitch bending to another note, this value needs to match the value in the target instrument. Usually 48 semitones for MPE, and 12 otherwise.