MonoMIDI is a step sequencer to be controlled via the monome.  It's based on manipulating Live MIDI clips.  Part of the code base was taken from the Ableton Clip Step sequencer, thx for that.

the features in a nutshell:

- support for MIDI clips with up to 64 steps (1 step = 1/16 note, which makes it 4 bars) and 49 drum pads (or 7 octaves when using scales)
- Full scale support including chromatic mapping and other custom scales
- Scale conversion
- advanced duplication facilities for partial note sequences
- multisample mode (device chooses out of 8 samples based on weighted probability)
- MIDI clip navigation mode
- extensive humanization options (velocity and timing randomisations)
- Adjustable note length
- Playhead visualisation
- works standalone and integrated into MonoLive (see MonoLive documentation)

----- General comments --------

- The device is a midi effect and can therefore only be used on MIDI tracks.
- The bottom row is a control row mapped to mode switches etc.
- At the moment, the device is specifically designed for a 64, adapting should be *rather* easy though.

1a. STEP SEQUENCER MODE 

This is the default mode for the device allowing you to manipulate the MIDI notes in your clip. The monome is used in "piano roll" fashion whereby the lowest row (row 7) initially is mapped to the tonic in the chosen octave (e.g. tonic is C, octave is 1 --> row 7 represents C1). If you keep the button pressed for a longer time, the duration will be chosen based on the how long you pressed the button, otherwise the default length is a 1/32 note.

Depending on the scale mode (drop down list), the rows are mapped to the steps of the scale. If chromatic mode is chosen, all notes are used (mainly to be used for drum sequences). Upon pressing buttons, notes are placed according to the time jitter settings (see humanization section). 

If you want to transform your sequences into a different scale, that's easy too. Just choose a different tonic and/or a different scale mode and press "Convert", all the notes will be moved accordingly.

It is also possible to duplicate particle sections of the clip (e.g. the first 4 1/16 steps of kick/snare tracks) across the whole clip. For that, you need to specify the "rectangle" you want to duplicate by first pressing the first corner (e.g. button 1 of row 7 --> 1st beat of kick drum), and - while keeping it pressed - pressing the second corner (e.g. button 4 of row 6 --> 4th 1/16 note of snare drum). The chosen section will be duplicated across the whole clip. Humanisation settings such as chosen velocity base + velocity jitter and the timing information is analyzed and applied, e.g. a note which is straight will be duplicated straight, a note which is lagging ("swing") will be duplicated with "swing" accordingly. This gives you maximum flexibility for programming grooves.

Control row:

- Button 1: navigation mode (see 1b.), scene up (keep pressed)
- Button 2: custom mode (initially lit, allows to hand control back to MonoLive, if in moonlike mode), scene down (keep pressed)
- Button 3: note selection (only relevant for multisample mode, see 2a.), scene launch (press longer)
- Button 4: probability settings (only relevant for multisample mode, see 2b.)
- Button 5: "Pull" notes (see humanization section)
- Button 6: "Push" notes (see humanization section)
- Button 7: "Low" velocity base ((see humanization section)
- Button 8: "High" velocity base (see humanization section)

Row 1-7:
- piano roll, mapped from bottom to top
- based on chosen base octave, selected section of the clip (see 1b.) and chosen scale

Humanisation
-------------------

When placing MIDI notes into the clip, the velocity as well as the timing is determined based on the settings you made. For the timing, depending whether notes are to be "pulled" or "pushed", a random time jitter is subtracted/added to the note position. The amount of "groove" is based on the time jitter setting in the device gui.

Regarding velocity, MonoMIDI supports three base velocities:
- "low" --> 80 (button 7)
- "normal" --> 100 (no button)
- "high" --> 120 (button 8)

Starting from the chosen base velocity, an additional random jitter is subtracted/added to that. The amount of velocity jitter is based on the setting in the device gui.

1b. NAVIGATION MODE

This mode allows you to navigate the whole MIDI clip (vertically up to 7 octaves, horizontally up to 64 steps = 4 bars). This is similar to the session matrix navigation mode of MonoLive.

Control row:

- Button 1: lit (current mode)
- Button 2-8: same as above

Rows 1-7:

- Each button represents a 1/2 bar (8 1/16 notes) x 1 octave (7 steps) section of the clip.
- Lit buttons: section contains MIDI notes
- Blinking button:  currently selected section

2. MULTISAMPLE MODE 

The Multisample mode allows to generate subtle (or not so subtle) random variations of your drum patterns by allowing you to use up to 8 samples for each part of your drum kit. Instead of mapping a monome row to a single drum pad (e.g. row 7 = C1), row 7 is mapped to the 8 drum pads C1 - G1. 

So when a MIDI note C1 is played from the clip, the device intercepts it and replaces it with a randomly selected note from the above range (C1-G1). According to that, row 6 would be mapped to G#1 - D#2. The actual selection is based on the respective weighted probabilities for the range (see 2b.)

If in multisample mode, notes are manipulated exactly the same way as explained above  (including humanization and duplication). The only caveat is that the defined sequence within the MIDI clip will be different from what is actually played. In order to store your generated sequences, you need to route the MIDI stream to another armed MIDI track.

2a. Row selection

In order to manipulate the weighted probabilities for the 8 samples, you have to choose first which "range" to manipulate. This is done by pressing button 3 first, and then the respective row (e.g. row 7 for the kick drum). The device will automatically display the probabilities vertically. Initially all probabilities are 1 which makes the selection fully random. 

Control row:

- Button 3: activated (row selection mode)
- Button 1-2, 4-8: as above

Row 1-7: 

- "instrument"/range  selection (e.g. row 7 = kick drum = C1 - G1)

2b. Probability management mode

After choosing the range to manipulate, the weighted probabilities can be adjusted which will affect the drum sequencing in real-time.

Control row:

- Button 4: activated (probability management mode)
- Button 1-3, 5-8: as above

Row 1-7: 
- column X = weighted probability for drumpad X (1 = C1, 2 = C#1, etc.)
- button 7 = 0 (don't use sample), all buttons = 7 (max)