Creating A Menu System


#1

I've been trying to make good use of my Axoloti and turn it into a really powerful instrument. I have the Axoctrl from Hohum Labs, so I have an OLED screen with some buttons & knobs & LEDs.

I wanted to know how someone would make a menu system in Axoloti. Something similar but not as complex as the Mininova or Volca FM or Uno Synth, where different pages or a shift function can show you more parameters to control.


Hyper perc --- for Hohum Labs Axoctrl
#2

Was just testing an OLED tonight to do something similar. The patch below uses two buttons. One to navigate to the next page, the second one to navigate between the values of each page. I'll probably end up creating some custom objects for my specific use case, but this one works with factory & community objects for now.

And the patch.
oled_menu.axp (8.4 KB)


#3

A couple of years ago I embarked on a project to run Axoloti on the Audiothiniges P6, complete with a configurable menu system which used the 24x2 character LCD, 6 rotary encoders, and 9 pushbottons on the P6. The idea was to provide an infrastructure to make it easy to a) create a menu system where one could navigate using the buttons, and b) configure which Axoloti parameters were to be mapped to encoders in the various menus.

I got quite far, so that it works and I've used it for my own projects, but it still leaves a lot to be desired so I've never uploaded more than some of the constituent objects (https://sebiik.github.io/community.axoloti.com.backup/t/ricard-contributions/4311). It was a while ago so probably would need some work to be compatible with the current Axoloti framework.

(I checked the Axoloti archives to see how much of this I've published in any way, but I think it's only been my original P6 thread (https://sebiik.github.io/community.axoloti.com.backup/t/running-axoloti-on-an-audiothingies-p6/1443), which just highlights the LCD driver but not the menu system).

The trickiest part I seem to remember was actually interfacing with the Axoloti parameter system. Basically, I wanted to be able to map any runtime adjustable parameter in any Axoloti object to a knob in a menu, i.e. not just provide a bunch of control signals which needed to be individually patched to the appropriate object inputs.


#4

Cool Idea!
Here I made a simple patch controlling every parameter of two oscilators only with three dials. I think you can make a powerful synth with this approach.
OLEDmenusynth.axp (17.0 KB)


Multiple pages of parameters for Axoctrl
#5

Going further on this idea; controlling 8 parameters with 1 pot and 1 switch. The pots selects the parameter and pressing the button allows you to change it.


SPI/I2C OLED display
#6

I have create a dedicated menu system for Axoctrl some time ago:


#7

there is this preset-manager module that contains codes to get values directly from and to parameters. I once used it to build a preset-morphing module in which you could "get" the current state of all the knobs and save it to a preset (then repeat this for several presets), then use buttons to morph to a certain preset from the current position of the parameters as long as the button is pressed. I think in that original preset manager code there was also a way to identify the parameters, their range (int/bool/frac), the module they belong to and get their names. So if used correctly, this should allow you to scroll through all the parameters of your synth and change the selected knob.. though I haven't been able to get that far yet.


#8

just gave it a short try with the preset manager and I'm at least able to get the names and values of the parameters to be printed to the log.

update

able to select a parameter, show name, current value, maximum&minimum value in log and adjust it from a central "mod"control.
One problem though, atm I still cannot identify which type of control it is. It works well with fractioned controls, scaling the central "mod" control to the right unipolar/bipolar range, but buttons, toggles, bin32 and int selectors all show up as the same max/min range (16bit), thus still cannot be properly editted.

@johannes @thetechnobear
Is there a way to get the min&max values from buttons, bin16/bin32 and selectors and to identify them?


#9

I got it kinda working. It detects whether the max of a parameter is 134217728 (in which case it's a dial or slidebar) and otherwise sets itself to a bit-wise updating.

When a dial gets selected, it updates the value of the "mod" control, so you see it's current value.
Then you can use the "mod" control to change the value of the selected dial directly.

When a "not-a-dial" gets selected (anything that doesn't have a max value of 134217728), the operation of the "mod" control changes. Now, the "mod" control sets which bit is being read from the current selected parameter (bin16 / bin32 / toggle / momentary) and when changing the bit-readout it updates the "set" control to the currently read bit value (off/on). Then you can use the "set" control to change the currently selected bit value and move to the next bit using the "mod" control.
Note though, that while momentary and toggle buttons only show 1 bit, these are actually 32bit.. so you can actually place a high-bit on the (for example) 4th bit, setting it to 16... Not sure if I can figure out a way to prevent that..

for the case of the selector-type controls.. can't fix these yet..

ps. this patch is a "proof of concept" that could be build upon.

central controller.axp (6.9 KB)