MidiARP arpeggiator


MidiArp is an advanced MIDI arpeggiator module that has all standard and a few unique features, such as very musical latch mode, flexible octave advande options, super stable internal clock, nice swing and two modulation sources with velocity, after touch and CC destinations.

MidiArp is designed as a performance instrument suitable for both studio work and live performance.


MidiArp runs on MidiGAL hardware, however you can also run it on MidiBUD and, with some limitations due to lack of the switch, on any MIDIpal compatible hardware.

Firmware (.syx and .hex): midiarp_113 (use midiarp_pal.syx if your device has MIDIpal bootloader)

Firmware source code: midiarp_097_src

Arp direction, octaves and length

Supported direction modes are: UP, DOWN, AUTO (it’s up or down, depending on if the second pressed note is above or below the first one), UP/DOWN, UP/DOWN2 (this one has doubles end notes), ORDER (notes are played in the order the keys were pressed), CHORD (all notes at once), and RANDOM.

Available octave ranges span up to 4 extra octaves up or down. In addition to the standard octave playback, ranges above 1 can be played in both directions: original octave, 1 octave above, 2 octaves above, then 1 octave above again, then back to original.

OCTAVE setting (v1.10+) provides fine control over when the octave is advanced: its default ‘arp’ setting advances octave after each arp cycle, like the traditional arpeggiators. ‘arp2’ is similar, but advances octave after 2 arp cycles, so the held chord notes are played twice in each octave. There are also ‘arp3’ and ‘arp4’ settings that play chord notes three and four times before advancing the octave.

If OCTAVE is set to ‘note’, the octave is advanced after every note, creating interesting chord variations. ‘note2’, ‘note3’ … ‘note8’ settings advance octave after two, three … eighth notes are played. Combining this with the number of number of notes in the chord and the selected octave range result in a truly interesting variations.

Arpeggiator cycle can be limited by LENGTH parameter. For example, if LENGTH is set to 8 and you play triad CEG, the arpeggiator will play CEGCEGCE then repeat, which is useful when you play triads in 4/4 measure or for creating some complex arpeggiator figures with fancy measures.

Arpeggiator pattern can be set to one of the 16 predefined rhythmic patterns. (v0.97+)

Tempo, swing and step/gate length

Tempo can be set anywhere between 25 and 250 beats per minute. The internal clock generator is super stable and supports swing from 0.1% to 99.9% with .1% increments which allow some very subtle grooves.

Default arpeggiator step duration is 1/8th, however it can be set to anywhere between 1/64th triplet and 2 whole notes. Gate duration default is half the step duration and can be set to any duration in the same range, including values longer than the current step setting, creating interesting effects if used with polyphonic sound sources.

Latch, key sync and auto start

LATCH mode: when set to on, the arpeggiator will keep playing notes even after you release all keys. MidiArp’s latch mode implementation is special in that it not just merely adds each played note to the playing set until you release all keys. Instead, it reloads arpeggiated notes set with currently held notes every time the key is released making the latch mode much more musical.

KEY SYNC mode: when set to on, the arpeggiator clock is restarted when you play notes after releasing all keys. This is sometimes indispensable when you play live, however may confuse slave MIDI devices if you have any.

AUTO START mode: when set to ‘note’, the arpeggiator is automatically started when a note is played. When set to ‘start’, the arpeggiator will start when it receievs MIDI Start event. In this mode it will also respond to MIDI Stop and Continue events. If set to ‘both’, it will start on both note and MIDI Start events.

Keyboard zones and velocity

ZONE LOW/HIGH: specifies the range of notes that arpeggiator responds to so that you can have you right hand playing arpeggios and your left hand playing a non-arpeggiated bass line, or your left hand playing arpeggios and your right hand playing a solo.

Starting with version 0.96, you can assign different MIDI Channel to send out of zone notes to. This comes handy when you want to back arpeggiated notes with sound from another synthesizer using one keyboard.

VELOCITY mode: when set to ‘key’ (default), the arpeggiated notes will be played back with their original velocity. Setting this to a value between 1 and 127 will result in fixed velocity which is useful for steady arpeggios and when you want to apply predictable modulation, see below.


MidiArp has two modulation sources, each with saw, triangle, square and random waveforms, which can modulate arpeggiated note’s velocity, after touch and controller of your choice, all at the same time.

Modulation period is specified as a number of arpeggiator steps and can be set to ARP (equal to the number of currently played notes), OCTAVE (number of currently played notes multiplied by the number of octaves set by RANGE parameter), or any constant number between 2 and 127.

Modulation amount is specified as a value between -127 and 127 with 0 meaning no modulation. Modulation value is 0 at the start of the modulation period and it reaches the set amount by the modulation period end.

Modulation value is added to the original modulation destination value received by the arpeggiator. Negative amounts subtract modulation value, changing raising saw waveform to inverted saw, triangle to inverted triangle and low/high square to high/low square.

Both modulation sources can be set to the same destination resulting in some complex modulations with two standard waves superimposed on each other. Try setting both modulation sources to CC#10 (pan position), Mod1 length to OCT and Ctrl amount to 127, Mod2 length to ARP with Ctrl amount to 63 and you end up with an arpeggio sound walking from left to right with each octave notes starting to the left from where the previous octave note ended!

Controller Events

MidiARP can be controlled by MIDI Control Change Events: you can start, stop, clear and toggle arppegiation.

User interface

MidiArp user interface consists of pages which are selected by encoder rotation. Each page displays a single parameter value.

Clicking the encoder toggles parameter editing mode. Double clicking the encoder saves all arpeggiator settings in the currently selected memory slot on all but the Main pages. The Main page allows you to save arpeggiator settings into a different memory slot.

Pressing the switch starts the arpeggiator if it is stopped, and stops it if it is running. When running with LATCH mode set to on, pressing the switch will silence the currently playing notes without stopping the sequencer. Press the switch again with no notes playing if you need to stop the arpeggiator completely.

Pressing the switch while on the Main in parameter changing mode enters the name editing mode in which switch advances editing character position and encoder rotation select the character under the cursor. Clicking the encoder accepts the edited name.

Repeatedly pressing the switch on the Tempo page in parameter changing mode allows you to set tempo using tap tempo feature.

Parameter “learn”

MIDI Channel, Velocity, Zone High/Low and Mod CC# pages will “learn” the parameter setting if the related MIDI event is received while in parameter editing note. For example, instead of checking what MIDI channel your MIDI keyboard is set to, you can just go to the MidiArp’s MIDI Channel page, play a note, and the channel will be set to the received note’s channel. Or on the Velocity page you can repeatedly play a note adjusting required fixed velocity setting by ear rather than manually.

All MidiArp’s parameters can be altered on the fly without stopping the arpeggiator. The current version does not support arpeggiator parameter setting by external controls, however this could be (and probably will be) implemented in future versions of the firmware.

Persistent memory

Snapshot of the arpeggiator settings can be stored into one of the 100 named nonvolatile memory slots for later recall. Saving and loading do not require stopping the arpeggiator which is great for live performance. Each memory slot has a number (00 to 99) and a user definable name which can be “peeked at” during save/load operations.

Active memory slot can be selected using MIDI Program Change message without stopping the arppegiator, which makes it real fun to play live.


Powering the device up with the switch pressed returns all MidiArp settings to factory defaults erasing all your stored arpeggio settings.

Powering the device up with the encoder knob pressed enters the firmware upgrade mode: device expects firmware sysex file to be sent to MIDI IN.

59 thoughts on “MidiARP arpeggiator

  1. Pingback: New MidiGAL firmware: MidiArp | MidiSizer

  2. This looks great! My PCBs arrived last week and BOM is on the way, can’t wait to get this together to try it out. Thank you for all your hard work.

  3. Hey,
    No matter what, I could not upgrade the MidiGAL with the MidiArp 0.94 firmware.
    I’m using MIDI-OX, 250ms delay between messages, Akai EIE Pro MIDI interface on a Wintel 8.1 computer.
    Upgrading MidiClk 0.93 to 0.96 worked like a charm with so I’m wondering if there’s something wrong with the SysEx IDs.
    MidiClk 0.93 or 0.96 header : F0 29 47 41 4C 00 00
    MidiArp 0.94 header : F0 29 42 55 44 00 00
    It’s just like the unit is ignoring the SysEx going into it. Fortunately, it boots up with MidiClk at the next power cycle.
    Thanks for your help.

  4. I just flashed my MidiBud with the MidiArp and it’s a blast to play! I had a couple questions & suggestions.

    – On the MidiPal Arp app, it seems like it remembers the notes that were played even when the external clock is stopped. That way when you send a start command it just automatically starts again with those notes. With the MidiArp, it seems like you actually have to enter new notes in, to trigger the arp. Since I have everything synced, it is very nice to have everything start at the same time and not have to remember to trigger the notes from the controller. I looked at the manual but couldn’t figure out how to put it in this mode.

    – I really like the patterns on the MidiPal app, any way to get them transferred to the MidiArp? Maybe a way to create new/random patterns?! (I know this may be asking too much)

    – I always have this hooked up between my controller and my MPC, is there any way to quickly bypass the MidiArp (besides setting it to ‘int’). On the MidiPal, I would just long press the main encoder button and then it would disable the app.

    Thanks again for you’re great work here Peter!

    • MidiArp clears the note stack when it is stopped, this is my design. I can probably add a feature that would save currently playing notes with the sequence, so they will be playing when you load the sequence.

      Patterns may be added to one of the next versions of MidiArp, however there are no plans for this at this point — MIDIpal’s arp implementation does them well, used it!

      To bypass MidiArp you can just stop it by pressing the switch. AutoStart mode should be off if you don’t want it to start on the next note played.

      • It would be great if there was a mode where the notes were saved between sequences, this way I could start and stop the external sequencer without having to enter the notes again.

        Can’t wait for the next version. Thank you.

  5. Hi
    I’d like to know if I can have a MidiArp built (I am not so good with solder) and shipped to Italy.
    How much would it cost?
    Should it have the right firmware? I’m interested in the arpeggiator functions.
    Thank you very much

  6. maybe a stupid question, but can a midiClk be transformed to be a midiArp via midi / is the bootloader the same? this would allow easy change of devicetype. i just thought i ask before i brick something.

  7. So, if you are using , say MIDIArp on MIDIgal and you send MIDISeq sysex to MIDIGal you will be using MIDISeq instead? Like an App?
    And what happens to any saved info in the last App? Am I thinking about this the right way or am I completely off?

    • Yeah, MidiGAL is a hardware platform which can run different variants of firmware. Each variant of the firmware implements certain functionality: MidiClk, MidiSeq, MidiArp or Mutable Instruments MIDIpal. Only one firmware variant can be loaded at a time. Firmware is loaded using specially formatted sysex message sent to MIDI IN after powering up the unit while holding down encoder knob. The application specific data saved on the device needs to be backed in a sysex file stored on a computer before firmware is changed. It can be restored by sending that sysex back to the device when the original firmware that created it is restored.

  8. Am I too stupid to work this or is something wrong? Press start button, play chord, only one note sounds, no arpeggiation (monosynth). Same thing on Key Start. MidiSeq works great, MidiPal firmware too, including the Arp. One weird thing: Clock setting shows a square then “Clo” which changes to Internal or External on moving the encoder. Clock Out shows a comma and a bracket between two squares, again changes to On or Off when moving the encoder. Once set it sends clock out OK.

    Tried redownloading, reflashing, same thing. Am I just being dim here?

      • Yeah I thought so too. Power cycled everything, downloaded the firmware again in case it was corrupted and refreshed via SysEx, anything else I can try?

      • OK so I just reflashed with MidiARP firmware to no avail again, to my surprise when I went back to MidiSeq my patterns are still there, I guess they are stored on the EEPROM? Could something be corrupted there to explain the strange behaviour I’m seeing with MidiARP? How best to clear it?

  9. Yup, that’s the one. Probably missed that in the docs somewhere, although in my defence I did have a good look. Thanks for that, all good now.

  10. Hi
    I would like to use the arpeggio function and sequence live with my band. We use in -ear monitoring so I can send them a sound of a click easily without being heard in the main mix but I cannot find a hardware devise to do this. everyone tells me to to take my laptop but to be honest I don’t want to.
    I’ve tried a Metronome which takes midi but my Fantom G and this Boss Metronome did not sync properly. The timing was fine but I could not start and stop the metronome from my keyboard and so the machines did not sync at times.
    I just saw your MidiArp and I thought how great it would be if it had an output with a click sound which can go straight to the mixer.
    Is this possible? if not do you have products which can help?


    • Kris, MidiARP runs on MidiGAL which is a pure MIDI device that does not have any audio output hardware at the moment. Technically, one can hack an audio output port using an op amp and make a custom firmware version to generate click, however i doubt there is enough room in the MidiARP flash memory for this extra functionality.

      Another alternative is to modify MidiClk firmware adding a MIDI click note, similar to the one MidiREX has. In this setup you will have external MIDI device, such as cheap drum machine, that will actually generate an audio click.

  11. I have a monosynth with no arpeggiator. Would this device allow me to play the keyboard on my synth through the midi out into the MidiGAL and then into the midi in on the same synth? That way id have an arp that I could turn on or off without needing an additional keyboard controller. Thanks!

    • It really depends on your synth, specifically — if it has Local Mode Off mode. If it does, enable it and hook MidiGAL between the synths MIDI OUT and MIDI IN, and set it to MIDI Channel the synths is set to, then it will work the way you want it.

  12. Hi there, thanks for the midigal, I’m loving it. Quick question – in the modulation page, what does a modulation length of say ‘2’ equal? I’m trying to get a smooth lowering and rising of velocity of my notes over a couple of bars. Mod1Velo of around -10 with triangle wave seems to be getting there, but not sure how to time the length. Thanks!

  13. I have double clicked the encoder, it briefly says 00 saved. However when i turn power off and then back on settings are not saved? I must be doing something wrong

  14. I ordered a preassembled MidiArp and recieved it less than a month later in Belgium. It works perfectly and I’m very happy with it. Plus, kvitekp is very helpful and responsive. Thumb up!

  15. Hey Pete was there an intentional reason that midiarp cant do separate send and receive channels? In my particular setup, I am sending midi from my controller keyboard into a hub, then out to midiarp on an unused channel and then remap the output channel of the midiarp with another piece of gear to match the synth I want to send the arpeggiator midi to. I would love to be able to take the remapping out of the equation. – Thanks

      • Thanks for the quick response. So you envision the midiarp app on the midigal being used directly inline between 1 note input device and one synth? I kind of see it as super useful to add an arp to a system that doesnt have one already. Although to be fair the midiarp app is much more fun to play and gets me better results than most built in arps I’ve used, so I pick it over the one in my mpc live for example.

      • I’m usually reluctant to add features that are not directly related to the core functionality becasue the available program memory is very limited and I want to preserve it for some new cool ARP features.

        MIDI message channel routing does not seem to be the core ARP feature, however, if it extends applicapility of the device, it may be worth it.

        I’m on the verge so keep pushing 😉 Thinking of Output Channel option that would be set to be the same as Input Channel by default, but could be changed to some other channel.

        Trying to think of the scenario when different input and output channel will help to solve MIDI loop problem.

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 )

Facebook photo

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

Connecting to %s