This script can be used to channelize midi events based on Articulation ID. In addition, CC, PitchBend, ProgramChange and AfterTouch events can be forwarded from the source channel(s) to the corresponding channels where notes are being channelized. It does this in an intelligent way whereby CC, PB, PC and AT events are only forwarded when there are actual sustaining notes on those channels. This can drastically reduce midi traffic compared to some other approaches. This script is also AU3 multi-port aware and can handle channelizing of multiple source channels independently of each other through the same script as well as channelizing across ports for up to 768 total destination channels on up to 48 ports. This is extremely helpful when working with VEP7, for example.
Note - LogicPro is currently limited to 127 midi tracks per multi-timbral instrument. So there can only be up to 127 unique source midi tracks, but the actual midi port and channel for each one of those can be any port/channel within the 768 channels embodied by 48 ports. Do not exceed 127 source channels, as LogicPro will throw a fit when you try and destroy your project.
If you're using VePro7, this script works REALLY WELL in combination with the following VePro AU3 template: viewtopic.php?f=9&t=143416
Installation
In order to install the script, unzip the following PST file and save it to ~/Music/Audio Music Apps/Plug-In Settings/Scripter/. The script will then appear in Scripter's preset list under the name of Channelizer.
Behavior
Channelizer will detect channels that have articulationID assigned to events. Those channels will be regarded as source channels. Source channels will be re-channelized according to their articulationID. The destination midi port/channel will be calculated relative to the source channel. For example, if the source channel=1 and an event with articulationID=5 comes through, it will be channelized to channel 5. If another event on source channel 2 had articulationID=5, that event would be re-channelized to channel 6. Just one simple example. This makes it possible to create LogicPro Articulation Sets that all are numbered starting at id=1 and reuse on different tracks. Up to 768 destination channels are supported across 48 ports. The script can accept articulationID's up to 254 and will automatically calculate the correct port/channel incrementally for 254 midi channels, automatically spreading across ports as needed if there are more than 16 articulations.
In addition, CC, PitchBend, ProgramChange and AfterTouch messages will also be forwarded to channels receiving articulated events, as long as there are any sustaining notes on the dest channels. It is up to the user to configure their LogicPro ArticulationSet so that the range of re-channelizing for each source channel will not overlap or conflict with other source channels. The script does provide some debug logging and protection to help detect and avoid this (see below).
GUI
- Lowest Channelizer Port - This menu specifies the lowest port that will be automatically channelized by articulationID. All midi channels lower then this setting will be passed through the script untouched. This provides a way to mix channelizing tracks with non-channelizing-keyswitched tracks. Assign lower midi port/channels to the non-channelized tracks and configure this setting above that.
NOTE - you should NOT intermingle channelizing channels with non-channelizing-keyswitched channels. In order for the script to work correctly put all the non-channelizing channels on lower midi channels and set this menu item for a higher channel to handle all channelizing channels. - Channel Range Conflict - This menu determines how to handle channel range conflicts if and when they occur. Channel range conflicts occur when one source channel sends an event with articulationID is that large enough to re-channelize the notes into the range of another source channel that has been detected. This is generally not desirable. The default behavior is to MUTE the offending notes when encountered, but it can also be configured to send them to the original source channel or to allow them thru.
- Forward CC - Enable/Disable forwarding of CC events from each source channel to the destination channels where re-channelized notes are being sent.
- Forward PitchBend - Enable/Disable forwarding of PitchBend events from each source channel to the destination channels where re-channelized notes are being sent.
- Forward ChannelPressure - Enable/Disable forwarding of AfterTouch events from each source channel to the destination channels where re-channelized notes are being sent.
- Forward ProgramChange - Enable/Disable forwarding of ProgramChange events from each source channel to the destination channels where re-channelized notes are being sent.
- Continuation - This slider adjusts how much time (in beats) to continue forwarding CC, PitchBend, ProgramChange and AfterTouch events to the destination channels after notes are no longer sustaining. This ensures that these messages will continue to effect the destination channels while instruments complete their release phases. This value is adjustable from 0-10 beats.
- Reset - The reset button will reset the various event chasing counters that are keeping track of source channels and accumulated CC values on each channel. It should not generally be necessary to use this button, but its there in case you need it. Every time you hit PLAY on the transport this reset occurs automatically.
LogicPro Articulation Sets
The best way to use this is to create an Articulation Set for each channelized track in LogicPro. The Articulation Set must NOT have anything assigned in the OUTPUT section. This is necessary in order to pass articulationID out to the script. Do not channelize anything in the Articulation Set and do not assign any key switches.
Create up to 254 articulations in each Articulation Set. Number them as you wish between 1-254. Name them as you wish and configure the input switch section as you wish. Here is a simple example:
Troubleshooting
It is possible to create Articulation Sets with many articulationID's and sometimes could have a situation where one source channels is re-channelizing events high enough to overlap into another source channel's range, and this can be problematic. This script produces WARNING and ERROR messages in the bottom of the Script Editor window when such conflicts occur during playback. It's a good idea to play your project with the Script Editor open at some point to make sure there are no channelizing conflicts happening:
Please post all questions and suggestions about the script here on this forum thread.