New Algo ideas/discussion

Ok, this topic is intended to share and discuss ideas for potential new Algo’s :slight_smile:

I will kick off:

Acid bassline generator algo:

A monophonic melody generator with parameter specifically for generating 303 style basslines.
Parameters could include:

  • Root note
  • Note density
  • Scale
  • Monotonal % (how many of the notes will stay at the root note and may only transpose by octaves)
  • Octave range
  • Normal velocity
  • Accent velocity (127 by default)
  • Accent chance %
  • Slide chance % (will overlap the note to the next note)
  • Gate length (for notes that don’t slide) (50% by default)
    Etc.

I’d love to hear feedback on my proposal and also new ideas!

16 Likes

I have code for this (Acid Bassline Generator) ready (albeit it being written in JavaScript). It is an AI based generator (trained by a large collection of existing patterns) and has a high quality (nice patterns) rate when generating new patterns.

It would not be hard to implement it in C/C++, as the trained set is just a JSON structure, and generating the pattern is just a simple function diving through the training data. The result is a list of notes + velocity + accent + slide info. It is better (sounds nicer) then most generators I’ve seen. If Squarp wants it, I’m happy to donate it… please let me know.

5 Likes

Surely the best way to generate acid bassline patterns is to leave the batteries out of a 303 and put it in the cupboard for a week, then put the batteries back in and see what mental stuff the machine has come up with on its own?

5 Likes

a couple of observations about algos currently, which perhaps might help ‘frame’ algos.

  • limited to 8 parameters
    actually it’s possibly 7, since one is used to click/apply algo.
    limitation in this sense is NOT bad imho, as a developers its easy to chuck loads of parameters at a user, but frankly it creates a poor UI design.
    so it would be useful I think when discussing new algos, to try to really narrow it down to the smallest number of parameters thats useful… its kind of an art form.
    “Make everything as simple as possible, but not simpler”

  • using existing notes/event usage
    I think it’s interesting how existing algos work on/build on, whats already in a particular track.
    this way you can evolve a particular track by just getting the algo to work on a bit of the track (e.g. first 4 bars) or an element of it (e.g. note velocity)

  • algos vs fx
    I find the difference between algos and fx an interesting one to reflect… essentially algos are destructive one off events (ignoring undo) whereas fx are continual (obviously chance is the easy example here) - this makes them part of the composition process (for me at least) . the other element is as mentioned above, that they can be (easily) only applied to some events and not others (by using selection mechanism)

Im sure there are other aspects of algos that are important… but those were my obvious thoughts.

as for algo ideas… I think Ive mentioned these to Squarp already, but

  • consolidate
    I loved this on the Pyramid, and it feels natural to make consolidate an algo.
    as on the pyramid, it would run the FX for an entire track and create events to ‘bake in’ the fx, then disable the FX slots. undo would mean you could ‘re-seed’ if you didn’t like the outcome and want to try again :slight_smile:
    (for those not familiar with Pyramid, it sort of allows you to get more FX slots, by ‘committing’ them)
    parameters: not sure we need any

  • automation (particularly mpe) smoothing
    the problem with continuous control surfaces is we generate a LOT of data. to the point that is very difficult to edit - it can also be too much data for the target sound engine to process.
    sure, we have basic thinning control (maximum rate ppqn) , but Im thinking here something that can look a bit more intelligently at the data points, and come up with a set of points that really are important.
    e.g. tiny variations are often completely inaudible, so a waste of bandwidth, but conversely transients are really important.
    parameters: amount of smoothing.

  • extract bass/lead from chord track
    a very simple idea - take a chord track (e.g. T1) and take the lowest/highest note into a new track. this can given you a very basic skeleton for a related track.
    don’t get me wrong, nothing stunning is going to happen - but its a nice way to get started on the next layer… even if just so can see where the chord changes are happening and where they go, and you can fill in the dots.
    parameters : source track, transpose

  • extract rhythm
    similar idea to above but here we are copying the rhythm from one track to a new track.
    again, we would not get perfection (or perhaps even something usable ) but rather a starting point where we can start working on the new track… but again with reference to the underlying rhythm.
    not quite sure how this works in practice - I guess if you use drum track as a source, then it can generate a melody/bass line where things like kick becomes root note… and perhaps randomising other melody parts?
    parameters : source track, root note… randomisation? not sure really ;)!

I guess, the thing these ideas have in common, is I see algos as also being useful as ‘tools’ , doing things that we might do (frequently) manually… rather than just generating events.

though, of course, we theres room for more generative stuff too :wink:

  • automation generator/transformation.
    I think it be nice to have some algos that are similar to the ones we have for notes, but work on automation lane(s)
    I noticed on the pyramid, it tended to focus on notes fx… but I do think automation could often be treated in a similar manner (e.g. mirror/invert) - I guess coming from modular, I see everything as a signal, that can be manipulated.
    parameters : similar to note generators, scale/offset, waveform,

  • mpe generator
    this one is for the future , once we get MPE editing…
    Im lucky enough to have mpe controllers - but many do not… so I was wondering, how can we make MPE features useable by everyone.
    these days were are getting more synths (hardware and software) that are MPE compatible.
    so the idea is simply, we could create MPE expression (so per note) over an ‘vanilla track’ and turn it into an mpe track… basically you’d would be detailing parameters such as how much timbre variation you want, and if to slide to new notes… the kind of thing one would do whilst playing an mpe controller.
    sure, no substitute for playing on a controller - but it could create some interesting variations on tracks that go beyond simple automaton curves.
    parameters: timbre amount, chance, slide amount.

anyway, just a few ideas (though I admit are not fully thought through!)

9 Likes

Consolidate is something I’ve missed, for sure.

I’ve been thinking about Algorithms a bit since Thibault asked for suggestions, and turns out that I have absolutely no ideas at all, apart from some crazy logic-based stuff, but cannot work out how that would function in practice with the interface.

What do people use Algorithims for at the moment? I played with generate a bit, but never really came up with anything I found interesting, and the curves one (unless I’m missing something) seems to kind of be the same functionality an LFO? (which I do use loads)

2 Likes

i’m not sure if this is an Algo suggestion or just a feature request for the Arp FX but I’ve noticed that one thing my Digitone arpeggiator does interestingly (Elektron’s generally I think) is allow you to manipulate individual notes on a step basis over the full arpeggio. so that pressing a single key can trigger a multi-tone arpeggio but also in a way that isn’t necessarily fixed to the same UP, DOWN, UP & DOWN etc. patterns that the Squarp Arp FX seems limited to. so somewhere between merely adding a Randomize FX to the Arp and actually step sequencing out an arpeggio note-by-note without FX in Step mode?

2 Likes

OK, the first most obvious one would be a Euclidean algo IN ADDITION to the FX, to have the option to use the euclidean style in both manners (as opposed to relying solely on Consolidate). Or having the euclidean algo apply to a selection, so you can have multiple euclid phrases, say apply 5/8 for the first bar and then 3/8 for the second.

Next, most of these ideas are taken from the Concentric Rhythms app, which in turn draws inspiration from Godfried T. Toussaint’s The Geometry of Musical Rhythm book.

Rotate

  • Moves the notes/events within the selection left and/or right, but instead of simply shifting them it loops them around the start/end of the selection

Permute

  • Breaks the pattern up into segments consisting of each note and the space following it, then shuffles them randomly to create a new pattern. If all notes and distances are the same, this will have no effect.

Shadow Rhythm

  • Create a new pattern by placing a note exactly halfway between each original note.

Complementary Rhythm

  • Wherever there is a an accented note, it is replaced with a rest, and whenever there is a rest, it is replaced with a note. Unaccented notes and unaffected.

MOD to existing Symmetry

  • Divide the selection in half and Copy only the left side to the right side and vice versa

Random Walk

  • Start on the pattern’s default note then randomly go up or down one step from there. The third note will be one random step up or down from the second, and so on

Ghost Notes become Rests

  • Any note with a velocity less than X will be removed

Rests become Ghost Notes

  • Any rest (no note, maybe linked to a tempo division) will be replaced with a ghost note (definable velocity)

Six Distinguished

  • Fill a 16 step phrase with one of the six distingquished patterns: shiko, son, soukous, rumba, bossa-nova, gahu. But don’t forget Clave, ha.

I mean, if you get into the Toussaint book, there’s a ton of generative systems he explores that results in “good sounding rhthyms”. It’s deep, barely scratched the surface myself.

Edit to add:
Probably worth checking out Mark Fell’s Pattern Synthesis, I haven’t read it yet but I know people on lines were talking about it, apparently he describes some of the algos he uses. I’m chipping away at his Structure and Synthesis book now, it’s great, but maybe more philosophical than explaining his approach to algorithms.

10 Likes

Haven’t gotten the HAPAX yet.
It might make drumming snare and percussion easier if you could automatically insert ghost notes before and after the notes.
-number of notes, spacing, velocity, velocity fade in/out settings, etc.

Sorry if my normal workflow is already easy since I haven’t gotten it yet, looking forward to June.

2 Likes

Boom. This is great!

yeah, I think this is an important point … as for sure FX/Algos could potentially overlap.

generally, I see algos as something that create a starting point, and then you start editing.
i.e its not important for it to come up with the ‘finished’ thing, a rough start… that you can then build on… thats why we don’t need lots of parameters … not after perfection.
the fact that you edit means it cannot be ‘dynamic’ like FX, as you need to ‘bake it’ so that you can now take over.

(this is how I use the current generate function … just a quick starting point)

this is why I think consolidate is important, because it is also the transition from dynamic → fixed.

the other side, I see is it being used a ‘utility’ where it cannot be realistically be done ‘real time’ or with keyboard shortcuts, as there are more parameters.
so, something like transpose/rotate we can obviously do with a button shortcut.
but apply things like a curve to notes, requires a few more parameters (like rate/phase/shape)
or other algos that look/analyse others tracks to come change/add events to the current track.

similarly, frankly, I think we will run out of sensible button shortcuts, so some tool like functions could be implemented as algos, just because theres no where to ‘fit them’ in the UI.

( I see the curves and drum algo as fitting into this category)

so, personally, I don’t think we should get too locked into it as a ‘generative’ tool - I think this was a good first example they came up with, rather than it being the focus on algos.I think there are a lot of other possibilities.

I’d like to see a Merge function in addition to Consolidate, too.

Be super useful to combine automation lanes without having to copy them over one by one to the same pattern.

I think Euclid as an Algorithm is a great shout, too, so you can generate Euclid patterns on a note basis (kind of like it was on the Pyramid) then edit after

2 Likes

This is another voice to request Euclid as an Algo so it functions like the pyramid version. Has someone already entered this as a feature request?

1 Like

It won’t be exactly like the Pyramid one, as once you’ve clicked ‘Apply’ it’ll print the pattern to the track, so it’ll be manual edits after that (which I think is actually quite useful) rather than changing the steps and and pulses live.

yeah, my experience with Pyramid’s Euclidean Step mode has been that it’s more useful for generating ideas but less applicable on the Track level because each Step is limited to a single Euclidean note or chord. what seems appealing about Hapax is applying this at the Pattern level so that a Euclidean rhythm can be applied melodically (if I’m understanding how Hapax uses it correctly)

I think if you have a Consolidate algo, you can just use this in combination with any of the effects, including Euclid. That would be a lot “cleaner” and more useful IMO.

1 Like

The ‘effect’ implementation is slightly different, as it provides a ‘mask’ over the top of all of the notes already in the pattern. Reckon as an algorithm it could allow you to quickly build up a series of different euclid patterns into the same track, with different notes for each pattern.

1 Like

couple basic initial ideas, will have better ones in future :

  1. Consolidate to free up FX slots (with redo type feature incase not desired result)

  2. Every N/Euclidean would be useful for melodic content too (per note)

  3. A drum pattern generator per genre like new polyend play to kickstart ideas (per kit piece eg Kick) this could also work for basslines/melodies/chords… even if its from a pool of midi inside folders on SD card you can add to yourself or something smarter that is generative

  4. Automation Generator

1 Like

This one gives me an idea. Maybe have a ‘groove’ import like you used to be able to get on Akai samplers (I think?) and in Cubase.

Basically would have a .mid file on the SD card, with your groove on it (basically a clock pulse, but played by a real drummer (or lifted off another track, or generated by a computer, whatever) and it would apply that groove (or tempo map?) to the selected track.

I understand this is a little bit ‘pie in the sky’ thinking and maybe a lot of work, but would be really cool.

1 Like

indeed, its the same as the Hermod…
the ‘trick’ however, is just to put one long note on the track, then its functionally the same as the Pyramid.
in that sense, I agree with @Maarten , I think doing this with consolidate - actually gets you to the same place- but with a bit more flexibility.

however… thats not to say I think euclid algo is not useful - in fact, I do…

I think where a euclid algo would be interesting is to layer euclid patterns onto one track…
some (similar) examples:

  • put euclid pattern on track, then layer another one on top.
  • to have a sequence programmed than is not euclid, and then overlay a euclid pattern on top (or underneath)
  • apply a euclid pattern to a limited selection (something common to algos, they work on regions)

what’s ‘interesting’ about this is you’ll see these do not change track length, rather they are working within the bounds of the track/selection.

I think this also gives a flavour to the euclid algo that is sufficiently different to the fx+consolidate to make them useful

of course, one can (reasonably) argue that like other generative algos, it tends to go down a particular style/genre - which im particularly not fond of… I avoided the five12 vector sequencer because of this… I just felt its ‘styles’ were not relevant to me. ( * )


( * ) I know I could just ignore, but for many users that doesn’t wash… having things there are genre specific leads to a feeling on ‘canned’ patterns, and also that the device is somehow targeting a specific market.
… at least thats my own personal opinion, perhaps if they were more ambient/krell derived rather than acid/techno, Id change my tune :laughing:

Nice idea… it’s also like applying a groove in Ableton live

Yeah maybe for melodic patterns it could come across as canned,
Maybe a midi import algo is all that’s needed for that…

but with a broad enough variety of drum patterns by genre is a great starting point to get a track going and with a bit of editing can become something new…
when you get a good drum pattern it’s always easier to get a track going…
Any algos for speeding up the process im interested in for my use anyhow