A technical support community for Apple Logic Pro users.

 
User avatar
Dewdman42
Topic Author
Posts: 2490
Joined: Tue Sep 09, 2014 3:01 pm
Location: Park City, UT

SCRIPT: Articulation Channelizer

Thu Jul 18, 2019 8:06 pm

Channelizer Script

Channelizer3_2h.pst.zip
(10.18 KiB) Downloaded 7 times


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.jpg
channelizer.jpg (76.73 KiB) Viewed 6244 times



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

3.2g-gui.jpg
3.2g-gui.jpg (92.21 KiB) Viewed 2250 times


  • 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:

artset.jpg
artset.jpg (91.21 KiB) Viewed 6764 times

artsetoutput.jpg
artsetoutput.jpg (104.32 KiB) Viewed 6764 times


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:

warnings.jpg
warnings.jpg (144.44 KiB) Viewed 6764 times


Please post all questions and suggestions about the script here on this forum thread.
Last edited by Dewdman42 on Sat Jul 11, 2020 3:48 pm, edited 16 times in total.
5,1 MacPro 3.46ghz x 12 128gb ram, OSX 10.14, Logic Pro 10.4.8, Mainstage3, Cubase10, StudioOne, Reaper, DP9, VEP, VSL, too many plugins to list
 
User avatar
Dewdman42
Topic Author
Posts: 2490
Joined: Tue Sep 09, 2014 3:01 pm
Location: Park City, UT

Re: Channelizer Script

Tue Jul 30, 2019 9:37 pm

Update, Channelizer 2.061 (new Script name)

Includes automatic operation, ability to handle multi-timbral and more.
5,1 MacPro 3.46ghz x 12 128gb ram, OSX 10.14, Logic Pro 10.4.8, Mainstage3, Cubase10, StudioOne, Reaper, DP9, VEP, VSL, too many plugins to list
 
User avatar
Dewdman42
Topic Author
Posts: 2490
Joined: Tue Sep 09, 2014 3:01 pm
Location: Park City, UT

Re: Articulation Channelizer Script

Wed Sep 11, 2019 3:14 pm

Update, Channelizer 2.062

Includes improved GUI control handling which properly remembers settings between sessions.
5,1 MacPro 3.46ghz x 12 128gb ram, OSX 10.14, Logic Pro 10.4.8, Mainstage3, Cubase10, StudioOne, Reaper, DP9, VEP, VSL, too many plugins to list
 
User avatar
daveyboy
Posts: 233
Joined: Thu Oct 16, 2008 12:05 am
Location: Los Angeles
Contact:

Re: Articulation Channelizer Script

Wed Jan 15, 2020 6:59 pm

This works great! Thanks so much. I’m making some custom keyswitchable multis using Play and it’s awesome.
Dave,
2010 Mac Pro 2.66 12 core with Mojave, Logic 10.5
http://dbwproductions.com
 
User avatar
Dewdman42
Topic Author
Posts: 2490
Joined: Tue Sep 09, 2014 3:01 pm
Location: Park City, UT

Re: Articulation Channelizer Script

Thu Jan 16, 2020 9:09 am

Glad to hear it!
5,1 MacPro 3.46ghz x 12 128gb ram, OSX 10.14, Logic Pro 10.4.8, Mainstage3, Cubase10, StudioOne, Reaper, DP9, VEP, VSL, too many plugins to list
 
User avatar
Dewdman42
Topic Author
Posts: 2490
Joined: Tue Sep 09, 2014 3:01 pm
Location: Park City, UT

Re: Articulation Channelizer Script

Mon Feb 03, 2020 3:29 pm

Channelizer updated to version 3.03b, which includes support for up to 48 midi destination ports and other improvements.
5,1 MacPro 3.46ghz x 12 128gb ram, OSX 10.14, Logic Pro 10.4.8, Mainstage3, Cubase10, StudioOne, Reaper, DP9, VEP, VSL, too many plugins to list
 
User avatar
Ashermusic
Posts: 3284
Joined: Sat Oct 22, 2005 11:51 am
Location: Lake Balboa, CA
Contact:

Re: Articulation Channelizer Script

Wed Feb 05, 2020 8:01 am

Thanks. With the discontinuation of the SkiSwitcher/ArtZ ID, this is very helpful.
iMac 3.5 Quad Core i7 w/ OSX 10.14

Composer, Logic Pro X Certified Trainer
Author of "Going Pro with Logic Pro 9" & "Scoring with Logic Pro"
http://www.jayasher.com
 
User avatar
Dewdman42
Topic Author
Posts: 2490
Joined: Tue Sep 09, 2014 3:01 pm
Location: Park City, UT

Re: Articulation Channelizer Script

Wed Feb 05, 2020 9:57 am

:D
5,1 MacPro 3.46ghz x 12 128gb ram, OSX 10.14, Logic Pro 10.4.8, Mainstage3, Cubase10, StudioOne, Reaper, DP9, VEP, VSL, too many plugins to list
 
User avatar
Dewdman42
Topic Author
Posts: 2490
Joined: Tue Sep 09, 2014 3:01 pm
Location: Park City, UT

Re: Articulation Channelizer Script

Fri Feb 07, 2020 7:38 pm

update to version 3.2e. No new features here, but the code has been completely restructured and improved for the future. I will leave the previous version available online just in case, but I need people to use the new one to make sure its working completely. Passes my tests, but never know.
5,1 MacPro 3.46ghz x 12 128gb ram, OSX 10.14, Logic Pro 10.4.8, Mainstage3, Cubase10, StudioOne, Reaper, DP9, VEP, VSL, too many plugins to list
 
User avatar
Dewdman42
Topic Author
Posts: 2490
Joined: Tue Sep 09, 2014 3:01 pm
Location: Park City, UT

Re: Articulation Channelizer Script

Mon Feb 10, 2020 10:07 pm

Update to version 3.2f with some critical bug fixes found in 3.2e.
5,1 MacPro 3.46ghz x 12 128gb ram, OSX 10.14, Logic Pro 10.4.8, Mainstage3, Cubase10, StudioOne, Reaper, DP9, VEP, VSL, too many plugins to list
 
User avatar
Dewdman42
Topic Author
Posts: 2490
Joined: Tue Sep 09, 2014 3:01 pm
Location: Park City, UT

Re: Articulation Channelizer Script

Wed Feb 19, 2020 8:32 am

Update to version 3.2g, small performance improvement.
5,1 MacPro 3.46ghz x 12 128gb ram, OSX 10.14, Logic Pro 10.4.8, Mainstage3, Cubase10, StudioOne, Reaper, DP9, VEP, VSL, too many plugins to list
 
bigdavidtapt
Posts: 2
Joined: Fri Feb 21, 2020 3:31 am

Re: Articulation Channelizer Script

Fri Feb 21, 2020 3:38 am

Hello, I'm new to this site and Logic and I just wanted to know how to create the articulations if we are NOT to assign anything in the OUTPUT section? Forgive me for being a "Noob". lol...
 
User avatar
Dewdman42
Topic Author
Posts: 2490
Joined: Tue Sep 09, 2014 3:01 pm
Location: Park City, UT

Re: Articulation Channelizer Script

Fri Feb 21, 2020 8:04 am

This script works by Channelizing each articulation INSTEAD OF sending keyswitches. You will need to setup your instruments with each articulation listening on a different Midi channel and no need to receive a keyswitch.

Unfortunately logicpro strips the articulation id from events if you configure anything in the output section of the articulation set, so you cannot use this script to channelize in combination with also sending keyswitches from the articulation set, but generally they should not be necessary when using the channelizing approach.
5,1 MacPro 3.46ghz x 12 128gb ram, OSX 10.14, Logic Pro 10.4.8, Mainstage3, Cubase10, StudioOne, Reaper, DP9, VEP, VSL, too many plugins to list
 
bigdavidtapt
Posts: 2
Joined: Fri Feb 21, 2020 3:31 am

Re: Articulation Channelizer Script

Fri Feb 21, 2020 12:13 pm

So pretty much, it's like sending an articulation id to a midi channel?
 
User avatar
Dewdman42
Topic Author
Posts: 2490
Joined: Tue Sep 09, 2014 3:01 pm
Location: Park City, UT

Re: Articulation Channelizer Script

Fri Feb 21, 2020 12:17 pm

no.

The midi events will be channelized, (ie, sent on a midi channel) that corresponds to the articulationID assigned to it (presuming the articulationID has not been stripped off by the articulationSet output section).

Some sample libraries do not actually provide key switching at all, and so the method has previously been to put each articulation on its own track, with a different midi channel assigned to each track. With this script, you can use one source track for an instrument and assign articulationID's to each note...and then as it plays back it will automatically channelize each note to the right midi channel (and thus played by the right instrument with the right articulation sample)...no keyswitches needed and still just one source track for the entire instrument.

There are some other advantages of using this approach instead of keyswitches. For example, you can easily adjust the volume level of each articulation relative to each other when each articulation is basically a separate instrument with separate level adjustment.
5,1 MacPro 3.46ghz x 12 128gb ram, OSX 10.14, Logic Pro 10.4.8, Mainstage3, Cubase10, StudioOne, Reaper, DP9, VEP, VSL, too many plugins to list
 
splunk
Posts: 74
Joined: Sun Jul 21, 2013 10:54 am

Re: SCRIPT: Articulation Channelizer

Fri Jun 05, 2020 5:04 pm

Thanks a lot for this script. I'm trying to integrate it into a template with Play instruments and now that I've got it working, it's great. But, I spent quite a bit of time running into problems. It seems that I have to actually disable the lowest channelized port to get it to work correctly. Since this wasn't the default setting, I'm guessing this is a bug or I completely misunderstand the use of this parameter. I thought it was a way to filter out lower MIDI channels that I might want to use for keyswitching instruments on a single channel. In other words, channels below this one would be immune to the channel switching that the script is using to select articulations. This doesn't seem to be the case. I made a test instrument with 3 articulations on 3 different MIDI channels - 1, 2 and 3. I setup the articulation map with those three articulations pointing to their respective channels. I'm playing from a MIDI controller that's sending on MIDI channel 1. I can hear the articulation on MIDI channel 1, but as soon as I select the articulation on channels 2 or 3 I get silence and this error message:

WARNING: articulationID [2] channelizing exceeds range of 1 channels
WARNING: Muting channel overlap

This message is implying that the port number actually assigns the number of allowed channels? I'm not sure, but all I know is with the default settings, I can only get one articulation. Have I missed a setup step?
Mac mini 2018
Macbook Pro 2015
Logic Pro 10.5
OS 10.14.6
 
User avatar
Dewdman42
Topic Author
Posts: 2490
Joined: Tue Sep 09, 2014 3:01 pm
Location: Park City, UT

Re: SCRIPT: Articulation Channelizer

Fri Jun 05, 2020 5:56 pm

can you send me your LPX project with the problem so that I can see better what you're trying to do? I have PLAY also.
5,1 MacPro 3.46ghz x 12 128gb ram, OSX 10.14, Logic Pro 10.4.8, Mainstage3, Cubase10, StudioOne, Reaper, DP9, VEP, VSL, too many plugins to list
 
User avatar
Dewdman42
Topic Author
Posts: 2490
Joined: Tue Sep 09, 2014 3:01 pm
Location: Park City, UT

Re: SCRIPT: Articulation Channelizer

Fri Jun 05, 2020 6:00 pm

In the meantime, I will explain the error message you got. That message is what happens when you try to send notes from tracks...with midi channels that overlap with the ranges of other channels that are channelizing.

For example, let's say you have a source track on midi channel 1 and a source track on midi channel 2. and then on channel 1 you have a note with articulation ID 2. Channelizer will detect that as an error, because it is. You would need your source tracks to be channel 1 and channel 3 to avoid that problem.

from the sounds of your explanation I think the problem is that you are doing something with your articulation set or the source channels that does not make sense with channelizer. Do not assign any midi channels in the articulation Set. Let channelizer do that. and your source channels need to stay out of each other's way.

So for example, if you have a source track on channel 1, with art's 1-3. That means that will use up channels 1-3 in Play. You should not have any other source tracks using channels 2-3, the next track should start at channel 4...otherwise you will get the error message you mentioned with channel overlap.
5,1 MacPro 3.46ghz x 12 128gb ram, OSX 10.14, Logic Pro 10.4.8, Mainstage3, Cubase10, StudioOne, Reaper, DP9, VEP, VSL, too many plugins to list
 
splunk
Posts: 74
Joined: Sun Jul 21, 2013 10:54 am

Re: SCRIPT: Articulation Channelizer

Sat Jun 06, 2020 12:43 pm

There's only one track active in the entire project. It has a total of 10 notes. The first 6 are articulation 1 on MIDI channel 1 and the last 4 notes are using articulation 3 on MIDI channel 3. My controller stays on MIDI channel 1, but I get the error message if I try to use articulation 2 or 3 and there's no sound from either the track itself or the controller even though the MIDI in indicator shows the same activity no matter which articulation I pick. It isn't really a big deal because I can simply pick (Disabled) for the port and everything works as advertised. In the meantime, I attached the project and the articulation set so you can take a look. I could easily have screwed up something!

What is a big deal in this workflow has nothing to do with your excellent script. The problem I see is that these instruments use a lot of controllers and when the articulation changes involve channel changes, the CC data gets thrown into different lanes so there's no way to see the continuity of the controller data. Plus, you can easily wind up with 9 or 10 lanes of controllers that are actually only 3 controllers that have been divided up all over the place. I suppose I could view multiple lanes in the main window, but I don't think it's possible in the piano roll. Honestly, it sort of ruins the beauty of the articulation concept and could be easily fixed if EW made it possible to build custom key switch instruments.

Now that I've messed around with the articulation sets, I'd really like to be able to use them, but I'm not sold on this workaround yet. But you guys are much more experienced with this than I am. How do you deal with this?

script test.zip
(4.62 MiB) Downloaded 2 times
Mac mini 2018
Macbook Pro 2015
Logic Pro 10.5
OS 10.14.6
 
User avatar
Dewdman42
Topic Author
Posts: 2490
Joined: Tue Sep 09, 2014 3:01 pm
Location: Park City, UT

Re: SCRIPT: Articulation Channelizer

Sat Jun 06, 2020 2:09 pm

I will look at your project later tonight. Why do you have one track with more then one midi channel being used? That should Not matter though. But in that scenario if you try to use articulation 3 on midi channel 1 then the error message is to be expected.

You can change the bahavior so that overlapping notes are passed through rather then muted( see gui options ), but really you should identify the overlaps and correct what you are doing so you dont have overlaps.

Channelizer is designed to be very automatic. The GUI options in scripter are extremely limited so this is the preferable alternative. So as notes come in to channelizer in midi channels, it will detect those as known source channels. In this single track case you are using two source channels 1 and 3, presuming you aren’t also changing the channels with articulation set.

Once channelizer detects those two source channels then it will attempt to channelizing based on articulation Id and if it detects overlaps then by default it will mute the overlaps. Thst is a good default since it makes it painful to have an overlap by accident. If you try to use articulation 3 on channel 1, then that overlaps with the other detected source channel 3.

When I get home I will take a look at your project and should know the exact answer for you.

The lowest port gui option is meant to pass through lower ports without being channelized. So if you raise that value then you’re defeating the use of channelizer.

You can certainly use the articulation set to channelize your notes INSTEAD OF my script but articulation set will not forward your cc events to the destination channels so that becomes a problem. That is the whole reason for using channelizer instead of articulation set
5,1 MacPro 3.46ghz x 12 128gb ram, OSX 10.14, Logic Pro 10.4.8, Mainstage3, Cubase10, StudioOne, Reaper, DP9, VEP, VSL, too many plugins to list