How do you edit MIDI controllers (the smart way)?

Hey all,

I recently had to clean up a pretty expressive MIDI part that has been recorded live. It contained a lot of modulation, pitchbend, aftertouch events.

Here is what I planned to do (referring to workflows I am used to e.g. from animation software)…I wanted to “thin out” the controller data by “resampling” or averaging (or any other suitable method to reduce jittery or surplus events). Ideally, I would be able to use some option to turn the controller lane into some kind of bezier based approach. I didn’t find an elegant solution.

  • Thinning out controller data (my most obvious choice) did not produce convincing or predictable results. I did not find any options to “tweak” the resolution or reductions, so this would not help me.
  • Converting to note expression would not help me to edit or clean up the data more easily, because the note expression editor does not offer tools better than those in the key editor
  • Extracting MIDI controller to automation data would maybe help for the modulation CC, but as the manual states: “This only works for continuous controllers. Data such as aftertouch, pitchbend, or SysEx cannot be converted to MIDI track automation data.”
  • So I tried to convert the aftertouch and pitchbend data to controllers with the logical editor, which didn’t work (I was hoping that I could remap the aftertouch data so that I can drive it from a CC automation lane.

I feel like the key editor offers a bunch of nice features to edit some aspects of a controller (like some basic quantisation and snapping options)…and the automation offers “the rest” of useful features like data reduction and modern curve editing.

But hey…aren’t controller and automation editing two pretty similar (albeit not identical) tasks? I don’t get it why there are two (including note expression: three) implementations of the basically same thing: turning values up and down.

What am I missing? Is this really the plain and brutal reality of editing controllers in Cubase 2024 or am I just too stupid to figure it out?

Any input highly appreciated!

Hi,

You can switch the Controller lane from the Step Mode to the Ramp Mode to get the curves.

The difference of the automation and the MIDI CC editing is, that with the automation, you define just the start and end node. With the MIDI CC, you define every single value. For some use cases, the curve (automation) approach is better (for example Modulation). For other use cases, the Step approach is better (for example Sustain Pedal; Bank Select…). Luckily, you can choose the Ramp or Step Mode (or even the automation) per the Controller lane.

Try to do it with Logical Editor but in three steps:

  1. Convert Aftertouch to Controller

  2. Set the value 2 to be the same as the controller number

  3. Conform the controller to be the same controller number (in this example CC#50)

At the end you can save those three steps as presets and create a macro, so it becomes a one-click action.

Hi Martin,

thanks for the reply. I forgot to mention that I am aware of the curve mode in the controller lane,

Still 'd like to point out that particularly the rebuilding and cleaning up complex recordings (in terms of replacing the “single value” data load in the current key editor) would highly benefit from some resampling / rebuilding / quantization tools.

Currently, a simple aftertouch action in terms of fading the pressure in and out will have me selecting three points along the action (start, maximum, end). Then I have to delete the selected point so that I can recreate the action with a curce - without the visual reference I just had to delete.

My request might sound unusual, but I know that there are so many possible improvements. I have worked in the vfx industry and I know how life can be made easiert when it comes do “hardcore curve editing”. Just take these two example implementation from 3d software packages:

https://help.autodesk.com/view/MAYAUL/2022/ENU/?guid=GUID-6D38EAEA-6032-471E-BD0E-54A74D4443C0

https://docs.blender.org/manual/en/latest/editors/graph_editor/introduction.html

Just imagine if you had this toolset for simultaneously editing all automation and controller curves (perhaps even pitch and velocity) in a single context. This would really step up the game.

Hi Johnny,

many thanks for the explanation! I will take the chance and try to understand how and why this would work. I couldn’t imagine that I can transform the aftertouch data in TWO steps because I thought I would lose the particular aftertouch value when doing so.

I assume that it is a reversible action, so that I can also perform the action from controller 50 back to aftertouch data?

(Or can I use one of the MIDI plugins or some kind of input transformer to remap controller to aftertouch even dynamically? Then I could keep the meta aftertouch controller in the automation for future editing, that would be huge!)

Hi,

What do you mean by “dynamic” here? You can use MIDI Insert Transform, which doesn’t change the source data. This princesses the data in real time. Is this what you mean?

Hi,

You can Quantize MIDI CCs (or After Touch, Pitch Bend…) the very same way, as you can quantize MIDI Notes.

Exactly. How would you set up the insert transform so that it alters a given controller to aftertouch data?

Does the quantization allow to reduce controller data by shifting it to grid positions independently from notes? So that I only affect controller data?

While Cubase is a good MIDI tool, for this kind of application I would use a third party software. On the PC you can download e.g. MIDI-OX.
Transforming CC#50 to Aftertouch would look like this:
grafik
The Cubase Input Transformer is missing the option “Use input value 2 (Pull)”, which is the decisive one here.

For this to work on the same computer as Cubase you’d need to also install a virtual midi port software like loopMIDI.

Hi,

This has been fixed and it’s available in the latest update.

Nice, I will add it to my list “reasons to update from 12 to 13”.

Does your setting actually work? I looked in the 13 manual and in suggests that the line Main Value | Use Subtype should be the other way round:
Subtype | Use Main Value
Well, I guess it is a matter of perspective which way it has to be done.