christofmuc / KnobKraft-orm

The KnobKraft Orm - The free modern cross-platform MIDI Sysex Librarian
GNU Affero General Public License v3.0
200 stars 25 forks source link

Allow the Adaptations to implement parameter value extraction #199

Open christofmuc opened 1 year ago

christofmuc commented 1 year ago

Much of the work is done. The image below is from my database. On the left-hand side you can see the raw Ensoniq program data as it is encoded in bytes (Program Data) and the actual nybbles within this that contain parameter information (ShortData). Bits-to-integer extraction produces the >100 integer parameters on the right-hand side. Could you feasibly accommodate this many parameters in the user interface?

The remaining work for me would be compiling lookup lists to further translate all the WAVE and MOD integer parameters to their recognised names (SAW, PIANO1, NOISE3, etc, and WHEEL, LFO1, OSC2, etc). Some parameters should also probably be flagged as needing to be translated from 0 and 1 to 'off' and 'on'. Finally, there are some oddities such as 'if parameter 2R = 1, then parameter T4 = T4 + "R". I don't mind doing this, but such lists, flags and arbitrary rules would have to be handled in your code. Or, I guess, we just settle for integer parameters instead.

Maybe this is something to think about after you have bank management working nicely?

EnsoniqProgData

Originally posted by @Mostelin in https://github.com/christofmuc/KnobKraft-orm/issues/170#issuecomment-1222728788

christofmuc commented 1 year ago

The C++ synths can already provide parameter value extraction, it is a mere matter of exposing this interface to the Python adaptation. E.g. the Rev2 and the DW-8000 C++ implementations already offer these featurs.

christofmuc commented 1 year ago

A good first start now would be the MKS-70, as we have already implemented all parameters because it needs them to convert between different buffer types.

christofmuc commented 1 year ago

This should come with #254, because then the adaptations will be able to do everything the C++ code can do!