Tricky articulation switching in Logic, can it be done?

Discussion in 'Your DAW (Digital Audio Workstation)' started by stigc56, Oct 2, 2018.

Tags:
  1. stigc56

    stigc56 Senior Member

    354
    95
    May 14, 2009
    Hi
    Using Spitfire Sacconi quartet for a little job. This morning Cubase decided to struggle against me, and I turned to Logic. The Spitfire Sacconi Quartet has a KS patch for all 4 instruments but ALSO a "playable" version, that is very nice to use. In my Cubase set-up Kontakt is running inside VEPro on a slave and is set-up to use one port and 8 channels with 1.st violin KS on ch. 1 1.st violin playable on ch. 2 and so fort. The articulation switching in Cubase is of course done with the VST exp. map and it looks like this:
    Skærmbillede 2018-10-02 22.00.31.png
    Now I tried to make this work in Logic with ARTzID but I can't do it! Is it possible to set up articulation switching so one track in logic can address 2 patches in Kontakt receiving on channel 1 & 2?
     
  2. WindcryMusic

    WindcryMusic ɹǝqɯǝW ɹoᴉuǝS

    963
    701
    Oct 19, 2015
    While I'm not sure I am entirely following you (since I have neither Sacconi Strings nor Cubase), I think the answer to your question is "yes", at least if you own ARTzID, which it sounds like you do. Try looking at the Capsule/Hybrid script ... that allows you to direct each articulation ID at either a key switch on MIDI channel 1 or at any other MIDI channel (w/o keyswitch). It does limit you to 16 articulations, but from what you've described, I think that should be enough.

    If I am understanding you, there is another way to do even more of the same kind of thing that Peter (Mr. ARTzID himself) and I worked on, but I'm unsure of when it will be made available (Peter says eventually it will). Maybe contact him to describe what you need ... you never know, he might just have something for you. :2thumbs:
     
  3. Dewdman42

    Dewdman42 Senior Member

    736
    258
    Oct 28, 2016
    Yes I'm sure its possible, but may or may not involve needing either a little bit of scripting, or using one of the third party products such as Artzid or AG.

    I don't know anything about Cubase, can you please explain a little better the requirements of the Spitfire patch you're trying to use, the playable version?
     
  4. OP
    OP
    stigc56

    stigc56 Senior Member

    354
    95
    May 14, 2009
    Well it's not that complicated. ;) One MIDI track routed to Kontakt running Spitfire Sacconi Strings, with 1.st violin KS patch on channel 1 AND 1.st violin playable patch on channel 2. In Cubase I can set up a expression map that changes between the different "sounds" on ch. 1 via KS AND when a certain KS is pressed then ALL midi is send on channel 2 to the playable patch.
    So the expression map not only send the right KS to Kontakt it also determinates which channel the Midi events will use. So it's a kind of mix between the traditional KS patch and the model with one patch pr. midi channel.
    Does this makes sense?
     
  5. WindcryMusic

    WindcryMusic ɹǝqɯǝW ɹoᴉuǝS

    963
    701
    Oct 19, 2015
    Just to restate it, you have a multi-articulation patch on MIDI channel 1 and a single-articulation patch on MIDI channel 2, correct? If so, see my earlier response about using the Capsule/Hybrid script from ARTzID, as I think it really should work for you.

    Edit: let me know if you still aren't able to get this going, and I'll try to post a few screenshots of similar articulation setups I've done (I have quite a large number of them that parallel what it appears you are doing, albeit with different libraries).
     
    Last edited: Oct 3, 2018
  6. Dewdman42

    Dewdman42 Senior Member

    736
    258
    Oct 28, 2016
    I agree about artzid, though I don’t have v2 of that product so I can’t offer any advice for how to set it up.

    Or a custom script will get it done but scripting is not for everybody.

    LPX Articulation Set feature in theory could also do that with the multi switch feature but it still has bugs and design flaws that prevent it from working right in 10.4.2
     
    Last edited: Oct 3, 2018
  7. OP
    OP
    stigc56

    stigc56 Senior Member

    354
    95
    May 14, 2009
    I gave it a try yesterday. It seems that I can use one of the ARTzID scripts for the purpose, but I can't at the same time decide which trigger keys I want to use. Let's say I have 14 articulations in 1.st violin KS this means that midi key C-2 to C#-1 will be used to trigger those and D-1 would be used to trigger 1.st violin playable on ch. 2. In Cubase I can create another midi track to accommodate 2.nd violin, still routed to the same VST instrument, and copy the expression map from 1.st violin and change the midi channel to 3 & 4. Skærmbillede 2018-10-04 13.50.22.png
    This is how it looks in Cubase: 4 midi-tracks all routed to one instance of Kontakt (running inside VEPro on a slave)

    This is the expression map for the 1.st violin. Notice that the channel is set to 1 in the output mapping:
    Skærmbillede 2018-10-04 13.54.19.png

    And here with "playable" selected, and the following change of midi channel from 1 to 2.
    Skærmbillede 2018-10-04 13.56.05.png

    I really appreciate your help and interest!
     
  8. Dewdman42

    Dewdman42 Senior Member

    736
    258
    Oct 28, 2016
    I'd like to help, but I don't know anything about Cubase and don't understand what you're asking for. Any progress?
     
  9. OP
    OP
    stigc56

    stigc56 Senior Member

    354
    95
    May 14, 2009
    Well, I like to use one track - one instrument, and that calls for articulation switching. Spitfire Chamber Strings and Spitfire Sacconi Quartet has a special set-up, where a lot of "the articulations" are in one Kontakt patch and then some other (the same instrument) in another patch. The 2 patches receives on 2 different channels 1 & 2 ex. so the articulation switching has to incorporate 2 things: a KS and a channel.
    That is fairly simple in Cubase, but not that simple in Logic. Ex. Let's say I record a phrase with an articulation from patch 1 ch. 1 - using CC1 to control the volume. If I later want to use an articulation from patch 2 ch. 2, I can change the art ID in Logic, but the CC1 still sends on channel 1, and doesn't reach the patch playing on ch. 2
    In Cubase ALL the articulation switching is done in the mapper, but I'm constantly on my way towards Logic because I like the combo Logic/Mac so much.
     
  10. Dewdman42

    Dewdman42 Senior Member

    736
    258
    Oct 28, 2016
    I agree, LPX's articulation set feature is still broken and you will still need to rely on custom scripting or one of the two currently available 3rd party products to get around it, until Apple fixes Articulation Sets some more. I have a already posted some bug reports to apple about 10.4.2 articulation sets still being broken.

    But I thought Artzid could both channelize and send the key switch, yes? Peter will have to clarify for sure, but I guess maybe, the problem is that Artzid can send a key switch or send by channel the actual notes...but then the CC1 messages have to be cloned to both destination channels, using his cloner script. Did you try that? I'm not using v2 of his product so I can't say more about it, but he's pretty good about helping his customers reach their solutions... CCCloner or whatever its called, should clone CC1 over to channel 2 for you. The downside is that channel2 will be receiving a lot of CC1 events even when its not making any sound.

    I guess you could also assign artid to CC1 events and then they should be channelized, but maybe artzid is ignoring those now? I'm not sure.

    I am using and working on my own custom script which definitely handles all of that, but its not fit for public consumption yet, so I can't share it with you at this time, and it will be quite some time, if ever, that I will be able to. But for absolutely sure, this is an issue that can be addressed one way or another with scripting in Logic, and hopefully eventually Apple will get the output section of Articulation Sets actually working right to drastically reduce or eliminate the need for scripts at all.

    Maybe I will whip together a slightly different script then my ChannelizerClone script which does the CC cloning only, as described above and no actual channelizing....which then could for sure work together with artzid. I'll take a look this afternoon, its raining outside...
     
    Last edited: Oct 7, 2018
  11. resound

    resound Senior Member

    487
    249
    Oct 29, 2015
    Los Angeles, CA
    You can definitely do this with ARTzID. What you want to use is the Combinatrix script. It allows you to load up to 16 different key switching patches set to different channels. In the script, you just need to set the number of articulations in each patch, and the lowest KS note (C-2, C0, etc.). Then in Kontakt you will want to use the CC cloner so that CC data is routed to the patches on the other channels.
     
  12. Dewdman42

    Dewdman42 Senior Member

    736
    258
    Oct 28, 2016
    here is an alternative cc cloning script to use which basically will only clone CC events to channels that have notes sustaining. This can be used in conjunction with the artzid combinatrix script I believe. Please let me know if it works.

    More info and follow up support will be found here: https://www.logicprohelp.com/forum/viewtopic.php?f=45&t=139186

    gui.jpg
    Code:
    //
    // CC Chaser
    //
    // Version 1.1
    // Copyright 2018 Steve Schow
    //
    // Script to clone CC events from source channel to all other
    // channels flowing through the same script where notes are currently
    // sustaining
    //
    // TODO: add support for VEP multi port mode
    // TODO: handle pitchbend, aftertouch and program change
    //
    //===================================================================
    
    //=========================================
    // array to hold stats of Sustaining notes
    //=========================================
    
    var notes = new Array(17);
    for (var chan=1;chan<=16;chan++) {
        notes[chan] = 0;  // no notes on yet
    }
    
    //=========================================
    // array to hold each channel which CC was
    // the last used on that channel
    //=========================================
    
    var running = new Array(17);
    for (var chan=1;chan<=16;chan++) {
        running[chan] = [];  // array of CC's running value
    }
    
    // will hold all incoming CC running values as received on srcChan
    var srcRunning = [];
    
    var gCC = new ControlChange;
    
    //=========================
    // callback
    //=========================
    
    function HandleMIDI(event) {
     
        // update running status by NoteOff
        if (event instanceof NoteOff ||
                (event instanceof NoteOn && event.velocity == 0)) {
    
            notes[event.channel]--;
            event.send();
            return;
        }
     
        // manage running status by NoteOn
        if (event instanceof NoteOn) {
             
            notes[event.channel]++;
         
            // chase CC's here if the Note is on a selected track
            if(isChanSelected(event.channel)) {
              for(var ccnum in srcRunning) {
                if( srcRunning[ccnum] != running[event.channel][ccnum]) {
                    gCC.number = ccnum;
                    gCC.value = srcRunning[ccnum];
                    gCC.channel = event.channel;
                    gCC.send();
                    running[event.channel][ccnum] = gCC.value;
                }
              }
            }
         
            // send actual NoteOn
            event.send();
            return;
        }
     
        // CC events copied if any notes currently on
        if (event instanceof ControlChange && event.channel == srcChan()) {
         
            // first copy the CC to tracks that currently have sustaining notes
            // including the srcChan itself
                 
            for(var chan=1;chan<=16;chan++) {
                if (isChanSelected(chan) && notes[chan] > 0
                        && running[chan][event.number] != event.value) {              
                    event.channel = chan;
                    event.send();
                    running[chan][event.number] = event.value;
                }
            }
               
            // updating the received CC running value
            srcRunning[event.number] = event.value;
            return;
        }
     
        // If a CC came directly to sub channel, update running status
        if (event instanceof ControlChange) {
            if (event.channel != srcChan() && isChanSelected(event.channel)) {
                event.send();
                running[event.channel][event.number] = event.value;
                return;
            }
        }
     
        // all other events, send
        event.send();
    }
    
    //===========================
    // GUI
    //===========================
    
    var PluginParameters = [];
    PluginParameters.push({
        name: "Source Channel",
        type: "lin",
        minValue: 1,
        maxValue:16,
        numberOfSteps:15,
        defaultValue: 1,
        data: 1,
        disableAutomation: true
    });
    
    PluginParameters.push({
        name: "━━━ Output ━━━",
        type: "text",
        disableAutomation: true
    });
    
    for(var i = 1;i<=16;i++) {
       PluginParameters.push({
         name: "Channel "+i,
         type: "checkbox",
         defaultValue: 0,
         data: 0,
         disableAutomation: true
       });
    }
    
    
    function ParameterChanged(ctrl, val) {
        PluginParameters[ctrl].data = val;
    }
    
    function srcChan() {
        return PluginParameters[0].data;
    }
    
    function isChanSelected(channel) {
        if(PluginParameters[channel+1].data == 1) {
            return true;
        }
        else {
            return false;
        }
    }
    
    
     
    Last edited: Oct 7, 2018
    NoamL likes this.
  13. procreative

    procreative Senior Member

    1,620
    793
    Mar 12, 2013
    United Kingdom
    1. Artz ID CC Cloning Script allows you to select which channels to pass CCs on and which to filter, so in most cases you would only clone ccs on long articulations as dynamics and vibrato dont usually come into play on shorts or any one dynamic patches.

    2. You most definitely can split keyswitch patches by midi channel using Articulation Sets in Logic. I have several multis (for example Metropolis Ark) where I have the main Keyswitch patch on channel 1 and the Legato patch on 2.

    You just have to make sure in the 3rd tab you apply the right midi channel to each keyswitch. I have also found it works better if you also select the same midi channels in tab 2 as well.

    If they are split patches like Hollywood Strings and each articulation is on a separate midi channel then you only need to apply the channel settings to tab 2.

    Each to their own, but I am using automation for my CC data so the Logic Articulation Set "bug" has never affected me. I use a midi-fx script to send CC via Smart Controls so I can use my Mackie Control in Smart Control mode to automate the cc and have instant recall (engaging fader flip means I can use the motorised faders).

    Only thing detrimental this route, Smart Controls dont work with hardware inside Track Stacks. But I am using Show/Hide Groups so I can hide every track or show specific ones that belong to a group for example I have Hollywood Strings as a group, CSS for another etc.
     
  14. Dewdman42

    Dewdman42 Senior Member

    736
    258
    Oct 28, 2016
    supposedly but I ran into some bugs when trying to combine key switches and channelizing in the same articulation. Articulation Set feature still has some significant bugs, so use with caution without 3rd party support.

    Also when channelizing, articulationset does not clone or propagate CC's across to the channelized channels, at all.
     
  15. procreative

    procreative Senior Member

    1,620
    793
    Mar 12, 2013
    United Kingdom
    I dont doubt it, but as I have ArtzID am reusing the CC Cloner if I need to, though as I am using automation to drive my CCs via a Midi FX script assigned to Smart Controls, the channelising issue does not affect them (as far as I know).
     
  16. thesteelydane

    thesteelydane Senior Member

    546
    736
    Apr 9, 2015
    This takes all but a minute to set up with the combinatrix script. It’s all very well documented in the manual. Make sure you clone your CC’s either with the CC cloned script, or better yet, with the script that runs inside Kontakt that you also get with ARTzID.

    It can also be done just with a Logic articulation set, simply by changing the output channel the switch command is send on, but last time I tried this I had issues with CCs not behaving as expected, so ARTzID is the tired and true, not to mention easy way to do this.
     
  17. OP
    OP
    stigc56

    stigc56 Senior Member

    354
    95
    May 14, 2009
    Well I have created a articulation setup that allows me to run those 2 instruments from the same track. I have used BabylonWaves articulation set and edited the output channel of both articulations and output so the first 14 articulations are send on ch. 1 and the single 15 articulation on ch. 2. Then it works and right now there is no need for ARTzID.
    But then this happens: If I want to move the midi track to 2nd violin which is on ch 3 & 4 I have to change the channels in the track to 3 & 4 to make it work! In Cubase I can move the midi between the track and the articulation set will see to that it goes to the right instrument. Wov, this is taking forever. Can I buy a solution?? Really I'm interested - creating a new thread!
     

Share This Page