This synth celebrates all things circular: the circle of fifths, Euclidean rhythms, and rotary encoders. Four synth voices play random notes in a triad to the beat of a determined Euclidean rhythm animated on the 8x8 matrix. You can scroll through the circle of fifths on each synth voice to change the triad for easy modulation between keys.

The code is written in CircuitPython with the synthio module and runs on a Feather RP2040. An I2S amp outputs audio to a speaker and the rotary encoders, alphanumeric displays, and 8x8 matrix all connect to the Feather over I2C with STEMMA QT cables.

The synth has multiple functions that can be selected using the top encoder:

  • Play - the synth plays and you can adjust the chords for each of the four synth voices
  • Euclidean - adjust the Euclidean rhythm for each voice
  • BPM - raise or lower the Beats Per Minute of the sequence (speed)
  • Beat - change the beat division of the sequence from a range of 1/16th notes to whole notes
  • Wave - change the waveform for each synth voice to a square wave, sine wave, sawtooth wave, or noise
  • ADSR - adjust the attack, decay, sustain, and release for each synth voice
  • Ring - adjust the percentage of ring modulation applied to each synth voice
  • LFO - adjust the rate of the LFO being used for ring modulation
  • Volume - control the overall volume of the synth

What are Euclidean Rhythms?

Euclidean rhythms are derived from an algorithm that determines how to spread the number of steps over a number of beats as equally as possible. The interplay between different time signatures can create complex and interesting polyrhythms, even something as simple as one person clapping in 4/4 time while another person claps in 6/8 can sound interesting!

Euclidean algorithms have become popular as an option in Eurorack modules that generate rhythms. C code for this algorithm was originally referenced in Godfried Toussaint's paper and Brian House ported the algorithm to Python in this repository. You'll see this function in the CircuitPython code. 

The Euclidean rhythm for each synth voice is controlled with the four lower encoders in Euclidean mode. The 8x8 matrix displays the total number of steps in each rhythm. As the rhythms advance, a pixel on the matrix turns red when a note plays to denote the place in the sequence.


Angled shot of black rectangular microcontroller "Feather RP2040"
A new chip means a new Feather, and the Raspberry Pi RP2040 is no exception. When we saw this chip we thought "this chip is going to be awesome when we give it the Feather...
In Stock
Angled shot of blue, square-shaped, amplifier breakout with a pre-soldered terminal block.
Listen to this good news - we now have an all in one digital audio amp breakout board that works incredibly well with the 
In Stock
Enclosed Speaker with JST cable
Listen up! This 2.8" x 1.2" speaker is a great addition to any audio project where you need 4 ohm impedance and 3W or less of power. We particularly like...
Out of Stock
Overhead video of a blue-manicured finger manipulating a rotary encoder connected to a 4-digit LED segment display.
The ANO rotary encoder wheel is a funky user interface element, reminiscent of the original...
In Stock
Angled shot of ANM rotary encoder.
This funky user interface element is reminiscent of the original clicking scroll wheel interface...
In Stock
Overhead video of an assembled 14-segment LED backpack, emitting the follow text in red LEDS: "AdaFruit 14-Segment Backpack"
Display, elegantly, 012345678 or 9! Gaze, hypnotized, at ABCDEFGHIJKLM - well it can display the whole alphabet. You get the point. This is a nice, bright alphanumeric display that...
In Stock
1 x USB C Round Panel Mount
Extension cable
1 x Silicone Wire
30AWG, multiple colors

This guide was first published on Jun 07, 2023. It was last updated on Jul 12, 2024.

This page (Overview) was last updated on Mar 08, 2024.

Text editor powered by tinymce.