Preset/Snapshot Quick Dial

I’m currently in the process of building my first proper zynthian box (previously had it in a cardboard box):

The arcade buttons are wired to an MCP23017 and work like regular zynthian buttons at the moment. I also have some WS2812B LEDs behind them (2 per button).

I plan to use Zynthian in a portable, battery powered live looping setup. Using the RC-505, somewhat similar to Marc Rebillet.

An important part of that plan is the ability to quickly switch between sounds without much thinking going on. My idea is to have a ‘Quick Dial’ mode on the 4 buttons, supported by the LEDs:

Category page:
Drums (Blue) | Bass (Red) | Keys (Green) | Misc (Yellow)

Drum style page: (Different shades of blue perhaps)
House | Techno | DnB | Hip Hop

House page:
Drumkit #1 | Drumkit #2 | Drumkit #3 | Drumkit #4

and so on for the other categories & styles…

This would allow me to quickly get to any sound I need for making many kinds of music.

I am able to control the WS2812B leds with python via the rpi_ws281x library.
But I’m not sure how to go about interacting with zynthian itself…
What would be the best way to switch to a certain synth engine/preset/snapshot programmatically?

I was also thinking of implementing some info on the screen, for example the current Quick dial page or option names, pretty much where the touch buttons appear.

I know my way around python, but I’d love to get some hints on where to look and dive into the zynthian project (if that’s even necessary).

1 Like

Hi @Kosro

Your Zynthian looks funky with its glowing arcade buttons. Super cool!

It is already possible to configure the buttons to select a preset, e.g within webconf, navigate to HARDWARE->Wiring and configure “Extra Switch Action” to “MIDI Program Change”. Combine this with ZS3 to allow quick recall of a configured / customised preset.

But you describe something different which I haven’t fully followed. Is it some kind of list of sounds you want or to recall a set of presets to various engines? The former may be related to the Favourites concept whereby you can mark presets to appear in a Favs bank for each engine. Configuring a button to send “UI Action Release”, PRESET_FAVS will result in the favourite list being shown for the currently selected layer (chain). I can see this could be improved (via a feature request) to allow the layer (chain) to be defined as a parameter so that a specific chain’s preset list could be shown. This feels close to what I interpret your aim.

Regarding feedback to the LEDs - our very own intrepid reporter @wyleu has been perusing a gorilla tactic on this front but I believe with limited results - probably because he left the task to me with only a vague description of aspiration and a pile of random parts (which may not have moved from the stack he deposited them on :blush:). Zynthian has the concept of feedback for MIDI CC and the bleeding edge development branch does provide some control of LEDs for some events but it isn’t yet in the public domain as a fully formed feature. I would suggest popping a feature request into github describing what you might want such colourful indications to represent so that it can be considered in the ongoing core development.

You may find it challenging to delve into the current codebase (unless your mind happens to align with the wonderful @jofemodo’s - mine tends to wander tangentially, only occasionally crossing into the same phase like some astronomical (or maybe astrological) pattern. But we are currently working to rationalise this (the codebase, not our mind phases) to provide a logical structure with (full) API. This will allow such follies as you describe to be bolted on without the need to dig into the core code.

But if this does not deter you and you are willing to spend time that may ultimately be superseded by (fairly imminent) changes then you should know that the core Python script is zynthian_gui.py which, despite its name, actually binds all the elements of Zynthian together, managing GUI, layers, engines, etc. each using classes to encapsulate functionality.

Good luck and don’t forget to tie a safety line to a good, known point before delving into the caves of Zynthian’s underworld!

2 Likes

Hey @riban, thanks so much for the in-depth reply!

I’ll see if I can create a little animation or something that showcases the concept a little better.

The general idea is to manually categorize a bunch of hand-picked presets (from different synth engines) into categories and styles and use that can be recalled quickly with the four buttons. Instead of having one preset per button, the buttons are used to select a category and style first, allowing for many more presets while keeping things simple and quick.

I’ve looked at zynthian_gui.py and found it pretty ok to follow along (although a bit cluttered :smiley: )… there’s some ws281x stuff in there already, but it seems to serve a different purpose.
I don’t think it will be too hard to add the functionality I desire and I’m fine with redoing it soon…
I’m really excited for the next big update actually!

The zynthian case is still WIP but I’ll post to Success Cases once I consider it somewhat done… Planning on releasing the design files and adding a battery later.

Hopefully this beautiful demonstration elaborates on my intentions…

1 Like

Ah! So you want sequential logic, drilling down a tree with the buttons changing options on each layer of the tree. I guess this would be constrained but the quantity of buttons, e.g.

4 first options x 4 second options x 4 third options…

This would require a global favourites list organised in a multi-layered tree structure.

1 Like

Exactly!
I’ll try to implement it in the next couple of days…

I’m interested myself to see how well this would perform in a live environment…