The Sycamore Variations MIDI — a semi-generative MIDI composition

The Sycamore Variations MIDI is a composition/generative patch for sending MIDI to external devices to play “The Sycamore Variations.” (It produces no audio on its own, but it can process incoming audio.) Certain elements of the variations are fixed; certain aspects are generated, both at the beginning of a variation and throughout its run, with controls created to influence how those generative elements are introduced into the piece.

I used the patch to create this album, also titled The Sycamore Variations, which is performed via MIDI by digital piano:

https://christopherhmjacques.bandcamp.com/album/the-sycamore-variations

The idea for the patch was to produce something which could bring generative elements into a stable, developing structure. Concepts of growth and spring informed that intention — I wanted a melody that begins simply and grows more complex as it progresses, while retaining a consistent identity.

Internally, the patch utilizies two 32-step sequencers. Each step has two elements — a pitch and a threshold. For steps 1, 17, and 25 the pitches are fixed at the root note, an octave above the root note, and the root note again, respectively. For steps 1, 9, 17, and 25 the thresholds are also fixed, with an aim of introducing the first root note early and then introducing the other notes shortly thereafter in the progression of the patch. All other values are generated at the beginning of the variation, although some thresholds have minimums to keep the patch from developing too quickly.

The thresholds are compared against the “count,” a sample and hold counter that increases (more or less; more on this below in the “Variations” section) each time the sequencers go through the 32 steps. As the count rises above a threshold, that note will be introduced into the melody.

The “count” rises to a reset point, which is randomly determined at the beginning of the variation. Then, the patch resets and new random values are generated for the notes and thresholds.

The patch is designed so that it can take audio in from the external device it controls. When it does so, the audio is passed to a delay (with a low-pass filter in its feedback loop) — the delay is intentionally a little off-beat to add to the rhythmic complexity of the patch. The audio also passes to a looper which can record incoming audio and then play it back at twice the original speed, pitching it up an octave in the process. (The likelihood of the looper being activated is determined by “Variation 8,” again, I will elaborate on these “Variations” more below.)

The incoming audio will be processed in stereo.

Let’s dive into the patch controls.

CTRL page:

Across the top are controls for setting the root note. You can set a range that the root note will be selected from each time the progression resets, using the “Root low” and “Root high” controls. If you want to fix the root, set these controls to the same note. Additionally, there is an option to set the root note via MIDI by pressing the “MIDI pitch control” button. This pitch will be updated each time the 32-step sequencers recycle, so its effects may not be immediate.

(You can set the MIDI note in module’s MIDI channel by locating the module on the page labeled “Root range.” If you would prefer that the MIDI input changes the root immediately, delete the sample and hold that the note output is connected to and instead connect it to the second input of the 2-channel in switch below the MIDI module.)

Below the root note range is a quantizer for the patch (the quantizer’s key and scale may affect the root note).

The next row is devoted to tempo. The first button is a “Tap tempo,” which will flash in time with the patch based on the tap tempo (or incoming MIDI clock, which will override the tap tempo). Next to this is a “Swing” control for the clock, which has both positive and negative options. You can also set the tempo manually, with a value set by the “Manual Tempo” control. You can select this option by pressing “Manual Tempo On” button — when manual tempo is selected, the tap tempo will reflect the manual tempo entered.

There is also a “Gate length” control, which determines the length of the gates generated by the patch. The gates are based on the tempo, and the control can range from 0 – 400% of the clock, for staccato notes or overlapping ones.

On the next row are some visual feedback for the patch’s progression. One, labeled “Count” shows where the current progression is in its count. And the pixel next to it shows the “Reset point.” By comparing the two, you can get a sense of where the progression is and where it is going.

On the bottom row is a global “Threshold adjustment,” which allows you to lower or raise the threshold for all notes. By lowering it, the density of notes will increase; by raising it, the density will diminish. It is worth keeping in mind: by default, the patch begins when the .0250 threshold is crossed. If you want the patch to begin immediately upon load, you can apply an offset of -.0250. This value will also affect how quickly a new variation of the patch begins playing upon reset, so if you want longer pauses between variations, you can increase this control.

There are also two buttons that allow you to perform two related, but different functions: The “Reset” button will reset the entire variation, including the randomized pitch and threshold elements. The “Restart” button allows you to reset the progression, without resetting the randomized elements (essentially a “do over”). You have to hold both buttons until the 32-step sequence reaches its conclusion, so watch for the “Count” pixel to turn off.

VARIATIONS page:

The “Variations” of “The Sycamore Variations” are 8 controls which allow you introduce … well, variations into the patch as it progresses.

Each “Variation” has three controls in common: “Variation X Chance” determines the likelihood for a variation to occur.

But this likelihood is influenced by two other controls. The “Count Scalar” control allows you to affect the likelihood based on the count. For instance, if the “Count Scalar” is set to a positive value, as the count progresses, the likelihood will increase. If it is set to a negative value, then as the count progresses it will decrease. This gives you a lot of flexibility in determining how these elements will appear within a progression.

There is also a “Count Threshold” — this sets a minimum point in the count for a variation to become active. If you don’t want to introduce an element until later in the progression, you can increase this threshold.

Most of the “Variations” also have a fourth control: the “Amount.” This determines the degree of change that occurs when the variation is active. Most amounts are bipolar, so they can affect something positively or negatively.

The Variations:

Variation 1 — This Variation affects the pitch of steps 1, 9, 17, and 25 (remember, these are the steps with the fixed pitches — except 9 — and thresholds, designed to provide an early and persistent structure to the patch). The “Amount” determines how much their pitch is changed when the variation is active, e.g. an “Amount” of E1 will raise their pitch by a fifth.

Variation 2 — This Variation transposes the entire output. The “Amount,” like in Variation 1, determines how much the pitch is changed when the variation is active.

Variations 1 and 2 are mutually exclusive — they cannot both be active at the same time.

Variation 3 — This Variation affects the pitch of steps 5, 13, 21, and 29. On a given progression, these steps may not be active at all, and if they are active, they are likely to be so later in the progression, which makes this one of the more subtle variations. But because these steps are equidistant between the “fundamental” steps, variations in them can provide a nice contrast.

Variation 4 — This Variation affects the Count, allowing you to lower it (part of the progression will repeat) or raise it (skipping past part of the progression to arrive at a more complex moment suddenly). The “Amount” determines the amount the count is lowered or raised.

Variation 5 — This Variation affects the threshold of steps 3, 7, 11, 15, 19, 23, 27, and 31. Although the “Amount” is bipolar, I would suggest generally using a negative value: this can cause some or all of these notes to appear, adding a good deal of complexity, before disappearing again (provided their individual thresholds have not been met).

Variation 6 — This Variation affects the likelihood of the count to progress. For this reason, unlike other variations, a high “Chance” is probably advisable — this reflects the chance that the count will progress. As you lower the chance, the progression may get hung up at points, not immediately moving to a greater amount of complexity (this will also extend the sequence). There is no “Amount,” as the chance is either a yes or a no.

Variation 7 — This Variation changes the speed of the sequence. You can, for instance, slow it down to half speed or double its speed for a cycle of the sequencer. The “Amount” determines how much the speed changes. For instance, a value of 1 will result in double time, a value of .5 will increase the speed by 50%, a value of -.5 will lower the speed by 50% (half time). A value of 0 will stop it entirely (so maybe don’t set it quite so low).

Variation 8 — This Variation affects the likelihood of the looper recording. This is calculated per sequence cycle — if too many sequences in a row are recorded, there is an overflow measure to prevent the looper from exceeding its buffer. Once the recording ceases, the loop will be played back once (but will also be fed into delays to repeat).

Those are the Variations. I wanted to do more, but CPU became an issue. I might work on another version of the patch (or a variation on the idea) which offers even more customization by omitting the audio processing.

Other page of note:

The “MIDI outs” page is where you set the MIDI channel of outgoing MIDI notes. I have also enabled the velocity outputs — for my purposes I manually set these to create variation in the intensity of the notes. I couldn’t figure out a CPU friendly way to vary these, so it is a manual job, but it can be useful to play around with these (or you can disable the velocity inputs, if you would prefer to have a consistent velocity response). There are four outputs, since the notes can overlap.

I don’t know how much interest there is in this sort of thing, and the patch is somewhat complex to demonstrate, as changes to the Variations have a cumulative, rather than immediate, effect, so I haven’t created a video guide. If you play around with the patch and find yourself wanting such a thing, comments below would help indicate to me that it would have an audience.

The patch originated from a livestream I made about a month ago, which used an internal synth engine to produce its sound (https://www.youtube.com/live/hRvjToMUPq8?feature=share). I consider this version “superior” in a lot of ways, and I don’t want to immediately muddy the waters with various versions, but if you would like me to publish that piece, again, indication in the comments would be helpful feedback.

Leave a Reply

  • Platform:
  • Category: Composition Sequencer
  • Revision: 0.1
  • License: Creative Commons Attribution Share Alike 4.0
  • Modified: 1 year ago
  • Views: 1098
    Likes: 9
    Downloads: 331
Download
Chat