MIDI Composition Guides

These guides match the Package Browser’s MIDI Composition group. The scripts create ordinary editable REAPER MIDI items for procedural synths and algorithmic composition.

The shared scale menu includes chromatic, modal, pentatonic, blues, whole-tone, diminished, augmented, synthetic, bebop, and several regional or historical pitch collections. The generated notes remain ordinary MIDI, so scales can be treated as starting materials rather than fixed harmonic rules.

Form Learner

Use this to generate a longer MIDI item from one or more selected MIDI items. The script analyzes the selected notes as source material, then uses NumPy to compose a new editable form from their timing, pitch, duration, velocity, channel, and recurrence behavior.

Starting approach:

The preview shows selected source-note density and register above a generated section map. The generated MIDI remains ordinary REAPER MIDI, so it can be edited, routed to the included procedural synths, or used with external instruments.

Lattice Drums

Use this to create an editable drum MIDI item from the same layered table-scanning model as Lattice Tables. Each layer is assigned to a drum voice, while the table cells shape velocity, duration, and density.

Starting approach:

Lattice Drums is useful for linear drumming: a pattern where no two drums hit at the exact same time. The scan writes one accepted lattice event at a time, and each event belongs to one layer/drum voice.

The included starting presets are Tight Linear Groove, Broken Funk Line, Tom Contour, Playable Erratic, Hat / Snare Braid, Sparse Kick Thread, and Orbiting Kit.

The preview shows the layered table and animated scan. Event dots follow the layer colors, while the active event readout shows the drum token and MIDI note number that will be written.

Lattice Tables

Use this to create a MIDI item from a visible table-scanning path. The script uses layered tables, ingress/egress locations, and event progressions to write ordinary REAPER MIDI for procedural synths or other instruments.

Starting approach:

The preview shows the table, the active ingress-to-egress path, and the translation layers. The same path shown in the graphic is used when the MIDI item is generated, so the diagram is a readable score rather than decoration. Small horizontal traces on events indicate their generated note lengths. Density removes events from their original scan positions rather than compressing the accepted events toward the start of the item.

The lattice scripts include scan, snake, diagonal, orbit, pendulum, jump, attractor, random-walk, braid, layer-bounce, and corner/star gesture templates.

Musical Space

Use this to create a new editable MIDI item from a path through a pitch or harmonic space. It is intended for the procedural synths, but the result is ordinary MIDI and can drive any instrument.

Starting approach:

The preview shows time, degree, MIDI-channel focus, and pitch-class placement in one readable score. The main field places events across the generated duration, while vertical marks show the rhythmic event positions. The pitch compass shows the selected scale and the pitch classes used by the current path. Short horizontal traces from each event show the generated note lengths.

Rhythm models include Euclidean grid, Swing grid, Aksak cycle, Burst / rest, Brownian clock, Contour pulse, Clave cells, Fibonacci gaps, Morse cells, Irrational drift, and Logistic clock. These models are useful when a pattern needs additive grouping, uneven clocks, bursts, drifting pulse placement, or a less grid-bound contour.

Pitch-space models include direct scale walks, contour paths, triadic fields, axis mirrors, pendulums, orbits, spirals, constellations, attractor nodes, and register gates. The generated item is ordinary REAPER MIDI, so the result can be edited after generation.

Polymetric Drum States

Use this to create an editable drum MIDI item from changing polymeter states. Each state stores Euclidean lane settings for drum tokens such as KIK, SNR, CHH, and OHH; the script can jump between states or glide between them before writing MIDI notes.

Starting approach:

The grid is shared across lanes. Each lane advances on that grid, then wraps according to its own Steps value. A 16-step lane and a 15-step lane therefore phase against each other without needing a separate per-lane step-duration control.

Hit probability is density in the probabilistic sense. The visible Euclidean pattern defines possible hits, and probability decides whether each possible hit is admitted when the MIDI item is written. Global probability trim multiplies the per-lane value.

The result is normal REAPER MIDI. If a time selection exists, generation starts at the time selection start; otherwise it starts at the edit cursor. The item length is the sum of the state lengths. The script is especially useful with drum instruments because each lane keeps a fixed drum token while the rhythmic state, probability, and velocity shift over time.

If a drum plugin glitches or REAPER DSP becomes unstable, lower Global probability trim, increase the spacing values, or reduce Max generated notes before generating another item.

Polymetric Pitch Lanes

Use this to create several simultaneous Euclidean lanes in one MIDI item. Each lane can have its own step count, pulse count, rotation, pitch degree, and MIDI channel.

Starting approach:

The preview uses concentric rhythm rings: each MIDI lane is a ring, each step is a tick, and each active hit becomes a node. The hit polygon makes each lane’s rhythmic shape visible. This script is useful for polymetric activity because each lane advances on the same grid while wrapping at its own step count. For the procedural synths, MIDI channel number becomes a compositional dimension: it can steer channel focus while note pitch, velocity, and length steer the synth response.

Preset banks include harmonic fields, bell-like lane stacks, aksak ladders, sparse constellations, hockets, quartal meshes, octave phasing, mirror canons, low/high register splits, chromatic drifts, whole-tone tilts, tritone gates, clusters, wide-register spreads, and minimal pulse fields. Applying a bank sets the active lane count and mutes unused lanes.

Spectral Trace MIDI

Use this to create editable MIDI from a selected WAV-backed audio item. The script analyzes the audio spectrum with NumPy, finds spectral peaks or centroid motion over time, then writes ordinary REAPER MIDI notes. Mono, stereo, and multichannel items can be used; when MIDI channel mode is set to Audio channel, source channels 1-16 write to MIDI channels 1-16.

Starting approach:

The preview shows a symbolic spectral contour and, after generation, the events written by the previous pass. The generated item remains normal MIDI, so it can be edited, quantized, routed to the included procedural synths, or used with external instruments.

Terrain Form

Use this for song-duration MIDI generation. The process calls a NumPy backend to compute a section map, terrain-shaped event density, register motion, channel/lane motion, and recurring motifs, then writes the result as an ordinary editable REAPER MIDI item.

Starting approach:

The generated item is not tied to a specific synth. It can drive Carto, Lattice, Spectra, or external instruments. When Add project markers for sections is enabled, the script also writes section markers at the generated boundaries.