MIDI CC channels

Started by nobuyuki, August 20, 2010, 08:53:12

Previous topic - Next topic



this idea comes out of learning how to use MIDI macros and Parameter Control channels as it currently exist in MPT.  Basically, controlling a VST that doesn't expose much of its functionality through parameters (but exposes it instead through MIDI CC) is a pain in the butt to control using MPT.  Specifically, a few Japanese VST's do this a lot, especially the "virtual rackmount" types, like Yamaha's S-YXG50 and to a lesser extent, sam's VOPM control.  

The idea I'm proposing is to create a function analogous to the existing PC/PCs channel idea, but to control MIDI controller messages and parameters.  Essentially, what I would like to see is MIDI CCs become first class citizens in MPT;  Automation and MIDI learn stuff is one thing, and while I did hear that some new controller functionality has been exposed in MPT recently (though I haven't quite yet figured out how to make it work very well;  MPT picks up the jog wheel on my keyboard but not the pitchbend wheel), being able to control parameters via MPT still leaves a little bit to be desired, especially when you want to send multiple CC parameters simultaneously.

Some more background to this idea:  What prompted it grew out of a small frustration attempting to send the VST "VOPM" into Monophonic mode while simultaneously setting the PortamentoTime parameter, both of which needed to be set via MIDI CC.  Unfortunately, this requires at least 4 rows to initialize, and at least 1 note trigger on the instrument level due to how Zxx and /xx MIDI macros currently work.  It was not enough that these effects commands were on different channels, they all had to be on the same channel, which sorta destroyed any possibility of "stacking" the midi messages all on the first row.  

It really does show a bit of the "ugly hack" nature of CC bindings to Zxx macros, and the problem would be even worse if I were to say use it to control more parameters simultaneously, such as on modeled instruments (Yamaha VL1) which take parameters from the breath or expression controller CC, and etc.  Simultaneous output would be impossible due to the need to "bank switch" macros using SFx.  VST Parameters don't have this problem, thanks to the new Parameter Control channel feature.  Here is what initializing VOPM currently looks like:

--- 01 v00 SF1  (switch to macro bank 1, MIDI CC #126, MonoMode, for instrument 1)
--- -- --- Z00 (send parameter 0 for MIDI CC #126 to enable MonoMode)
--- -- --- SF2 (switch to macro bank 2, MIDI CC #5, PortamentoTime)
--- -- --- Z10 (Set PortamentoTime to 16)

^  you need all this before the instrument can be used in the song!  Clearly, if these needed to be adjusted on the fly, one would need at least 2 rows and a note retriggering (to set the instrument focus) just to set one measly MIDI CC parameter.  For multiple parameters, this quickly becomes unacceptable.  Not a problem if the VST exposes Parameter Control functionality to either MPT or the gui, but again many (especially Yamaha, it would seem...) do not.

Here is an example how I envision a MIDI CC channel would work (apologies if there is duplicated or missing control functionality, I'm kinda tired here):

CC# 01 ~~~ ???

where CC is the "note" column, # is a number 0-F representing the MIDI channel (carries over if not specified), 01 representing the VST or instrument slot it should effect (whichever one of these maps more consistently internally), ~~~ representing the MIDI CC  (for example, 010 for Pan Position), and ??? representing the parameter.

This would also expose MIDI CC's in a "tracker-like" way, that doesn't require some sorts of automation not exposed directly through the patterns, I would think, and multiple channels could be created independently of instrument data, decoupling these macros from the channel the instrument is playing on.... No more "bank switching" with SFx, and no more juggling simultaneous parameters.

Oh, I wonder if very many people would use this.... (I don't even know how often PC channels are used, if at all  :?: )  

ah well =w=

Edit:  jojo informed me that SFx works on a per-mod-channel basis, meaning that what I said about not being able to control MIDI CC parameters simultaneously is not true.  By binding mod channels to a VST (using a channel's FX dropdown in the general tab), a bank can be specified and parameter sent in as little as 2 rows.  The controller only needs to be initialized once if you stick to only 1 CC per mod channel and don't 'bankswitch'.  This doesn't seem to be well-documented behavior, but it does work!  And I suppose that would negate out some of the usefulness of a dedicated CC channel, save for being able to target an individual MIDI channel inside a VST, or to be able to specify parameters for more than 16 CC's, but some people might find that a little overkill...


I would.  I currently am working on tracks using VSTi's that require CCs... and to adjust these CCs on the fly more easilly (to figure out just what exactly I'd want them to do; AND/OR actually record the macro data into a channel for example) I even purchased an Akai LPD8 controller (much easier now considering my main midi controller has one slider, pitchbend and mod wheel ONLY.. heh!).  But I too would love a CC#-style control as requested.  Even with 'stacking' channels to send multiple codes at the same time helping currently, it takes up space and/or makes channel management more disasterous during composition.
'slightly disturbed and wonderfully content'
*Master of the Obvious*

Saga Musix

I've revived my unfinished CC note code, and while it seems to work in general, there are some things that won't work - most notably the command format, which will probably look somewhat ugly.

Currently it looks like this : CC 01 100 07F, where 01 is the plugin number, 100 is the CC number and 07F is the MIDI channel (0) + CC value (7F).
Putting the MIDI channel next to the CC won't work because you may already use the numeric keys for entering notes (e.g. in FT2/IT layout), so how should the channel actually be entered into the pattern? Since the command + parameter column is already divided into two columns, it's somewhat easy to enter the channel and value data there.
Also, CC notes would be stateless just like PC notes, i.e. there's no memory if the instrument number is left blank.
» No support, bug reports, feature requests via private messages - they will not be answered. Use the forums and the issue tracker so that everyone can benefit from your post.

Saga Musix

I gave this another thought and came up with an alternative command layout: Rather than specifying the plugin and MIDI channel every time, replace the plugin number by an instrument number and use the plugin + MIDI channel associated with that instrument. This way, we could also use decimal notation for both command and parameter, which is more consistent with PC events.
* Less crammed
* MIDI channel is probably not used by most people, except when using multitimbral plugins
* Syntax looks similar to PC events but has in fact inconsistent semantics
* Using instruments with "mapped" MIDI channels becomes more difficult - when wanting to place a CC on the same row as a note of the same channel, the CC must be placed on a multiple of 16 plus the intended MIDI channel.
» No support, bug reports, feature requests via private messages - they will not be answered. Use the forums and the issue tracker so that everyone can benefit from your post.