Parameter page folders - a simple feature that would make editing processors a lot friendlier

Pretty much what the title says. Being able to organize processor parameters with some kind of simple folder system would make navigating through the parameters of the more complex processors much faster and more performance friendly. For example, Drum Synth (every voice has many pages of parameters, a lot of them are identical), Helm (the filter alone has 3 or 4 pages) and Dexed (multiple pages of parameters for every operator, 6 identical operators) really benefit.Seriously, Drum Synth has I think 452 pages of parameters - even if they were all named in the most intuitive, descriptive way that’s just too much to scroll through live so it becomes a preset player instead of the deep percussion synthesizer it actually is, and it’s not the only processor that has this problem.

Instead of the static, flat list of parameter pages we have now, users could create and name “folders” in the list, add parameters or subfolders to them, and expand/collapse them. Similar to how signal flow between processors in a chain is already displayed as a tree.

So for example, Dexed’s operator parameters look more or less like this now:

Op1 EG Rate
Op1 EG Level
Op1 Dynamics
Op1 Pitch
Op1 KBL Scaling 1
Op1 KBL Scaling 2
Op2 EG Rate
Op2 EG Level
…
Op6 KBL Scaling 2

To get to the first page of Op6 parameters you have to scroll past 30 pages of parameters for op1-op5. If you’re in the middle of a performance, scrolling through all of those pages doesn’t just take time, it also (more importantly) takes more of your focus away from your playing.

With parameters organized in folders, we could have

Op1+
Op2+
Op3+
Op4+
Op5+
Op6-
├─EG+
├─Dynamics
├─Pitch
├─KBL Scaling-
├─KBL Scaling 1
├─KBL Scaling 2

In this case, to reach the first page of Op6 parameters would require scrolling past 5 folders instead of 30 pages, and clicking once to expand the Op6 folder. This would be much better in a performance environment and would also make sound design on the Zynthian native UI faster and more intuitive, without breaking any backward compatibility or anything.

User creation/naming/population of the folders would eventually be part of the native UI ideally, but in the beginning it could be as simple as a JSON-or-whatever file, i.e. for the Dexed example above the folder structure for one operator could be created as a plain text file stored in the same location as the processor’s presets, along the lines of

Op1 {
EG {
Op1 EG Rate
Op1 EG Level
}
Op1 Dynamics
Op1 Pitch
KBL Scaling {
Op1 KBL Scaling 1
Op1 KBL Scaling 2
}
}

If no file was present for a processor, it would default to the flat list we already have.

Native UI tools for creating this could be added later, i.e. an “add folder” function at the top of the parameter list, select an existing folder and bold-click to move, rename or delete the folder like the way the processor tree in a chain already works, and give parameter pages in the list a bold-click menu option to move them to a specific folder by name.

Even the most basic implementation of folders that required users to manually create JSON files and didn’t include any by default, would pretty much completely solve the “too many parameters” problem. It would be completely processor agnostic so once it was implemented it should just work with any new processors that were added. At worst, if the default names of parameter pages got changed in an update, those names might have to be updated manually in the corresponding folders JSON file (which the user could do themselves easily). Once the basic mechanics were implemented it should be completely hands-off from a development standpoint.

Apologies if something like this is already in discussion or development - I searched and didn’t find anything.

3 Likes

Absolutely. The concept has grown in the telling, from fluid synth, where four pages actually provided great flexibility and demonstrated the success of the approach. Now we are at the next stage of the problem how do we deal with too many?
It’s a problem many websites run up against with list selection boxes where a simple list of options grows to enormous proportions. Start with a choice of 20 or so, you get flexibility. Start with 2,000 and you don’t get any use.

Quite when you start to categorise and how you do it becomes a major issue, and if we are to grant the flexibility of zynthian parameter mapping to jack implementations we need to take a couple of things into account.

Firstly. Are there any technical limitations?
If we are presented with a big list, does it behave quickly and robustly, Do paging mechanisms work smoothly and efficiently? Can you get to first and last pages quickly? Is there any indication of how far into the structure you are?
We are just considering a totally flat set at this point, so we could also benefit from some ordering. Perhaps listing parameters by Alphanumeric Asc/Desc would allow you to get to all the attack settings quickly? If we count access’s on a particular control could we provide an ordering based on this ? Most popular parameter displayed first?
How might we present ordering in our interface and how would we overload our CUIA structure to control such an environment?

So we possibly haven’t exhausted some mechanisms that could aid the process, but inevitably we have to consider some depth of structure as well as width.

If we are to introdce a categorising structure there are a couple of decisions we need to make at the start that we stick to.
1/ Can category’s/pages/layers/blocks/whatever’s have examples of themselves within themselves?

2/ Who is going to allocate parameters to whaever’s ?

First one is a simple consensus. There are pluses and minuses of both, if you think unraveling a horizontal graph is complicated try adding in depth to see what true complications well meaning management can come up with in a desperate attempt to keep all options open.

You can go for the github semi conversational query approach, but no one will use it. In truth it’s primarily an exercise in sub-ordering and filtering of lists which is useful as a drilling down concept but isn’t anything the users should see.

So we need to consider what interface we are to provide to move around the structure we define.

Then their is problem 2. Who is going to populate this and how is the information to be propagated round the community. @riban and I will insist on having different whatever’s on every engine, simply on a matter of principle. So how is that to be handled? Without a community exchange mechanism the weight will lie heavy on someones shoulders unless, of course, I am allowed to sentence someone to complete so many lv2 plugins along with their rook soup . . .

Some element of structure already exists in the capture library, so consistency of approach is something to strive for.

1 Like

We have discussed having “user favourites” grouping of parameters. Would this be a sufficient solution, allowing users to add pages with the parameters they access most often from any processors? This allows freedom to mix and match parameters from different processors if required and leaves the existing flat list of parameter pages untouched.

1 Like

While I was writing my original post, two other things I thought of but left out because they’re more second or third-order features that could be built off of what I was describing (that would also be potentially a lot more complicated to implement).

EDIT: point 1 is basically the same as the favorites system you posted while I was writing my post.

  1. Custom parameter pages. The best way to organize this would emerge through use, but the general idea would be some kind of “favorites” folder (with subfolders) that could be filled with user-created pages that duplicated any arbitrary parameters from the main parameter set. For example a custom page for Helm that had feedback tune, feedback amount, filter cutoff and master volume would be really handy when playing live, or putting the tuning of all three oscillators and the filter cutoff onto a single page for a 3 oscillator synth.

  2. When a folder (rather than a parameter page) is selected, the encoders control the corresponding parameters for ALL pages under that folder at the same time. Ideally, every parameter would have the option to be excluded from this, as well as min/max values and the option for absolute/relative (if not for every parameter individually, then at least .

Combine both of these and you have a quick, flexible system for creating custom macros (using the custom pages described in 1) or just edit redundant features. For example, you could put the EG Rate pages for all 6 Dexed operators into a folder, set all of the parameters on them to respond in relative mode, select that folder, and adjust the envelope rates for all 6 operators from a single page of four knobs while maintaining every envelope’s shape (because you set them to relative mode, so you’re scaling them relative to their initial values). All without having to deal with any MIDI processors or routing, and maintaining any MIDI learn assignments you already made.

Having a folder system would be one way to lay the groundwork for something like that, and also a powerful tool for organizing parameters even if it was never taken any farther.

A favorite parameters system would definitely be very nice to have and could integrate into the folder system I’m thinking of (see my previous post for more about that) but it wouldn’t be addressing quite what I’m talking about. I’m more thinking of how to speed up deep editing/sound design by making the organization of ALL the parameters easier to navigate, customize and keep logically organized.

Being able to truly program sounds from scratch as part of a live performance using only the four standard encoders would become practical for the more parameter-heavy synth engines like Helm and Dexed.

Favorites would be great for making collections of performance controls like filter cutoff but they wouldn’t make designing full patches any easier. Two related but different situations.

1 Like