LEET Arpeggiator

The Arpeggiator is part of the LEET Synthesizer project. If you haven’t – It is a good idea to read the main post first before continuing with the details below:

This post describes how the arpeggiator works and what you need to build your own.

Description of the Arpeggiator

This project is an experiment to see how an arpeggiator could be implemented using the control hardware. It is a proof of concept where I have merged Dmirys arpeggiator1 project with the control surface library and adjusted it to the control hardware.

Take it for what it is; the code is a mess, there is no selection of octaves or midi channel and the four note keys are not in order…

Product guide. Click here to download high-resolution PDF.

The implementation is using incoming MIDI signals to select chord note (ch3) and arpeggio note (ch2). By using two LEET keyboards and reroute the MIDI signals thru the DAW to the arpeggiator they can be used for chord and arpeggiator control.

Part list:

Component cost is around $6 on eBay October 2020 (will depend on shipping and supplier).

  • 1x 3D printed core 3DPCB
  • 4x 3D printed potentiometer knobs
  • 1x Arduino pro micro, or compatible clone (5V version. ATmega32U4) – (~$4)
  • 7x 6x6mm 4pin through hole tact switches – preferably with low activation force (50g / 0.5N) – ($0.2)
  • WS2812 LED-strip with 4 LEDs (60 LEDs/m. I used IP60, white FPC) – ($1.1)
  • 4x 100k Potentiometers (10k-500k will work)
  • 1x 25cm RK wire (containing 24 strands of 0.3mm copper wires) – ($0.1)


  • 3D printer (FFF/FDM with PLA filament)
  • Solder station with a narrow tip
  • Basic tools: Needle- and cutting pliers, knife, hot-glue
  • Computer to run Arduino IDE and upload firmware (using a Micro USB cable)

Build it

I have not made a step by step building instruction, but if you have built the other devices it should be sufficient to look at the illustration below. The build process is very similar to the step by step instruction for the keyboard.

Backside view showing routing of wires.

Future development:

I plan to focus my attention on rebuilding the Arpeggiator from scratch rather than improving the current state:

It will likely be based on the chord unit, allowing it to be played without incoming midi channels and it will probably be using permissive open source instead of the copy left GPL3.0 license used due to the current code base.

Download project files

All files required for this project are available at this GitHub repository:



This project is open source under GPL3.0 License (since it is using code with this license)

4 Replies to “LEET Arpeggiator”

  1. Could anyone check the code for this? I believe it’s a small syntax error I cannot find, but I somehow seem to be unable to program the board with the current arpeggiator code…

  2. the phrase: “struct MyMIDI_Callbacks : MIDI_Callbacks {” is defining the callbacks, correct? These seem to end for the onchannel messages, but apparently receive an error for the system exclusive ones….

  3. To Update: after a little research in the Control Surface library I modified the code by deleting the second line after the callback void and replacing se.CN by se.cable.getOneBased()
    see here for anyone interested:
    // Callback for system exclusive messages
    void onSysExMessage(MIDI_Interface &, SysExMessage se) override {
    // Print the message
    Serial << F(“System Exclusive message: “) << hex;
    for (size_t i = 0; i < se.length; ++i)
    Serial << se.data[i] << ‘ ‘;
    Serial << dec << F(“on cable “) << se.cable.getOneBased() << endl;

    At least that made it upload without issues, and I will check its function later.

  4. Hi
    This is the problem with external libraries, when they change things tend to crash…
    Unfortunately, this project is a proof of concept and relying on controlsurface (for the other parts I used MIDIUSB instead). Maybe I should rewrite the code someday and base it upon leet_chord that is more robust…
    If you don’t get it to work, you might experiment with older versions of controlsurface (it did work a year ago…)

Leave a Reply

%d bloggers like this: