Showing posts with label Step Sequencer. Show all posts
Showing posts with label Step Sequencer. Show all posts

Thursday, 30 September 2021

Step sequencer for echo delay time...

Now if this was a YouTube channel, then I might well be posting videos with click-bait titles in an ongoing quest for subscribers (or publicising an amazing device like the Rebel Technology 'Witch'!). 

But this is a blog, and I'm happy to post anything I do, that might be useful, which is why there's an eclectic mix of topics on here. And yes, I know that I haven't covered MaxForLive for a while, and there's a very good reason for that. 

Anyway, here's a little bit of fun that might be useful to some of you, or could serve as inspiration for further exploration. I'm almost tempted to post a version on YouTube with a Click-Bait-oriented title just to see what happens... 'Expression Sequencing - What you need to know!' 

Photo by Steve Harvey on Unsplash

Step Sequencing

Okay, I admit, I've been a fan of step sequencers since seeing Tangerine Dream back in the 70s at the Liverpool Empire. Dry ice clouds, mist curtains, mirror balls, CO2 lasers, guitar solos from Edgar Froese and just one or two step sequences - it was quite an experience. Since then, I have acquired a few hardware step sequencers (a Zaquencer, for instance - very nice!), and programmed a few (several in MaxForLive, for example), but my latest acquisition is a little bit different: a mix of old school (8 steps!) and new-ish school (MIDI Clock sync!). But not a Eurorack module - nope, this is a 'guitar' pedal. 

Now, I was raised on Electro-Harmonix pedals (I always wanted an Electric Mistress Flanger!) and I've gradually been getting a few modern examples, purely for research purposes, you understand. The 'pedal' in this case is on the borders of the pedal-world - it is the 8 Step Program: a CV/Expression sequencer. 

Sequencers in pedals are quite unusual, or at least, from my limited viewpoint, that seems to be the case. The Strymon 'Night Sky' has a sequencer to ty and liven up the shimmer reverb, is one example, and I'm not immediately familiar with any other examples. Of course, with thousands of pedal manufacturers and hundreds of pedals released every month (week? day? hour? minute?), then there could well be many other examples, but I'm beginning to think that it is not humanly possible to keep up with pedal releases any longer. Although, if anyone can, it would be Josh Scott of JHS Pedals...

Actually, the step sequencer that I'm talking about is quite unusual, even in a world where unusual and rare seems to be the starting point for a product, and you probably need endorsements by several online influencers just to rise above the lowest levels of noise and avoid being totally ignored. Electro-Harmonix do not shy away from making radically 'different' pedals, and they have a huge range, plus a long and fascinating history. 

Anyway, the '8 Step Program' is s step sequencer for Expression Pedal control signals.

My EHX 8-Step Program pedal!

You read that correctly. Whilst it can also output control voltages (from 0 (zero Volts) to 5Volts), it is mostly intended to act as an automatic Expression Pedal, so instead of you having to move your foot from heel to toe on an Expression Pedal, then the 8 Step Program will do it for you, repeatedly if you prefer, at a user-variable rate, or you can advance through the steps manually, or just trigger a One-shot single run-through. At the borders of 'step sequencing', there is also the ability to select steps at random, which always sounds more like a slow random noise generator to me, although it outputs a very structured type of noise where the levels are known, but when they will occur is not known.  I'm going to step away from this topic before any 'unknown unknowns' are mentioned!

Oh, before I forget, sincere thanks to Andertons for managing to procure me an '8 Step Program' on special order. It is definitely worth the wait!

Ubiquity or Not

Lots of guitar pedals have a socket marked 'Exp' or 'Expr'. Not all pedals have them, and for those that do, there are at least two different ways to wire the socket (and the pedals) in common usage (see this blog post...). So not quite ubiquitous, but certainly widely available. As that previous blog post rather gives away, I'm one of those people who likes to use a foot pedal to change one or more parameters on a pedal, and so I have 'one or two' Expression Pedals'. 

I've always been confused by the naming convention for guitar pedals, and that ignores the weirdness that you can use them with things other than guitars! One of the first pedals I ever bought was a Colorsound Wah-wah pedal (Not this modern re-creation and not from Macari's, but way older and from somewhere else, lost in the fog of time...) and this was indeed, a pedal. There was a bit that you put your foot on and moved it, and it changed the sound, and it looked like a sort of hi-tech equivalent of the pedal that my Mum used to control her sewing machine. So my mind is forever locked into the mind-set that a pedal is a thing that you move (heel and toe positions, plus in-between) with your foot. A foot-pedal. A Guitar foot-pedal. 

But then there was another type of guitar pedal, and it didn't have a wobbly bit on top where you put your foot. Instead it had one (and sometimes more!) push switch that made a metallic snicking sound when you pushed it - and this turned the effect on or off. Bypass was the word - on or off. To change the effect, you turned small rotary controls - too small and awkwardly placed for your foot, of course. Most of the foot-switches were chrome cathedrals of mechanical complexity, but there were also ones with black plastic tops that didn't have the same satisfying metallic clunk, and which were apparently notorious for 'going wrong'. Nowadays, I only ever see the all-metal variety of foot switch, so I imagine that the plastic-top ones have died out. 

When there are two things that are different but share the same name, then confusion is not far away. As I said earlier, I've always been confused by guitar pedals: some of which have a foot pedal, and some of which don't, but they are still called pedals. Expression Pedals, which don't process audio at all, and only control other guitar pedals, via a TRS or 'stereo' cable, are a third type of pedal again. Your task, should you choose to accept it, is to try and persuade me that there are three types of totally different device, all called the same, where:

- one device processes audio

- one device processes audio, and has a pedal that your foot moves

- one device does not process audio at all, but controls a device that does process audio.

 And these are all Pedals?

Sequencing...

Let's look at what you can use Expression for. That Colorsound Wah-Wah pedal is a good starting point. The foot pedal bit changes the audio that passes through the Wah-Wah pedal - it's a band-pass filter where the centre frequency of the filter is controlled by the foot pedal that your foot moves. The sound is a rough approximation to the band-pass filter that your mouth makes when you open and close it. Try saying 'wah wah wah...' and see how your jaw moves, your mouth opens and your lips move. If you say 'Waaaooouuuw' then your mouth, lips and jaw will all be moving a lot! 

Take a moment here to let the skin on your face return to normal after all that stretching...

Auto-Wah removes the foot pedal and replaces it with an LFO - a Low Frequency Oscillator. A circuit that wobbles something - in this case, the wah-wah effect. So the centre frequency of that band-pass filter wobbles up and down in frequency, and you don't wear out your foot or ankle by moving the pedal back and forth all the time. So the foot pedal bit has gone, and we have just a 'Bypass' switch to turn the effect on or off. 

Of course, some Auto-wah pedals have Expression inputs, and if you connect an Expression Pedal into that input, then you have a foot pedal that controls another pedal!  So if you don't want repeated Wah-Wahs at the rate set by the LFO, then you can use the Expression (foot) pedal to do the 'wah'ing yourself, at whatever rate you want. 

The 8 Step is like an Expression pedal, except that it doesn't have a foot pedal bit that you move with your foot: instead it has 8 linear slider controls that are activated in turn by an LFO. So you get up to 8 different settings of a non-existent foot pedal, sent down a TRS 'stereo' cable, to another pedal where those settings affect the audio. 

If you really want to blow your mind, then the 8 Step Program also has an input for... an Expression Pedal!

Wah, not wah...

I haven't been using the 8 Step Program to control Wah-wah effects. I've been playing with Echo Units or Delay Lines - audio boxes that apply echo or delay to audio signals. Small cyclical changes to the delay/echo time produce flanging, chorus, tremolo, vibrato and other 'Modulation'-type effects, but sudden jerky changes have a very different effect - they change the rhythm of the echoes. If you change the timing of echoes or delays with a Step Sequencer, then you get a sequence of different rhythmic echoes. It's an interesting and unusual effect - particularly because it doesn't settle down into a fixed rhythm. The echoes are always changing, and if the rate of the Step Sequencer (in the 8 Step Program) is not synchronised to the timing of whatever audio you are processing (a drum machine, or groovebox, or a synth playing a sequence, then the two different rates should drift past each other, and you should get 'skying', where things gradually change in a way that is beguiling, non-repetitive, and addictive.

So, above is the setup. The 'Expression' control signal goes along the TRS 'stereo' cable from the 8 Step Program device to the Echo pedal, and inside the Echo pedal, the Expression is mapped to control the delay time. The 8 Step Program's 8 numbered 'step' sliders are set to a rising stepped 'sawtooth' type of waveform, and the Rate slider on the 8 Step Program is set so that each step is close to one repetition of a drum pattern or a sequenced synth line. 

The results are 8 different patterns of syncopated echoes, because the steps from the 8 Step Program give the equivalent of 8 different settings of the 'virtual expression pedal' that the 8 Step Program is emulating.  Unlike a human being, the 8 Step Program reproduces those 8 steps more or less exactly the same each time, and so it is possible to really hear the 8 different patterns cycling through. Best of all, the Rate slider of the 8 Step Program and the audio clocks are not in sync, and so the patterns gradually change as predicted. 

What I haven't checked out yet is to use a MIDI Clock to do the exact opposite: put the 8 Step Program and the audio into sync. Even when I do, then there is still scope for additional experimentation. The 8 Step Program allows the number of steps in the sequence to be changed, so the length could be set to 7 steps instead of 8. This would mean that even though the 8 Step Program, I mean the '7 Step Program', and the audio drum machine or synth sequencer are in sync, there is a 7:8 ratio of timing, and so they will drift or slip against each other, and so they will generate long repeating patterns that last over many bars. So that is ratios of 1: 8 through to 7:8, plus 8:, which is in sync.

The 8 Step Program also allows the step sequence to run in Reverse (which isn't going to be very different - the patterns will just be different), and in Bounce mode, where the steps go back and forth from 1 to 8 to 1 to 8 etc., scanner-style. Now this 'bouncing' is 15 steps in length, which means that we can have ratios of 9:8 through to 15:8. There's quite a lot to play with here.

There's one final mode for the step sequence., and that is Random, where the steps are not output in sequence, but at random. So after step 1, then any of steps 1 to 8 could follow. This will again give 8 different syncopated echo patterns, but they won't be in any order, and so there will be less obvious patterning for a human being to detect - plus the patterns will not repeat after the same number of bars each time, because the patterns are selected randomly. Again, there is lots of scope for exploration here.

Other devices... 

I've always liked Echo as an effect, but any pedal with an Expression input socket can be used with the EHX 8 Step Program. So Reverb, Flanging, Phasing, Tremolo, even Wah-wah could all be controlled using the 8 Step Program. And all of this complexity and syncopation is totally DAWless!

The 8 Step output is also a Control Voltage (CV), and so with a 1/4 inch jack to 3.5 mm jack, could be used to control Eurorack modulars. In fact, the Expression Pedal input of the 8 Step Program can be used to control parameters like Rate, Depth, Glide (You can set how quickly the steps go from one to the next - a bit like Portamento on a keyboard..) and Sequence Length, as well as a Clock input, so there are many more interfacing options there with modular synths. 

MIDI-wise the 8 Step Program has full MIDI Control over programs of steps, plus all the parameters.  Future investigation for me...

Summary

The Electro-Harmonix 8 Step Program is just a small pedal, but there are lots of ways of using it in a DAWless setup to do things which will sound complex, syncopated and yet, can have the unpredictability, drifting and all of the unexpected serendipity of analogue modular. Using the 8 Step Program to drift through some syncopation delay effects from a DAW output might also change some opinions about the inherent boring repetition that you get with a DAW. I'm wondering if there is scope for a contest where people compete to fool a panel of judges with their DAWless or DAW systems... Now that sounds like an interesting event for a synthesizer booth type gathering!

So you can hear how all this sounds, there's a YouTube version of this blog article on... YouTube!  There are only a couple of examples, but I'm sure that you can come up with your own. Just tell EHX or  Andertons that I sent you when you get your own 8 Step Program!

The EHX page for the 8 Step Program lets you download the manual, which is full of loads of details about what it can do. Please try not to drool onto your screen...

(Note that I bought the EHX 8 Step Program with my own money, from Andertons. This blog post was not sponsored by EHX or Andertons. I just buy stuff from them because I like them!)

---

If you find my writing helpful, informative or entertaining, then please consider visiting this link:


Synthesizerwriter's Store (New 'Modular thinking' designs now available!)

Buy me a coffeeBuy me a coffee (Encourage me to write more posts like this one!)





 

Friday, 17 April 2020

Different Two - dual channel 'old school' step sequencer for parameter control sinking and sourcing

Sometimes you just don't see the wood for the trees. It happened to me when there was a question on the Facebook Max For Live Users group about a step sequencer. from Johan Wallen The OP wanted to control the slider values in a step sequencer with an external MIDI Controller. As it happens, one of the side effects of having a ready-made maxforlive object that does just about everything you might ever want in a step sequencer means that MaxForLive.com has many, many 'live.step'-based step sequencers available on it. But 'live.step' has limits (everything does!), and the question made me think - could you even do what was being asked for with live.step?

Bait taken. I was quickly in Max and testing out live.step, and it was true - you couldn't Apple/Cntrl-M map a MIDI controller to the sliders that control the pitch, velocity, etc. in live.step. Note that the intended usage for live.step is that you use the mouse to set the sliders, and then map the output to a parameter in another device. This was different - controlling the sliders themselves in live.step with a MIDI Controller. Challenge accepted.

Not using live.step was going to be interesting. Back to first principles...


The result is MIDIdifferentTWO, which is, of course, different to MIDI differentONE! TWO is deliberately 'old-school' in design, with rotary controls and big lights for each step, and is built without using live.step. So there's a classic 'counter' object to generate the steps, the rotary controls are scanned using an 8-way 'gate' object, and the lights are the standard 'blink' / 'bang' buttons. driven by a 'switch 8'object.  To complicate matters, the 'gate' object allows values to pass through it, but you have to send the value, and a rotary control only outputs a value when you change it (or bang it). My attempt at a solution was to use a 'message' object as a buffer between the rotary control and the 'gate' object, and this seems to work quite well, at the cost of quite a bit of wiring up of bangs...


I was wondering if I should use the buffer contents to replace the parameter value of the rotary controls, but decided in the end that this wasn't required. I also rejected the idea of using the buffer as the map target for the Ableton 'remote control' system 'control voltages', so that I could have the rotary controls set as 'hidden', but I'm leaving this as an option depending on feedback. The Ableton M4L Guidelines for hiding objects so that they don't overwhelm the Undo history seems to be incompatible with making controls map targets, so this design has some flexibility in terms of possible mitigations.

The Max For Live code above is simplified, and there's a missing connection! The step clock output from the counter should be connected to the left-hand input of the 'gate 8' object - but you can always look at the real code if you download the amxd from MaxForLive.com.

The initial design was just a rapid response to a Facebook 'Max For Live Users' group query, and so was me trying to see if I could make do without live.step. The result then went through several drafts to the latest release (so far) of 0.06, adding direction to the steps (the counter object makes this easy, shuffling of the order of the steps (via a look-up table), skipping of steps (using the pack object to remove/restore numbers in the look-up table, and adding a second channel synchronised to Live's transport. Having two channels, where one can be free-running (or driven by MIDI events in a clip, which probably counts as user-controlled-sync!) and the other is locked to the DAW transport gives two very different, contrasting sources of 'control voltages', plus it also looks good. For a single channel 8 step, un-synced step sequencer, then I might have been tempted to put the rotary controls in two rows to reduce the width of the device (M4L Guidelines again!), and I might even have thrown away the 'old school' look and used sliders, but two channels means that the width is going to be wide anyway, and stacking two sliders vertically doesn't work for me. 

Implementing the 'Skipping' of steps required additional map targets for each step, and I was thinking of a Novation Launch Control (or XL) when I was doing this, but there are lots of other MIDI Controllers available. The solution was to just use a toggle text object as the map target...  One complication in the Max For Live coding was how to deal with the number of steps when you could skip or un-skip steps, but once again, the 'counter' object makes changing the count maximum easy, and so I just used the look-up table length as the counter maximum, and it was sorted! I'm always intrigued by how some problems loom ahead as being major, maybe insurmountable  challenges, but when you actually start to code them, they kind of shrink and aren't as impossible as you anticipated. There again sometimes apparently simple things can take ages to figure out, so there's no certainties!

The blinking lights proved to be one of the most challenging things to get right... The 'button' object has a parameter called 'blinktime', which controls how long the light stays on once it gets a 'bang' signal. Unfortunately, when the rate at which you scan across the steps changes, then blinktime needs to change as well - ideally so that there is no overlap with other steps so two lights are both lit at once, and without any gaps where no light is lit at all. This turns out to be difficult! Now if the 'button' object would just light up for the whole of the time that a step was active, like an LED or even a bulb, then it would be easy. But initially I didn't want to mess about making a custom graphic object like that, although eventually I decided that I had to, and here's what I did...


I wrote a special object just to decode the step number to drive scrolling lights! As often happens with these things, (and as noted above!) when you sit down to do it, then it isn't as difficult as you expected. It turned out to be nothing more than a set of compares, but instead of using the 'button' object as the indicator, I used the live.toggle object, which shows one colour when you send it a one, and another colour when you send it a zero. So now the steps are shown by an indicator that lights up for the whole of that step, and is off the rest of the time. Neat and much better than my previous default indicator: the 'button' object. Sometimes being forced into a change is good for you...

Notice that this time the missing connection is missing no longer! So what do the comparisons look like inside the scroll_mr package?


As I said, all a bit obvious really. But it works very nicely!

Using MIDIdifferentTWO

For something that started out as about half an hour's coding in response to a Facebook query, the final result (so far) has quite a lot going on! So, as usual, here's a side-to-side detailed descriptoon of all of the controls and what they do:

First, notice that there are two separate step sequencers. The top one can be either free-running (with its own clock running at the 'Rate' speed when the 'Mode' selector is set to '=Not Synced=' (I'm never sure if there should be an 'h' in synced/synched...), or else triggered by one of five different MIDI Events from the clip in Ableton Live: Any MIDI Note, Any change of MIDI Note Number (so repeated notes trigger the step advance the first time, but not after that), Note number 0 (very low frequency!), Note Zero with a MIDI Velocity of zero (the lowest, quietest note in MIDI 1.0!), or any note with a MIDI Velocity of 1 (the quietest note in MIDI 1.0). Because these MIDI Events are in the clip on the track in Ableton Live, then they are synced to Live's transport, but there's nothing to stop you having all sorts of weird timing of those notes, and don't forget the 'ignore repeated note' mode. The lower step sequencer is always synced to Live's transport, but you can choose anything from the step advancing every 8 bars to every quarter beat, which is quite a big range.

Both sequencers have the same controls after the speed/sync section. After the step number and a little count-up indicator, downwards there is the Direction control, which allows selection of left-right (ascending through the numbered steps), right-to-left (descending), and back & forth (palindrome mode, as some say). Underneath are two tiny toggle buttons. '1-8' and 'Skips' forces the full 8 steps when it is showing '1-8', whilst in 'Skips' mode the step numbers can be clicked so that they turn into 'X's, and then that step will not happen (and the length of the sequence will be shorter). Sequences that are one step long are okay, but they aren't very interesting! As you click on the step numbers to change them to the 'X's, then you will see that a row of tiny numbers will change to show the missing number. The 'Shuffle' button changes the order that the sequencer plays the steps - and again the row of tiny numbers will change to reflect the new order. Each time you get the 'Shuffle' button then the order will change. The lowest controls are nudge '+/-' buttons for the sequence length, shown as a small blue number on the left side. The step length automatically changes when you set up skips.

The central section is 'old-school': rotary controls for setting the step values, and big indicators to show which step is playing. The modern twist here is that the step numbers (in the grey squares) can be used to skip steps, but there's another hidden twist - you can control the rotary controls and the skip buttons with Ableton Live's 'remote control' 'control voltage' system. To do this, you either use the Map button in an LFO or other device, and then click on the rotary control of the grey step number square in MIDIdifferentTWO, or you put Ableton Live into MIDI Learn mode (Apple/Control-M to get into the 'blue' mode), then click on a rotary control or a grey step number square and move a slider or press a button on an external MIDI Controller. If you did this is the right order then the rotary control or step number will show an indication of the note number of MIDI controller that you have mapped to that control in a small grey box, and a line will appear in the 'Mapping' table at the upper left of Ableton's screen.

For testing, I used a Novation Launch Control to control the skips:


In the photo above you can see that the four lit buttons on the Novation Launch Control have turned steps 5,6,7, and 8 on the upper sequence into 'X's, and so those steps will be skipped. Also note that the sequence length has changed to 4 steps (the little number on the left). When I took the phot I was just about to map the rotary controls on the Launch Control to the rotary controls for the step values in MIDIdifferentTwo, so that I could control the sequence from the external MIDI Controller. You could, of course, use just about any MIDI Controller to control the sequencers inside MIDIdifferentTWO... Using an external MIDI Controller like this crosses the line from DAWless to 'DAWed', of course, but using a MIDI Controller definitely looks 'DAWless'!

After the eight sets of step  controls, the section on the right hand side deals with the output values of the step sequencers. The large blue numbers are the current output value - there's a label that says so! Underneath this is a 'Normal/Invert' toggle button, which inverts the value (so 127 becomes zero, and zero becomes 127). Next on the right are three rotary controls. 'Offset' adds to the value of each step, and can be used as a way to shift all of the values at once. If you are controlling a filter with the step sequencer, then this would behave just like the cut-off frequency control in the filter, for example. The 'Depth' rotary control scales the step values. At zero it scales the values down to nothing, so you won't hear any effect. At 100% the output is the values shown on the rotary controls. At 200%, the output is scaled to twice the values shown on the rotary controls - which means that the output value may well 'max out' at 127! The final rotary control is the 'Smooth' control, which is like the 'Slew' control on modular synths, and it turns abrupt jumps of value into more gentle slower 'slides' - it 'smoothes' the output!

Finally, there are two 'Map' buttons and their inverses, 'Unmap' buttons. You use these to map the output values of the two step sequences to other instruments, effects, or utilities inside Ableton Live. Controls that are being controlled generally go grey to indicate that they are being controlled from somewhere else (LFO, MIDI Controller, etc.), and their value moves on its own! To unmap and select another control, you use the 'Unmap' button.

Sinking and sourcing?

These are electronics terms for outputs and inputs respectively. In lots of electronic interfaces, an output is a source of current flow (it 'sources' current is the colloquial phrase), and an input is a sink of current flow (it 'sinks' it is the colloquial phrase). So for the MIDIdifferentTWO device, the step rotary controls and the grey step number squares are sinks, and an LFO or MIDI Controller that is controlling it via Ableton's 'remote control' control voltage' system would be a source. At the output of MIDIdifferentTWO, the two big 'Map' buttons are sources, and whatever they control would be sinks. Jargon, that's all.

In use


One thing to try is to change the cut-off frequency of a filter (a well-worn cliche that you can also do with the stock/factory 'Auto Filter' effect), or change the time delay of Delay (there isn't a stock/factory effect that does this!), or change the Depth in the Saturator effect to give an interesting rhythmic 'bite' variation. Basically, whatever your favourite 'control to tweak' is, you can now apply a shimmering, rhythmic version of it automatically, and free up that hand for something else, like pitch bend, or a mod wheel, or mousing, or adjusting knobs on outboard gear, or anything else. Now I know that I already have a device called '3rd Hand' (look it up on MaxForLive.com), but this is a bit like having a third hand!

Getting MIDIdifferentTWO_mr

You can get MIDIdifferentTWO_mr here:

     https://maxforlive.com/library/device/6160/mididifferenttwo

Here are the instructions for what to do with the .amxd file that you download from MaxforLive.com:

     https://synthesizerwriter.blogspot.co.uk/2017/12/where-do-i-put-downloaded-amxd.html

(In Live 10, you can also just double-click on the .amxd file, but this puts the device in the same folder as all of the factory devices...)

Oh, yes, and sometimes last-minute fixes do get added, which is why sometimes a blog post is behind the version number of MaxForLive.com...

Modular Equivalents

In terms of basic modular equivalents, then implementing MIDIdifferentTWO_mr is just two step sequencers, giving an ME of 2. The ability to control step values and skips may vary with the specific sequencer, but if implemented, then it is just more patch cables. Perhaps MEs should also include some sort of measure for the number of patch cables that are required?

---

If you find my writing helpful, informative or entertaining, then please consider visiting this link:


















Thursday, 13 June 2019

Documentation for the 'Probably' series of M4L devices - Illustrated!

The recent release of ProbablyR 0v14 reminded me that the documentation needs writing at some stage... So here's a promoted part of the blog post for that, but as a separate blog post to make it easier to find, and with added graphics to give it extra 'eye-candy'-ness. Not quite a square coffee-table book full of nice glossy photos, but you never know...

Documentation for Probably

The MIDIprobablyR(S,Z...) series is getting to the point where it needs a proper manual, but this may take some time, so, in the meantime, here are links to all of the blog posts covering the various versions of the Probably step sequencer. (and related devices) 

The Probably... step sequencer


Probably was the first (and simplest) of the 'Probably' series of step sequencers. This blog post is a good place to start.

Probably blog post                  The first in the series (four grids, limited panel colouring)


ProbablyZ blog post               The second iteration (added the time-warping 'Order grid/panel)


ProbablyS blog post               The third iteration (added the sub-sequencer 'Memory' grid/panel)


ProbablyR 0v11 blog post      The fourth iteration (added 16 step sub-seq, warp fills, and Step length)


ProbablyR 0v14 blog post      The fifth iteration (added 'Swing' panel and 'Nudge' buttons)

Latest ProbablyR on maxforlive.com




Somewhere along the line, the breathlessly-annotated 'white and light purple' advert style got stuck in my mind, and I have used it ever since. Love it or hate it, it is immediately recognisable...

Other 'Probably...' devices

After Probably, there were some other devices that added extra letters to the end. The 'step sequencer' series adds a single letter: S, Z, R - the other devices add more than one letter. The release sequence for 'Probably the step sequencer'  is: Probably, then ProbablyZ, then ProbablyS, then ProbablyR (current).


ProbablyLFO


ProbablyLFO blog post           Outputs probabilistic (variable) waveforms  


ProbablyLFO blog post2         Extra sync additions and time warping               On maxforlive.com

Most people glance at the pixelated sine wave in the 0v03 screen-shot and say something like: 'Yuk - a pixellated sine-wave!' and ignore it. What they miss is an LFO that allows you to make arbitrary waveforms that change shape probabilistically and over time (the noise-warping is really cool, even if I say so myself!). Also, the pixelation can be smoothed out, and actually, having a little bit of it sounds good! - if you were raised in the 'S&H filter modulation era' then it is like a more sophisticated version of that. First impressions are not always reliable, and I've not even mentioned really unusual features like the 'Note' mode, where the LFO waveform is 'triggered' by notes in a clip, which one user described as 'genious'!



ProbablyGEN


ProbablyGEN blog post          A poly-rhythmic drum sequencer, plus...  

     
ProbablyGEN blog post2        Extra asynchronous additions...                           On maxforlive.com

ProbablyGEN is pure timing madness. Each of the three horizontal rows is independently timed (synced or free of Live's transport) and so you can do truly free-form poly-rhythms. This is the sort of thing that really ought to be a module for a modular synth...



ProbablyCHORD


ProbablyCHORD blog post     Probabilistic chord generator ('Sergeant...')        On maxforlive.com

ProbablyCHORD is interesting because it brings together several idea into one place. The TR2gen to-step chord generator puts two chords in sequence and provides inversions, and then lets you automate and add probability to it. So it adds polyphony to the monophonic step sequencing from ProbablyR (and in fact, the variable 'step length' pop-up menu was tested here first, then added to ProbablyR 0v11). But it is also shown to its best advantage when paired with an 'articulated' sound using velocity, and you can learn more about this in two ModeAudio interviews/tutorials.


There is more on Ableton instrument racks here:

- Macro controls in Instrument Racks In Ableton Live

And an example of a more sophisticated multi-layered articulated sound (implemented in an Instrument Rack in Ableton Live) is here:


In the pipeline is a blog post on additional articulations that you can do inside Instrument Racks, which may also have other spin-offs...


ProbablyCHORD blog post2 - coming soon!


There are updates and more devices in the pipeline, of course. Watch this blog!


All free!

Everything here is free, of course, but donations are always welcome!







Tuesday, 11 June 2019

Generative non-linear step sequencer - new 'Swing' panel, and more!

This was going to be a quick post to describe a new panel for my 'ProbablyR' generative, probabilistic sequencer, but it seems to have grown into a longer tome because version 14 has made rapid progress... So this post will cover:

1. The new 'Swing' panel
2. The new 'time manipulation' facilities in the 'Order' panel
3. The new 'Nudge' buttons in most of the panels

As always with a new release of ProbablyR, don't forget to send it a MIDI note (from the keyboard emulation on a laptop, or from MIDI In), click on the 'D' default button to get a clean setup, and then save the settings using the little 'floppy disk' icon in the top right hand corner so that you get a saved .adv file in your library. Then explore the new stuff!

Oh, and I suppose that I should use my new naming scheme, so this updated device is really called: 'MIDIprobablyR 0v014'.


The Swing panel

The 'Swing' panel adds the ability to set the length of each step in the sequence in 64th note intervals. Note that ProbablyR already lets you set the length of the generated note at each step in the sequence,  so the 'Swing' allows you to control the time between steps, which is somewhat unusual in step sequencers.

I'm using the term 'swing' here because that seems to be the most commonly used term in the DAW industry, and I'm very aware that 'Swing', 'Shuffle', 'Groove', and 'Nudge' are all terms that can be used for similar parameters. Now, having been using the amazingly excellent Novation Circuit for the last couple of months, I have to say that 'nudge' was my first choice, but that was already taken for a completely different new feature. (Of course, these days, maybe what I should be doing, is putting a picture up on Facebook in a DAW group that asks: ''Swing', 'Shuffle', 'Groove', or 'Nudge': Which is the right word?' and waiting for comments...)


The 'Swing' panel is the slightly purply, dark blue one (not the re-coloured teal one for 'Note Length' that used to be 'the dark blue one') on the far right of ProbablyR, and uses the same probabilistic grid that I have been using for all of the major control functionality in the Probably series. (Time usually goes horizontally, each white cell vertically is selected at random.) So, yes, the horizontal axis is time: 18 steps maximum in this version (the UI is holding me up for more steps...), whilst the vertical axis sets the number of 64th notes between each step, with fastest (1/64th) at the top of the panel, and the slowest (64/64ths) at the bottom of the panel.

Now, following my usual trend of not doing things in the conventional way, the 'swing' control presented here is rather different to the more usual percentage value from 50% (Straight or 'even' timing, where, for example, every 16th note is the same time after the preceding note - so they are evenly spaced in time) to 70%, or even 85% (Not straight timing at all, but 'swing'-timing, where (typically = there are variations!) each second note is moved in time so that it is not the same time after the preceding note as that preceding note was for the one before that.) Instead, the probability grid allows you to set the thing of any of the 16th notes backwards or forwards in increments of 1/64th notes. In the Ableton Live manual, they describe 'groove' in terms of having a piece of elastic for the timing, instead of a fixed metronomic grid. So in ProbablyR, the probability grid provides exactly that sort of timing flexibility, but it also allows probabilistic control, so the swing is not necessarily the same for each note, or each bar, or each repetition... Now this is quite an unusual ability, even these days, unless you have ever programmed something like a Roland MC500. (where each note's timing can be controlled individually!)


Since ProbablyR's timing runs on 16th notes, then the default horizontal row is the 4/64ths line, which is a 16th note. This row is highlighted in dark grey, with the rows above and below in lighter grey. If you let ProbablyR run with the default '4' setting of white cells for each step, then there is no effect: each step is 16th of a note, as usual. The very top row is coloured red to indicate that it is very fast, so fast that on some slower computers the timing might not be exactly as you would expect. This is a result of the way that ProbablyR gets timing information from Live, and I suspect that a better programmer than me (Gregory Taylor from Cycling'74, for example) would be able to improve upon it. Having been raised in a world where the limits of analogue devices were very evident (anyone who has tuned a Yamaha CS-80 will know what I mean), then I'm very gratified that digital devices  also have limitations and wrinkles, albeit sometimes very different ones. And, as they say, 'limitations are the spurs to creativity'!

First half fast (so middle note is early), and second half slow - on average!

But adding an extra white cell at the start and middle of the sequence (the left hand side and the middle of the grid in the panel) can change the timing - quite radically if you want, or reasonably subtly if you prefer. The timing is altered 'per step', so you can have different timing for each step in the sequence if you wish, although this can be quite challenging to minds and ears that are mostly acquainted with regular 4/4 at 120 bpm. The 'Swing' panel uses the same probabilistic control as the rest of ProbablyR, so if you have more than one white cell in a vertical column, then the probability of that value being used is the reciprocal of the number of cells. In other words, if you have 1 white cell, then it happens with a probability of 1/1, which is 100% of the time. If you have 2 white cells, then each cell has a probability of happening of 1/2, which is 50%. Three cells is 33% each, four cells 25% each, and so on. The mathematical term for assigning probability weights to events is 'Bayesian', so if I was a marketing person, I would be calling this a 'Bayesian step sequencer with weights of 50%, 33%, 25%, 20%...'. But you get the idea - the more white cells there are in a vertical column, the more 'spread out' the chance of each one happening becomes. So an alternative way of thinking about the white cells is that they 'spread' the chance of that value happening: one cell doesn't spread it at all, whereas 10 white cells means that each one is only going to happen 10% of the time, on average.

So what happens when we add a white cell to the default row of '4'? Well, in step 1, the length of the step will be either 3/64ths of a note, or 4/64ths of a note. Each of these will happen half of the time, but randomly - so it won't be 3 followed by 4 followed by 3 followed by 4 each time, it could be more like: 3, 4, 4, 3, 3, 3, 4, 3, 3, 4, 4, 4... but where the 3s and 4s are randomly distributed over time. If you listen for 3 minutes and count them, then each of the counts would be pretty close to being half of the total number. It's a bit like tossing a coin: long-term, it will land on 'heads' 50% of the time, but this doesn't mean that if you get 10 heads in a row the next toss will have to be tails ('to even things out' is what people tend to say). Nope, each and every time that you toss the coin it will give heads or tails independently of the previous tosses, which is why the long-term results are going to be very close to 50% heads, 50% tails. (I am aware that it is possible, with practice, for people to deliver heads or tails on demand, but I'm assuming here that the people tossing the coins are not trained specialists at coin tossing! Or dice throwers, or whatever other 'random choice' mechanism you care to use...)

The step in the middle is going to be either 4/64ths or 5/64ths of a note, so this is slightly longer in time. So the two white cells alter the 'elastic' timing of the step sequence so that the first half of the bar is up to 1/64th note faster, while the second half is slower by up to 1/64th of a note. I write 'up to' because the grid is probabilistic, and so the two white cells in a vertical column mean that the average speed-up or slow-down will be half of 1/64th note (1/128th note). In the UI, white cells above the '4' row make things go faster, whilst white cells below the '4' row make things run slower.

I'm going to stop talking about probability right here, because this is sounding increasingly like a TED talk!

Anyway, back to music and the 'elastic' time concept. The 'Swing' grid allows you to assign any time interval for each of the steps - from 1/64th to 16/64ths (which is a 1/4 (quarter) note). Now if you set all of the notes to 1/64th notes then the whole grid is going to take 16/64ths of a note for all 16 steps (assuming we are using the 16 steps per grid default setting), which is 1/4 of a note - so the whole grid runs at 4x speed and what should be a whole note plays in a quarter note's time. At the opposite extreme, setting all of the steps to 16/64ths gives 1/4 notes per step, and 16x 1/4 notes is 4 whole notes, so the grid runs at 1/4 speed. Okay, so the grid runs faster or slower, but the bars are still in time. Unfortunately, these are ideal cases...

Suppose we leave all of the white cells in the Swing grid in the default '4' position (4/64ths = 1/16th notes, one for each of the 16 steps in a 16 step sequence), except for one. Let's make that 3/64ths, which is 1/64th shorter in time. The whole grid will now take 63/64ths of a whole note to play, which means that it jumps forward in time by one step for each repetition (and so it is not in sync), and after 64 bars we will be back in sync again. Whilst this can be useful for polyrhythms, it would be nice if there was a way of knowing when the Swing grid is going to take the sequence out of sync with
Live's transport, and that is what the large number on the right hand side of the grid is used to indicate (for a 16-step sequence, it will be showing '64' when we are in sync) - the number just above the black box with a 'G' or '4' in it. When the '64' is green, then ProbablyR is going to be playing at the same speed as Live's transport - and don't forget you can always click the Grey "Resync' circle button in the 'Memory' panel if you need to get ProbablyR back in sync with Live. But when the number shows anything other than '64' in red (in the example described just now, it would be showing '63'), then you can immediately see that ProbablyR is going to be slipping or dragging in time. So the number going green is something to look out for if you want to have ProbablyR running in sync.

First quarter of the bar is fast, the second quarter is slow, the third quarter is fast again, and the fourth quarter is slow again - on average.

When you edit the Swing grid live, you will find that the number goes red or green depending on where the white cells are, and it is easy to get out of sync. To enable you to edit the grid and not lose sync, there's a special button that enables you to make changes in the background, check that they add up to '64' (for a 16 step sequence) when the number goes green, and then apply the new swing all at once. It is the 'G'/'4' black box - when you click on it so that it shows '4', then the default 4/64ths '4' setting of swing will be applied to the whole grid, regardless of what the grid actually shows. So you can click and put/remove white cells and check that you get a green number, and then click on the '4' in the black box so that it changes to 'G', and now the Grid will be active and you will get the swing settings that you have chosen applied to the grid step timing. You may need to practice this so that the process of

[ '4', then edit the grid, then check for green, then 'G' to Go with the Grid ]

is fixed in your mind (and fingers), and you will be able to change the swing during live performance without losing sync. If you have seen the fist ProbablyR video then you may not have noticed that it is a live recording and that I never stopped ProbablyR running - it just plays the whole time, live. Well, the 'G/4' button is designed to enable you to make changes to the swing whilst ProbablyR is running and in sync with Live.

Putting a speed-up just after the first note in the bar, then a slow-down just before the middle beat, then a speed-up for the third beat, and a slow-down at the end of the bar

Of course, if you do not want to stay in sync, then go for red numbers and don't bother with the 'G/4' button! I'm hoping that some people will do this live, so please let me know if you are using ProbablyR 0v14 in this way! There is another feature for people who want to do 'off sync', and this is the smaller number just lower down from the black 'G/4' box - this number shows the running average number of steps that ProbablyR has played over the last few repetitions. So if you set the 63/64ths swing grid from earlier, then this will go from 64.0 to 63.0, going through 63.9, 63.8... etc. on the way. And if you go back to 64/64ths (or click on the 'G' black box - just reminding you!), then this 'running average' will gradually go back to 64.0. This is intended to give the performer who wants to go 'off sync' a way to see when they are back in time with Live's transport, or maybe when they need to click the grey 'Resync' circle in the Memory panel to get properly back in sync. With a little practice, you can be in complete control of where ProbablyR is in relation to Live's transport.

Editing the Swing grid whilst the '4' button is active - so the timing is even across the whole bar.

Once the 'G' button is shown, the timing variation is alive. Here the middle beat is late by 1/64th of a note, and the rest of the bar is slightly faster to compensate. Note that there are no vertical columns with two white cells, so this timing is always constant and the sequencer should stay in sync...

The 'Time Manipulation' facilities in the 'Order' panel 

The 'Order' grid sets the order in which all of the other panels happen, and the default is just the lower left-to-upper-right diagonal, which gives the 'linear' time that you expect. The first step is followed  by the second step, then the third, and so on (the cursor lines move from left to right across the panels). If you click on the '-1' button, then you get the opposite diagonal (upper left to lower right) and now time runs backwards in the panels - the cursor lines go from right to left!


Now, whilst you can do a lot with the Order panel, it often requires lots of clicking to clear and set white cells, and so the first new feature is the 'Inc' control number. This sets the number of steps that the sequencer advances across the grid for each step - known as the 'Increment'. Previously this was fixed at 1, and so the default diagonal meant that the cursor moved from left to right one cell at a time. Editing the grid to change the diagonal is possible, but the 'Inc' increment button makes it very quick and easy to change the number of steps. The default is 1, as expected, but if you set it to 2 then the Order grid cursor will jump across the grid two cells at a time, and so the grid takes half the time to complete, assuming that you are using the default 16 steps per bar for the Order grid. But the interesting setting is 3, because now the cursor jumps from cell 0 to 3, then to 6, 9, 12, 15, and then to cell 2, then 5, and ending up at 14, followed by cell 1, then across again, and finally back to cell 0. So the cursor scans across the grid three times, and ends up where it started (assuming 16 steps is set!). Setting Inc to 4 goes across very fast, but 5 is another 'multiple scans for a complete bar', and all of the odd numbers do the same re-ordering of the notes in the Pitch panel, when you have 16 steps set. So why did I include the odd numbers?

Okay, the even numbers are there for when you use an odd number of steps: 15 is a good starting point. You need to change the 'Max' control number to '15' - it will no longer be green (assuming you have the Steps selector in the 'Length' panel is set to 16). The Order grid is now only 15 steps across, and so if you use an Increment (inc) setting of 2, then you now get two scans across the grid for one bar. Now, whilst the Order grid is 15 steps long, assuming that you have left the Steps pop-up menu at 16 (the default), then all the other grids will still be 16 steps long - but only the first 15 of them will now be available to the Order grid. So the Order grid will scan back and forth (depending on the Inc value) and the cursors in the other grids will follow along, but step 16 will never be reached. If you want to use step 16 then you set the 'Min' control number to 2, and Max to 16, and now the Order grid will scan from step 2 to step 16.

In other words, the Max and Min control numbers set the width of the Order grid, and this can be anywhere from 2 cels to 16 cells (as set by the 'Steps' pop-up menu in the 'Length' panel. This allows you to set up several different orders in the Order grid, and choose them by setting the Max and Min control numbers, or control the scanning across the Order grid by using the Inc control number. And I haven't mentioned that the Order grid is probabilistic yet, so that makes things even more interesting. Basically, my recommendation is that you should proceed in this way in order to get familiar with what the new features can do:

1. Play with the Order grid with the default settings of Inc=1, Min=1 and Max =16 using one white cell per vertical column.
2. Then try two or more white cells per vertical column.
3. Then try the 'Inc' increment control number.
4. Then use the 'Max' and 'Min' control numbers to choose a part of the Order grid to control the same part of the other grids. Yes, with Inc=1 and Min and Max set not to overlap, then a basic setup might have two 8 step sequencers on two different Memory slots, or four 4 step sequences, or even two 5 step sequences and an 8 step sequence (with the 'Steps' pop-up menu in the Length panel set to 18 steps). And when you have all of these sub-sequences set-up, then don't forget that the 'Inc' control number will allow you to quickly change the order that the grid plays, or changing Min or Max will change the boundaries of the sub-sequences, and you can overlap them if you want. There's a lot to explore here!

 The 'Nudge' buttons

The Order, Probability, Velocity and Length panels all gain four new buttons plus some associated control numbers, whilst the Pitch and Octave panels both gain two extra buttons. The buttons are Nudge buttons for the grids, and they allow you to move the contents of the grid up, down, left or right. For the Pitch grid this means that you can either use notes in a Clip to control the transposition, or you can do it live using the Up/Down Nudge buttons, or store the nudged grid in a Memory slot. For the Octave grid it speeds up choosing the range of the instrument sound.


But the real fun is the Nudge control numbers. These automatically click the associated Nudge buttons according to the number in them. The default '1' setting doesn't do anything, but if you set the left nudge control number to 16 (and the steps are set to 16...) then the grid will scroll to the left by one cell each 16 steps (each bar). So if you have a probability grid or velocity grid or length grid that is controlling which notes are playing and how they are being articulated, then you can move these independently in time.


I like to have a velocity grid with an up and down wiggle and set to be nudged 1 step less than the number of steps in the bar, so that the grid moves horizontally, but each note gets a different value for 16 bars, and then it repeats. (You can hear this happening on the demo on SoundCloud). If you want, you can set more than one Nudge control number, and then the grids will slide about all over the place. There's huge amounts of control to explore here! (And you can always add more automation using Live's internal facilities as well, of course!)

SoundCloud demo

I'm working on a video, but that takes a long time, so, in the meantime, there's a demo up now on SoundCloud. This is a live recording of a single instance of ProbablyR, plus a drum pattern, and has too much reverb on it. (But it IS a demo, and they always have too much reverb, so that's how you know it is a demo!) The demo has velocity nudging, swing time manipulation, and uses the modulo scanning of the Order grid to give interesting variations of the note pool in the Pitch grid. Hopefully, if I've done it well enough, it should sound like someone improvising on the Marimba, and they are slightly imperfect in their timing... But it isn't anything like that, of course. It is produced by one of those 'boring, static step sequencers that monotonously repeats exactly the same notes...,' except that ProbablyR isn't that kind of sequencer. Not at all.

The MIDIprobablyR(S,Z...) series is getting to the point where it needs a proper manual, but this may take some time, so, in the meantime, here are links to all of the blog posts covering the various versions of the Probably step sequencer. (and related devices) 

The Probably... step sequencer

Probably was the first (and simplest) of the 'Probably' series of step sequencers. This blog post is a good place to start. 

Probably blog post                  The first in the series (four grids, limited panel colouring) 
ProbablyZ blog post               The second iteration (added the time-warping 'Order grid/panel)
ProbablyS blog post               The third iteration (added the sub-sequencer 'Memory' grid/panel)
ProbablyR 0v11 blog post      The fourth iteration (added 16 step sub-sea, warp fills, and Step length)   
ProbablyR 0v14 blog post      This post! The fifth iteration (added 'Swing' panel and 'Nudge' buttons)

Latest ProbablyR on maxforlive.com

Other 'Probably...' devices

After Probably, there were some other devices that added extra letters to the end. The 'step sequencer' series adds a single letter: S, Z, R - the other devices add more than one letter. The release sequence for 'Probably the step sequencer'  is: Probably, then ProbablyZ, then ProbablyS, then ProbablyR (current).

ProbablyLFO blog post           Outputs probabilistic (variable) waveforms    
ProbablyLFO blog post2         Extra asynchronous additions... ('swing-like?')   On maxforlive.com

ProbablyGEN blog post          A poly-rhythmic drum sequencer, plus...         
ProbablyGEN blog post2        Extra asynchronous additions...                           On maxforlive.com

ProbablyCHORD blog post     Probabilistic chord generator ('Sergeant...')        On maxforlive.com
ProbablyCHORD blog post2 - coming soon!

There's now a 'coffee-book' illustrated version of this section in a separate new blog post:

    Probably documentation

Hardware Sequencing

If you make hardware sequencers and are busy taking notes from this blog as potential ideas for your next release, then perhaps we should talk. I would love to help someone make a proper advanced hardware sequencer that goes 'beyond' the current 'state of the art', and hopefully ProbablyR (and the other M4L devices in the Probably series) vividly illustrate that I may be useful to you.

Getting MIDIprobablyR 0v014

You can get MIDIprobablyR on http://www.maxforlive.com/library/device/5529/midiprobablyr

Here are the instructions for what to do with the .amxd file that you download from MaxforLive.com:

     https://synthesizerwriter.blogspot.co.uk/2017/12/where-do-i-put-downloaded-amxd.html

(In Live 10, you can also just double-click on the .amxd file, but this puts the device in the same folder as all of the factory devices...)

Oh, yes, and sometimes last-minute fixes do get added, which is why sometimes the blog post is behind the version number of MaxForLive.com...

RAM and CPU in Live

This MaxForLive device uses quite a lot of CPU and RAM, because it is doing quite a lot of work behind the scenes. This is also a very 'wide' device, but I'm cautious about doing a pop-up window (and not very good at programming them!).

Modular Equivalents

In terms of basic modular equivalents, then ProbablyR V14 would require several sequencers in series/parallel to give the same functionality, plus quite a lot of utility logic to do the linking, the probability functions and the nudging, as well as a dedicated 'clock' sequencer just to do the swing function, giving a total of about 16 ME.