Hey!
I like to present the project, I am working on currently to your.
it is a MIDI Step Sequencer running with a Teensy 4.1 with 16MB PSRAM.
I cannot count the times I started working on my own Sequencer (first one on Atmel chips before Arduino was a thing), but did my first real project around 2 years ago, after I realized how cheap you can order PCBs and you don’t have to use those breadboard where you need to cable every connection or build the PCB yourself.
Tried several approaches to Sequencing and after a very modulate x0x one, that I could arrange in many ways, I committed on a layout. After ordering the PCBs I realized that is is way more inspired by a Cirklon than I thought. It is basically a Cirklon with one additional row of buttons in a smaller form factor.
Hardware First:
Teensy 4.1
53x MX style mechanical keys
19x Rotary Encoders with momentary switches
69x WS2812B RGB LEDs
9x Multiplexers for the Buttons
2x I2C Port Extensions (MCP23017) for the Encoders.
A 256x64px OLED Display that I found as replacement part for some HI-FI -gear in a french onlineshop.
a 3D Printed Case (380x114mm), 3d Printed Keycaps and a CNC routed front panel
4 DIN MIDI in and out. 4 „devices“ as USB Device and up to 4 connected devices to the Host port.
The sequencer is a 16 Track sequencer (could be more, but currently I don’t need more and those 16 buttons make 16 so easily accessible). 16 Patterns per Track (again, the number of buttons), „unlimited“ number of bars per pattern, with between 1 and 16 steps per bar. Every pattern can be it’s own type (Mono, Poly, Drum and a few Generative experiments) and resolution.
On mono patterns, there is one note per step with notevalue, velocity, length, offset (to move it on the 192ppqn grid), note repeats, Propability, up to 4 CC values and the possibility to chose a chord and a inversion.
Drum and Poly patterns are just a list of events on a timeline. as the UI is based on Steps, notes are entered on those steps, it can moved around and be recorded freely. Every note has its individual configuration (like a mono step without the CC).
CC can be places the same way as notes (and recorded that way), or drawn like Modulation curves in a DAW. i like this approach more, for most of the stuff, because as slow as midi is, too many events can „overflow“ the speed of MIDI.
On top of that, every Track has 4 Modulation Lanes, that are lfos (and a separate Random area, for making velocity and timing less robotic with just a few clicks.
If wanted, every can be forced to a scale, that is defined on the project.
Currently the bars are played one after another in the order they appear in the UI. As every bar has its own length and can be repeated a number of times, possibilities are big here. I tried to make this more flexible, but that became a UI ‚and usability mess for something that sounded cool, but I don’t really need.
Tracks hold „instruments“ that are basically configurations what output is used. MIDI Port(s), Channel(s), a „base note“ that mono patterns have as default note), if it can receive Bank Select and Program Changes, if it should be forced to scale if the project enables that. instruments have a number of multi-timbral parts. if that’s there, on the Track page a Channel-Field appears where the wanted channel is selected.
For Drum-Instruments, the midi port and channel, as well as a Note and a name are stored to the ROW, so every individual percussion instrument can be freely configured. Some drum machines have one instrument per note, others have a midi Channel per instrument, and with adding the port to it, I am able to send single Percussions to different Sound sources.
Last there is a Songmode that is quite similar (and easy) as the Elektron ones.
An „unlimited“ number of rows are played In order. Every row chooses a pattern (or none) per track, a length, a tempo, a transpose value and a scale, that everything can be forced into.
Currently MIDI recording is the least loved part. the reason why I spent so many time in trying out every sequencer out there etc. is because I am way better in programming notes than playing them.
currently I am rewriting most of the firmware, to get rid of parts of the old hardware as well as design decisions that are based on sequencing- and hardware-concepts that I threw away. I would say I am at 90% of where I was before. Still missing is the MIDI FX section, that contained a MIDI delay (playing back notes via midi but with reduces velocity to emulate delay) and an Arpeggiator.
Everything is can be stored on the SD Card (and loaded from there). it’s writing it’s own binary format, so save time and space. loading is fast enough so with a little work I could make them load and play without the listener noticing, but as I am not performing, I don’t need that.
With 16Mb psram and most of the memory dynamically allocated, there should be enough to load two projects to switch between them.
As the MIDI Sequencing itself is running in a IntervalTimer, loading, saving, IO and Display-Rendering is not effecting the MIDI performance at all.
The MIDI clock is very tight. I wish, all of the hardware would be that tight…
I will try to make and post better photos and maybe later a video, when I have better light in my room some day.
I like to present the project, I am working on currently to your.
it is a MIDI Step Sequencer running with a Teensy 4.1 with 16MB PSRAM.
I cannot count the times I started working on my own Sequencer (first one on Atmel chips before Arduino was a thing), but did my first real project around 2 years ago, after I realized how cheap you can order PCBs and you don’t have to use those breadboard where you need to cable every connection or build the PCB yourself.
Tried several approaches to Sequencing and after a very modulate x0x one, that I could arrange in many ways, I committed on a layout. After ordering the PCBs I realized that is is way more inspired by a Cirklon than I thought. It is basically a Cirklon with one additional row of buttons in a smaller form factor.
Hardware First:
Teensy 4.1
53x MX style mechanical keys
19x Rotary Encoders with momentary switches
69x WS2812B RGB LEDs
9x Multiplexers for the Buttons
2x I2C Port Extensions (MCP23017) for the Encoders.
A 256x64px OLED Display that I found as replacement part for some HI-FI -gear in a french onlineshop.
a 3D Printed Case (380x114mm), 3d Printed Keycaps and a CNC routed front panel
4 DIN MIDI in and out. 4 „devices“ as USB Device and up to 4 connected devices to the Host port.
The sequencer is a 16 Track sequencer (could be more, but currently I don’t need more and those 16 buttons make 16 so easily accessible). 16 Patterns per Track (again, the number of buttons), „unlimited“ number of bars per pattern, with between 1 and 16 steps per bar. Every pattern can be it’s own type (Mono, Poly, Drum and a few Generative experiments) and resolution.
On mono patterns, there is one note per step with notevalue, velocity, length, offset (to move it on the 192ppqn grid), note repeats, Propability, up to 4 CC values and the possibility to chose a chord and a inversion.
Drum and Poly patterns are just a list of events on a timeline. as the UI is based on Steps, notes are entered on those steps, it can moved around and be recorded freely. Every note has its individual configuration (like a mono step without the CC).
CC can be places the same way as notes (and recorded that way), or drawn like Modulation curves in a DAW. i like this approach more, for most of the stuff, because as slow as midi is, too many events can „overflow“ the speed of MIDI.
On top of that, every Track has 4 Modulation Lanes, that are lfos (and a separate Random area, for making velocity and timing less robotic with just a few clicks.
If wanted, every can be forced to a scale, that is defined on the project.
Currently the bars are played one after another in the order they appear in the UI. As every bar has its own length and can be repeated a number of times, possibilities are big here. I tried to make this more flexible, but that became a UI ‚and usability mess for something that sounded cool, but I don’t really need.
Tracks hold „instruments“ that are basically configurations what output is used. MIDI Port(s), Channel(s), a „base note“ that mono patterns have as default note), if it can receive Bank Select and Program Changes, if it should be forced to scale if the project enables that. instruments have a number of multi-timbral parts. if that’s there, on the Track page a Channel-Field appears where the wanted channel is selected.
For Drum-Instruments, the midi port and channel, as well as a Note and a name are stored to the ROW, so every individual percussion instrument can be freely configured. Some drum machines have one instrument per note, others have a midi Channel per instrument, and with adding the port to it, I am able to send single Percussions to different Sound sources.
Last there is a Songmode that is quite similar (and easy) as the Elektron ones.
An „unlimited“ number of rows are played In order. Every row chooses a pattern (or none) per track, a length, a tempo, a transpose value and a scale, that everything can be forced into.
Currently MIDI recording is the least loved part. the reason why I spent so many time in trying out every sequencer out there etc. is because I am way better in programming notes than playing them.
currently I am rewriting most of the firmware, to get rid of parts of the old hardware as well as design decisions that are based on sequencing- and hardware-concepts that I threw away. I would say I am at 90% of where I was before. Still missing is the MIDI FX section, that contained a MIDI delay (playing back notes via midi but with reduces velocity to emulate delay) and an Arpeggiator.
Everything is can be stored on the SD Card (and loaded from there). it’s writing it’s own binary format, so save time and space. loading is fast enough so with a little work I could make them load and play without the listener noticing, but as I am not performing, I don’t need that.
With 16Mb psram and most of the memory dynamically allocated, there should be enough to load two projects to switch between them.
As the MIDI Sequencing itself is running in a IntervalTimer, loading, saving, IO and Display-Rendering is not effecting the MIDI performance at all.
The MIDI clock is very tight. I wish, all of the hardware would be that tight…
I will try to make and post better photos and maybe later a video, when I have better light in my room some day.