QMidiArp: Sequencer Module

Here’s the description of QMidiArp from the QMidiArp web site:

“QMidiArp is an advanced MIDI arpeggiator, programmable step sequencer and LFO for Linux. It can hold any number of arpeggiator, sequencer, or LFO modules running in parallel.

Arpeggiator modules produce sequences depending on the notes sent to their input port, which is typically connected to a keyboard or another sequencer.

Step sequencer modules allow you to create simple linear, monophonic and globally transposable sequences similar to the first analog sequencers.

MIDI LFO modules independently produce MIDI controller data of adjustable waveform, time resolution, amplitude and duration.”

In this article I’m going to focus on the step sequencer module since that’s what I’m most interested in.

First, I started JACK using QjackCtl. I then launched an instrument (I used amSynth) and QMidiArp. I set up the MIDI routing like this:

MIDI keyboard > QMidiArp > instrument

The “MIDI keyboard” is optional when using the step sequencer module. If used, it can be any appropriate MIDI controller.

The initial QMidiArp window is fairly empty. I selected Module > New Sequencer… (this can also be done with a keyboard shortcut or by clicking a toolbar button). A small dialog box displays and prompts for the sequence name. This name can be changed later, if desired.


My next step was to set Resolution and Length.

Resolution is the number of steps per beat (quarter note). For example, use 2 for eighth note steps, 4 for sixteenth note steps, etc.

Length is the number of beats in the sequence. For example, I used the default 4 which represents one measure in 4/4 time.

By default, all notes are set to C. I positioned notes in the “piano roll” area (the dark blue box) by left clicking on them and dragging them either up or down. I found that I needed to be careful; a change of one position up or down doesn’t necessarily correspond to a musical half-step. I watched the line that overlays the virtual keyboard located on the left side of the box.

The piano roll display can be zoomed or scrolled by using the Display checkboxes (which function as radio buttons in this context). M (the third checkbox from the left) often worked well for me.

A note can be muted/unmuted by right clicking on it.

I played the sequence by clicking the blue “Run with internal clock” button immediately to the right of the tempo spin box. The sequence can be stopped by using the same button.

Notes can be changed, muted, and unmuted while the sequence is running.


The entire sequence can be transposed while it’s running. The best way to do that is by using external MIDI control. Transposition occurs relative to middle C (MIDI note 60). In my case I had a MIDI keyboard connected, so I pressed the Bb below middle C to transpose down one musical step and then pressed middle C to return the sequence to its original key.

When transposing in this way all check boxes in the Input section should be unchecked except for Note. Also make sure that the Input Channel matches the MIDI controller’s channel.

QMidiArp has a Transpose slider but I found it doesn’t make sense to use the slider when transposing under MIDI control.

Loop Marker

QMidiArp_Seq-02In this image, the green arrowhead at the bottom of the piano roll is the loop marker. The loop marker is used to play only part of the current sequence. The loop marker is set and cleared by clicking at the very bottom of the piano roll box.

A right click places a “normal” loop marker. If the current sequence position is before the loop marker the sequence will run from the beginning of the sequence to the loop marker. If the current sequence position is after the loop marker the sequence will run from the loop marker to the end of the sequence.

A left click places a “bounce point” loop marker. If the current sequence position is before the loop marker the sequence will run from the beginning of the sequence to the loop marker and then reverse direction. If the current sequence position is after the loop marker the sequence will run from the loop marker to the end of the sequence (i.e., it will behave the same way as a normal loop marker).

Clear the loop marker by clicking (with a left or right click) at the far left or far right of the area immediately below the piano roll.

Other Sequence Controls

The Mute button can be put under MIDI control and I’ll probably want to do that.

I’ll probably always want to enable the Defer (D) button to allow muting and transposition to happen at the end of a sequence pattern.

Set the Velocity and Note Length sliders as desired.

It’s possible to run a sequencer backwards or back-and-forth by selecting options from the dropdown list right above the Mute button. One-shot sequences are also possible.

Output Section

Port can probably always be left at 1 (unless more than 16 outputs are needed or a MIDI channel needs to be reused). Note that the number of ports can be set by using a command line option.

Channel must be set to the appropriate output channel (to match the input channel of the receiving instrument).

Global Store


I originally wrote the following: “I probably don’t have much use for the Global Store as it appears that a storage location can be selected only by clicking its button (and apparently not via MIDI control). I might find it easier to put each sequencer’s Mute button under MIDI control.”

Frank Kober, one of the authors of QMidiArp, was kind enough to point out that I was mistaken. Following his instructions, I right-clicked the big Global button in the Global Store section and selected MIDI Learn. I found that controller value 0 then selected storage location 1, value 1 selected storage location 2, etc. That information will allow me to program external controller buttons to switch to individual storage locations, which I think I’ll find useful. Thanks, Frank!

Each global storage location appears to reflect the state of the individual modules as of when the storage location was saved. The only way I’ve found to disable a module in a particular storage location is to mute all of the module’s steps before saving into the location.

External Synchronization

I successfully tested external JACK synchronization. In QMidiArp, I clicked the button at the far right of the toolbar (“Connect to Jack Transport”). For an external source, I chose Hydrogen.

See this post regarding setting up Hydrogen as the JACK Transport master.

Starting Hydrogen now also started QMidiArp, running at Hydrogen’s tempo, although the time sync didn’t seem particularly accurate as I changed Hydrogen’s tempo. I had no problem when I didn’t change the tempo, though.

More About QMidiArp

Version: 0.6.1

Authors: Matthias Nagorni (original), Guido Scholz, Nedko Arnaudov, Frank Kober

Web Site: http://qmidiarp.sourceforge.net/

Documentation: http://qmidiarp.sourceforge.net/qmidiarp_doc_en.html

Tutorial Videos

I found these videos useful, especially Part 3.

Part 1: Arpeggiator  (0:00-2:50 covers JACK connections)

Part 2: LFO

Part 3: Sequencer

Tagged with: ,
Posted in Tools
2 comments on “QMidiArp: Sequencer Module
  1. Frank says:

    Hi there, nice tutorial! Just one remark. Against what you say, the Global Storage switch is actually MIDI learnable, just right click on the “Global” button or on the module buttons in the global storage window, maybe you can correct this, thanks 🙂

    • Steven Grace says:

      Frank: Thanks for the information. I confirmed that this works as you described and updated the article to reflect that.

      I know that all of the buttons with the little downward arrow on them are MIDI learnable. In my first test I suspect that I tried learning the Global button but didn’t see any obvious result. I probably had two storage rows and probably used a controller knob that I turned fast enough so that it never sent value 1 and so never selected storage row 2. I now know that I’ll want to use controller buttons.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: