Add Controlled Variation and Memory

Pure randomness forgets every decision immediately. A useful generative system needs stable rules and a small amount of history. We will let some note events pass, store recent pitches, and occasionally return to them.

The Idea

The modules have separate jobs:

One accepted trigger should update both pitch and amplitude later. This avoids selecting hidden notes that are never heard.

Add Event Probability

  1. Open Grid System 02 - Pitch.
  2. Disconnect the NOTES lane from the pitch Sample / Hold.
  3. Insert Chance between NOTES and Sample / Hold.
  4. Start with Chance around 75 percent.
  5. Label the Chance output ACCEPTED NOTE.
  6. Branch ACCEPTED NOTE toward the future melody area. This branch will later trigger its envelope.
NOTES -> Chance -> ACCEPTED NOTE -> pitch Sample / Hold
                               -> future melody envelope

When Chance rejects an event, the old pitch remains active. The timing backbone is unchanged; only the note density is lower.

Store Recent Notes

  1. Add Shift Register after the final key-constrained pitch.
  2. Trigger it with ACCEPTED NOTE.
  3. Use four outputs: current, previous, two notes ago, and three notes ago.
  4. Add Merge and connect those four Shift Register outputs.
  5. For now, select between the current and previous note manually.
  6. Label the Merge output MEMORY PITCH.

Send MEMORY PITCH to the three branches created in the previous lesson. The sound layers will use the selected recent pitch instead of the raw new pitch.

The first few stored outputs may contain the default center pitch until the register fills. Let the patch run for several accepted notes before judging it.

Change the Memory Slowly

  1. Add Dice near the memory block.
  2. Trigger it from PHRASE, not from ACCEPTED NOTE.
  3. Connect the Dice value to the Merge selection control.
  4. Limit the available Merge inputs to two or three if the melody becomes difficult to follow.

The note clock updates the history quickly. The phrase clock changes how that history is read only every four bars. This gives the listener time to recognize one behavior before it changes.

Checkpoint

Listen with the temporary Sine test oscillator again. The melody should now:

Turn Chance to 100 percent and select only the current Shift Register output. The pitch engine should return to the simpler behavior from the previous lesson. This is an important test: variation controls should be removable without breaking the system.

Save the preset as:

Grid System 03 - Memory

Common Problems

The pitch changes but no future sound would play

Use ACCEPTED NOTE for both the pitch update and the future envelope. Do not trigger Sample / Hold from the unfiltered NOTES lane.

The melody feels completely random

Use only current and previous pitch, reduce the pitch range, and trigger memory selection less often.

The melody becomes stuck

Check that Shift Register receives both the final pitch signal and ACCEPTED NOTE. Also confirm that Merge is selecting a connected input.

The first notes all sound like the root

The Shift Register needs time to fill. Begin playback with the current output selected, then introduce older outputs after several events.

Extend the System

Let the bass branch bypass Merge and receive the current pitch or Root Key directly. The melody can remember older notes while the bass remains more stable. Shared systems do not require every destination to use every variation.

In the next lesson we create slow density and movement signals that shape the patch over several bars.


▶ Next Lesson: Create Musical Form With Slow Control
◀ Previous Lesson: Build a Pitch and Harmony Engine
Building Large Bitwig Grid Patches