Generative Algorithm – Count as Pitch
This post is documentation of practical research done with one of the max patches I have built to generate melodic content within Ableton. My aim is to show what results this specific system allows for, and as I go through and explain the different systems, I will also combine the ones already explained to generate more “finalised” harmonic content. I chose to showcase these algorithms with a very simple synth sound without any modulation, so that the harmonic content is as clear as possible. Please note that the algorithm generates fully chromatic notes that are, in a separate module, restricted to play within a specified scale in order to comply with the easily accessible aesthetic I wish for my installation to have.
This system is an attempt to create an algorithm that play a melodic line, rather than set or randomised pitches. I created it as an alternative to the main pitch generator, because I found it to produce quite static, not necessarily musically interesting, fields of notes and I wanted a system that was able to play sequences of a scale in a way that felt more thought through or musical.
It works by counting the number of incoming drips, starting at 0 and increasing to a set number of steps. This count will play different notes ranging from the Low / High note specified in the interface. A large number of Steps means that many of the notes in between the Low / High note will be played. A low number of Steps will play larger intervals to get between the Low / High note within the set amount of Steps.
At first the results seemed promising, and through developing it I learnt a lot about Max programming. It became the most complex piece of code I had written (and might still be so today) but when using it, I soon found it to lack the musicality I was hoping it to produce. In revisiting it for this documentation, my extended experience seem to have given new hope for this algorithm, as can be heard below.
To explain the interface, reading from left to right and top to bottom:
- On/Off: Allows to use/ignore the trigger from each of the drips. Useful if you only want to create notes from a few specific drips
- Settings: Opens up a pop up window with a range of generative settings, that can randomise, change or offset the settings one sets in the main window.
- Visual representation of note output (dark grey fields): The top field/slider follows the absolute position of the count, ranging from 0 – Max Count. The number below this is the number being represented by the above slider. Below this the output MIDI note is updated as the device outputs them.
- Steps: Defines how many notes will be played between the set High/Low note. A High/Low note range of one octave, and a “Steps” setting of 12 will output all the semitones in the octave. Settings with fewer steps than notes chosen, will skip notes. Settings with fewer notes than steps, will repeat notes as it counts.
- Interval: Allows notes to be played at a set interval of drips. A setting of 0 plays a note at every drip, a setting of 19 plays a note at every 20th drip.
- Playing direction: Decides which direction of the count, and if it should seamlessly count in both directions.
- High & Low note: Adjust which note is played at 0 (Low note) and which note is played at the top Step number (High note) set above.
- Velocity & Duration: Specifies note velocity and duration.
All of the controls in the interface can be modified and controlled by the settings page, automation or the custom generative modulation devices I have built.
With this setup, each of the five falling drops trigger an upwards count in 12 steps, over two octaves (E2-E4). The result is every second semitone is being played. When the highest count (and note) has been reached, the algorithm starts over. This should make the function of the system clear, however does not produce very interesting results.
In this example, the device is making use of some of its most useful settings, allowing the device to not only play a simple note progression but more lively generative melodies. It still functions within the same principles, but the settings page has been made use of in order to:
- Randomise a new Step length every time the first drop is triggering, changing how often the Low / High note is being played, as well as how many notes in between will be heard.
- Randomise a new Playing Direction every time the second drop is triggering, changing if the played notes go up or down in the scale.
- A responsive note length is defining note length depending on the rate of the incoming triggers.
The result has a slightly random feel to it, but by constraining it to working its way up or down in the scale, produces more controlled note intervals. This, in turn, gives the illusion of a plan or a musical intention.
Simply putting two of these systems, identical to each other, to work in parallel can generate some simple but beautiful harmonies. Both systems have their own internal randomisation, which leads to an ever evolving chord progression.
If one experiment with different Low / High notes, and some of the settings, one could potentially use such a simple system as the foundation for a longer piece. This is something I will examine further in upcoming pieces.
Another interesting way of generating a full and evolving harmonic piece would be to use the “Simple Pitch” system described in this post for playing a fundamental chord, and making use of the Count as Pitch to play harmonies and melodies on top of the chord.
In this example two instances of Count as Pitch are playing on top of an E minor chord, both with some different internal randomisations and Low / High Note settings. One of them is playing notes on every input tigger for the first, fourth and fifth drip, and the other is playing every third trigger on the remaining two drips (second and third). This produces some unpredictability, but within constraints that feel quite musical.
This is a similar approach to the one described just above, however it produces slightly different results, as all of the triggers are playing notes. To generate some slightly more musical/human feel, the interval that the Count as Pitch is using to define how often it should play a note is being randomised every time the first drop is triggering. This makes the device make a pause at times, and at times play on every trigger. This is, according to me one of the most well sounding combinations of systems presented so far.