nopcorp, thanks, this
is what I mean. I humbly think it would be a good
new module candidate. Maybe it can already be done as a
Metamodule, given that it seems so powerful (I'm flabbergasted by the quality and good-soundingness of the MMs already offered in the thread) ; here is how it would work :
- You start with a chord. That is a minimum of two (one, actually, read on) tracks, each playing a different note
- Then before the instrument, in the sound network, you add this "real arpeggio" module
- Then in the track, you replace the instrument number with the arp module number.
- Now the tracks send notes to the arp module, and the arp module sends notes to the instrument
The arp module could have at least 4 controls
- Direction of the arpeggio (up / down)
- tempo (synced to song tempo / manual : value)
- repeat on / off.
- common used arpeggio patterns to select
But wait, we could also have
full control over the phrase, by entering a string using the syntax quoted below, from
qmidiarp in a text field (this last option is the full superdupercool overkill arpeggiator, a simple arp with common phrase presets would already be good) - It's really not as complicated as it sounds (I'm talking about usage, not implementation of course)
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
(0ttt0tttt0)
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.
In fact, with this implementation, we would only need a single note in the track to trigger / build complex arpeggios
