arp!02 — Manual

arp!0 Manual

Notable features

Main UI pane

Top-left buttons

play pause clear hold buttons

Button Function Notes
► Play runs arp
❚❚ Pause pauses arp. Keeps current notes ready to play.
clear Clear clears current notes.
hold Hold notes toggle on/off when enabled.

Note that while playing, the last played step is highlighted in each sequence. But while paused, the next step to be played is highlighted. So when changing from pause to play, there is a brief moment when the play positions change back to the previous step before the next step occurs.

tick

tick 1/16

Sets the time interval between arp steps according to host tempo or absolute time. Tick has two modes: synchronized or absolute, which are selected on the setting pane or toggled by right-clicking the “tick” label on the main pane.

synchronized tick mode

In sync mode, the tick time is relative to the host tempo, and displayed as a fraction of a whole note. In this mode arp!0 syncs to exact beats when the host is playing or recording.

Click the sync fraction to show a dropdown menu of fractions and a scale slider, click any fraction to select it:

fraction grid: 1/64-2/1, triplets, dotted, exact (0.545s)

The dropdown’s scale slider allows sync’d ticks that are not exact fractions.

It shows a scaling factor from 0.75x to 2.0x, with a midpoint line at 1x. The text on the left end of the slider shows the current scale factor, or “exact” if scaling is not in effect. It also shows the tick time in parenthesis.

The sync fraction on the tick button will have a “+” or “-” suffix if scaled greater or less than the exact fraction

absolute tick mode

In absolute mode, the tick time is displayed as a decimal number of seconds, and the tick label has a “~” suffix:

tick~ .545s

Click the time to show a slider and a grid of fractions:

0.545s slider above the grid of fractions

The text on the left end of the slider shows the tick time in seconds. The fractions select the range of the slider relative to the current host tempo, again from 0.75x to 2.0x of the fraction of a whole note.

swing

swing 2

Specifies extended time for certain steps, usually every other one. The value is a percent of the step length by which the following step is delayed. The swing steps value on the settings pane sets the number of steps between the extended steps.

channel

chan 1

Sets input & output midi channel used by arp!0. The midi bus value on the settings pane sets which Reaper bus this channel operates on.

arp!0 eats all notes input on this bus and channel.

sort

sort: time / note

Sets the initial ordering of input notes.

Button Function Notes
time time Notes ordered by time received
note note Notes ordered by pitch

order

order: up down up&down updown down&up downup random

Sets normal play order of notes based on the sort and any active sort transform.

Button Function Notes
↗ up Low to high: 1,2,3,1,2,3…
↘ down High to low: 3,2,1,3,2,1…
↗↘ up&down Up, then down. high/low notes repeat: 1,2,3,3,2,1,1,2,3,3,2,1…
∧ updown Up-down: singular high/low notes: 1,2,3,2,1,2,3,2,1…
↘↗ down&up Down, then up: 3,2,1,1,2,3,3,2,1,1,2,3…
∨ downup Down-up: 3,2,1,2,3,2,1,2,3…
? random Random note and octave

octaves

octaves 0 1 2 3

notes repeat in order for the set number of additional octaves. there are two modes for multiple octaves: replicant and heuristic, described in the settings section below. in heuristic mode, if octaves is > 0 the current octave is indicated by a period after the current octave number. control/command-click an octaves value to set the current octave.

Button grids

the dir, length, gate, voices, and trans rows of the main pane

button grids are clickable rows of icons or values. clicking these shows a popup grid of choices, or a slider. clicking in the popup changes the value for a step. shift-clicking changes the value of the step clicked and all those to the right of it. alt/option-clicking resets the clicked step to a default value. right-clicking a step sets the sequence length of the row clicked. control/command-clicking sets the current play position. shift modifies both right and control/command clicks to change the length or play position of *all* sequences. alt/option-right-click to delete a step. control/command-right-click to insert a step. note that because arp!0 generates output ahead of the beat, changing the play position may be most useful when paused. the button grid label will have a “~” suffix if the play order for that row is random. right-click the label to toggle random play order.

button grids can be expanded to show control grids for all steps at once. this makes it easier to change the values of many steps in a particular sequence quickly. click the row label to reveal the grid. click cells or sliders in the grid to set the values of sequence steps. drag across the grid to change many values quickly. click the grid label, or anywhere left of the control grid, to hide it and show the button grid again.

dir

dir button row with popup grid of dir types

Directions which modify the play order. The most common dir types are:

Button Function Notes
► next step Plays next note in sequence based on note sort, sort transform, and order. This is the “normal” next note.
►\| last step Plays the last note in the input note sequence.
◄ previous step Plays the previous note in the input note sequence.
\|◄ first step Plays the first note in the input note sequence.
= same step Repeats the immediately previous step.

The other dir types are described in the “direction sequence step types” section below.

length

length row with popup 1-8

The length of an arp step as an integer multiple of the tick time.

gate

gate row with popup slider

The duration of notes generated for a step as a fractional multiple of the tick time, from (almost) 0.0x to 2.0x.

voices

voices row with popup 0-6

Number of notes generated for a step. Each voice uses another note from the currently active input notes.

trans

trans row with popup slider

Transposition of the notes generated for a step, in semi-tones.

Slider grids

accent, offset, control 1, and control 2 slider grid rows

Slider grids are clickable sequences of sliders:

The button grid label will have a “~” suffix if the play order for that row is random.

accent

accent

Modifies the velocity of the notes generated for a step:

offset

Offsets the start time of step notes by a percent of the tick time.

offset [10%] [+/-]

On the right-side of the label are indicators of the offset range and polarity. The offset range is shown as a percent of the tick time in square brackets. Offset polarity is shown as unipolar [+++] or bipolar [+/-].

Unipolar offsets delay note start times.

NOTE: to maximize arp!0’s responsiveness, use the minimum necessary range when using bipolar offsets:

NOTE: for immediate arp output when host playback starts use unipolar offsets.

control

Specifies the midi controller values which are generated for each step:

control 1 [cc#8] [+/-]

The midi cc number is shown in brackets to the right of the label.

To the right of the cc number is an indicator of whether the slider grid displays unipolar [+++] or bipolar [+/-] data.

Note improbability is an alternative to pitch bend for two of the four control sequences.

vars

Allows selection of one of several arp variants.

vars 1-8 [+] [-] [dropdown]

To the right of the label are a row of buttons, one for each variant that has been created:

To the right of the variant buttons are add [+] and delete [-] text controls:

To the right of the add & delete controls is a <down triangle> ([▼]) text control which displays a dropdown menu:

Variants can be changed using midi controller messages; enable this on the settings pane.

notes

notes d3 d3 a5 d6 a6

A view of the first 16 currently active notes, in the sort order.

Right-click the notes label to toggle loading saved preset notes.

Direction sequence step types

Button Function Notes
► Next step Plays next note in sequence based on note sort, sort transform, and order. this is the “normal” next note.
►\| Last step Plays the last note in the input note sequence.
►2 2nd next step Plays the 2nd note ahead in the input note sequence.
►3 3rd next step Plays the 3rd note ahead in the input note sequence.
◄ Previous step Plays the previous note in the input note sequence.
\|◄ First step Plays the first note in the input note sequence.
◄2 2nd previous step Plays the 2nd previous note in the input note sequence.
◄3 3rd previous step Plays the 3rd previous note in the input note sequence.
= Same step Repeats the immediately previous step.
⇐ Back one step in time Replays the note which was played just before the previous note.
This is based on the history of notes arp!0 has played, and can be different from previous notes in the input note sequence when the normal sequence order has been changed by special steps like first/last/random/etc.
⇐2 Back 2 steps in time Replays the 2nd note prior to the last.
⇐3 Back 3 steps in time Replays the 3rd note prior to the last.
♦ Reverse Alternates between up and down unidirectional orders.
Changes the current play order for bidirectional orders (up-down/updown/down-up/downup). By default, repeats the previous note in sequence, which gives the effect of the “sticky” up-down and down-up orders.
Add the contract-meta to avoid this duplicate note and give the effect of the “bouncy” updown/downup orders.
? Random step Plays a random step in the input note sequence.
?►◄ Random next or previous step Randomly does either next step or previous step.

Meta directions

Meta directions are optional behaviors which can be added to the normal dir types. When a meta dir is selected in the dir dropdown menu, it will be added or removed from whatever basic step type is already selected for that dir step.

The meta dir types are:

Button Function Notes
~ twiddle meta Reserved
— subtract meta Suppresses note output for a step.
' contract meta Combines a dir step with the following dir step. contracted dir steps change the input note sequence just as if they occurred normally. but the contracted dir outputs no notes, takes no time, and is immediately followed by the next dir sequence step. Contracted dir steps provide a way to specify a step relative to another step. (see Contract meta examples)
: section meta Marks a step for special dir sequence operations which are triggered by dir operation steps.
^ directory operation meta Sets a step to an alternate dir type, most of which alter the order of the dir sequence itself. When the dirop meta is selected, the dir types dropdown changes to show the alternate types available: dir button row with the dirop popup grid
(see directory operation (“dirop”) meta examples)

Contract meta examples

Sequence Function
\|◄' ► Specifies the 2nd note in the input sequence:
\|◄' is a contracted “first step” dir step. It selects the first note in the input sequence, but otherwise does nothing because it is contracted.
The following ► dir step then generates the next note after that, which is the 2nd note.
►2' ►3 Specifies the 5th note ahead in the input sequence:
►2' selects the 2nd note ahead, but does not play it because it is contracted.
►3 plays the 3rd note after that, which is 5 notes ahead.
? ⇐' ► When repeated, generates random notes interleaved with sequential notes every other step:
? selects a random note from the input sequence.
⇐' selects the whatever note was output before that random note, but generates no output because it is contracted.
► then generates the next note after that in the input sequence.

Directory operation (“dirop”) meta examples

Button Function Notes
\|⇐ first dir Seeks back to the first dir step.
:⇐ previous section Rewind the dir sequence to the closest previous step with a section meta. This is useful to restart the dir sequence from some point after the first step. it enables an initial, one time set of prefix dir steps followed by a different set of repeating dir steps.
::: multisection Counts as 3 sections for the random and sequential section dirops. Useful for weighting the probability of a random section, and for repeating a sequential section.
When combined with the prime meta, counts as 7 sections, or 31 when also combined with the section meta.
When combined with the prime2 meta, counts as 15 sections, or 95 when also combined with the section meta. these values enable musically useful repeat counts for sequential sections.
% resortx Triggers an update for any active sort transform.
?: random section Seek forward in the dir sequence randomly to one of the following steps marked with the section meta. Will not seek past a final section step. Will not seek to sections inside a nested random/sequential section-final section pair.
,: sequential section Seeks to the following section steps sequentially, one each time the sequential section dirop occurs. The prime and prime2 metas allow two additional independent sets of sequential sections.
→. end section Seeks forward in the dir sequence to the step following the final section step, or back to the beginning of the dir sequence if there is no following final section step.
.! final section Terminates a set of random or sequential sections. Random/sequential section dirops will not seek forward past this step, and end section seeks to the step following this one.
^! on first note Seeks to the following dir step when the input note sequence reaches the first note.
Note that this dir step takes effect for the next note after the first. If there are multiple on first note dirops they will take effect sequentially each time the input note sequence reaches the first note. This is also true for the following “on…” dirops.

on first note has a variant when combined with the prime/prime2 metas: on first note with prime seeks back to the next preceding instance of on first note with prime2. If there is no preceding instance with prime2, it wraps around to seek a following instance. These variants are also effective for the following “on…” dirops.
$! on last note Seeks to the following dir step when the input note sequence reaches the last note.
×! on passing note Seeks to the following dir step when the input note sequence passes the end of the sequence. for up and down orders, this is when the note sequence repeats. for updown/up+down/downup/down+up orders this is when the note sequence changes direction. whereas the on first and last note dirops will not trigger if the first or last note is skipped, on crossover note will always happen after the note sequence cycles or changes direction. but note that it triggers after the first note of the new cycle or order.
@! on host seek Seeks to the following dir step when the host seeks forward or backward.
⚙ reset play positions
(“boom”)
Resets the play position of all control sequences to their last saved positions, including the dir sequence. aka “boom”.
' prime meta Selects variant behavior for some dirops.
'' prime2 meta Selects secondary variant behavior for some dirops.

Settings/help pane

Click the [arp!0] logo to reveal a settings & help pane. settings are keyword lists with a button colored background following a label.

Current settings are:

max steps

max steps: 16 24 32

Select extended 24/32 step modes, or the standard 16.

control 3/4

control 3/4: no yes

Enable optional 3rd and 4th control sequences.

midi bus

midi bus: 1-16

Select which Reaper midi bus is used for arp!0 input & output.

midi control

Enable midi CC control.

midi control: off basic extended

Basic midi control enables midi CCs on arp!0’s main midi channel as follows:

CC Effect
32 select variant
33 if nonzero, variant changes will also reset all sequence play positions to saved values. this setting persists until reset by a zero value cc.
34 if nonzero, variant changes will not save any edits made since the variant was selected. this setting persists until reset by a zero value cc.
35 if nonzero, selects the next higher variant. wraps around if the current variant is last.
36 if nonzero, selects the next lower variant. wraps around if the current variant is first.
37 if nonzero, resets all sequence play positions to saved values.
38 if nonzero, enables arp playback.
39 if nonzero, pauses arp playback.
40 if nonzero, clears any current arp notes.
41 if nonzero, toggles the note hold control.
48 sets the play position for the dir sequence.
49 sets the play position for the length sequence.
50 sets the play position for the gate sequence.
51 sets the play position for the voices sequence.
52 sets the play position for the trans sequence.
53 sets the play position for the accent sequence.
54 sets the play position for the offset sequence.
55 sets the play position for the control 1 sequence.
56 sets the play position for the control 2 sequence.
57 sets the play position for the control 3 sequence.
58 sets the play position for the control 4 sequence.

Extended midi control enables midi CCs on the 4 channels above arp!0’s main channel to change step values for the control sequences:

Channel CC 24-55 CC 56-87 CC 88-119
main+1 dir sequence dir sequence metas length sequence
main+2 gate sequence voices sequence trans sequence
main+3 accent sequence offset sequence control 1 sequence
main+4 control 2 sequence control 3 sequence control 4 sequence

When extended midi control is enabled:

This output enables synchronization with midi controllers.

midi lock

midi lock: no yes

Disable changes to arp!0’s midi channel, bus, and midi control settings when loading new presets.

This is a global setting which is not saved with presets. The default value, including defaults for locked midi channel, bus, and control, can be changed by editing the global settings file described below in colors.

tick mode

tick mode: synchronized absolute

Select whether the tick interval is synchronized with the host tempo or an absolute time.

octaves mode

octaves mode: replicant heuristic

Select how to implement additional octaves:

This setting can also be toggled by right-clicking the “octaves” label on the main pane.

swing steps

swing steps: 2-16

Select the number of steps across which swing is applied. arp!0 will swing every number steps on the beat.

trans range

trans range: 24 36 48

Select the editable range for transposition sequence steps in semitones.

trans base

trans base: -24 -12 0

Select the lower limit for transposition sequence steps in semitones. Changing the transposition base will immediately change the octave of notes generated by arp!0.

random sequence (dis)order

random sequence (dis)order

Select sequences which will have random playback order. Random order sequences are indicated by a “~” char after the sequence label on the main pane.

sort transform

sort transform settings block

Sort transforms rearrange current input notes according to specifications loaded from text files.

The transforms are loaded from text files. These transform specification text files are located in the bangzero_data/ folder inside the Data folder in Reaper’s Resource Folder. The files are arpbangzero_sortx.txt for user transforms and arpbangzero_defsortx.txt for the default transforms included with arp!0. See the sample transforms in arpbangzero_sortx.txt for details on the transform specification.

On the main arp!0 pane, if a sort transform is active, the sort labelwill have a “~” suffix:

Notes:

play/pause with host

play/pause with host: no yes

Set whether arp!0 will automatically play and pause when host playback stars and stops. This is a global setting and is not saved with presets. To change the default value,edit the global settings file described below in colors.

midi through when paused

midi through when paused: no yes

Set whether arp!0 will pass input midi notes through when paused. this is another global setting.

clear notes on host seek

clear notes on host seek: no yes

Set whether arp!0 will clear active notes when the host playback position changes significantly. Another global setting.

load preset notes

load preset notes: no yes

Select yes to enable restoring active notes with presets. Notes label will have a leading right arrow character if note restore is enabled. Yet another global setting.

colors scheme list

Select different color schemes:

colors scheme list

Schemes after the first 5 are defined in a global settings file and can be tweaked to taste. The settings file is in Data/arpbangero_files/arpbangzero_settings.txt in the Reaper resources folder.

Additional default color schemes are defined in Data/arpbangzero_files/arpbangzero_defcolors.txt. These color schemes are listed starting on a new line after those in the global settings file.

Saved sequence playback positions

arp!0 saves initial playback positions for all control sequences. These saved positions are restored when the host begins playback, when a variant is selected with right-click, when the restore play position midi cc is received, or when the ‘boom’ dirop occurs.

By default the saved play position for all sequences is the first step.

When paused, saved play positions are indicated by a small cutout at the bottom left corner of a step. Saved play positions are saved and restored with presets.

Integration with host

arp!0 saves and restores all settings in Reaper presets, including sequence play positions, color scheme and optionally current notes. Use “Save preset as default…” to save your favorite settings.

When host begins playback, arp!0 restores sequence play positions from the last time they were changed manually or restored from a preset. Saved play positions are lost when Reaper quits & restarts. Save & restore them from a preset if necessary.

Tips and tricks

Experimental modes

Installation

The arp!0 zip file will unzip into something like this:

[midi_arpbangzero_v000/](midi_arpbangzero_v000/)
  midi_arpbangzero
  README.txt
  arpbangzero_documentation.pdf
  arpbangzero_changes.txt
  gpl.txt
  bangzero_files/
    <lots o' bits>
  bangzero_data/
    arpbangzero_settings.txt
    arpbangzero_defcolors.txt
    arpbangzero_sortx.txt
    arpbangzero_defsortx.txt

After unzipping, select “Show REAPER resource path in explorer/finder…” from the Reaper Options menu to open the Reaper resources folder. in that folder there will be an Effects subfolder for Jesusonic fx plugins, and a Data folder. copy the midi_arpbangzero Js script file and the bangzero_files folder into the Effects folder. for new installations, copy the bangzero_data folder into the Data folder.

After installation you should have something like this:

<Reaper resources folder>/
  Effects/
    midi_arpbangzero
    bangzero_files/
      <lots o' bits>
  Data/
    bangzero_data/
      arpbangzero_settings.txt
      arpbangzero_defcolors.txt
      arpbangzero_sortx.txt
      arpbangzero_defsortx.txt

When updating, replace midi_arpbangzero and bangzero_files in the Effects folder. if there are significant changes to the global settings or sort transforms i will note this at the top of this README.txt file. in that case, if you have customized the global settings or sort transforms, you will need to merge your changes with the files in the bangzero_data folder. this includes the arpbangzero_settings.txt global settings file and the arpbangzero_sortx.txt sort transforms file.

Credits

First and formost, highest praise and thanks to Justin Frankel and the Cockos team for Jesusonic, the audio/midi hacker’s paradise. it is so cool to be able to create & customize fx plugins that integrate with the Reaper ecosystem. heya! hey!

arp!0 was largely inspired by the arpeggiator in Urs Heckmann’s amazing Zebra2 software synthesizer, and by the many cool arp presets available for Zebra. in addition to the powerful step and voices options, the way the entire Zebra arp is visible and accessible makes it exceptionally useable. i wanted this useability with other softsynths, and also the option to record and postprocess arp output.

I have wanted the groovy accent and offset features for a long time. seeing these realized in Arto Vaarala’s Kirnu arp was inspiring. Kirnu has many unique capabilities of its own.

The arp!0 user interface mostly grew out of the natural possibilities of the Jesusonic graphics api. but a major inspiration for the clean, flat look are Sean Costello’s beautiful interfaces for his awesome ValhallaDSP fx.

A quick heyah! to sound design craftsman Michael Cavallo, who’s marvelously mutable mc Percaluptus Zebra preset was good company as i developed arp!0. Michael’s Zebra soundbanks are great, and his arp patches are especially luminous: <http://www.monomo-sounddesign.com/>.

Big thanks to all the marvelous beta testers in the Reaper scripting forum! arp!0 would be a pale, buggy shadow of itself without their help. so many great ideas! so little time. :^)

Finally, all praise and honor to Baba O’Riley and all the rhythmic synth pioneers. we stand on the shoulders of giants in this teenage wasteland.

Feedback welcome: bang at forum.cockos.com - email: bang at bangzero dot org


Copyright 2012 dan mcmullen bang@bangzero.org

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.