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:
- Chance decides whether an event happens.
- Sample / Hold captures a new value on that event.
- Shift Register stores the current and previous values.
- Merge selects which stored value continues to the sound layers.
One accepted trigger should update both pitch and amplitude later. This avoids selecting hidden notes that are never heard.
Add Event Probability #
- Open
Grid System 02 - Pitch. - Disconnect the
NOTESlane from the pitch Sample / Hold. - Insert Chance between
NOTESand Sample / Hold. - Start with Chance around 75 percent.
- Label the Chance output
ACCEPTED NOTE. - Branch
ACCEPTED NOTEtoward 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 #
- Add Shift Register after the final key-constrained pitch.
- Trigger it with
ACCEPTED NOTE. - Use four outputs: current, previous, two notes ago, and three notes ago.
- Add Merge and connect those four Shift Register outputs.
- For now, select between the current and previous note manually.
- 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 #
- Add Dice near the memory block.
- Trigger it from
PHRASE, not fromACCEPTED NOTE. - Connect the Dice value to the Merge selection control.
- 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:
- leave occasional gaps because Chance rejects events;
- keep the previous pitch during those gaps;
- revisit one of its recent notes;
- change its memory behavior more slowly than its note rhythm;
- remain inside the global key and the selected register.
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