seq24: toggle sequences with a MIDI controller

Introduction

Even though this feature is documented in the SEQ24 file I haven't found any reference of anyone using it so I tried to set this up myself because toggling sequences with your keyboard is just not very practical.

Requirements

  • A recent version of seq24, preferably the latest version (0.9.2 as of the writing of this article)
  • A MIDI controller (in my case an AKAI MPK Mini)
  • Some time

Setting up seq24

After starting seq24 for the first time it will create a .seq24rc file in your home directory. Open it and the first section you'll see, [midi-control], is the section we need. The matrix represents the first two screensets (entries 0 up to and including 63) and some control keys (entries 64 up to and including 73). The three fields between the brackets on each line correspond to a MIDI filter, if the incoming MIDI event matches the filter it will either toggle (first field), enable (second field) or disable (third field) the sequence.

The layout of each filter inside the bracket is as follows:

[(on/off) (inverse) (midi status byte (channel ignored)) (data1) (data2 min) (data2 max)]

(on/off): if the on/off is set to 1, it will match the incoming midi to the pattern and perform the action (on/off/toggle) if the data falls in the range specified. All values are in decimal.

(inverse): the inverse field will make the sequence perform the opposite action (off for on, on for off) if the data falls outside the specified range.

(midi status byte (channel ignored)): a MIDI status byte number in decimals. You can look them up in the MIDI messages tables, the relevant data is in the second table. As the channel on which the events are sent is ignored you should always use the values for channel 1.

(data1): the actual MIDI event message number in decimals. This could be a note on/off event or a control/mode change event for example.

(data2 min): the minimal value for the filter to match. For note on/off events this is the amount of velocity for example.

(data2 max): the maximum value for the filter to match.

An example of the [midi-control] section of my .seq24rc file I use with the MPK Mini:

[midi-control]
74
0 [0 0 0  0   0 0] [1 0 144  96   0 127] [1 0 128  96   0 127]
1 [0 0 0  0   0 0] [1 0 144  97   0 127] [1 0 128  97   0 127]
2 [0 0 0  0   0 0] [1 0 144  98   0 127] [1 0 128  98   0 127]
3 [0 0 0  0   0 0] [1 0 144  99   0 127] [1 0 128  99   0 127]
4 [0 0 0  0   0 0] [1 0 144 100   0 127] [1 0 128 100   0 127]
5 [0 0 0  0   0 0] [1 0 144 101   0 127] [1 0 128 101   0 127]
6 [0 0 0  0   0 0] [1 0 144 102   0 127] [1 0 128 102   0 127]
7 [0 0 0  0   0 0] [1 0 144 103   0 127] [1 0 128 103   0 127]
8 [0 0 0  0   0 0] [1 0 144 104   0 127] [1 0 128 104   0 127]
9 [0 0 0  0   0 0] [1 0 144 105   0 127] [1 0 128 105   0 127]
10 [0 0 0  0   0 0] [1 0 144 106   0 127] [1 0 128 106   0 127]
11 [0 0 0  0   0 0] [1 0 144 107   0 127] [1 0 128 107   0 127]
12 [0 0 0  0   0 0] [1 0 144 108   0 127] [1 0 128 108   0 127]
13 [0 0 0  0   0 0] [1 0 144 109   0 127] [1 0 128 109   0 127]
14 [0 0 0  0   0 0] [1 0 144 110   0 127] [1 0 128 110   0 127]
15 [0 0 0  0   0 0] [1 0 144 111   0 127] [1 0 128 111   0 127]
16 [0 0 0  0   0 0] [0 0   0   0   0   0] [0 0   0   0   0   0]
17 [0 0 0  0   0 0] [0 0   0   0   0   0] [0 0   0   0   0   0]
18 [0 0 0  0   0 0] [0 0   0   0   0   0] [0 0   0   0   0   0]
19 [0 0 0  0   0 0] [0 0   0   0   0   0] [0 0   0   0   0   0]
20 [0 0 0  0   0 0] [0 0   0   0   0   0] [0 0   0   0   0   0]
21 [0 0 0  0   0 0] [0 0   0   0   0   0] [0 0   0   0   0   0]
22 [0 0 0  0   0 0] [0 0   0   0   0   0] [0 0   0   0   0   0]
23 [0 0 0  0   0 0] [0 0   0   0   0   0] [0 0   0   0   0   0]
24 [0 0 0  0   0 0] [0 0   0   0   0   0] [0 0   0   0   0   0]
25 [0 0 0  0   0 0] [0 0   0   0   0   0] [0 0   0   0   0   0]
26 [0 0 0  0   0 0] [0 0   0   0   0   0] [0 0   0   0   0   0]
27 [0 0 0  0   0 0] [0 0   0   0   0   0] [0 0   0   0   0   0]
28 [0 0 0  0   0 0] [0 0   0   0   0   0] [0 0   0   0   0   0]
29 [0 0 0  0   0 0] [0 0   0   0   0   0] [0 0   0   0   0   0]
30 [0 0 0  0   0 0] [0 0   0   0   0   0] [0 0   0   0   0   0]
31 [0 0 0  0   0 0] [0 0   0   0   0   0] [0 0   0   0   0   0]
# mute in group
32 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
33 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
34 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
35 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
36 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
37 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
38 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
39 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
40 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
41 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
42 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
43 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
44 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
45 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
46 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
47 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
48 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
49 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
50 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
51 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
52 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
53 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
54 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
55 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
56 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
57 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
58 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
59 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
60 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
61 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
62 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
63 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
# bpm up
64 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
# bpm down
65 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
# screen set up
66 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
# screen set down
67 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
# mod replace
68 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
# mod snapshot
69 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
# mod queue
70 [0 0   0   0   0   0] [1 0 176  64 127 127] [1 0 176  64   0   0]
# mod gmute
71 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
# mod glearn
72 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]
# screen set play
73 [0 0   0   0   0   0] [0 0   0   0   0   0] [0 0   0   0   0   0]

What this example does is listening for notes 96 up to and including 111 and it toggles the sequences on note on events and toggles them off on note off events.

Queuing sequences

The Akai MPK Mini has a Sustain button and I've set the Sustain MIDI event (with MIDI status byte 176 and control/mode change number 64) up as the queue modifier in the 'mod queue' entry:

# mod queue
70 [0 0   0   0   0   0] [1 0 176  64 127 127] [1 0 176  64   0   0]

So when I hold down this button and press one of the pads on my MPK Mini the corresponding sequence gets queued.

Final steps

Start seq24 and connect your MIDI controller (File - Options - MIDI Input). Now you should be able to toggle and queue any patterns in your seq24 session if you set up your .seq24rc file correctly.

wiki/seq24togglemiditutorial.txt · Last modified: 2013/06/02 15:45 (external edit)