Introducing Repetita Versio, a looper for the Versio platform


I’m happy to finally present the fruit of the last six months of work, my first foray into both C++ programming and embedded systems: Repetita Versio, a looper for the Versio platform with a few tricks up its sleeves.


  • 80 seconds stereo buffer @ 48KHz
  • independent control for the left and right channels of loop start, loop length, speed, freeze amount and recording
  • three trigger modes (triggered recording, free-running, one-shot) with input
  • looper and delay mode
  • variable decay with multi-mode filter and degradation in the feedback path
  • loop start control with loop wrapping to maintain a fixed length
  • loop length and playback direction in a single control
  • reading speed control, from 0.02x to 4x, with controllable slew up to 10 seconds
  • “note” mode with 4 octaves tracking
  • instantaneous buffer freezing
  • crossfading of frozen and unfrozen signals
  • stereo width control
  • feedback filter amount control
  • input gain control
  • settings are persisted between power cycles

I took inspiration from both DaisySP’s looper and Monome’s Softcut, but in the end it’s its own engine, that despite weeks of beta-testing most probably still suffers from some minor (hopefully) issues. That being said, it’s a quite solid and fun instrument to use.

The firmware is available here, along with a README, while the source code will come soon!

I’ve put together a YouTube playlist with short-ish videos focused on different aspects of the firmware. It’s my first time doing these kind of things so bear with me:

Here’s a quick start:

  1. flash the firmware with the Programmer
  2. the UI labels depends on which Versio module you have, but using the Antri Versio names these are the controls and their suggested default:
  • Knob 1 > Blend (dry/wet), to taste
  • Knob 2 > Loop start point, 0%
  • Knob 3 > Filter, 0%
  • Knob 4 > Loop size, 100%
  • Knob 5 > Decay, to taste
  • Knob 6 > Playback speed, 50% (noon)
  • Knob 7 > Freeze, 0%
  • ABC > Channel selector, middle
  • XYZ > Trigger mode, middle
  1. once the module turns on the looper begins to buffer the incoming signal up to the limit of 80 seconds, after that the reproduction starts. If you want a shorter buffer, just press the button to stop buffering and start the reproduction right away
  2. the size knob acts on both the loop size and the playback direction, like this:
  • at 100% is max size (the whole buffer) and forward direction
  • from 100% to 50% the loop gets shorter
  • at 50% is min size (little less than 1ms) and forward
  • from 50% to 0% the loop gets longer but now the playback is backwards
  • at 0% is max size again, but backwards
  1. the speed knob goes from 0.02x to 4x, at 50% is 1x
  2. if you prefer a somewhat standard looper behavior with start/stop recording, place it in trigger recording mode (bottom switch to the left), where a click of the button - or positive voltage at the relative input - starts the recording and another one stops it.

There are a bunch of advanced features and also a settings page, so make sure to read the README.

Please, let me know of any bug you may find, any corrections to the README (English is not my first language) or help you may need.

I hope you enjoy it!



This sounds incredible!

Can’t wait to check it out :slight_smile:

1 Like

That’s amazing! Congrats :comet:

1 Like

Updated the OP with the YouTube playlist.

Fixed a bug with the loop start control, the latest version (v1.0.1) is available here

Another bug fixed, this time the problem was with degradation applied also when decay was 0.

Download v1.0.2 here: …

This looks really good. Might be a dumb question, but can this be flashed and used on a DaisyPatch module? I have Versio hardware as well – just curious if that would work.

It won’t work as-is, but in a few days I’ll release the source code and, if you’re familiar with C++, I think that the porting would be simple. Apart from Melotus Versio and a kxmx_bluemchen I don’t have any other Daisy-based device, so for me it would mean doing it blindly…

Awesome! I’m well versed in C++. Might take a look at porting it over when I have some time.




I’ve managed to clean up the source code and make it presentable, you can find it here:

Disclaimer: this is my first C++ project and my first foray into embedded system programming, so the code is bound to be naive, unoptimized and, generally speaking, bad. It kind of works, though, and I did my best to comment it for my future self and for anybody who may ask what the hell am I doing. Nevertheless, there are still uncommented parts, and chances are that they will stay that way, unless someone is willing to fill in the blanks.

1 Like

This is so awesome, thanks for sharing!
I love that you have a detailed video playlist demonstrating its various functions <3

1 Like