1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Logic 9 Operations in the Environment

Discussion in 'Logic 9' started by manofra, Apr 20, 2012.

  1. manofra

    manofra New Member

    Hi everyone,

    Another tricky newbie question here. I've found answers without asking many times before, but this time I'm REALLY stuck. Basically, I don;t know where to start from...

    What I need -- if the subject doesn't make it clear -- is to perform a set of logic operations within the Environment so that the midi signal is patched to different instruments given a set of circumstances. I've read Logic's manual on the topic, as well as several T&Ts here and in other forums, but can't seem to find a way to implement what I need... I understand the transformers -- and their modes -- reasonably well, and am able modify the midi signal from point A to point B, but here's what I need to do:

    1. Play a note on midi channel 1, and have this note go to synth lead A;
    2. Play a note on midi channel 2, and ONLY if no note is played on channel 1, have it go to synth lead A; if a note is played on channel 1, then it has to go to synth pad B;
    3. Play a note on midi channel 3, and ONLY of no notes are played on midi channels 1 and/or 2, send it to synth Lead A; or else, send it to synth pad B.

    So, in a way, it is like creating a condition splitter that only lets the sound pass through the top cable if there is no signal coming from the previous midi channel. This is like a programmer writing a script that says:

    IF Note On comes from Midi channel=1
    => then send Midi channel=1 to Synth A

    IF Note On comes from Midi channel=2 AND Midi channel =1 has NO sound => then send midi channel=2 to Synth A
    => OR ELSE send midi channel=2 to Pad B

    ... and so on, all the way to channel 16.

    How can I create these rules using transformers? I'm on a dead end here... :brkwl:

    Any input is appreciated.


  3. georgelegeriii

    georgelegeriii Senior member

    I'm note sure Logic could do this...

    I am wondering WHY you want Logic to do this. Perhaps if there were an end use for this technique, and a better understanding of it, another method may become more obvious.
  4. Peter Ostry

    Peter Ostry Administrator Staff Member

    MIDI is a serial protocol, hence multiple notes can never arrive at the same time. But "playing a note" means that there was a note-on and "ending a note" means that you received a note-off for this note. The time between is the duration of a note and you can lock other MIDI channels during this time.

    Basically you could use a couple of transformers and cable switchers which react to note-on and note-off on certain MIDI channels. A note-on on a certain MIDI channel would route to a certain target and disconnect other MIDI channels.

    To handle polyphonic data the approach is slightly different. You need to count the note-ins and the note-offs per MIDI channel and change the routing only if you received all note-offs.

    Of course you also have to make sure that all note-ons and note-offs reach their destination, otherwise many of the notes would hang due to missing note-offs.

    Be aware that such an implementation is not typically "newbie"-work. Without good knowledge of Logic Environment objects and their possibilities it is hard for a beginner to construct a patch like this.
  5. manofra

    manofra New Member

    Thank you both for your replies.

    Peter, from 1 to 10, I'm a 5 (or maybe 6) in the Environment. I've read Apple's documentation and several other guides I've found, and have already done some tricky things with it. But I still have a lot ot learn. One of the things I don't master is the use of Sysex faders, which I believe might be of use in such a case.

    How can that be achieved?

    George, the real scenario is: using a midi guitar controller, which outputs notes on 6 channels (one per string), I want to route the lowest note to a bass sound, and all others to a pad sound. The lowest note will always come from the lowest midi channel. Therefore, if I can find a way to program the lowest channel played (= lowest note) to the bass instrument, then the rest of them to the pad, I'd achieve what I want. I understand midi timing and polyphonic processing issues, but it is the basic setup for the conditions mentioned above that's eluding me.

    I've seen chord processing tools that work, taking the lowest note from any given channel and sending that to a bass sound. All in real time. So I know this can be achieved, but given the peculiar structure of midi guitar, I'm trying to use the approach above.

    Thanks for your help,

  6. Peter Ostry

    Peter Ostry Administrator Staff Member

    Use a numerical fader as a counter. Meta 99 127 increments the number (without rollover), Meta 99 125 decrements the number (without rollover). English Logic PDF Manual chapter 37, page 1108, or search for "Meta" and find the page with the list of Meta events.

    Still basically:

    • First (and always when you deal with note-offs) convert the notes to something else.
    • Insert a Channel Splitter and work on channel 1.
    • Extract the note-ons (value unequal 0) with a transformer, send Meta 99 127 to count up.
    • Extract the note-offs (value = 0) with a transformer, send Meta 99 125 to count down.
    Then, with each note, the counter will go up and you will block other MIDI channels. With each following note-off it will count down. If the counter is zero again, it's time to release the other channels. In other words: Only the counter at zero allows notes on other channels to go through.

    Less basically:
    You need the note-ons and the note-offs for software instruments. This means, you have to duplicate the events and use a copy for counting/switching. This gets a little complicated. You have to switch the routing before the note goes to the instrument (before the first note-on), but you must switch back after the last note-off, otherwise the note would hang.

    But this can be done with a channel splitter or a single transformer. Why do you want to suppress certain channels programmatically?
  7. manofra

    manofra New Member

    Thanks so much for the tips, Peter. I'll implement what you describe and let you know the results! :):):)

    Because with either solution I get a fixed split at a certain string -- my Axon does that already. What I want is to have a string (=channel) be bass in one chord, and be a pad in another. That way I can play a walking bass using 4 (or even 5) strings and not be limited to the two top strings. It's like having your left hand pinky finger always be the bass note -- no matter in which octave of the keyboard you play -- and the other fingers be the pad.

    If I manage to implement it, I will record a video and post it. Then it will be easy to see what I wanted that.

    I truly appreciate your help, thanks.


Share This Page