====== seq24: toggle sequences with a MIDI controller ====== ===== Introduction ===== Even though this feature is documented in the [[http://www.filter24.org/seq24/SEQ24|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 [[https://edge.launchpad.net/seq24/|seq24]], preferably the latest version (0.9.2 as of the writing of this article) * A MIDI controller (in my case an [[http://www.akaipro.com/mpkmini|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 [[http://www.midi.org/techspecs/midimessages.php|MIDI messages tables]], the relevant data is in the [[http://www.midi.org/techspecs/midimessages.php#2|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.