Generative: Pyramid + Event Processor - the bug bit me again

Anyone else doing generative stuff with the Pyramid, or preferably the Pyramid with an Event Processor with any suggestions, insights, info?

I’ve caught the bug again since I had an “aha” last night about using my technique to embed Event Processor triggers within my MIDI data to ‘make a thing happen’ - this time my ideas aren’t quite coalescing into test scenarios or eventual paths to an appreciable outcome.

Well, not yet.

To me the algorithm is the performance, so I’m working on that bit with a dedicated system to create chord progressions, melodies, rhythms, etc - and to determine repetition, so I think my first test is to see if I can teach the Pyramid to record itself via PyraMIDI and a loopback, and then decide how it determines when it is time to record something new, when to alter existing recordings, etc.


So, any input?
Anyone interested in collaborating?
I’m rather well versed with MIDI Translator Pro - maybe intermediate level skills (packing variables, bitwise manipulations, etc) with lots of n00b mistakes.
If collaborating: must be okay with neurodivergents.

1 Like
  • Create a RND# between 0 & 65,535 representing 16 steps of 1measure (assume 4 measures before cycle repeat) when converted into a binary ‘mask’. (eg, 0d56107=0b1101101100101011)
  • Determine if B phrase is Same, New, Relative, or Prev (Same=Repeat, New=Generate New, Prev=Select a previously determined set of 16 steps, Relative= Compare each beat probability against Alpha-Delta ‘mask’ where mask is predetermined in INIT routine (basically probabilities that an Event will repeat based on what part of the measure the Event occurs (greater probability on downbeats, etc)))
  • Use loop to determine a mask of Events paired with 1/16th Note Steps
  • Use 4 buckets of modifiers which are updated with each Event determination, simulating a Markovian chain
  • Apply sets of probabilities to each Event based on position within the measure. Each Event modification may modify the probability sets, divided into 4 “buckets” α, β, Γ, & Δ
  • Different sets of probabilities create different rhythmic structures, such as one (possibly less busy) for harmonic rhythm (ie greater % for α Events but almost no possibilities for Δ Events)

Random #'s supplied via Pyramid S&H LFO.
MTP Script determines values for each set of rhythms, which can be represented by 4 variables, 16 bits each (read backwards, so bit 0 = beat 1, bit 4= beat 2, etc). (Bit# + 4)/4 = Beat #. Remainders 1=‘ee’, 2=‘and’, 3=‘uh’

I’m under the impression that my preferred approach would be to generate the Chord Progression using a Root Note fed to the Pyramid in a Track that uses a Harmoniser, sending MIDI CC’s to set Harmoniser parameters for each chord, also forcing Scale (set by incoming randomised CC’s). These chords are looped back and recorded on predetermined destination Track.

Generate 4 RND#'s via multiple S&H MIDI LFOs from Pyramid into Bome system.

{generate note data}

RND Note# with 4 RND#'s sending back to Harmoniser, then to Scaler.
Pyramid control Track sends “update” trigger (MIDI CC) which triggers the script to select a new Root Note and grab from the continuously updating RND# buckets for the Harmoniser.

So, RND#'sx4 S&H MIDI LFOs + Trigger → Script: define root note + 4 “Harmony” values → Pyramid defines a Mostly Random Chord → Scaler to force key.

This chord data sent OUT from Pyramid and back in to Receiving Bank which is then Arpeggiated, selection of Arpeggio selected by RND#'s in addition to changing Note Value/Rate via separate Track Loop feeding back MIDI CC data (so that rhythm is regular and cyclical).

Leaving this here - will continue work such as:

  • Tying Scale determination with recognition of Root and significant chords to follow musical tendencies
  • Using same batch of RND#'s to determine rhythms and melodic structure, so one set of RND#'s ends up defining whole sections of “music”
  • Distribution of data across sets of Bome Global Variables so sections may be repeatable.

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.