Skip to main content

Creating a Step Sequencer in Max with Philip Meyer

Posted by: Darren
September 19, 2025

Learn how to build a powerful step sequencer in Max using phaser~, subdiv~, what~, and stash~. Ideal for beginners and experts alike, this technique opens the door to unique musical workflows using ramp-based time representation.

A Practical Guide to Time-Based Sequencing in Max 8.3

If you’re just getting started with Max and want a powerful, creative way to generate musical patterns, learning how to build a sequencer using phaser~subdiv~what~, and stash~ is one of the most effective paths. In this tutorial, we’re walked through the complete process of designing a fully functional sequencer from scratch—ideal for beginners but with plenty of depth for advanced users, too.


Setting the Clock: phaser~ and transport

The core of this timing system is phaser~, a ramp-based signal oscillator that moves from 0 to 1 in a defined time unit (e.g., a bar). Paired with the transport object for global tempo control, this provides a fluid, sample-accurate way to represent musical time in Max. Unlike traditional pulse-based clocks, this system always knows where it is in the musical timeline and allows real-time modulation of BPM using delta~.


Subdividing Time with subdiv~

Once the ramp signal is established, subdiv~ divides the bar-length ramp into smaller segments (like 16th notes), providing both an integer index and a signal ramp for each subdivision. This becomes the basis for triggering note events.


Triggering Events with what~

By feeding subdiv~ output into what~, we generate pulses at the end of each subdivision. By adjusting the trigger_modeto detect only descending ramps, clean one-shot triggers are created—ideal for driving steps in the sequencer.


Step Programming with matrixctrl and stash~

A single-row matrixctrl acts as the step pattern editor, where activated steps define which pulses will trigger notes. The melodic content itself is programmed into a multislider, which stores MIDI notes inside a stash~ object. As each step is triggered, it retrieves the appropriate pitch.


MIDI Output via mc.midiplayer

The final ingredient is mc.midiplayer, which converts ramp signals and values into proper MIDI messages. Attributes like modmode and channel are set to ensure consistent output, and a midi.flush is added to clean up any stuck notes at the end of playback.


Alternate Indexing Mode for stash~

For advanced control, stash~ can be toggled to “index” mode, where a numeric index selects pitch rather than auto-advancing. This allows for step-by-step skipping of melody notes when tied to the step pattern, or a continuous melodic flow when decoupled.


Summary

The result is a powerful and intuitive step sequencer, entirely driven by Max’s ramp-based timing system. Whether you’re exploring generative composition or building tools for live performance, this method provides deep flexibility and control.

    RELATED PRODUCTS

    Monomono’s Maya – Juno-Inspired MPE Synth for Ableton Live & Push 3 Standalone

    A lush, expressive Max for Live synth with Juno-style tones, MPE support, and Push 3 standalone compatibility — meet Monomono...

    Darren E Cowley (Admin)

    July 30, 2025
    MaxforLive Devices

    Introducing moon.hands.core – A New Way to Automate & Perform in Ableton Live

    Introducing moon.hands.core – A New Way to Automate & Perform in Ableton Live We’re excited to announce the release of mo...

    Darren E Cowley (Admin)

    July 21, 2025
    MaxforLive Devices