jtackaberry / reaticulate

An articulation management system for REAPER
Other
99 stars 46 forks source link

Support for per-bank CCs in the GUI #41

Open jtackaberry opened 6 years ago

jtackaberry commented 6 years ago

To be considered: would it be a good idea to have configuration in the bank to indicate CCs that should have sliders presented in the bank UI?

I imagine collapsable sections of CCs (as defined in the bank):

v Performance
     Dynamics: [------x-------]
      Vibrato: [------x-------]
      Release: [----------x---]
    Tightness: [--x-----------]

v Microphones
   C: [------x-------]
   T: [-------------x]
   A: [x-------------]
   O: [x-------------]

Should the CC sections be fixed position in the UI such that the articulation list scrolls underneath them? Also, if this is a bank level configurable then there would need to be some way of consolidating/deduplicating the same CCs from multiple banks. Unless Reaticulate introduces a new class of object altogether that sits apart from the bank.

What about a ReaControlMIDI workflow? This couldn't be defined at the bank level, so it would have to be a property of the track. The user instantiates the bank on the track, and then assigns an envelope to one of the sliders via the GUI. When this happens, instead of emitting MIDI CCs, adjusting the sliders would instead insert envelope points on the associated envelope.

Then the UI could present some means of toggling visibility of the associated envelope. Like:

v Performance
 o   Dynamics: [------x-------]
 o    Vibrato: [------x-------]
 o    Release: [----------x---]
 o  Tightness: [--x-----------]

Where the o is a clickable icon that's lit when the envelope is visible and faded/translucent when it's not, and clicking will toggle envelope visibility. If hidden, adjusting the slider could show the envelope while the slider is being moved, and then automatically hide the envelope again once released, to allow for quick adjustments.

As long as ReaControlMIDI is inserted before Reaticulate JSFX on the track, then the mechanism that syncs current CC values back to the GUI would be the same whether or not envelopes are used.

The main implementation challenge is that the per-track configuration of which envelope is associated to which slider requires more per-track state than can is currently supported. This would first require a redesign of the way userdata is stored within the Reaticulate JSFX.

Consequently an initial implementation could just be CCs, with ReaControlMIDI envelope support being added later once the redesign of track userdata occurs.

jtackaberry commented 5 years ago

This would first require a redesign of the way userdata is stored within the Reaticulate JSFX.

Depends on #62