Linux Arpeggiators, Part 1
What Is An Arpeggiator ?
An arpeggio is a musical technique whereby the notes of a chord are played in succession rather than all at once. The order of the chord notes in this succession may follow a strict set of rules or they may be played in purely random sequence. A device that acts upon a chord in this manner is known as an arpeggiator.
Wikipedia's definition of synthesizer includes this fine description of an arpeggiator:
An arpeggiator is a feature available on some synthesisers that automatically steps through a sequence of notes based on an input chord, thus creating an arpeggio. The notes can often be transmitted to a MIDI sequencer for recording and further editing. An arpeggiator may have controls to manipulate the order and speed in which the notes play; upwards, downwards, or in a random order. More advanced arpeggiators allow the user to step through a complex sequence of notes or play several arpeggios at once. Some allow a pattern to be sustained even if the keys are released: in this way an arpeggiated pattern may be built up over time by pressing several keys one after the other. Arpeggiators are also commonly found in sequencing software. Some sequencers expand this into a full phrase sequencer, which allows the user to trigger complex, multi-track blocks of sequenced data from a keyboard or input device, typically synchronised with the tempo of the master clock.
That description proceeds to note that the software arpeggiators of today have evolved from the hardware sequencers from the pre-MIDI period of electronic music. Notable representatives of popular musicians who have made creative use of arpeggiators include Tangerine Dream and Jean-Michel Jarre. The Who made effective use of an arpeggiator in their song Baba O'Riley (a.k.a. Teenaga Wasteland). Arpeggiators remain popular in dance music, but their utility has extended to other types of music as well.
As a matter of fact the technique of arpeggiation has an honorable history of application in the history of classical music. The Alberti bass is a technique in which a chord is played as a broken series of notes to establish a flowing continuity in the accompaniment and is a good example of arpeggiation employed as a common structural device in music composition.
Arpeggiators For Linux
Linux musicians have at least three arpeggiators to play with (Figure 1). We'll look at them in reverse alphabetical order, arranged as an arpeggio from the highest note-name to the lowest.
QMidiArp (Figure 2) originated as a project by Dr. Matthias Nagorni. Eventually Dr. Nagorni excused himself from development of the program, but recently its codebase has received attention from developers Frank Kober and Guido Scholz. Bugs have been fixed, new features have been added, and the GUI has been improved. By the way, QMidiArp isn't just an arpeggiator. It includes a MIDI LFO tab along with a tab for an analog-style step-sequencer, making it an arpeggiation love fest.
QMidiArp is easy to use, but it requires your attention to some specific configuration details. First, its connections need wired in this direction:
MIDI input (keyboard or other controller) --> QMidiArp --> sound source (synthesizer or sampler, internal or external)
Next you'll need to configure the desired pattern of arpeggiation in QMidiArp. Here's a simple example configuration that creates a rising arpeggio when a chord is held:
- Open the Modules menu and add three new arpeggiators. As shown in Figure 3, each arpeggiator will have its own tab and detachable control panel.
- Open the arpeggio Pattern Edit tool (the pencil icon beneath the graphic display) for the first arpeggiator and add >>0 to the data entry box. Close the Pattern Edit dialog.
- Repeat step 2 for the next arpeggiator, but this time add >>+0 to the entry box.
- Repeat step 2 for the third arpeggiator, adding --0012 as its pattern.
The numbers and their accompanying symbols are meaningful. The > sign multiplies the tempo, the +/- signs are octave displacements, and the 0 indicates the starting position for the first note of the input chord. To clarify the significance of the 0 and other numbers I'll quote fellow user Graham Morrison on the matter :
This is the hardest part to get your head around, but the '0' simply tells the software to output the note at the first position on the input buffer (all incoming notes are added to the buffer sequentially). As the first note is played, it is removed from the buffer, moving the previously second note to the first position (FIFO). For example, if the pattern '01' is entered then the second note of the sequence would be repeated as it's played. This is because it's firstly played as the second in the buffer, and once more after it's become the first. To make this clearer, with an input sequence of CDEF, with 0 for the Pattern, the output would be CDEFCDEFCDEF. With a Pattern of 01, the output would be CDDEEFCDDEEF, the final note isn't repeated because by the time it's played there's no other note in the buffer.
Don't worry if that explanation confuses you. It confused me too until I started to experiment by plugging in other values and playing with other settings such as the direction and groove factors. QMidiArp may be a small program, but it's got a lot of power under the hood, and you will spend some time learning how to use its many features.
By the way, Graham's notes on using QMidiArp were most helpful as I learned how to use the program. Consider them recommended.
At this point if you play a chord you still won't hear anything from QMidiArp. The arpeggiator requires an active clock source before it can massage the incoming data to produce a synchronized arpeggio. QMidiArp gives you the options of connection to an internal clock, to an external MIDI clock, or to the JACK transport control. If you opt for JACK you'll also need to activate its transport mechanism, a task easily handled by QJackCtl. Click on the transport control's Start button and you should see movement in the graph for arpeggiator 3 (Figure 3)
Now play and hold a chord on your MIDI keyboard. All other parameters in QMidiArp have been left at their default values so you should hear a rising arpeggio accompanied by a steady moving bass line. Play and hold another chord to hear the pattern applied to a new set of notes. The audio example moves through three chords, check it out to hear how QMidiArp treats them.
I must be honest and report that the example was edited to remove some stray tones. Alas, I experienced performance issues with version 0.0.3. Response to incoming MIDI data was slow, ditto for its response to JACK transport control. It's possible that those issues are unique to my system, but I've had no similar problems with MIDI input to other programs. I shall continue my tests, and hopefully I'll resolve the latency problem.
Documentation consists of a single excellent manual page (summoned with man qmidiarp at a terminal prompt) and the program's helpful tooltips. The article by Graham Morrison cited above includes a list of QMidiArp commands that I suggest you print out as a handy reference chart. Alas, I found no demonstration audio or video files, but the program is easy to learn by experimentation.
Unfortunately I haven't the space to get into QMidiArp's MIDI support and other features, but I have to leave you something to explore, right ? Despite its realtime performance issues it is a good program that behaves as advertised, and it can be well-employed as a non-realtime producer of arbitrarily complex arpeggios that can be recorded for later use in an audio/MIDI sequencer.
I hope you've enjoyed this introduction to Linux arpeggiators, and I encourage readers to check out QMidiArp for themselves. I'll return in a short while with profiles of the Arpage and Hypercyclic arpeggiators, so be sure to check in for more arpeggiated fun. Meanwhile, stay tuned and keep making those joyful noises.
Limited Time Offer
Take Linux Journal for a test drive. Download our September issue for FREE.
Topic of the Week
The cloud has become synonymous with all things data storage. It additionally equates to the many web-centric services accessing that same back-end data storage, but the term also has evolved to mean so much more.