QMidiarp Logo QMidiArp - A MIDI Arpeggiator, Step Sequencer and Controller LFO

Home Download Documentation
Demo Materials
Project detail Support Authors


Arpeggiator Modules

Arpeggiator Module


MIDI Connections
Main Toolbar
MIDI Clock operation
JACK Transport Client Operation
Global Storage
Arpeggiator Modules
LFO Modules
Step Sequencer Modules
MIDI control
Event Log
Example Files
Comand Line Usage and Options
Supported Files

QMidiArp's arpeggiators can produce complex patterns derived from the notes played on a MIDI keyboard. QMidiArp's arpeggiator modules were inspired by the MAP1 hardware arpeggiator by Rudi Linhard.

Input and Output panels

Each arpeggiator has an Input and an Output panel. The Input panel defines the note range and the MIDI channel to which the arp is assigned. Notes that pass this Input filter are sorted by pitch and added to the internal note buffer of the arpeggiator. Incoming notes that do not match any filter can either be discarded or forwarded to a selectable MIDI port (see Settings ). The Output panel holds settings for the MIDI channel and output port to which the arpeggiator notes will be sent.

Arpeggiator Patterns

Arpeggio patterns can be selected and edited in the Pattern panel. Pattern presets are selectable from a combo box. The currently active pattern is displayed as a piano roll type screen showing the base notes as streaks. The y-scale of the graphics window corresponds to the index of the notes in the pattern. Octave changes (see Editing patterns ) are shown as additional horizontal lines. The notes that are eventually sent depend on the input notes received by the arpeggiator. The received notes notes are attributed in ascending order to the notes defined in the pattern. For example, a single streak on the bottom of the arp display ("simple" presets) means that at the first pass through the pattern, the lowermost note played on the keyboard is played. If a chord is played on the keyboard and only one note is present in the pattern, only the lowermost pressed note is output at the first pass through the pattern. For the following repetitions of the pattern, the chosen Repeat mode is used to determine the following notes. If the pattern contains stacked note streaks (chord mode), chords played on the keyboard are also output as chords with polyphony up to the number of notes defined in the stack.

Repeat Mode

This setting defines the behavior of the arpeggio over several repetitions of the pattern when the number of notes pressed on the keyboard is higher than the number of notes present in the pattern. When Repeat Mode is "Up", the next higher note played on the keyboard is played at each repetition. With "Down", the next lower note is played. With a single note present in the arp pattern, this creates classical linear arpeggios. This way even simple patterns like "01" (or even "0") will generate a complete arpeggio. When "Static" is selected, this classical arpeggio mode will be disabled, and the output notes remain constant.

Trigger mode

QMidiArp's arpeggiators can run in three modes. "No trigger" will cause the arp running continuously in synchronization with the internal or external clock source. Even when new notes are played, they will be output quantized to the running queue. "Kbd restart" will cause a reset of the playhead position upon the next note to be output, but the output pattern stays quantized to the queue. When "Kbd trigger" is selected, each new note played in stakato will trigger the pattern with the timing of the played note.

Editing Arp patterns

Arp patterns are defined by a text sequence containing the notes themselves as numbers along with control changes for chord, tempo, velocity and octave changes. When the Edit pattern button in the pattern panel is clicked, the current pattern preset appears as a text input line. The edited pattern can be stored in the preset list by clicking on the Store pattern button. The currently active pattern can be removed from the preset list by clicking on the Remove pattern button. All preset patterns are immediately saved in the .qmidiarprc resource file when a pattern is stored or removed, and the new pattern list is made available to the other arps in the tab bar. Pattern presets are automatically loaded on each application start.

The syntax for the pattern text is as follows:

0..9 : Note indices
   + : One octave up
   - : One octave down
   t : One semitone up
   g : One semitone down
   = : Reset to standard octave and semitone
   > : Double tempo
   < : Half tempo
   . : Reset to standard tempo
 ( ) : Chord, begin..end, e.g. (012) would be a chord of the 
       lowermost three notes in the buffer   
   / : Volume up by 20%
   \ : Volume down by 20%
   d : Double length
   h : Half length
   p : Pause

Any token is valid until the end of a pattern is reached. The token > will e.g. double the tempo for all following notes of the pattern. When the loop jumps back to the beginning of the pattern, the tempo is reset to its initial value, i.e. a quarter note.

For instance, the entry >>0 will play sixteenths and arpeggiate up through a chord played on the keyboard, but only due to the repeat mode. >(0123) will play whole chords up to the polyphony in parentheses, i.e. 4. If more notes than 4 are pressed, let's say 6, the repeat mode again does that the first repetition will play notes 0123, the second will play 1234, the third 2345.

Since version 0.5.1, you can also repeat the 0 note within a chord and change semitones or octaves between those, for instance


would play a minor chord even with only a single note pressed on the keyboard. These composed chords are displayed as blue streaks on the arp screen. This new feature was inspired by a request done by gionnico in the feature request tracker.


The timing, velocity and length of the output notes can be randomized using the sliders in the Random panel. These settings can be used to make the arpeggiator sound less mechanical, but if they are set to higher values, they add interesting accents to the patterns.


QMidiArp can modulate the velocity of the arpeggios with an envelope function defined by Attack time and Release time. If an attack time is set, the velocities of the output notes are ramped up during the attack time defined in seconds. If a release time is set, notes released from the keyboard are continued to be output while their velocity is ramped down linearly and until the release time has reached its end. The envelope function only makes sense if the sound driven by the arp is velocity-sensitive. It works best with highly polyphonic patterns such as "Chord Oct 16 A".

Get QMidiArp at SourceForge.net. Fast, secure and Free Open Source software downloads