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.
In 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.
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).
(THIS SECTION UPDATED 13 FEBRUARY 2015)
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.
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
Authors: Matthias Nagorni (original), Guido Scholz, Nedko Arnaudov, Frank Kober
Web Site: http://qmidiarp.sourceforge.net/
I found these videos useful, especially Part 3.
Part 1: Arpeggiator (0:00-2:50 covers JACK connections)