I gave a sneak preview in Zynthian Club to something I have been working on for the past few days.
This is a (partially) functional wire-frame for a step sequencer. It provides a grid of notes / steps. You can change the grid size to have more or fewer steps in the pattern. Each step may have any quantity of notes, each at its own velocity. Velocity is indicated by the opacity of the cell, darker cells being louder. The SELECT rotary encoder moves the selector left / right through steps and the SNAPSHOT encoder moves the selector up / down through notes. The SELECT button push will add or remove a note. The grid scrolls if you move up or down beyond the display. All steps are always shown horizontally, i.e. there may be 32 narrow columns for a 32 step pattern or 4 wide columns for a 4 step pattern. Touch / mouse also works. Touching or clicking on a cell will add or remove a note and dragging the piano-roll will scroll vertically. The top right shows a kind of menu. Rotation of LAYER encoder will select the menu. Short press of LAYER button will allow entry of a value with LAYER encoder changing the value, e.g. the input velocity level or quantity of step in a pattern. Options are:
- Select pattern
- Set input velocity
- Change quantity of steps
- Copy pattern
- Clear pattern
- Set MIDI channel
- Change transport mode (start / continue).
A short press of the SNAPSHOT button will start or stop the playback looping. Playback is indicated by a cursor moving along the bottom aligned with the currently playing step. Playback tempo is driven by MIDI clock, currently relying on an external clock source. MIDI start, stop and continue are recognised.
Current limitations:
- This is just a proof of concept to demonstrate what can be done within the Zynthian GUI / controls. It is currently written entirely in Python and is not performant. (Some x-runs and missed notes.) I may (probably will) need to write the sequencer part in a lower level language, e.g. C.
- Only the pattern editor is currently implemented. Song editor needs to be added.
- Note length is fixed to one step period. The plan is to allow variable duration notes by pressing the top left button to start the note and top right to end it.
- Auto routing not yet implemented. I hard coded the output to the Zynthian MIDI input and the clock input to a specific USB MIDI device.
- No internal clock source. Need to add the option to run from an internal or external clock source.
- Does not respond to MIDI note input, i.e. cannot add notes from external keyboard.
-
Cannot add or delete patterns. The code is there to save and load from file but not to create or delete patterns.Fixed in commits 0639d98…80fe30c
I quite like it. I have been considering this for a while but we kept looking at options then not implementing them so I decided to have a bash - how hard could it be? Let me know what you think.
