Build a Pitch and Harmony Engine
The timing block decides when a note may change. The pitch block decides which pitch is available at that moment. Keeping those decisions separate lets you change the rhythm without rebuilding the melody.
The Idea #
The pitch engine needs five stages:
changing value -> sample -> limit range -> add root -> constrain to scale
The output should be one stable pitch signal that any sound layer can use. Oscillators, envelopes, and timbre controls do not belong in this block.
Build It Step by Step #
- Open
Grid System 01 - Timing. - In the
PITCHarea, add Pink Noise. - Add Average or a low-pass module after the noise. This makes neighboring values less extreme.
- Add Sample / Hold after the smoothing stage.
- Connect the
NOTEStrigger lane to the Sample / Hold trigger input. - Add Attenuate after Sample / Hold and reduce the range strongly. Start with enough movement for roughly one or two octaves.
At this point the signal changes only eight times per bar and remains stable between triggers.
Make It Follow the Project Key #
For Bitwig Studio 6, build the key-aware part like this:
- Add Root Key and set its octave so C3 represents the neutral center.
- Add Pitch Buss.
- Connect the attenuated random pitch to one Pitch Buss input.
- Connect Root Key to another input.
- Add by Scale after Pitch Buss so the final pitch follows the current global scale.
- Connect the result to the Value Readout and set the readout to a pitch display mode.
Pink Noise -> Average -> Sample / Hold -> Attenuate --\
Pitch Buss -> by Scale -> PITCH
Root Key ---------------------------------------------/
If you are building the patch in an older Bitwig version, use a fixed Bias or Transpose for the root and Pitch Quantize with manually selected pitch classes instead.
Listen Without Building a Sound Layer #
Add one temporary Sine oscillator beside the pitch block:
- Connect the final pitch signal to the oscillator pitch input.
- Turn your monitoring level down.
- Connect the oscillator to Audio Out through a low Gain - dB.
- Listen for a few bars, then remove the temporary audio connection.
The sound is only a test probe. Do not turn it into the final melody voice yet.
Change the project root and scale while the patch runs. The pitch range should move to the new root and every selected pitch should remain inside the global scale.
Checkpoint #
The pitch output should:
- update exactly on the
NOTEStrigger; - hold one value between events;
- remain inside a narrow musical register;
- follow changes to the project root and scale;
- be visible on the Value Readout without any sound layer connected.
Save the preset as:
Grid System 02 - Pitch
Common Problems #
Notes jump across too many octaves #
Reduce Attenuate before changing the scale or timing. Range and pitch collection are separate problems.
The patch follows the root but not the scale #
Root Key only supplies the current root pitch. Keep by Scale after the summed pitch when you want the complete global key signature.
Pitch changes between note events #
Confirm that Sample / Hold is before the range and key processing and that only the NOTES lane triggers it.
Changing the key produces an unexpected octave #
Check the octave setting on Root Key. Keep the pitch engine centered around one known reference such as C3 before transposing individual layers.
Extend the System #
Branch the final pitch to three empty destinations and label them MELODY, BASS, and TEXTURE. Do not transpose them yet. The branches show that several future layers will share the same harmonic source.
In the next lesson we add probability and short-term memory without changing the underlying clock or key.
▶ Next Lesson: Add Controlled Variation and Memory
◀ Previous Lesson: Build a Shared Timing Backbone
▲ Building Large Bitwig Grid Patches