Pattern-Stepsequencer
Intention
I wanted to have a stepsequencer with a tangible interface and with pattern-mode transpose abilities. As I haven’t found any of these in hardware or in software on the net, I decided to make one myself.
There are some already existing sequencers which have their own pros and cons. Let’s take a look at some of them.
Comparision of stepsequencers
ARP Sequencer (Mod. 1601)
type: 1x16 or 2x8 step analog cv sequencer (no midi)
abilities:
16 steps, sliders for controlling
3 bus/tracks
manual step forward
pros: arpeggiator function, either triggering the sequence transposed to the new note from the beginning or going on, transposed simple operation, cv can be plugged anywhere into a v/oct standard modular system
cons: infinite precision, each step’s note needs to be tuned only 1 “memory” not compatible to modern synthesizers (after 1984) – there are MIDI->CV interfaces, but not vice-versa
Doepfer Dark Time
type: 2x8 or 1x16 step sequencer 2bus midi in/out
abilities: transpose on note in possible skip/mute/stop/continue switch for every step
pros: hands-on design, big knobs for every step
cons: could have more tracks
Oberkorn SL16 / oberkorn-sliders
type: 1x16 step, 2bus cv (+midi) sequencer
abilities:
global “range” slider
pros: sliders instead of potentiometers, it is clearly visible how the sequence will sound like straightforward design, without frills. easy and fast operation
cons: rather simple (and a bit too pricey for that) no transpose function
Quasimidi Polymorph
type: 16x4 step sequencer, midi in & out, max. 16 note polyphonic synthesizer, 4x multitimbral
abilities: 1-16 steps on 4 tracks simultaneously “Line 1/2/3” can link 3 of the synthesizer knobs to another sequencer line. so one could control e.g. the filter cutoff rhythmically with another sequencer line. cycle-length and direction (fwd/bwd/rand) changeable different scenes with other notes available by pushing a button
pros:
synth is directly linked to the stepsequencer
different step lenghts possible
knobs have a “stretch” feature: after a patch change, the values don’t snap to the new value after a knob is turned but it increases/decreases smoothly, according to the direction where the knob is turned.
cons: no transpose function via midi in only 8 step knobs – step 9-16 are available on the same knobs after switching to the adjacent page traditional potentiometers instead of rotary encoders it is not visible what notes are used at the moment, potentiometers may not show actual settings
Manikin Schrittmacher
type: 16x32 step sequencer midi in/out
abilities: 1-16 steps on max. 32 tracks simultaneously cycle-length and direction (fwd/bwd/rand) changeable tracks can give out any MIDI CC (no sysex through)
pros: incredible functionality (one could control 8 Polymorph with this device) rotary encoders for step editing start and stop point can be set anywhere
cons:
only in one line it is visible how sequence will sound like
functions are available thrugh a fuzzy menue
I had the opportunity to try out all of these in real (except for the ARP Sequencer, which I used as a software version together with the Arp2600V by Arturia). Additionally, I do own a Polymorph myself.
What does a sequencer need and what not?
Cycle length
A good sequencer consists at least of one line with 16 steps. There are obscurities like the MFB Step64 which has 64 steps, but in general, 16 are enough.
Tracks
I surely would like to have more than one track, 5 or 6 would be nice. But one is also enough for a start.
Directions
Usually, I only use the forward direction. Backward and random are nice, but I never found myself using that.
Cycle-length
This is an important feature since not every music can be pushed into a 16 scheme. Also, it can be really convenient to just let a sequencer play the first half, while you’re still adjusting the second half to your needs. But it is not nessecary to let the sequence start from somwhere else but 1.
Syncing abilities
Would be great but I do not have enough knowledge to realize this. If the sequencer is big enough it’s not neccesary to link it to another one.
Arpeggiator (transpose on midi input)
Most step sequencers do not have that, I would like to have that in my version.
Based on this idea, I would further like to extend this idea to make a pattern sequencer, which transposes the regular step sequencer.
For example: The regular sequence would be C Eb G C Eb G C G and the second row would be transposed by +4 semitones, like this Eb G Bb Eb G Bb Eb Bb then by -2 semitones from the regular row Bb Db F Bb Db F Bb F etc.
This would be similar to the manual triggering method, but saves you a hand while playing live and it has a perfect timing.
Starting thoughts
What methods do I have available to make a step sequencer?
- Soldering one together, using an arduino and a lot of potentiometers. Ok, I may do this in another project as this will take a lot of work.
- Cascading several Doepfer Dark Time. This would work, but even for a 2 set of them I would need to pay 900€+ which I don't have.
- Disassembling the Polymorph's OS and modify the sequencer to my needs. Too bad I can't handle this. Not to mention that I still have to make up for a different interface.
- Using a midi controller and make a software based sequencer with a tangible interface.
4.) seems to be the best since I have an UC-33e midi controller floating around for ages. Together with Pure Data, this will make up for a tangible sequencer according to my wishes.
The UC-33e controller
This box features 24 knobs, 9 sliders and 16 programmable buttons. This is a limitation to what I planned, since I originally wanted to have 4x16 steps. It wouls be possible to have 4x8 steps, but then there wouldn't be any dials left for controlling the other parameters.
So what would be possible with one controller?
- 3x8 steps, 9 controls
- 2x8 steps, 9 controls
- 1x16 steps, 17 controls
The last option sounded interesting, but there were a bit too many controls. I decided to use these for the pattern mode.
So, there we have: C17...C25 as Step 1-16 F1...F8 as Pattern transpose 1-8 C26...C33 and the buttons for controlling issues
All the ingredients are together, the building may begin.
The PD Patch
Implementing the UC33e
This was annoying as I had to do this several times. I mapped the controls to 1...8 in each row and every row had another midi channel. The UC-33e forgot its settings a few times, until I replaced the CMOS battery. All the in and output happens in midiio.
Forwarding and distributing the control messages
The input for the step sliders will be forwarded to the pushbar subpatch, which stretches the input in push to a definable range (coming in from paracontrol) and then it will be displayed on a set of 16 and 8 sliders on the main display.
The heart of the sequencer
The central subpatch is switchblade, containing the main mechanism to save the note values and forward each of them to the midimaker. This is triggered individually by the ticker (so there is only one note played simultaneously), which is generated by the complexcounter. That complex subpatch counts from 1 to 16, it detemines which of the 16 steps is being played and for how long. The midimaker simply generates a midi note (with on and off message), the length is determined by the bpmtomsec. The length is calculated in a way, that the notes do not overlap but are as long as possible.
To put it in a nutshell, the whole patch generates MIDI on and off messages with controllable speed and pitch.
The extras
Of course that doesn't make up for a complete sequencer. So I implemented a start and stop button, connected to the complexcounter. If that patch stops counting, the whole sequencer stops playing. A note off will be sent anyway.
Paracontrol panel
The paracontrol panel allows the user to control the tempo, the cycle length and the note scaling of the main sequencer and the bottom offset and cycle length of the transpose section. These are mapped to the upper row of the UC-33e in the same order as displayed in PD.
bottomoffset and rangeselect
As it is difficult to get the right note when you have 127 values on a small knob, I implemented a stretching feature. It reduces the range of selectable notes and takes the range to the desired level (otherwise one would be only able to trigger subaural bass notes with this). bottomoffset and rangeselect neatly display the amount of octaves from the bottom, the lowest key and how many octaves wide the stretching should be. As I know from experience, a range from 1-4 octaves is more than enough.
patternblade
This contains the mechanism for my programmable arpeggiator. It works exactly as described above (Arpeggiator). If the cycle length is set to 1, the main sequence will just repeat as usual.
midiio
A diagnosis tool, intended to show all incoming CC.
Furthermore, the Fader F9 controls the note volume (velocity) globally.
Working with the sequencer
It works as desired, but by now only within the computer, using its own wavetable MIDI synthesizer.
Issues
- MIDI communication to other devices doesn't work. During opening, PD moans that "MIDI input is dangerous in Windows". It also means that I cannot plug in the PC's midi output to any of my synths, for whatever reason. The forums did not give me an answer for this.
- Due to these circumstances, I wasn't able to test the transpose-on-note-in feature. It has been removed from the patch.
- The current note cannot be seen, but I don't really need this.
- Programming the steps is a bit fiddly due to the small knobs. That may be solved by using different pot heads.
- During startup, multiple zero division errors pop up. This is caused by the autoscale object, because most of the values need to be stretched to an area starting with zero and as soon as this value is entered into there, an error notification appears. Interestingly, this has no effect on performance or program stability, so I suggest to ignore it.
What else to implement next?
- Another blade showing the note value of each step and the current output and the option to mute each step individually. I tried this, but for unknown reasons, PD always crashed, so I decided to stay with the version I had before.
- Getting (several) another UC-33e and make more tracks (but thanks to the MIDI issues of PD, this will be quite likely impossible)
Appendix
The complete patch including subpatches can be downloaded here. This has been built on PD for Windows, v. 0.42.5. You need the Vanilla library and a UC-33e midi controller or anything comparable.
Thanks to Schneiders Laden in Berlin, where I had the opportunity to test the Oberkorn and Manikin Schrittmacher and to Mr. Schneider himself who helped with explanations.