Linux Arpeggiators, Part 1
In my last article I looked at performance loopers for Linux. This week I begin a 2-part review of similar applications called arpeggiators.
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
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.
Outro
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.
Similis sum folio de quo ludunt venti.
Realizing the promise of Apache® Hadoop® requires the effective deployment of compute, memory, storage and networking to achieve optimal results. With its flexibility and multitude of options, it is easy to over or under provision the server infrastructure, resulting in poor performance and high TCO. Join us for an in depth, technical discussion with industry experts from leading Hadoop and server companies who will provide insights into the key considerations for designing and deploying an optimal Hadoop cluster.
Sponsored by AMD
Built-in forensics, incident response, and security with Red Hat Enterprise Linux 6
Every security policy provides guidance and requirements for ensuring adequate protection of information and data, as well as high-level technical and administrative security requirements for a system in a given environment. Traditionally, providing security for a system focuses on the confidentiality of the information on it. However, protecting the data integrity and system and data availability is just as important. For example, when processing United States intelligence information, there are three attributes that require protection: confidentiality, integrity, and availability.
Learn more about catching the bad guy in this free white paper.
Sponsored by DLT Solutions
| Designing Electronics with Linux | May 22, 2013 |
| Dynamic DNS—an Object Lesson in Problem Solving | May 21, 2013 |
| Using Salt Stack and Vagrant for Drupal Development | May 20, 2013 |
| Making Linux and Android Get Along (It's Not as Hard as It Sounds) | May 16, 2013 |
| Drupal Is a Framework: Why Everyone Needs to Understand This | May 15, 2013 |
| Home, My Backup Data Center | May 13, 2013 |
- New Products
- Linux Systems Administrator
- Senior Perl Developer
- Technical Support Rep
- UX Designer
- Web & UI Developer (JavaScript & j Query)
- Designing Electronics with Linux
- Dynamic DNS—an Object Lesson in Problem Solving
- Making Linux and Android Get Along (It's Not as Hard as It Sounds)
- Using Salt Stack and Vagrant for Drupal Development
- Reply to comment | Linux Journal
7 hours 7 min ago - Nice article, thanks for the
17 hours 48 min ago - I once had a better way I
23 hours 34 min ago - Not only you I too assumed
23 hours 51 min ago - another very interesting
1 day 1 hour ago - Reply to comment | Linux Journal
1 day 3 hours ago - Reply to comment | Linux Journal
1 day 10 hours ago - Reply to comment | Linux Journal
1 day 10 hours ago - Favorite (and easily brute-forced) pw's
1 day 12 hours ago - Have you tried Boxen? It's a
1 day 18 hours ago
Enter to Win an Adafruit Pi Cobbler Breakout Kit for Raspberry Pi

It's Raspberry Pi month at Linux Journal. Each week in May, Adafruit will be giving away a Pi-related prize to a lucky, randomly drawn LJ reader. Winners will be announced weekly.
Fill out the fields below to enter to win this week's prize-- a Pi Cobbler Breakout Kit for Raspberry Pi.
Congratulations to our winners so far:
- 5-8-13, Pi Starter Pack: Jack Davis
- 5-15-13, Pi Model B 512MB RAM: Patrick Dunn
- 5-21-13, Prototyping Pi Plate Kit: Philip Kirby
- Next winner announced on 5-27-13!
Featured Jobs
| Linux Systems Administrator | Houston and Austin, Texas | Host Gator |
| Senior Perl Developer | Austin, Texas | Host Gator |
| Technical Support Rep | Houston and Austin, Texas | Host Gator |
| UX Designer | Austin, Texas | Host Gator |
| Web & UI Developer (JavaScript & j Query) | Austin, Texas | Host Gator |
Free Webinar: Hadoop
How to Build an Optimal Hadoop Cluster to Store and Maintain Unlimited Amounts of Data Using Microservers
Realizing the promise of Apache® Hadoop® requires the effective deployment of compute, memory, storage and networking to achieve optimal results. With its flexibility and multitude of options, it is easy to over or under provision the server infrastructure, resulting in poor performance and high TCO. Join us for an in depth, technical discussion with industry experts from leading Hadoop and server companies who will provide insights into the key considerations for designing and deploying an optimal Hadoop cluster.
Some of key questions to be discussed are:
- What is the “typical” Hadoop cluster and what should be installed on the different machine types?
- Why should you consider the typical workload patterns when making your hardware decisions?
- Are all microservers created equal for Hadoop deployments?
- How do I plan for expansion if I require more compute, memory, storage or networking?



Comments
yep, thanks. is it possible
yep, thanks.
is it possible to control this thing with, say, a nanokorg (ie. direction, octave and such things)? or does it take midi notes only?
Hi, atm you can mute/unmute
Hi,
atm you can mute/unmute the arps by midi controls received at the input. A pattern switch by MIDI program change or control change is planned. However the LFO and Seq modules are pretty much fully MIDI controllable.
Frank
thanks again. finally got
thanks again.
finally got around checking the 0.0.3 version. very neat!
keep up the great work...!
Version information
Many thanks Dave for this review article. The authors would just like to add that the tested QMidiArp version is from alsamodular CVS as of february 2010, not yet released, and currently only available through
cvs -z3 -d:pserver:anonymous@alsamodular.cvs.sourceforge.net:/cvsroot/alsamodular co -P qmidiarp
so that people can grab it.
Compile issues - QtCore required
Im having compilation problems with the CVS version of Qmidiarp...its saying QtCore is required but I have it installed...is there a particular version that it needs?
Author's reply
Do you have the libqt4-dev package installed ? You'll need it. ;)
Best,
dp
Similis sum folio de quo ludunt venti.