Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
f40af6f
processes: audio looper layers, takes, capture and sync; MIDI looper
jcelerier Oct 24, 2026
9693efb
audio looper: engine latency
jcelerier Oct 24, 2026
ae9d11b
audio looper: loading a file
jcelerier Oct 24, 2026
015e557
loopers: takes as layers, overdub on an empty loop, tempo changes
jcelerier Oct 24, 2026
4185276
loopers: extending overdubs, MIDI follow tempo, free-length recording
jcelerier Oct 24, 2026
dd00058
audio looper: follow tempo
jcelerier Oct 24, 2026
5082de5
midi filter and sync: note-offs follow their notes, first clock with …
jcelerier Oct 24, 2026
c0cfa66
midi sync: what a seek or a loop sends
jcelerier Oct 24, 2026
07fd206
loopers: MIDI layers view, erasing a pass
jcelerier Oct 25, 2026
54b01ed
loopers: a take goes in one box
jcelerier Oct 25, 2026
0b57401
loopers: reverse and speed, comping, restart in phase
jcelerier Oct 25, 2026
62760ae
loopers: late stop into an overdub; Send in the view only
jcelerier Oct 25, 2026
7587c40
loopers: Comp mode and the Switches tab
jcelerier Oct 25, 2026
4c52717
loopers: quantize changes, takes on demand
jcelerier Oct 25, 2026
f992523
loopers: the control model, footswitches, settings
jcelerier Oct 26, 2026
36ca77a
loopers: presets
jcelerier Oct 26, 2026
efeacd2
Arpeggiator page rewritten; looper pages: Export, undoable Replace, L…
jcelerier Oct 26, 2026
c3bb255
Loopers: Quantif units, Loop and its empty-loop fallback, old values
jcelerier Oct 26, 2026
30e213e
Loopers: song form presets wait for the loop to come round
jcelerier Oct 26, 2026
f923a74
Loopers: no sync groups, Record overdubs, new names; MIDI takes keep …
jcelerier Oct 26, 2026
5b22c2f
Audio looper: takes keep their Follow tempo in the timeline
jcelerier Oct 26, 2026
03d101b
Value looper page
jcelerier Oct 26, 2026
a68b769
Loopers: Layers tab
jcelerier Oct 26, 2026
9c40a57
Loopers: layer drag, Send drag, lazy layers, Speed tab, Capture in Le…
jcelerier Oct 26, 2026
9e19527
MIDI objects: filter selection, values out, Glide modes, Chord memory…
jcelerier Oct 27, 2026
06ecb0b
Value looper page: its image
jcelerier Oct 27, 2026
8ff6e6e
MIDI file scaler: MTS selects the tuning program on every channel; Se…
jcelerier Oct 28, 2026
d27a60b
loopers: Capture adds a layer, takes loop wherever placed, presets re…
jcelerier Oct 28, 2026
4dc0f96
loopers: Export chooses what Send places; takes are whole once the sc…
jcelerier Oct 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified assets/images/reference/processes/audio_looper.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/reference/processes/midi_looper.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion docs/examples/audio/looper.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ The Looper captures the main audio input, not the internally generated drums, so
1. Open the ZIP directly in a score build with Kaboom support. The current score uses synthesized drums and needs no sample kit. Configure a working audio input and output.
2. Use headphones or isolated monitoring to avoid feeding loudspeaker output back into a microphone. Begin at a low listening level.
3. Start playback and supply audio to the input. The initial cue requests `Stop`, the cue at 4 seconds requests `Record`, and the cue at 12 seconds requests `Play`.
4. Listen for the captured phrase repeating against the drums. Quantif is set to 1, so mode changes wait for the next quantized boundary instead of switching freely between beats.
4. Listen for the captured phrase repeating against the drums. Quantize is set to one bar, so mode changes wait for the next bar line instead of switching freely between beats.
5. Trigger the end of `Loop`, drawn at 14.5 seconds, or stop the transport. The end is interactive: its position is not an automatic stop.

## Shape the phrase
Expand Down
2 changes: 2 additions & 0 deletions docs/in-depth/midi.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ The most important processes are:

Simply drag'n'drop a MIDI file in the score, either on a scenario or on the interval, from the user library or from your file explorer !

A MIDI file is placed by its beats: a file of two bars lasts two bars of the score whatever tempo it was saved at, and plays at the tempo of the score.

# MIDI processing

* See [[MIDI utilities]] for a list of processes that can alter MIDI data: arpeggiator, etc.
Expand Down
70 changes: 61 additions & 9 deletions docs/reference-manual/processes/library/arpeggiator.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,79 @@ permalink: /processes/arpeggiator.html
---
# Arpeggiator

The **Arpeggiator** takes held notes at its MIDI **in** port and produces a repeating note pattern at MIDI **out**. Connect a MIDI keyboard or MIDI-generating process to the input and a synthesizer to the output. Release the input notes to remove them from the pattern.
The **Arpeggiator** takes held notes at its MIDI **in** port and produces a repeating note pattern at MIDI **out**. Connect a MIDI keyboard or MIDI-generating process to the input and a synthesizer to the output. Release the input notes to remove them from the pattern, unless a **Latch** keeps them.

This page describes version 2, whose **Rate** uses the [time chooser]({{ site.baseurl }}/reference/time-chooser.html).

## Controls
## Pattern

| Control | Choices or range | Behavior |
|---|---|---|
| **Arpeggios** | Forward, Backward, F->B, B->F, Chord, Random | Ascending, descending, alternating-direction, simultaneous-chord or random selection. Default: Forward. |
| **Octave** | 1–7; default **1** | Adds octave copies; 1 uses the original notes only. Copies outside MIDI pitches 0–127 are omitted. |
| **Octave mode** | Both, Above, Below | Chooses where octave copies are added. Default: Both. |
| **Repeat** | 1–8; default **1** | Repeats each step before proceeding. Chord mode instead plays the expanded chord together. |
| **Arpeggios** | see below; default **Forward** | The order of the steps. |
| **Rate** | Free duration 0.01–4 seconds; default **0.125 seconds** | Time between steps, or a synchronized straight, dotted or triplet note value. |
| **Gate** | 0.01–2; default **1** | Length of a note as a proportion of a step. At 1 a note lasts until the next step starts; below, it ends earlier; above, it overlaps the next step. A pitch played again by the next step ends first. |
| **Swing** | 0–1; default **0** | Delays every second step, counted from the bar line: 0.5 puts it on the triplet, 1 at 5/6 of the pair of steps. |
| **Octave** | 1–7; default **1** | Adds octave copies; 1 uses the original notes only. Copies outside MIDI pitches 0–127 are omitted. |
| **Octave mode** | Both, Above, Below; default **Both** | Where the octave copies are added. |

The patterns, for held notes 1-2-3 from the lowest:

| Pattern | Steps |
|---|---|
| **Forward** | 1-2-3 |
| **Backward** | 3-2-1 |
| **F->B** | 1-2-3-3-2-1: the top and the bottom twice |
| **B->F** | 3-2-1-1-2-3 |
| **Chord** | every held note at each step |
| **Random** | a step picked at random each time |
| **Up/Down** | 1-2-3-2: the top and the bottom once |
| **Down/Up** | 3-2-1-2 |
| **Converge** | 1-3-2: from the outside in |
| **Diverge** | 2-3-1: from the inside out |
| **Low Up** | 1-2-1-3: the lowest note between each of the others |
| **High Up** | 3-1-3-2: the highest note between each of the others |
| **As played** | the notes in the order their keys were pressed |

With **Octave** above 1, Forward, Backward, F->B, B->F, Random and As played play the whole pattern, then the whole pattern again in each added octave: above first, then below with **Both**. Up/Down, Down/Up, Converge, Diverge, Low Up and High Up instead run through all the notes of all the octaves as one set, from the lowest; a pitch that is both a held note and an octave copy of another plays once. **Chord** adds the octave copies to the chord.

Despite its label, **Rate** is a duration, not hertz. In synchronized mode, steps fall on the musical grid. In free mode, the duration is converted to a grid spacing at the current tempo; this process still schedules its steps through the musical-grid mechanism rather than acting as an independent wall-clock timer.

At each step, the previous output notes end and the next note or chord starts. **Chord** includes the octave expansion and sounds its notes together; **Random** selects from the expanded pattern at each step.
## Steps

| Control | Choices or range | Behavior |
|---|---|---|
| **Repeat** | 1–8; default **1** | Plays each step this many times before the next. It has no effect on **Chord**, which already plays the whole chord at every step. |
| **Retrigger** | Off, Note, Beat; default **Off** | Starts the pattern again from its first step on each newly pressed key (**Note**) or on each beat (**Beat**). The velocity decay starts over as well. |
| **Seed** | 0–10000; default **0** | For **Random**: at 0 the choices are free; any other value gives the same sequence each time the process starts, and each time the seed is set. |

## Velocity

| Control | Choices or range | Behavior |
|---|---|---|
| **Accent every** | 0–16; default **0** | Every Nth step, counting from the first step of the chord, plays at **Accent vel.**; 0 turns accents off. |
| **Accent vel.** | 1–127; default **127** | The velocity of the accented steps. |
| **Vel. decay** | 0–1; default **0** | At each step since the chord started, the velocity moves this proportion of the remaining way towards **Decay target**. 0 keeps the played velocity. |
| **Decay target** | 1–127; default **1** | The velocity the decay tends towards. |
| **Pressure** | Off, Channel, Poly, Both; default **Off** | Lets aftertouch set the velocity of the following steps: channel pressure for every note, poly pressure for its own key. The latest kind of pressure received wins. A new chord, started with no note left playing, goes back to the key velocities. |

A step's velocity is the key's velocity, or the pressure's, then decayed, then replaced on accented steps. For a note repeat, choose **Chord**, a **Rate** and a **Pressure** mode: the held notes repeat at the rate, at the velocity of the key pressure.

## Latch

| Control | Choices or range | Behavior |
|---|---|---|
| **Latch** | Off, Toggle, Momentary; default **Off** | **Toggle**: released notes keep playing until a key is pressed while none is held, which starts a new chord. **Momentary**: released notes keep playing while **Latch hold** is on. |
| **Latch hold** | on / off | With the **Momentary** latch: keeps the released notes playing while on. Turning it off stops the notes no longer held. |

## MIDI messages

Notes are played on **channel 1**, whatever channel they came in on; held notes are tracked by pitch, not by channel.

Everything that is not a note passes through to the output at the time it came in: controllers, program changes, pitch bend and the rest. Pressure messages are the exception while **Pressure** uses them: channel pressure with Channel or Both, poly pressure with Poly or Both are taken by the arpeggiator and not forwarded.

## MIDI limitations
**All Notes Off** and **All Sound Off** (controllers 123 and 120) end every note the arpeggiator plays, forget the held and latched notes, start the pattern again from its first step, and are forwarded.

The current engine tracks held notes by pitch, not by input MIDI channel, and generates notes on **channel 1**. It is not a transparent MIDI router: do not rely on it to forward controllers, program changes or other non-note messages. Route those separately if your instrument needs them.
Stopping the score, or the process, does the same: notes end, held and latched notes are forgotten, and the pattern starts from its first step.

## Older saved processes

Expand Down
Loading
Loading